Did Scaling Up Surprise You?

Bill Venners: I have used Python as a scripting language, but I
have met people who use it for more. For example, Bruce Eckel uses it as his main
language.

Guido van Rossum: Zope Corporation, where I work, uses it as
the main development language. All Zope software is written in Python.

Bill Venners: To manage mailing lists on my server I use
Mailman, which is also written in
Python.

Guido van Rossum: Yes, Mailman is pure Python.

Bill Venners: And Mailman is not a script. I would call it an
application or a system.

Guido van Rossum: Absolutely.

Bill Venners: You said initially you intended Python to be a bridge
between the shell and C. Did it surprise you that people would also use it to build apps
and systems? Did something change over time?

Guido van Rossum: I can't say it surprised me because it
happened so gradually. I thought we'd write small Python programs, maybe 10 lines,
maybe 50, maybe 500 lines—that would be a big one. We figured we'd provide library
modules that implement bits of functionality that kept being needed again and again. For
example, one thing we added fairly early on was a low-level module implemented in C
that gave you full access to sockets. We were lucky in a sense that the same socket API
was also available on Windows as WinSock. So immediately we had platform-independent
socket primitives. The socket primitives were pretty low level. They weren't
quite as low level as in C, because we got away from the notion of a file descriptor as a
small integer, and instead said, a socket is an object and it has a bunch of methods. All
the methods correspond one to one to the system calls that operate on sockets, and the
arguments are usually just strings representing some data, or occasionally a tuple of a
host name and a port number.

In addition, the Internet was developing and growing more popular—this was the
early 1990s. New protocols were being invented and HTTP arrived. It was easy to write
implementations of all these protocols as pure Python modules by just using the socket
module, as we did in C. Similar things happened in other areas, for example, with
numeric Python. Numeric Python is also a core of C code that implements efficient
numerical array operations, as well as links to existing numerical libraries. On top of that,
it lets you write fairly serious numerical operations.