Guido van Rossum, 9 March 2011

This text is my personal transcription of a talk that Guido gave in Atlanta before PyCon. I tried very hard to make it exact, but I’m sure elisions and inaccuracies crept in, as I was typing very fast for a very long time :)

What’s wrong with Perl?

This was a long time ago. Perl in 1988 had only one hundred-screen long manpage, and its design offended my sensibilities. In 1988 and 1989 I was working for the Amoeba distributed project in Amsterdam. We had clusters of 10 computers, and I had been collecting programming languages for the 6 years before that. Wrote a language, never released, known as “Python’s Predecessor”, which was called B, and is now known as ABC.

We were porting lots of application logic to Amoeba, and it was very complex to do. I realized that if we had a higher-level language than C, we could write things faster. In the end, Python may not have been used a lot in Amoeba, but the damage was done, and I had begun work on my own HLL.

I wrote a parser. I did a lot of work to get the parser to recognize indentation for grouping, because I thought that was very important at the time. This has helped and hindered things. Some people can’t get over it. Some people think it’s the best idea. It certainly made Python stand out, but if asked today, I tell people to use braces for grouping, because that’s what everyone is used to.

I had a lot of time and not much pressure, because my manager was out of the country a lot of the time, so I worked on Python a lot. I cut a lot of corners, though, and some of those decisions turned out to be right, and some of them have become major pain points with time. In any case, people working on the project started using it. After about a year, we decided to do a release.

What are some of the things people have done with Python that have surprised you?

One of the earliest things was that people not only picked up Python, but wanted to embed it in other languages. My model was either you have a compiler that generates machine code, or you have an interpreter that parses things in chunks and then you run it. What I had not expected was that people would take that whole interpreter, embed it in even larger applications, and feed it strings to be interpreted, and then used as code in that larger program.

If you’re familiar with Emacs, this is exactly what it does, and Emacs was not exactly new when I was working on Python, so I don’t know why I didn’t get this idea. Amoeba programs and Unix programs were very small, and you had RPCs and pipes, and you didn’t write large programs that did everything, and had an interpreter embedded into it.

And so people would come to me and say “we love python and we want to embed it into our app” and they wouldn’t tell me what they wanted; it was either irrelevant or secret. But eventually they said “turn it into a library”. At first I didn’t even understand what they meant. We got over that.

But the problem was that I had never even thought of that, but internally, everything had very short, convenient names in C, and I had accidentally created huge numbers of naming conflicts with third party libraries or applications. Dynamic linking was added forcefully in the mid-nineties, and it was very painful. We had to rename every function that was part of the runtime so that it’s linker-visible name started with “py_” and that was the result of me completely not having anticipated this embedding.

At this point there are more unanticipated uses of Python than things I thought people would do with it, so that’s very satisfying.

What’s your favorite way to do web stuff

I don’t have a favorite. I think all web stuff sucks in one way or another. I work on app engine, so I’m, ironically, working on the back end of letting other people write web apps.

I used to say that every time I wrote a web app, I used a different framework. These days I mostly use Django, but I’m not really satisfied with it either. I’m more familiar with it, but not enough to tell other people about it.

I’ve used app engine’s as well, and I’m not very excited about it either. The developments I’ve seen in the web world for developing apps don’t really strike me as interesting. It’s still way too much work. Two years ago I tried creating a whole new language for that, and I couldn’t do it.

What’s your coming to Google story?

I knew a lot of people there. the funny thing is I moved to the Bay area in 2003, from northern Virginia. I came there because someone I respected asked me to move and work for him. All the wheels were in motion for me to move, and suddenly I got an email from a google recruiter, asking if I would come and have an interview.

I was far enough into this other process that I said, I’m sorry, if you’d called 2 months earlier, I would, but I feel honor bound to take this other job. 2 1/2 years later, the startup failed, and I knew 4 or 5 people who as soon as I asked how I might get into Google, fell over each other entering me into [the Google HR system].

