My
first look at Python was an accident, and I didn't much like what I saw at the
time. It was early 1997, and Mark Lutz's book Programming Python from O'Reilly
& Associates had recently come out. O'Reilly books occasionally land on my
doorstep, selected from among the new releases by some mysterious benefactor
inside the organization using a random process I've given up trying to
understand.
One
of them was Programming Python. I found this somewhat interesting, as I collect
computer languages. I know over two dozen general-purpose languages, write
compilers and interpreters for fun, and have designed any number of
special-purpose languages and markup formalisms myself. My most recently
completed project, as I write this, is a special-purpose language called SNG
for manipulating PNG (Portable Network Graphics) images. Interested readers can
surf to the SNG home page at http://www.catb.org/~esr/sng/. I have also written
implementations of several odd general-purpose languages on my Retrocomputing
Museum page, http://www.catb.org/retro/.
I
had already heard just enough about Python to know that it is what is nowadays
called a “scripting language”, an interpretive language with its own built-in
memory management and good facilities for calling and cooperating with other
programs. So I dived into Programming Python with one question uppermost in my
mind: what has this got that Perl does not?
Perl,
of course, is the 800-pound gorilla of modern scripting languages. It has
largely replaced shell as the scripting language of choice for system
administrators, thanks partly to its comprehensive set of UNIX library and
system calls, and partly to the huge collection of Perl modules built by a very
active Perl community. The language is commonly estimated to be the CGI
language behind about 85% of the “live” content on the Net. Larry Wall, its
creator, is rightly considered one of the most important leaders in the Open
Source community, and often ranks third behind Linus Torvalds and Richard
Stallman in the current pantheon of hacker demigods.
At
that time, I had used Perl for a number of small projects. I'd found it quite
powerful, even if the syntax and some other aspects of the language seemed
rather ad hoc and prone to bite one if not used with care. It seemed to me that
Python would have quite a hill to climb as yet another scripting language, so
as I read, I looked first for what seemed to set it apart from Perl.
I
immediately tripped over the first odd feature of Python that everyone notices:
the fact that whitespace (indentation) is actually significant in the language
syntax. The language has no analog of the C and Perl brace syntax; instead, changes
in indentation delimit statement groups. And, like most hackers on first
realizing this fact, I recoiled in reflexive disgust.
I am
just barely old enough to have programmed in batch FORTRAN for a few months
back in the 1970s. Most hackers aren't these days, but somehow our culture
seems to have retained a pretty accurate folk memory of how nasty those
old-style fixed-field languages were. Indeed, the term “free format”, used back
then to describe the newer style of token-oriented syntax in Pascal and C, has
almost been forgotten; all languages have been designed that way for decades
now. Or almost all, anyway. It's hard to blame anyone, on seeing this Python
feature, for initially reacting as though they had unexpectedly stepped in a
steaming pile of dinosaur dung.