back to index

Guido van Rossum: Python | Lex Fridman Podcast #6


small model | large model

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