Why I Promote Python
by Paul Prescod, ISOGEN Consulting Engineer
It's easy to understand why I use Python. It's flexible, easy, and powerful
in a way that cannot be matched by other mainstream languages. If you use
Python, then you know what I am talking about. If you do not, you will
eventually; and then you'll know what I am talking about. I've asked myself
why I promote Python so much. I have never been such a vocal advocate for
other languages I've likedeven XML, my bread and butter. There's a
selfish component and an ethical one.
Selfishly speaking, I want to live in a world where most software is written
in a decent programming language. Java is decent, and I don't mind it.
Therefore I don't begrudge its success. But I consider it a proprietary
language surrounded by a re-invent-the-wheel culture.
I do not consider Perl decent for reasons that will become
clear, and I do hope that Python takes most of its popularity. I refuse
to become proficient in "indecent" languages. That means that much of the
software out there in the "open-source" world is in fact closed to me. In an
emergency, I could hold my nose and dive in, but I would not do so to scratch
the proverbial itch.
My primary criteria for decencywhether in programming languages,
markup languages, or graphical systemsis scalability. By scalability,
I mean two things: the ability to scale from easy to difficult problems
and the ability for beginners and experts to be comfortable.
Consider an episode from my own life. I was around nine or ten years old and
my father taught me how to do things on our Apple II using Basic. My dad was
always much more of a hardware rather than software guy. Whenever I would tell
him I wanted to do something more complex than we could find in the Basic
manual, he would say, "You have to do that in assembly language, and assembly
is too hard for a kid." He didn't mean to shut me down but he also didn't know
6502 assembly language himself and was not in much of a position to teach it
to me.
The effect, though, was that my travel down the path to programmer
enlightenment was delayed for several years. The Basic dialect was (like
today's "TCL") designed for beginners and had many arbitrary limitations
built in. Assembly was designed for programmers and made no concessions to
usability, intuitiveness, or learning. Neither was scalable.
Today we have Perl, TCL, and C++: all non-scalable in their own way. C++ and
Perl only make sense if you have a particular programming background. If you
did not come from the "Unix tradition", many of their conventions and idioms
seem alien.
Consider the modern nine-year-old boy trying to configure and extend his
Linux system. He would find that many string-processing programs are
inexplicably written in C: one of a very few languages that does not even
have a first-class string data type! Most of the GUIs would be written in C++,
despite the inflexibility of the language. Many other programs are written in
a variety of illegible dialects within the family of languages called "Perl".
C and assembly have historical reasons for being so low-level and thus
difficult to use and learn. It makes sense sometimes to trade usability for
performance. C++ and Perl have no such excuse. They are cryptic and complex
because of an overemphasis on backwards compatibility and plain,
old-fashioned poor design.
Where languages like Basic, TCL, and Logo were artificially limiting, C++ and
Perl are, in my opinion, artificially complex. Obviously there are many smart
people out there preparing to send me an email claiming that the complexity
"buys" them something valuable. I think that the cost is high.
When you use some wickedly cool and obscure feature of the language, you
reduce the number of potential readers of your code. Ideally the language would
encourage you to concentrate your creativity on high-level design. Choosing
algorithms and data structures is hard enough. Keeping all of the library
functions in your head is also tricky. On top of all of this, programmers
should not need to decipher obscure core language features. Why make life
harder for those who will follow you?
Personally, I cannot stand this design aesthetic, because it divides the
world into "programmers" and "non-programmers". My dream is a world wherein
all but the very lowest levels and tightest loops of programs are written in
a language that is so simple that it can be taught in primary school as a
first language; where every word-processor user who can write a macro can at
least try to dive into their word processor's source code to fix a
bug, because the macro language is also the implementation language.
We know that such a language exists. Python is easy enough to be a first
language and powerful enough to write object databases (like ZODB) and
in-memory relational database engines (like Gadfly). And yet, you do not have
to come to grips with a complex and difficult type system to use it, and there
are few magical variables and functions. I believe it to be as flexible as
Smalltalk and as feature-full as Perl; and yet it is as easy as Basic or TCL.
Python's inventor is involved in a project to make the Python language and
tools accessible to children. The project is called Computer Programming for
Everybody (CP4E). I like that title enough to consider it the name of a
movement, a goal, a dream: Computer Programming for Everybody (CP4E).
I am not entirely naive: Computer programming is hard. It is precisely
because it is hard that there is no excuse for adding artificial
obstacles like modern languages rooted in the idioms of dead languages,
and adding syntaxes so complex that humans cannot keep them in their head.
Usability to "newbies" is only half of Python's importance. The second half
is Python's ability to scale to real-world programs. Like many other dynamic
systems, Python allows layers of sophisticated abstractions to be built in
concise, understandable ways. In my opinion, this is precisely what I require
for "programming in the large": the ability to build layers of abstraction
without losing track of the details.
So why is most of the world's cool new software being written in C and now
Java? Partially because people do not know about Python, which I am helping
to change through advocacy. Partially it is because these languages are more
efficient than Python. I am also helping to change this through support of
compiler technologies.
Perl is a little bit more efficient than Python, but not enough for me to
care; and very little of its efficiency is inherently a property of the
language. Rather, it is a result of Perl having been around long enough that
many programmers have improved its internals. If they put the same effort
into Python, they would achieve the same results. (And we will soon.) In
fact there are now multiple, independent Python implementations, all
pursuing radically different optimization and runtime strategies.
I want to briefly address another class of languages. Languages like Lisp and
Smalltalk both tried, in their day, to be "for everybody." Unfortunately,
they have been rejected by programmers for years; and I do not see that
changing.
Smalltalk merged the dynamic nature of Lisp with the modeling capabilities
of Simula. Python merges many of Smalltalk's ideas with a syntax that is
more likely to appeal to C, C++ and Java programmers. Computer Programming
for Everybody must include them also!
A critical reader might wonder whether I am promoting a world in which there
is only one programming language. I admit that I am in favor of systems built
with fewer languages. The current situation is too costly. There are programs
written in half a dozen different languages on your average Linux system.
This causes massive code duplication, data interoperability headaches, and an
artificially large learning curve.
On the other hand, I can see a role for small, focused languages like ANSI C
for speed, Python for ease and abstraction, Web template languages
for Web delivery, and so forth.
Python may or may not be the language that brings about a
Computer-Programming-for-Everybody world. But it is currently the best
contender. When there is a better horse, I'll switch my bet. The hard part
for a competitive system is building a sophisticated class library; but if
the language is good enough, it will find early adherents that will do the
work, as Python has.
A hint to would-be language developers: If your language runs on the JVM as
JPython does, you get the benefit of the Java library "for free". Being
Open Source is also a necessity today.
Power, elegance, simplicity, equality, liberty, fraternity: This is heady
stuff, and it explains the evangelical tone of some Python programmers. I
promote Python because doing so is the right thing.
You can respond to Paul at
pyguy@prescod.net
For more information on Open Source technologies, visit
O'Reilly's Open Source Resource
Center.
You'll find there links to books on the increasingly popular Python
programming language, books like
Learning Python,
Programming Python,
the Python Pocket
Reference, and
Python Programming
on Win32.
Return to: www.oreilly.com
Return to: www.prescod.net
|