What languages would you like to see gain popularity or fade into oblivion?

I’ll skip the second part. Enough languages face into oblivion without my help or commentary.

What would I like to see gain popularity? Probably something that hadn’t happened yet. There is a kind of renaissance going on. There’s probably going to be a not-quite OO, not-quite functional language that’s going to come along and solve some hard problems.

What about Go?

I don’t think i’ve written any yet. I’ve walked through parts of the tutorial and the docs, and I think there are definitely plenty of interesting things there. there are also plenty of things that look — well, maybe misguided. Go is really — designed to be the ideal programming language for one person. I’m not sure if it has broad enough appeal and solves a large enough range of problems, or can be extended to solve a wide enough range of problems to really fly.

There’s probably a lot of similarity between Go now and Java when it was first created; interesting ideas but lots of ideas missing. It has taken Java a long time to fill in things like generics, and it’s completely hit-and-miss on whether Go will get a large enough userbase to go anywhere. I’m doubtful on whether it will replace C++ even within Google, though that is the goal.

I’m sure once it’s in app engine, I’m sure I’ll be playing with it more. Maybe I’ll even like it.

BASIC is gone now. Have you thought about the problem of languages for young people (because a lot of us grew up on BASIC)?

It’s true that almost everyone in middle-class america has more than 1 computer in their house, but pretty much none of them are doing anything with programming. They’re not even doing HTML anymore.

I don’t see a lot of people doing that, and then moving on into Javascript.

OTOH, there was a viewing 2 days ago of a documentary about Infocom games in MTV. I played them even though I didn’t have access to microcomputers — my first was access to a mainframe. I lost my train of thought.

In the end, I don’t think it’s such a big loss because most people didn’t have computers at all in those days. It was a very very small part of a particularly nerdy part of the population that 20 or 30 years ago had access to any computer at home.

There are other geeky hobbies, and there were other geeky hobbies, and I think other stuff will happen. I think there are some geeky kids who are the same sort of geeky kids that we were doing, some of those will become great programmers. I think there is still enough of a feeder population. I’m not worried about there not being any CS graduates anymore, even though people in academia complain about it.

What’s a hard problem that felt really good to crack?

I’m going to punt and give a nontraditional answer here, and say that the appearance of a Python community was something that.. it happened all by itself, and it felt really good that it happened.

I’d been sharing my software with people for 2 or 3 years, and I’d never been very successful at that. I think before python the last thing I tried was a platform independent app for designing GUI applications, and I went for a lowest-common denominator approach, and it was a total dud.

I actually used Python to try to support it to start with, and the only nice thing was that it ran as fast on a Mac as it did on Unix, but it was a nightmare. It was hard to program for, mouse buttons didn’t work. These days every successful GUI library is a sprawling, all-encompassing thing.

So I’d been trying to create software that people would use, and it just didn’t happen, but it happened with Python.

What made that happen? Who knows. I can only say that I had tried a lot of things and it just didn’t happen. But in the summer of 1994, people on the mailing list people started complaining that the python ML needed to become a newsgroup, and I said “fine, make it happen”, and they did. Then people started complaining that there was only one Guido, and the community solved it by self-organizing. And that was my eureka moment instead of any programming problem.

How much control do you retain over the language/community?

Every now and then someone shows up and says “Guido is the dictator, and must be overthrown”

I’ve never had that power. All I’ve ever had is the ability to convince people through words. And that’s still all I have.

Last weekend, the Python repo converted from SVN to Hg. It took two years to do, and all I ever did was say “Ok, do that.” I don’t have commit privileges in the new repo, and I doubt I’ll miss them. I haven’t committed anything in months.

People still listen to me and respect my opinion on things, but I also tell people to think for themselves, and I think that’s been successful. IF I got locked in the datacenter for a few years, Python would go on. I like that I’m not a single point of failure anymore.

