back to index

Guido van Rossum: Python | Lex Fridman Podcast #6


Chapters

0:0
0:42 Conversation with Guido Van Rossum
11:42 Conway's Game of Life
21:28 Similarities between the Brain and Our Computers
24:19 Consciousness
27:36 Self-Driving Cars
54:27 Programming Languages
83:42 Python Packaging

Whisper Transcript | Transcript Only Page

00:00:00.000 | The following is a conversation with Guido van Rossum, creator of Python, one of the most popular
00:00:05.600 | programming languages in the world, used in almost any application that involves computers, from web
00:00:12.720 | back-end development to psychology, neuroscience, computer vision, robotics, deep learning,
00:00:18.400 | natural language processing, and almost any subfield of AI. This conversation is part of
00:00:24.560 | MIT course on artificial general intelligence and the artificial intelligence podcast.
00:00:29.840 | If you enjoy it, subscribe on YouTube, iTunes, or your podcast provider of choice,
00:00:35.600 | or simply connect with me on Twitter @LexFriedman, spelled F-R-I-D.
00:00:40.720 | And now, here's my conversation with Guido van Rossum.
00:00:45.600 | You were born in the Netherlands in 1956. Your parents and the world around you was
00:00:53.040 | deeply impacted by World War II, as was my family from the Soviet Union. So, with that context,
00:01:00.080 | what is your view of human nature? Are some humans inherently good and some inherently evil,
00:01:08.800 | or do we all have both good and evil within us?
00:01:14.880 | Ouch. I did not expect such a deep one. I guess we all have good and evil potential in us,
00:01:26.240 | and a lot of it depends on circumstances and context.
00:01:31.440 | Out of that world, at least on the Soviet Union side and in Europe,
00:01:38.080 | sort of out of suffering, out of challenge, out of that kind of set of traumatic events,
00:01:45.200 | often emerges beautiful art, music, literature. In an interview I read or heard, you said you
00:01:52.000 | enjoyed Dutch literature when you were a child. Can you tell me about the books that had an
00:01:58.160 | influence on you in your childhood? Well, as a teenager, my favorite writer was,
00:02:05.200 | my favorite Dutch author was a guy named Willem Frederik Hermans, who's writing,
00:02:14.000 | certainly his early novels were all about sort of
00:02:19.520 | ambiguous things that happened during World War II. I think he was a young adult during that time,
00:02:31.600 | and he wrote about it a lot, and very interesting, very good books, I thought, I think.
00:02:40.880 | In a non-fiction way? No, it was all fiction, but it was very much set in
00:02:47.920 | in the ambiguous world of resistance against the Germans,
00:02:54.560 | where often you couldn't tell whether someone was truly in the resistance or really a spy for
00:03:03.680 | the Germans. And some of the characters in his novels sort of cross that line, and you never
00:03:10.960 | really find out what exactly happened. And in his novels, there's always a good guy
00:03:17.600 | and a bad guy, is the nature of good and evil, is it clear there's a hero?
00:03:22.480 | It's no, his heroes are often more, his main characters are often anti-heroes,
00:03:27.600 | and so they're not very heroic. They're often, they fail at some level to accomplish their lofty
00:03:40.400 | goals. And looking at the trajectory through the rest of your life, has literature, Dutch or
00:03:46.640 | English or translation had an impact outside the technical world that you existed in?
00:03:54.240 | I still read novels. I don't think that it impacts me that much directly.
00:04:05.280 | It doesn't impact your work? It's just, it's a...
00:04:08.720 | It's a separate world. My work is highly technical, and sort of the world of art and
00:04:15.920 | literature doesn't really directly have any bearing on it.
00:04:19.200 | You don't think there's a creative element to the design?
00:04:23.920 | You know, some would say art, design of a language is art.
00:04:26.880 | I'm not disagreeing with that. I'm just saying that sort of, I don't feel direct influences
00:04:38.400 | from more traditional art on my own creativity.
00:04:41.920 | Right. Of course, you don't feel doesn't mean it's not somehow deeply there in your subconscious.
00:04:46.560 | Who knows?
00:04:48.720 | Who knows? So, let's go back to your early teens. Your hobbies were building electronic circuits,
00:04:56.880 | building mechanical models. What, if you can just put yourself back in the mind of that
00:05:05.200 | young Guido, 12, 13, 14. Was that grounded in a desire to create a system? So, to create something?
00:05:14.000 | Or was it more just tinkering? Just the joy of puzzle solving?
00:05:17.600 | I think it was more the latter, actually. I...
00:05:21.840 | Maybe towards the end of my high school period, I felt confident enough that I designed my own
00:05:34.320 | circuits that were sort of interesting, somewhat. But a lot of that time, I literally just
00:05:43.680 | took a model kit and followed the instructions, putting the things together. I mean,
00:05:49.520 | I think the first few years that I built electronics kits, I really did not have
00:05:55.120 | enough understanding of sort of electronics to really understand what I was doing. I mean,
00:06:02.480 | I could debug it and I could sort of follow the instructions very carefully,
00:06:07.200 | which has always stayed with me. But I had a very naive model of how a transistor works.
00:06:17.120 | And I don't think that in those days I had any understanding of
00:06:24.560 | coils and capacitors, which actually sort of was a major problem when I started to build more
00:06:32.800 | complex digital circuits, because I was unaware of the sort of the analog part of the...
00:06:39.920 | how they actually work. And I would have things that...
00:06:48.880 | The schematic looked... everything looked fine and it didn't work. And what I didn't realize
00:06:56.800 | was that there was some megahertz level oscillation that was throwing the circuit
00:07:02.080 | off because I had a sort of... two wires were too close or the switches were kind of poorly built.
00:07:13.040 | But through that time, I think it's really interesting and instructive to think about,
00:07:18.960 | because there's echoes of it are in this time now. So in the 1970s, the personal computer was being
00:07:24.880 | born. So did you sense in tinkering with these circuits, did you sense the encroaching revolution
00:07:33.920 | in personal computing? So if at that point, we would sit you down and ask you to predict the
00:07:40.240 | 80s and the 90s, do you think you would be able to do so successfully to unroll this process?
00:07:48.560 | No, I had no clue. I remember, I think in the summer after my senior year,
00:07:57.840 | or maybe it was the summer after my junior year. Well, at some point, I think when I was 18,
00:08:05.280 | I went on a trip to the Math Olympiad in Eastern Europe. And there was like, I was part of the
00:08:14.320 | Dutch team. And there were other nerdy kids that sort of had different experiences. And one of
00:08:21.120 | them told me about this amazing thing called a computer. And I had never heard that word.
00:08:28.480 | My own explorations in electronics were sort of about very simple digital circuits.
00:08:35.280 | And I had sort of, I had the idea that I somewhat understood how a digital calculator worked.
00:08:44.800 | And so there is maybe some echoes of computers there, but I never made that connection. I didn't
00:08:54.000 | know that when my parents were paying for magazine subscriptions, using punched cards,
00:09:01.360 | that there was something called a computer that was involved that read those cards and
00:09:06.480 | transferred the money between accounts. I was also not really interested in those things.
00:09:12.320 | It was only when I went to university to study math that I found out that they had a computer
00:09:21.120 | and students were allowed to use it. And there was some, you're supposed to talk to that computer
00:09:26.320 | by programming it. What did that feel like? Yeah, that was the only thing you could do with it.
00:09:32.000 | The computer wasn't really connected to the real world. The only thing you could do was
00:09:38.000 | sort of, you typed your program on a bunch of punched cards, you gave the punched cards to the
00:09:45.920 | operator, and an hour later the operator gave you back your printout. And so all you could do was
00:09:53.840 | write a program that did something very abstract. And I don't even remember what my first forays
00:10:02.800 | into programming were, but they were sort of doing simple math exercises and just to learn
00:10:12.400 | how a programming language worked. Did you sense, okay, first year of college,
00:10:19.280 | you see this computer, you're able to have a program and it generates some output.
00:10:23.440 | Did you start seeing the possibility of this? Or was it a continuation of the tinkering with
00:10:31.840 | circuits? Did you start to imagine that, one, the personal computer, but did you see it as something
00:10:38.640 | that is a tool, like a word processing tool, maybe for gaming or something? Or did you start to
00:10:46.320 | imagine that it could be going to the world of robotics? Like the Frankenstein picture,
00:10:52.880 | that you could create an artificial being, there's like another entity in front of you.
00:10:56.960 | You did not see a computer? I don't think I really saw it that way. I was really more
00:11:04.000 | interested in the tinkering. It's maybe not a sort of a complete coincidence that I ended up
00:11:10.560 | sort of creating a programming language, which is a tool for other programmers.
00:11:17.680 | I've always been very focused on the sort of activity of programming itself and not so much
00:11:23.440 | what happens with the program you write. I do remember, and I don't remember,
00:11:33.680 | maybe in my second or third year, probably my second actually,
00:11:38.160 | someone pointed out to me that there was this thing called Conway's Game of Life.
00:11:44.640 | You're probably familiar with it. I think...
00:11:50.400 | In the 70s, I think is when you came up with it.
00:11:53.040 | So, there was a Scientific American column by someone who did a monthly column about
00:12:00.880 | mathematical diversions. I'm also blanking out on the guy's name. It was very famous at the time,
00:12:07.280 | and I think up to the 90s or so. And one of his columns was about Conway's Game of Life,
00:12:13.040 | and he had some illustrations, and he wrote down all the rules.
00:12:16.160 | And sort of there was the suggestion that this was philosophically interesting,
00:12:22.240 | that that was why Conway had called it that. And all I had was like the two pages photocopy
00:12:29.600 | of that article. I don't even remember where I got it. But it spoke to me, and I remember
00:12:36.800 | implementing a version of that game for the batch computer we were using, where
00:12:45.680 | I had a whole Pascal program that sort of read an initial situation from input and read some numbers
00:12:54.720 | that said, "Do so many generations and print every so many generations." And then out would come
00:13:02.480 | pages and pages of sort of things. Patterns of different kinds.
00:13:09.440 | Yeah. And I remember much later, I've done a similar thing using Python. But that original
00:13:18.000 | version I wrote at the time, I found interesting because I combined it with some trick I had
00:13:26.480 | learned during my electronics hobbyist times. I essentially first on paper, I designed a simple
00:13:34.640 | circuit built out of logic gates that took nine bits of input, which is the sort of the
00:13:44.720 | cell and its neighbors, and produced a new value for that cell. And it's like a combination of a
00:13:53.600 | half adder and some other clipping. No, it's actually a full adder. And so I had worked that
00:14:00.480 | out. And then I translated that into a series of Boolean operations on Pascal integers, where
00:14:10.480 | you could use the integers as bitwise values. And so I could basically generate 60 bits
00:14:20.480 | of a generation in like eight instructions or so.
00:14:28.320 | Nice.
00:14:29.760 | So I was proud of that.
00:14:30.720 | It's funny that you mentioned, so for people who don't know Conway's Game of Life,
00:14:37.840 | it's a cellular automata where there's single compute units that kind of look at their neighbors
00:14:43.760 | and figure out what they look like in the next generation based on the state of their neighbors.
00:14:50.480 | And this is a deeply distributed system in concept at least. And then there's simple rules
00:14:58.400 | that all of them follow. And somehow out of this simple rule, when you step back and look at what
00:15:05.440 | occurs, it's beautiful. There's an emergent complexity, even though the underlying rules
00:15:13.360 | are simple, there's an emergent complexity. Now, the funny thing is, you've implemented this. And
00:15:17.680 | the thing you're commenting on is you're proud of a hack you did to make it run efficiently.
00:15:24.480 | Well, you're not commenting on what like, this is a beautiful implementation.
00:15:30.480 | You're not commenting on the fact that there's an emergent complexity, that you've coded a simple
00:15:36.800 | program. And when you step back and you print out the following generation after generation,
00:15:42.080 | that's stuff that you may have not predicted would happen is happening.
00:15:46.480 | Right.
00:15:47.280 | And is that magic? I mean, that's the magic that all of us feel when we program. When you create
00:15:53.840 | a program, and then you run it, and whether it's Hello World, or show something on screen,
00:15:59.600 | if there's a graphical component, are you seeing the magic and the mechanism of creating that?
00:16:05.120 | I think I went back and forth. As a student, we had an incredibly small budget
00:16:12.320 | of computer time that we could use. It was actually measured. I once got in trouble with
00:16:19.120 | one of my professors because I had overspent the department's budget. It's a different story. But
00:16:25.440 | so I actually wanted the efficient implementation because I also wanted to explore what would
00:16:36.960 | happen with a larger number of generations and a larger sort of size of the board.
00:16:44.800 | And so once the implementation was flawless,
00:16:51.920 | I would feed it different patterns. And then I think maybe there was a follow-up article where
00:16:58.080 | there were patterns that were like gliders, patterns that repeated themselves after a number of
00:17:05.280 | generations, but translated one or two positions to the right or up or something like that.
00:17:16.720 | And I remember things like glider guns. Well, you can google Conway's Game of Life.
00:17:22.320 | People still go on over it.
00:17:26.720 | For a reason, because it's not really well understood why. I mean, this is what Stephen
00:17:32.560 | Wolfram is obsessed about. We don't have the mathematical tools to describe the kind of
00:17:40.080 | complexity that emerges in these kinds of systems. The only way you can do it is to run it.
00:17:45.840 | But I'm not convinced that it's sort of a problem that lends itself to classic mathematical analysis.
00:17:56.160 | So one theory of how you create an artificial intelligence or an artificial being is you kind
00:18:04.960 | of have to, same with the Game of Life, you kind of have to create a universe and let it run.
00:18:11.360 | That creating it from scratch in a design way, coding up a Python program that creates
00:18:17.760 | a fully intelligent system may be quite challenging. You might need to create a
00:18:22.720 | universe just like the Game of Life is. Well, you might have to experiment with a lot of
00:18:29.120 | different universes before. There is a set of rules that doesn't essentially always just end up
00:18:38.960 | repeating itself in a trivial way. Yeah, and Stephen Wolfram works with these simple rules.
00:18:47.360 | Says that it's kind of surprising how quickly you find rules that create interesting things.
00:18:52.640 | You shouldn't be able to, but somehow you do. And so maybe our universe is laden with
00:18:58.960 | rules that will create interesting things that might not look like humans, but
00:19:03.440 | you know, emergent phenomena that's interesting may not be as difficult to create as we think.
00:19:09.120 | Sure.
00:19:09.680 | But let me sort of ask, at that time, you know, some of the world, at least in popular press,
00:19:15.120 | was kind of captivated, perhaps at least in America, by the idea of artificial intelligence.
00:19:23.440 | That these computers would be able to think pretty soon. And did that touch you at all? Did that,
00:19:31.840 | in science fiction or in reality, in any way?
00:19:37.680 | I didn't really start reading science fiction until much, much later.
00:19:43.440 | I think as a teenager, I read maybe one bundle of science fiction stories.
00:19:52.560 | Was it in the background somewhere? Like in your thoughts?
00:19:56.960 | That sort of the using computers to build something intelligent always felt to me,
00:20:04.160 | because I felt I had so much understanding of what actually goes on inside a computer.
00:20:10.320 | I knew how many bits of memory it had and how difficult it was to program.
00:20:16.880 | I didn't believe at all that you could just build something intelligent out of that,
00:20:29.360 | that would really sort of satisfy my definition of intelligence.
00:20:37.120 | I think the most influential thing that I read in my early 20s was Gödel, Escher, Bach.
00:20:44.960 | That was about consciousness and that was a big eye opener, in some sense.
00:20:53.520 | In what sense? So, on your own brain, did you at the time or do you now see your own brain as a
00:21:01.200 | computer? Or is there a total separation of the way? So, yeah, you're very pragmatically,
00:21:07.680 | practically know the limits of memory, the limits of this sequential computing or weakly paralyzed
00:21:15.200 | computing. You just know what we have now and it's hard to see how it creates. But it's also
00:21:22.480 | easy to see it was in the 40s, 50s, 60s and now at least similarities between the brain and our
00:21:30.640 | computers. Oh yeah, I mean, I totally believe that brains are computers in some sense. I mean,
00:21:41.600 | the rules they use to play by are pretty different from the rules we can sort of
00:21:49.600 | implement in our current hardware. But I don't believe in like a separate thing that infuses us
00:22:01.840 | with intelligence or consciousness or any of that. There's no soul. I've been an atheist probably
00:22:11.840 | from when I was 10 years old, just by thinking a bit about math and the universe. And well,
00:22:19.520 | my parents were atheists. Now, I know that you could be an atheist and still believe that there
00:22:27.440 | is something sort of about intelligence or consciousness that cannot possibly emerge
00:22:36.240 | from a fixed set of rules. I am not in that camp. I totally see that
00:22:42.560 | sort of given how many millions of years evolution took its time, DNA is a particular machine that
00:22:54.960 | sort of encodes information and an unlimited amount of information in chemical form and
00:23:08.560 | has figured out a way to replicate itself. I thought that that was maybe it's 300 million
00:23:15.200 | years ago, but I thought it was closer to half a billion years ago that that sort of
00:23:22.240 | originated and it hasn't really changed. The structure of DNA hasn't changed ever since. That
00:23:28.480 | is like our binary code that we have in hardware. I mean...
00:23:34.480 | - The basic programming language hasn't changed, but maybe the programming itself...
00:23:39.680 | - Obviously, it did sort of... It happened to be a set of rules that was good enough to
00:23:48.240 | sort of develop endless variability and sort of the idea of self-replicating molecules
00:23:58.560 | competing with each other for resources and one type eventually sort of always taking over.
00:24:05.680 | That happened before there were any fossils. So, we don't know how that exactly happened, but
00:24:14.480 | I believe it's clear that that did happen.
00:24:17.360 | - Can you comment on consciousness and how you see it? Because I think we'll talk about
00:24:25.360 | programming quite a bit. We'll talk about intelligence connecting to programming
00:24:30.480 | fundamentally, but consciousness is this whole other thing. Do you think about it often as a
00:24:38.400 | developer of a programming language and as a human?
00:24:43.920 | - Those are pretty sort of separate topics. My line of work, working with programming,
00:24:53.440 | does not involve anything that goes in the direction of developing intelligence or
00:25:00.880 | consciousness. But sort of privately, as an avid reader of popular science writing,
00:25:07.760 | I have some thoughts which is mostly that I don't actually believe that consciousness
00:25:21.360 | is an all or nothing thing. I have a feeling that, and I forget what I read that influenced this, but
00:25:32.400 | I feel that if you look at a cat or a dog or a mouse, they have some form of intelligence.
00:25:41.120 | If you look at a fish, it has some form of intelligence. And that evolution just took a
00:25:53.040 | long time, but I feel that the evolution of more and more intelligence that led to the human form
00:26:02.000 | of intelligence followed the evolution of the senses, especially the visual sense. I mean,
00:26:14.640 | there is an enormous amount of processing that's needed to interpret a scene, and humans are still
00:26:22.800 | better at that than computers are. And I have a feeling that there is a sort of,
00:26:32.960 | the reason that mammals in particular developed the levels of consciousness that they have,
00:26:44.480 | and then eventually going from intelligence to self-awareness and consciousness,
00:26:52.160 | has to do with sort of being a robot that has very highly developed senses.
00:26:58.000 | - Has a lot of rich sensory information coming in. So, that's a really interesting thought,
00:27:04.720 | that whatever that basic mechanism of DNA, whatever that basic building blocks of programming,
00:27:12.880 | is if you just add more abilities, more high resolution sensors, more sensors,
00:27:20.560 | you just keep stacking those things on top, that this basic programming in trying to survive
00:27:25.920 | develops very interesting things that start to us humans to appear like intelligence and
00:27:31.440 | consciousness. - Yeah, so as far as robots go, I think that the self-driving cars have the sort of,
00:27:39.440 | the greatest opportunity of developing something like that, because when I drive myself, I don't
00:27:49.600 | just pay attention to the rules of the road. I also look around and I get clues from that,
00:27:56.800 | "Oh, this is a shopping district. Oh, here's an old lady crossing the street. Oh, here is someone
00:28:04.800 | carrying a pile of mail. There's a mailbox. I bet you they're gonna cross the street to reach that
00:28:12.640 | mailbox." And I slow down, and I don't even think about that. And so, there is so much where you
00:28:21.920 | turn your observations into an understanding of what other consciousnesses are going to do,
00:28:29.440 | or what other systems in the world are going to be, "Oh, that tree is gonna fall."
00:28:37.440 | Yeah, I see much more of, I expect somehow that if anything is going to become conscious,
00:28:47.360 | it's going to be the self-driving car and not the network of a bazillion computers in a Google or
00:28:56.480 | Amazon data center that are all networked together to do whatever they do. - So, in that sense,
00:29:06.160 | so you actually highlight, that's what I work in, is in autonomous vehicles, you highlight the big
00:29:10.480 | gap between what we currently can't do and what we truly need to be able to do to solve the problem.
00:29:17.280 | Under that formulation, then consciousness and intelligence is something that
00:29:22.000 | basically a system should have in order to interact with us humans,
00:29:28.880 | as opposed to some kind of abstract notion of consciousness. Consciousness is something that
00:29:36.160 | you need to have to be able to empathize, to be able to fear, understand what the fear of death
00:29:44.080 | is, all these aspects that are important for interacting with pedestrians, you need to be able
00:29:48.720 | to do basic computation based on our human desires and thoughts. - Yeah, if you look at the dog,
00:30:00.080 | the dog clearly knows, I mean, I'm not a dog owner, but I have friends who have dogs, the dogs
00:30:05.520 | clearly know what the humans around them are going to do, or at least they have a model of what those
00:30:11.040 | humans are going to do, and they learn. Some dogs know when you're going out and they want to go out
00:30:17.520 | with you, they're sad when you leave them alone, they cry, they're afraid because they were
00:30:23.920 | mistreated when they were younger. We don't assign sort of consciousness to dogs, or at least not
00:30:36.320 | all that much, but I also don't think they have none of that. So, I think it's consciousness and
00:30:46.080 | intelligence are not all or nothing. - The spectrum, it's really interesting. But, in returning to
00:30:54.320 | programming languages and the way we think about building these kinds of things,
00:30:59.760 | about building intelligence, building consciousness, building artificial beings,
00:31:04.080 | so I think one of the exciting ideas came in the 17th century, and with Leibniz, Hobbes, Descartes,
00:31:11.840 | where there's this feeling that you can convert all thought, all reasoning, all the thing that we
00:31:20.880 | find very special in our brains, you can convert all of that into logic. You can formalize it,
00:31:27.200 | formal reasoning, and then once you formalize everything, all of knowledge, then you can just
00:31:31.840 | calculate, and that's what we're doing with our brains is we're calculating. So, there's this
00:31:35.680 | whole idea that this is possible, that this we can actually program. - But they weren't aware of
00:31:41.920 | the concept of pattern matching in the sense that we are aware of it now. They sort of thought you,
00:31:49.200 | they had discovered incredible bits of mathematics, like Newton's calculus, and
00:31:58.960 | their sort of idealism, their sort of extension of what they could do with logic and math sort of
00:32:08.080 | went along those lines, and they thought there's like, yeah, logic, there's like a bunch of rules
00:32:19.840 | and a bunch of input. They didn't realize that how you recognize a face is not just a bunch of rules,
00:32:28.080 | but it's a shit ton of data, plus a circuit that sort of interprets the visual clues and the
00:32:38.240 | context and everything else, and somehow can massively parallel pattern match against stored
00:32:48.560 | rules. I mean, if I see you tomorrow here in front of the Dropbox office, I might recognize you.
00:32:56.400 | Even if I'm wearing a different shirt. - Yeah, but if I see you tomorrow in a coffee shop in Belmont,
00:33:02.000 | I might have no idea that it was you, or on the beach or whatever. I make those kind of mistakes
00:33:08.000 | myself all the time. I see someone that I only know as like, oh, this person is a colleague
00:33:14.480 | of my wife's, and then I see them at the movies and I don't recognize them. - But do you see those,
00:33:22.080 | you call it pattern matching, do you see that rules is unable to encode that? Everything you
00:33:32.560 | see, all the pieces of information, you look around this room, I'm wearing a black shirt,
00:33:37.040 | I have a certain height, I'm a human, all these, there's probably tens of thousands of facts you
00:33:42.320 | pick up moment by moment about this scene, you take them for granted and you accumulate,
00:33:47.680 | aggregate them together to understand the scene. You don't think all of that could be encoded to
00:33:51.600 | where at the end of the day you can just put it all on the table and calculate? - I don't know
00:33:57.840 | what that means. I mean, yes, in the sense that there is no actual magic there, but there are
00:34:07.360 | enough layers of abstraction from the facts as they enter my eyes and my ears, to the understanding of
00:34:17.520 | the scene, that I don't think that AI has really covered enough of that distance. It's like if you
00:34:29.920 | take a human body and you realize it's built out of atoms, well, that is a uselessly reductionist
00:34:40.080 | view, right? The body is built out of organs, the organs are built out of cells, the cells are built
00:34:46.320 | out of proteins, the proteins are built out of amino acids, the amino acids are built out of
00:34:53.600 | atoms and then you get to quantum mechanics. - So, that's a very pragmatic view, I mean,
00:35:00.080 | obviously as an engineer I agree with that kind of view, but you also have to consider the
00:35:04.560 | Sam Harris view of, well, intelligence is just information processing.
00:35:12.960 | Like you said, you take in sensory information, you do some stuff with it and you come up with
00:35:17.440 | actions that are intelligent. - He makes it sound so easy,
00:35:22.400 | I don't know who Sam Harris is. - Oh, he's a philosopher, so this is
00:35:26.720 | how philosophers often think, right? And essentially that's what Descartes was, is,
00:35:31.440 | wait a minute, if there is, like you said, no magic, so he basically says, it doesn't appear
00:35:37.600 | like there's any magic, but we know so little about it that it might as well be magic. So,
00:35:44.560 | just because we know that we're made of atoms, just because we know we're made of organs,
00:35:48.800 | the fact that we know very little how to get from the atoms to organs in a way that's recreatable
00:35:54.320 | means that you shouldn't get too excited just yet about the fact that you figured out that we're
00:36:01.200 | made of atoms. - Right, and the same about taking facts as our sensory organs take them in,
00:36:09.760 | and turning that into reasons and actions, that sort of, there are a lot of abstractions that
00:36:19.280 | we haven't quite figured out how to deal with those. I mean, sometimes, I don't know if I can
00:36:30.000 | go on a tangent or not. - Please, I'll drag you back in. - Sure, so if I take a simple program
00:36:38.000 | that parses, say I have a compiler, it parses a program. In a sense, the input routine of that
00:36:47.040 | compiler, of that parser, is a sensing organ, and it builds up a mighty complicated internal
00:36:57.120 | representation of the program it just saw. It doesn't just have a linear sequence of bytes
00:37:03.920 | representing the text of the program anymore, it has an abstract syntax tree, and I don't know how
00:37:10.640 | many of your viewers or listeners are familiar with compiler technology, but there's... - Fewer
00:37:18.640 | and fewer these days, right? - That's also true, probably. People want to take a shortcut, but
00:37:26.160 | there's sort of, this abstraction is a data structure that the compiler then uses to produce
00:37:34.160 | outputs that is relevant, like a translation of that program to machine code that can be executed
00:37:40.080 | by hardware. And then that data structure gets thrown away. When a fish or a fly sees,
00:37:55.040 | sort of gets visual impulses, I'm sure it also builds up some data structure, and for the fly
00:38:04.480 | that may be very minimal, a fly may have only a few, I mean, in the case of a fly's brain,
00:38:12.400 | I could imagine that there are few enough layers of abstraction that it's not much more than
00:38:21.520 | when it's darker here than it is here. Well, it can sense motion, because a fly sort of responds
00:38:28.000 | when you move your arm towards it. So clearly, its visual processing is intelligent, well,
00:38:35.440 | not intelligent, but it has an abstraction for motion. And we still have similar things in,
00:38:43.600 | but much more complicated in our brains. I mean, otherwise you couldn't drive a car if you
00:38:49.840 | didn't have an incredibly good abstraction for motion. Yeah, in some sense, the same abstraction
00:38:56.720 | for motion is probably one of the primary sources of information for us. We just know what to do,
00:39:04.240 | I think we know what to do with that. We've built up other abstractions on top. We build much more
00:39:08.960 | complicated data structures based on that. And we build more persistent data structures,
00:39:15.360 | sort of after some processing, some information sort of gets stored in our memory, pretty much
00:39:21.760 | permanently and is available on recall. I mean, there are some things that you sort of,
00:39:27.680 | you're conscious that you're remembering it, like, you give me your phone number, I, well,
00:39:35.920 | at my age, I have to write it down. But I could imagine I could remember those seven numbers or
00:39:41.200 | 10 digits and reproduce them in a while if I sort of repeat them to myself a few times.
00:39:47.440 | So, that's a fairly conscious form of memorization. On the other hand,
00:39:54.240 | how do I recognize your face? I have no idea. My brain has a whole bunch of specialized hardware
00:40:02.080 | that knows how to recognize faces. I don't know how much of that is sort of coded in our DNA,
00:40:08.720 | and how much of that is trained over and over between the ages of zero and three.
00:40:13.920 | But somehow our brains know how to do lots of things like that, that are useful in our
00:40:22.400 | interactions with other humans, without really being conscious of how it's done anymore.
00:40:30.000 | Right. So, our actual day-to-day lives, we're operating at the very highest level of abstraction.
00:40:35.920 | We're just not even conscious of all the little details underlying it. There's compilers on top
00:40:40.720 | of, it's like turtles on top of turtles, or turtles all the way down, compilers all the way down.
00:40:45.040 | But that's essentially, you say that there's no magic. That's what I was trying to get at,
00:40:52.800 | I think, is with Descartes started this whole train of saying that there's no magic. I mean,
00:40:58.640 | there's all this before. Well, didn't Descartes also have the notion though that the soul
00:41:03.040 | and the body were fundamentally separate?
00:41:06.320 | - Yeah, I think he had to write in God in there for political reasons. So, I don't actually,
00:41:12.320 | I'm not a historian, but there's notions in there that all of reasoning, all of human thought can
00:41:18.800 | be formalized. I think that continued in the 20th century with Russell and with Gato's
00:41:26.960 | incompleteness theorem, this debate of what are the limits of the things that can be formalized,
00:41:32.800 | that's where the Turing machine came along, and this exciting idea, I mean, underlying a lot of
00:41:37.920 | computing, that you can do quite a lot with a computer. You can encode a lot of the stuff we're
00:41:45.440 | talking about in terms of recognizing faces and so on, theoretically, in an algorithm that can
00:41:51.200 | then run on a computer. And in that context, I'd like to ask programming in a philosophical way,
00:42:02.080 | so what does it mean to program a computer? So, you said you write a Python program or a compiled,
00:42:09.680 | a C++ program that compiles to some byte code. It's forming layers, you're programming a layer
00:42:19.120 | of abstraction that's higher. How do you see programming in that context? Can it keep getting
00:42:25.760 | higher and higher levels of abstraction?
00:42:27.680 | I think at some point, the higher levels of abstraction will not be called programming,
00:42:35.840 | and they will not resemble what we call programming at the moment. There will not be
00:42:45.520 | source code. I mean, there will still be source code sort of at a lower level of the machine,
00:42:53.600 | just like there are still molecules and electrons and sort of proteins in our brains.
00:43:01.120 | And so, there's still programming and system administration and who knows what keeping,
00:43:10.400 | to keep the machine running. But what the machine does is a different level of abstraction,
00:43:16.720 | in a sense. And as far as I understand, the way that for the last decade or more people have made
00:43:24.240 | progress with things like facial recognition or the self-driving cars is all by endless,
00:43:30.960 | endless amounts of training data, where at least as a layperson, and I feel myself
00:43:40.560 | totally as a layperson in that field, it looks like the researchers who publish the results
00:43:49.600 | don't necessarily know exactly how their algorithms work. And I often get upset when I
00:43:59.280 | sort of read a sort of a fluff piece about Facebook in the newspaper or social networks,
00:44:06.400 | and they say, "Well, algorithms." And that's like a totally different interpretation of the word
00:44:13.360 | algorithm. Because for me, the way I was trained or what I learned when I was eight or 10 years
00:44:20.720 | old, an algorithm is a set of rules that you completely understand that can be mathematically
00:44:27.600 | analyzed. And you can prove things. You can prove that Aristoteles' sieve produces all prime
00:44:36.400 | numbers and only prime numbers. Yeah. So I don't know if you know who Andrej Karpathy is.
00:44:42.000 | I'm afraid not. So he's a head of AI at Tesla now, but he was at Stanford before. And he has this
00:44:51.600 | cheeky way of calling this concept Software 2.0. So let me disentangle that for a second.
00:44:58.480 | So kind of what you're referring to is the traditional, traditional, the algorithm,
00:45:05.360 | the concept of an algorithm, something that's there, it's clear, you can read it, you understand
00:45:09.280 | it, you can prove it's functioning, it's kind of Software 1.0. And what Software 2.0 is,
00:45:17.120 | is exactly what you described, which is, you have neural networks, which is a type of machine
00:45:22.800 | learning, that you feed a bunch of data, and that neural network learns to do a function.
00:45:28.720 | All you specify is the inputs and the outputs you want. And you can't look inside, you can't
00:45:35.360 | analyze it. All you can do is train this function to map the inputs to the outputs by giving a lot
00:45:41.840 | of data. In that sense, programming becomes getting a lot of data. That's what programming is.
00:45:47.840 | Well, that would be programming 2.0.
00:45:51.280 | 2.0, programming 2.0.
00:45:52.800 | I wouldn't call that programming. It's just a different activity, just like
00:45:57.680 | building organs out of cells is not called chemistry.
00:46:01.600 | Well, so let's just step back and think sort of more generally, of course. But you know,
00:46:10.160 | it's like, as a parent teaching, teaching your kids, things can be called programming,
00:46:17.920 | in that same sense, that that's how program is being used, you're providing them data examples,
00:46:24.560 | use cases. So imagine writing a function not by,
00:46:29.200 | not with for loops, and clearly readable text, but more saying, well, here's a lot of examples,
00:46:40.560 | what this function should take. And here's a lot of examples of when it takes those functions,
00:46:45.840 | it should do this, and then figure out the rest. So that's this 2.0 concept. And the question I
00:46:54.000 | have for you is like, it's a very fuzzy way. This is the reality of a lot of these pattern
00:47:00.080 | recognition systems. It's a fuzzy way of quote unquote, programming. What do you think about
00:47:06.320 | this kind of world? Should it be called something totally different than programming? If you're a
00:47:14.000 | software engineer, does that mean you're, you're designing systems that are very can be systematically
00:47:21.840 | tested, evaluated, they have a very specific specification. And then this other fuzzy
00:47:28.960 | software 2.0 world machine learning world, that's that's something else totally? Or is there some
00:47:33.920 | intermixing that's possible? Well, the question is probably only being asked, because we we don't
00:47:46.240 | quite know what that software 2.0 actually is. And it sort of, I think there is a truism that
00:47:56.720 | every task that AI has, has tackled in the past, at some point, we realized how it was done. And
00:48:04.720 | then it was no longer considered part of artificial intelligence, because it was no longer
00:48:10.320 | necessary to, to use that term, it was just, oh, now we know how to do this.
00:48:20.880 | And a new field of science or engineering has been developed. And I don't know if sort of
00:48:30.400 | every form of learning, or sort of controlling computer systems should always be called
00:48:38.240 | programming. So I, I don't know, maybe I'm focused too much on the terminology I, but I expect that,
00:48:47.760 | that there just will be different concepts, where people with sort of different education and a
00:48:58.000 | different model of what they're trying to do, will will develop those concepts.
00:49:06.240 | Yeah. And I guess if you could comment on another way to put this concept is, I think,
00:49:16.480 | I think the kind of functions that neural networks provide, is things as opposed to being able to
00:49:22.800 | upfront prove that this should work for all cases you throw at it. All you're able, it's the worst
00:49:29.760 | case analysis versus average case analysis, all you're able to say is, it's, it seems on everything
00:49:36.400 | we've tested to work 99.9% of the time, but we can't guarantee it, and it, it fails in unexpected
00:49:43.360 | ways. We can even give you examples of how it fails in unexpected ways. But it's like really
00:49:48.160 | good. Most of the time. Yeah, but there's no room for that in current ways we think about programming.
00:49:55.200 | Uh, programming 1.0 is actually sort of
00:50:06.160 | getting to that point too, where the sort of the ideal of a bug-free program
00:50:14.000 | has been abandoned long ago by most software developers. We only care about bugs that
00:50:24.720 | manifest themselves often enough to be annoying, and we're willing to take the occasional crash
00:50:33.520 | or outage or incorrect result for granted, because we can't possibly, we don't have enough
00:50:44.960 | programmers to make all the code bug-free, and it would be an incredibly tedious business, and if you
00:50:50.400 | try to throw formal methods at it, it gets, it becomes even more tedious. So, every once in a
00:50:58.720 | while, the user clicks on a link in, and somehow they get an error, and the average user doesn't
00:51:06.720 | panic. They just click again and see if it works better the second time, which often magically it
00:51:15.040 | does, or they go up and they try some other way of performing their task. So, that's sort of an
00:51:24.240 | end-to-end recovery mechanism, and inside systems, there is all sorts of retries and timeouts and
00:51:33.440 | fallbacks, and I imagine that that sort of biological systems are even more full of that,
00:51:41.520 | because otherwise they wouldn't survive. Do you think programming should be taught and thought of
00:51:50.240 | as exactly what you just said? I come from this kind of, you're always denying that fact, always.
00:51:59.760 | In sort of basic programming education,
00:52:05.680 | the sort of, the programs you're having students write are so small and simple,
00:52:17.040 | that if there is a bug, you can always find it and fix it, because the sort of programming as
00:52:25.040 | it's being taught in some, even elementary, middle schools, in high school, introduction
00:52:32.720 | to programming classes in college, typically, it's programming in the small. Very few classes
00:52:41.200 | sort of actually teach software engineering, building large systems. I mean,
00:52:45.440 | every summer here at Dropbox, we have a large number of interns, every tech company on the
00:52:53.680 | West Coast has the same thing. These interns are always amazed, because this is the first time in
00:53:01.520 | their life that they see what goes on in a really large software development environment.
00:53:10.480 | And everything they've learned in college was almost always about a much smaller scale. And
00:53:20.320 | somehow that difference in scale makes a qualitative difference in how you do things
00:53:27.360 | and how you think about it. If you then take a few steps back into decades, 70s and 80s,
00:53:35.360 | when you're first thinking about Python, or just that world of programming languages,
00:53:40.000 | did you ever think that there would be systems as large as underlying Google, Facebook and Dropbox?
00:53:45.680 | When you were thinking about Python...
00:53:51.360 | I was actually always caught by surprise by...
00:53:53.920 | Yeah, pretty much every stage of computing.
00:53:58.320 | So maybe just because you've spoken in other interviews, but I think the evolution of
00:54:06.800 | programming languages are fascinating. And it's especially because it leads from my perspective
00:54:12.640 | towards greater and greater degrees of intelligence. I learned the first programming
00:54:17.440 | language I played with in Russia was with the turtle logo. And if you look, I just have a list
00:54:27.280 | of programming languages, all of which I've played with a little bit. And they're all beautiful in
00:54:31.920 | different ways from Fortran, Cobol, Lisp, Algol 60, Basic, Logo again, C. There's a few...
00:54:41.120 | The object-oriented came along in the 60s, Simula, Pascal, Smalltalk. All of that leads...
00:54:48.080 | And all the classics.
00:54:49.200 | The classics, yeah. The classic hits, right? Scheme, that's built on top of Lisp.
00:54:58.080 | On the database side, SQL, C++, and all of that leads up to Python. Pascal too,
00:55:03.680 | that's before Python. MATLAB. These kind of different communities, different languages.
00:55:10.720 | So can you talk about that world? I know that Python came out of ABC, which I actually never
00:55:17.440 | knew that language. I just... Having researched this conversation, went back to ABC, and it looks
00:55:22.720 | remarkably... It has a lot of annoying qualities, but underneath those, like all caps and so on,
00:55:29.760 | but underneath that, there's elements of Python that are quite... They're already there.
00:55:34.880 | That's where I got all the good stuff.
00:55:37.360 | All the good stuff. But in that world, you're swimming in these programming languages. Were
00:55:40.880 | you focused on just the good stuff in your specific circle? Or did you have a sense of
00:55:47.360 | what is everyone chasing? You said that every programming language is built to scratch an itch.
00:55:53.920 | Were you aware of all the itches in the community? And if not, or if yes, what itch were you trying
00:56:03.680 | to scratch with Python? Well, I'm glad I wasn't aware of all the itches, because I would probably
00:56:10.880 | not have been able to do anything. I mean, if you're trying to solve every problem at once...
00:56:17.040 | You'll solve nothing.
00:56:18.880 | Well, yeah, it's too overwhelming. And so I had a very, very focused problem. I wanted a programming
00:56:29.680 | language that sat somewhere in between shell scripting and C. And now, arguably, there is
00:56:43.280 | one is higher level, one is lower level. And Python is sort of a language of an intermediate
00:56:54.240 | level, although it's still pretty much at the high level. And I was thinking much more about
00:57:04.000 | I want a tool that I can use to be more productive as a programmer in a very specific environment.
00:57:14.160 | And I also had given myself a time budget for the development of the tool. And that was sort of
00:57:23.680 | about three months for both the design, like thinking through what are all the features of
00:57:30.400 | the language syntactically, and semantically, and how do I implement the whole pipeline from
00:57:40.480 | parsing the source code to executing it. So I think both with the timeline and the goals,
00:57:49.200 | it seems like productivity was at the core of it as a goal. So like for me in the 90s,
00:57:56.960 | and the first decade of the 21st century, I was always doing machine learning AI.
00:58:02.400 | Programming for my research was always in C++. And then the other people who are a little more
00:58:11.200 | mechanical engineering, electrical engineering, are MATLAB-y. They're a little bit more MATLAB
00:58:17.360 | focused. Those are the world and maybe a little bit Java too. But people who are more interested in
00:58:23.840 | emphasizing the object-oriented nature of things. So but then in the last 10 years or so,
00:58:32.240 | especially with the oncoming of neural networks, and these packages are built on Python
00:58:36.880 | to interface with neural networks, I switched to Python. And it's just, I've noticed a significant
00:58:45.040 | boost that I can't exactly, because I don't think about it, but I can't exactly put into words why
00:58:49.600 | I'm just much, much more productive. Just being able to get the job done much, much faster.
00:58:55.360 | So how do you think, whatever that qualitative difference is, I don't know if it's quantitative,
00:59:01.680 | it could be just a feeling. I don't know if I'm actually more productive. But how do you think?
00:59:07.520 | You probably are.
00:59:08.160 | Yeah, well, that's right. I think there's elements, let me just speak to one aspect,
00:59:14.400 | I think those affecting my productivity is C++ was, I really enjoyed creating performant code
00:59:23.920 | and creating a beautiful structure, where everything that you know, this kind of going
00:59:29.840 | into this, especially with the newer and newer standards of templated programming of just really
00:59:34.560 | creating this beautiful, formal structure that I found myself spending most of my time doing
00:59:41.040 | that as opposed to getting it, parsing a file and extracting a few keywords or whatever the
00:59:45.840 | task was trying to do. So what is it about Python? How do you think of productivity in general,
00:59:51.600 | as you were designing it? Now, sort of through the decades, last three decades, what do you
00:59:56.880 | think it means to be a productive programmer? And how did you try to design it into the language?
01:00:02.000 | There are different tasks. And as a programmer, it's it's useful to have different tools available
01:00:10.320 | that sort of are suitable for different tasks. So I still write C code, I still write shell code.
01:00:17.760 | But I write most of my things in Python.
01:00:22.160 | Why do I still use those other languages, because sometimes the task just demands it.
01:00:30.960 | And, well, I would say, most of the time, the task actually demands a certain language,
01:00:38.560 | because the task is not write a program that solves problem X from scratch. But it's more like
01:00:44.640 | fix a bug in existing program X or add a small feature to an existing large program.
01:00:52.400 | But even if you're not constrained in your choice of language by context like that,
01:01:07.680 | there is still the fact that if you write it in a certain language, then you sort of
01:01:14.400 | you have this balance between how long does it take you to write the code,
01:01:25.440 | and how long does the code run. And when you're in sort of
01:01:35.120 | in the phase of exploring solutions, you often spend much more time writing the code than running
01:01:44.400 | it, because every time you've sort of you've run it, you see that the output is not quite
01:01:51.440 | what you wanted, and you spend some more time coding. And a language like Python just
01:02:02.080 | makes that iteration much faster, because there are fewer details, there is a large library,
01:02:09.760 | sort of there are fewer details that you have to get right before your program compiles and runs.
01:02:17.520 | There are libraries that do all sorts of stuff for you. So you can sort of very quickly
01:02:26.000 | take a bunch of existing components, put them together and get your prototype application
01:02:35.680 | running. Just like when I was building electronics, I was using a breadboard most of the time.
01:02:41.760 | So I had this like sprawled out circuit that if you shook it, it would stop working because it
01:02:51.200 | was not put together very well. But it functioned, and all I wanted was to see that it worked and
01:02:58.880 | then move on to the next schematic or design or add something to it. Once you've sort of figured
01:03:06.320 | out, oh, this is the perfect design for my radio or light sensor or whatever, then you can say,
01:03:12.800 | okay, how do we design a PCB for this? How do we solder the components in a small space? How do we
01:03:20.160 | make it so that it is robust against, say, voltage fluctuations or mechanical disruption? I mean,
01:03:32.720 | I know nothing about that when it comes to designing electronics, but I know a lot about that
01:03:37.760 | when it comes to writing code. So the initial steps are efficient, fast, and there's not much
01:03:45.200 | stuff that gets in the way. But you're kind of describing from like Darwin described the evolution
01:03:54.000 | of species, right? You're observing of what is true about Python. Now, if you take a step back,
01:04:01.920 | if the art of, if the act of creating languages is art, and you had three months to do it,
01:04:08.880 | initial steps, so you just specified a bunch of goals, sort of things that you observe about
01:04:16.400 | Python, perhaps you had those goals, but how do you create the rules, the syntactic structure,
01:04:21.360 | the features that result in those? So I have, in the beginning, and I have follow up questions
01:04:28.560 | about through the evolution of Python, too. But in the very beginning, when you're sitting there,
01:04:33.520 | creating the lexical analyzer, whatever.
01:04:36.160 | Evolution was still a big part of it, because I sort of, I said to myself,
01:04:45.600 | I don't want to have to design everything from scratch. I'm going to borrow features from other
01:04:53.040 | languages that I like.
01:04:54.160 | Oh, interesting. So you basically, exactly, you first observe what you like.
01:04:57.760 | Yeah. And so that's why if you're 17 years old, and you want to sort of create a programming
01:05:04.800 | language, you're not going to be very successful at it. Because you have no experience with other
01:05:11.760 | languages. Whereas I was in my, let's say, mid 30s. I had written parsers before, so I had worked
01:05:25.120 | on the implementation of ABC, I had spent years debating the design of ABC with its authors,
01:05:33.280 | with its designers, I had nothing to do with the design, it was designed
01:05:36.560 | fully as it was ended up being implemented when I joined the team. But so you borrow
01:05:45.200 | ideas and concepts and very concrete sort of local rules from different languages,
01:05:52.000 | like the indentation and certain other syntactic features from ABC. But I chose to borrow string
01:06:00.240 | literals and how numbers work from C and various other things.
01:06:07.760 | So in then, if you take that further, so yet, you've had this funny sounding, but I think
01:06:13.760 | surprisingly accurate, or at least practical title of benevolent dictator for life for quite,
01:06:21.280 | you know, for the last three decades or whatever, or no, not the actual title, but functionally
01:06:25.760 | speaking. So you had to make decisions, design decisions. Can you maybe let's take Python 2,
01:06:36.800 | releasing Python 3, as an example. It's not backward compatible to Python 2 in ways that
01:06:45.440 | a lot of people know. So what was that deliberation, discussion, decision like?
01:06:50.880 | Yeah, what was the psychology of that experience? Do you regret any aspects of how that experience
01:06:56.800 | undergone?
01:06:57.360 | That, yeah, so it was a group process, really, at that point, even though I was BDFL in name,
01:07:07.760 | and certainly everybody sort of respected my position as the creator and the current
01:07:18.000 | sort of owner of the language design. I was looking at everyone else for feedback.
01:07:24.880 | Sort of Python 3.0, in some sense, was sparked by other people in the community,
01:07:33.120 | pointing out, oh, well, there are a few issues that sort of bite users over and over.
01:07:46.080 | Can we do something about that? And for Python 3, we took a number of those
01:07:52.560 | Python wards, as they were called at the time, and we said, can we try to sort of make
01:07:59.600 | small changes to the language that address those wards? And we had sort of, in the past, we had
01:08:09.440 | always taken backwards compatibility very seriously. And so many Python wards in earlier
01:08:17.760 | versions had already been resolved, because they could be resolved while maintaining backwards
01:08:23.600 | compatibility, or sort of using a very gradual path of evolution of the language in a certain
01:08:31.280 | area. And so we were stuck with a number of wards that were widely recognized as problems,
01:08:39.360 | not like roadblocks, but nevertheless, sort of things that some people trip over. And you know
01:08:45.360 | that's always the same thing that people trip over when they trip. And we could not think of
01:08:53.840 | a backwards compatible way of resolving those issues. But it's still an option to not resolve
01:09:01.040 | the issues. And so, yes, for a long time, we had sort of resigned ourselves to, well, okay,
01:09:07.280 | the language is not going to be perfect in this way, and that way, and that way. And we sort of,
01:09:14.960 | certain of these, I mean, there are still plenty of things where you can say, well, that's,
01:09:20.400 | that particular detail is better in Java, or in R, or in Visual Basic, or whatever.
01:09:32.320 | And we're okay with that, because, well, we can't easily change it. It's not too bad, we can do a
01:09:39.440 | little bit with user education, or we can have a static analyzer, or warnings in the parser,
01:09:47.760 | or something. But there were things where we thought, well, these are really problems that
01:09:54.160 | are not going away, they are getting worse. In the future, we should do something about
01:10:02.160 | that.
01:10:02.660 | - But ultimately, there is a decision to be made, right?
01:10:04.960 | - Yes.
01:10:05.460 | - So, was that the toughest decision in the history of Python you had to make,
01:10:11.840 | as the benevolent dictator for life? Or if not, what are other, maybe even on a smaller scale,
01:10:18.560 | what was the decision where you were really torn up about?
01:10:21.840 | - Well, the toughest decision was probably to resign.
01:10:25.280 | - All right, let's go there. Hold on a second, then. Let me just, because in the interest of
01:10:31.280 | time, too, because I have a few cool questions for you. Let's touch a really important one,
01:10:36.080 | because it was quite dramatic and beautiful in certain kinds of ways. In July this year,
01:10:41.200 | three months ago, you wrote, "Now that PEP 572 is done, I don't ever want to have to fight so hard
01:10:48.480 | for a PEP and find that so many people despise my decisions. I would like to remove myself entirely
01:10:54.320 | from the decision process. I'll still be there for a while as an ordinary core developer, and I'll
01:11:00.640 | still be available to mentor people, possibly more available. But I'm basically giving myself
01:11:06.560 | a permanent vacation from being BDFL, benevolent dictator for life. And you all will be on your own."
01:11:13.920 | (laughter)
01:11:14.720 | First of all, it's almost Shakespearean. "I'm not going to appoint a successor,
01:11:21.280 | so what are you all going to do? Create a democracy, anarchy, a dictatorship, a federation?"
01:11:29.040 | So that was a very dramatic and beautiful set of statements. It's almost, it's open-ended nature,
01:11:36.560 | called the community to create a future for Python. There's this kind of beautiful aspect to it.
01:11:42.240 | - Wow.
01:11:42.720 | - So, and dramatic, you know. What was making that decision like? What was on your heart,
01:11:49.040 | on your mind, stepping back now, a few months later? Take me through your mind.
01:11:55.040 | - I'm glad you like the writing, because it was actually written pretty quickly.
01:12:01.280 | It was literally something like, after months and months of going around in circles,
01:12:12.320 | I had finally approved PEP 572, which I had a big hand in its design, although I didn't initiate
01:12:25.360 | it originally. I sort of gave it a bunch of nudges in a direction that would be better for
01:12:33.920 | the language. But so--
01:12:35.360 | - Sorry, just to ask, is async.io, that's the one, or no?
01:12:39.200 | - No, PEP 572 was actually a small feature, which is assignment expressions.
01:12:46.240 | - Oh, assignment expressions, okay.
01:12:47.520 | - That had been, there was just a lot of debate where a lot of people claimed that
01:12:55.840 | they knew what was Pythonic and what was not Pythonic, and they knew that this was going to
01:13:04.240 | destroy the language. This was like a violation of Python's most fundamental design philosophy.
01:13:11.200 | And I thought that was all bullshit, because I was in favor of it. And I would think I know
01:13:16.720 | something about Python's design philosophy. So I was really tired and also stressed of that thing.
01:13:23.360 | And literally, after sort of announcing I was going to accept it, a certain Wednesday evening,
01:13:31.360 | I had finally sent the email, it's accepted, now let's just go implement it.
01:13:36.720 | So I went to bed feeling really relieved, that's behind me. And I wake up Thursday morning,
01:13:46.640 | 7am, and I think, well, that was the last one that's going to be such a terrible debate.
01:13:58.800 | And that's the last time that I let myself be so stressed out about a PEP decision.
01:14:05.360 | I should just resign. I've been sort of thinking about retirement for half a decade. I've been
01:14:13.680 | joking and sort of mentioning retirement, sort of telling the community,
01:14:20.560 | some point in the future, I'm going to retire. Don't take that FL part of my title too literally.
01:14:28.400 | And I thought, okay, this is it. I'm done. I had the day off. I wanted to have a good
01:14:37.360 | time with my wife. We were going to a little beach town nearby. And in, I think, maybe 15,
01:14:45.680 | 20 minutes, I wrote that thing that you just called Shakespearean. And the funny thing is...
01:14:51.920 | I'm going to get so much crap for calling it Shakespearean.
01:14:54.320 | I didn't even realize what a monumental decision it was. Because five minutes later,
01:15:03.440 | I read a link to my message back on Twitter, where people were already discussing on Twitter,
01:15:11.200 | Guido resigned as the BDFL. And I had posted it on an internal forum that I thought was only read
01:15:20.560 | by core developers. So I thought I would at least have one day before news would sort of get out.
01:15:28.320 | The on your own aspect, I had also an element of quite... It was quite a powerful element
01:15:36.080 | of the uncertainty that lies ahead. But can you also just briefly talk about,
01:15:41.360 | like, for example, I play guitar as a hobby for fun. And whenever I play, people are super positive,
01:15:48.880 | super friendly. They're like, this is awesome. This is great. But sometimes I enter as an
01:15:53.920 | outside observer, I enter the programming community. And there seems to sometimes be
01:15:59.920 | camps on whatever the topic. And the two camps, the two or plus camps are often pretty harsh
01:16:07.200 | at criticizing the opposing camps. As an onlooker, I may be totally wrong on this.
01:16:13.840 | Yeah, holy wars are sort of a favorite activity in the programming community.
01:16:19.840 | And what is the psychology behind that? Is that okay for a healthy community to have?
01:16:24.960 | Is that a productive force ultimately for the evolution of a language?
01:16:29.120 | Well, if everybody is patting each other on the back and never telling the truth,
01:16:35.920 | it would not be a good thing. I think there is a middle ground where sort of
01:16:48.720 | being nasty to each other is not okay. But there is a middle ground where there is
01:16:57.040 | healthy ongoing criticism and feedback that is very productive.
01:17:02.880 | And you mean at every level you see that, I mean, someone proposes to fix a very small
01:17:12.400 | issue in a code base, chances are that some reviewer will sort of respond by saying,
01:17:21.520 | well, actually, you can do it better the other way.
01:17:24.080 | When it comes to deciding on the future of the Python core developer community,
01:17:32.960 | we now have, I think, five or six competing proposals for a constitution.
01:17:40.960 | So that future, do you have a fear of that future? Do you have a hope for that future?
01:17:46.400 | I'm very confident about that future. And by and large, I think that the debate has been very
01:17:54.880 | healthy and productive. And I actually, when I wrote that resignation email, I knew that Python
01:18:06.560 | was in a very good spot and that the Python core development community, the group of 50 or 100
01:18:13.840 | people who sort of write or review most of the code that goes into Python, those people
01:18:21.200 | get along very well most of the time. A large number of different areas of expertise are
01:18:32.000 | represented, different levels of experience in the Python core dev community, different levels
01:18:42.800 | of experience completely outside it in software development in general, large systems, small
01:18:49.680 | systems, embedded systems. So I felt okay resigning because I knew that the community can really take
01:19:01.200 | care of itself. And out of a grab bag of future feature developments, let me ask if you can
01:19:09.200 | comment maybe on all very quickly. Concurrent programming, parallel computing, async IO.
01:19:17.360 | These are things that people have expressed hope, complained about, whatever have discussed on
01:19:25.440 | Reddit. Async IO, so the parallelization in general. Packaging, I was totally clueless on
01:19:31.840 | this. I just use pip to install stuff, but apparently there's pip and poetry, there's these
01:19:37.120 | dependency packaging systems that manage dependencies and so on. They're emerging
01:19:41.680 | and there's a lot of confusion about what's the right thing to use. Then also functional programming.
01:19:54.080 | Are we going to get more functional programming or not? This kind of idea.
01:19:57.840 | And of course the GIL connected to the parallelization, I suppose, the global
01:20:06.960 | interpreter lock problem. Can you just comment on whichever you want to comment on?
01:20:12.320 | Well, let's take the GIL and parallelization and async IO as one topic.
01:20:23.200 | I'm not that hopeful that Python will develop into a high concurrency, high parallelism language.
01:20:35.200 | That the way the language is designed, the way most users use the language, the way the language
01:20:44.240 | is implemented, all make that a pretty unlikely future.
01:20:48.560 | So you think it might not even need to, really, the way people use it. It might not be something that should be of great concern.
01:20:57.600 | I think async IO is a special case because it allows overlapping IO and only IO.
01:21:06.000 | And that is a best practice of supporting very high throughput IO,
01:21:16.640 | many connections per second. I'm not worried about that. I think async IO will evolve.
01:21:25.040 | There are a couple of competing packages. We have some very smart people who are sort of pushing us
01:21:31.680 | to make async IO better. Parallel computing, I think that Python is not the language for that.
01:21:43.200 | There are ways to work around it, but you can't expect to write
01:21:49.760 | an algorithm in Python and have a compiler automatically parallelize that.
01:21:57.120 | What you can do is use a package like NumPy and there are a bunch of other very powerful packages
01:22:04.320 | that use all the CPUs available because you tell the package, here's the data,
01:22:12.160 | here's the abstract operation to apply over it, go at it, and then we're back in the C++ world.
01:22:19.200 | But those packages are themselves implemented usually in C++.
01:22:23.440 | That's right. That's where TensorFlow and all these packages come in, where they parallelize
01:22:26.960 | across GPUs, for example. They take care of that for you. So in terms of packaging, can you comment on the future of packaging in Python?
01:22:34.880 | Packaging has always been my least favorite topic. It's a really tough problem because
01:22:44.800 | the OS and the platform want to own packaging,
01:22:51.200 | but their packaging solution is not specific to a language. If you take Linux, there are
01:23:02.080 | two competing packaging solutions for Linux or for Unix in general, but they all work across
01:23:11.680 | all languages. Several languages like Node, JavaScript, Ruby, and Python all have their
01:23:23.200 | own packaging solutions that only work within the ecosystem of that language.
01:23:28.800 | Well, what should you use? That is a tough problem. My own approach is I use the system
01:23:38.240 | packaging system to install Python and I use the Python packaging system then to install
01:23:46.320 | third-party Python packages. That's what most people do. Ten years ago, Python packaging was
01:23:53.360 | really a terrible situation. Nowadays, PIP is the future. There is a separate ecosystem for
01:24:01.920 | a numerical and scientific Python based on Anaconda. Those two can live together.
01:24:09.680 | I don't think there is a need for more than that. So that's packaging.
01:24:14.640 | Well, at least for me, that's where I've been extremely happy. I didn't even know this
01:24:20.240 | was an issue until it was brought up. In the interest of time, let me skip through a million
01:24:25.760 | other questions I have. I watched a five and a half hour oral history that you've done with the
01:24:32.480 | Computer History Museum. The nice thing about it, it gave this, because of the linear progression of
01:24:37.680 | the interview, it gave this feeling of a life, a life well-lived with interesting things in it.
01:24:48.320 | I would say a good spend of this little existence we have on earth.
01:24:52.960 | So outside of your family, looking back, what about this journey are you really proud of?
01:24:59.920 | Are there moments that stand out, accomplishments, ideas? Is it the creation of Python itself that
01:25:10.480 | stands out as a thing that you look back and say, "Damn, I did pretty good there"?
01:25:17.680 | Well, I would say that Python is definitely the best thing I've ever done.
01:25:21.760 | And I wouldn't sort of say just the creation of Python, but the way I sort of raised Python, like
01:25:34.240 | a baby. I didn't just conceive a child, but I raised a child. And now I'm setting the child
01:25:41.440 | free in the world. And I've set up the child to sort of be able to take care of himself.
01:25:48.800 | And I'm very proud of that.
01:25:51.120 | And as the announcer of Monty Python's Flying Circus used to say, and now for something
01:25:56.720 | completely different, do you have a favorite Monty Python moment or a moment in Hitchhiker's
01:26:02.320 | Guide or any other literature show or movie that cracks you up when you think about it?
01:26:06.080 | Oh, you can always play me the dead parrot sketch.
01:26:11.200 | Oh, that's brilliant.
01:26:12.400 | That's my favorite as well.
01:26:14.400 | It's pushing up the daisies.
01:26:15.680 | Okay, Greta, thank you so much for talking to me today.
01:26:20.240 | Lex, this has been a great conversation.
01:26:24.160 | Thank you.
01:26:25.700 | Thank you.
01:26:27.160 | [END]
01:26:27.240 | (No audio)
01:26:30.260 | (No audio)
01:26:33.260 | (No audio)
01:26:36.260 | (No audio)
01:26:39.260 | [BLANK_AUDIO]