What do you think of PyPy?

I love it, but it’s so much more than getting Python self-hosted. It’s so much more than that, and that part is almost irrelevant these days. REally what PyPy is these days is a toolkit for building JITs. They can build a JIT compiler for many different languages. They’ve only tried a few, and they’re not particularly proud of the ones they’ve tried. They tried Prolog, but I don’t think that’s particularly viable. But they have this tool and core for JITs. And on top of that they have a new implementation of Python, which is probably more compatible with the original C python than either Jython or IronPython. And, it’s faster than C Python, which neither of the other ever really will be.

They’ve done an amazing job of compatibility at both the language and library level, but it’s still not there. It’s still a crapshoot on whether all extensions and third-party libs will work. And for large applications, logic doesn’t benefit a lot from JITting. It won’t be any slower than C Python, but it won’t ever be faster. I love that they’re working at it.

There will be several talks about it at PyCon. They get closer and faster and more compatible every year. Maybe this year is the breakthrough year.

Still a Monty Python fan?

Yes, I am. I was a nuisance to my family because several weeks ago I started watching the earliest series on youtube.  They don’t understand the humor.  HAving grown up with Monty Python, I am so desensitized to so many movies that take themselves seriously.

Do you envision programs like App Inventor making programming literacy more common, or do you think they’ll just make it easier for people who already want to write programs?

In the middle. I’ve played with it a little, but I found it frustrating because I can already program.

OTOH, I’ve seen what educators have done with it, and there’s definitely something there. There are definitely people who would never get into programming at all who have some experience with creating a program and debugging it, which is the interesting part. Figuring out where to put the semicolons and braces is no fun at all, and App Inventor takes that away.

But creating a program in little steps, and watching it run away terribly, or crash in a microsecond, and then figure out what you did wrong, that’s the fun part. And App Inventor gives you that, adn lets you see if you’re any good at it, and if you can use that somewhere else in your life.

I think there’s something there. I think there’s some class of people who think they can use AI to write an app and put it in an app store and make piles of money, and that’s not how it’s going to work.  But getting something to work is a thrill, and after that maybe you can do it using text, which is the highest-bandwidth method of communication from your brain to the computer.

[Question redacted due to NDA]

[Answer as well]

What would you like to see improved about working at Google?

You know, personally, I’m pretty happy here. I don’t have a lot of wishes, but I also realize that being sort of famous and all that, I’m in a pretty lucky situation.

I dunno, I like to think that it’s still a pretty good place to work for. There’s a lot of exciting stuff going on. We have a number of areas where we’ve been outrageously successful, and a number of areas where we have a really good chance to, and it’s good to be on the inside of that.

What advice would you give to us mere mortals? Where does your drive and inspiration come from?

I dunno. On the one hand, I’ve always felt that I was much, much geekier than almost anyone around me, and I’ve mostly just tried to be at peace with that, and not worry about it. I wasn’t a big social hit in high school. Or in college, for that matter. But I enjoyed what I was good at.

My college career was very weird. I went to study math, thinking I was really good at it. It turned out that I wasn’t, I was only really good with the math in high school. Fortunately I found something else that I enjoyed, and was very good at, and that was programming. I just followed by heart there. I decided not to be too hung up about actually graduating in mathematics, but just have fun doing programming.

Eventually I did get a degree, but that’s.. there was a time when I wasn’t so sure that I would get there. So, follow what you love. And then be patient, and it will be alright :)

How did very early Python differ from today’s?

There were no classes. That’s the single biggest change ever made.

It was not an OO language. It was an object *based* language. There were objects, but no way to create new objects classes, except by writing a C extension.

The first implementation of classes had a broken way of declaring inheritance, which I think was

  Class = Baseclass

and after 2 years, we fixed that.

Emacs or vi?

Emacs.

Short URL for this post: http://tmblr.co/Zfw3Qy7eou3g