back to indexBrian Kernighan: UNIX, C, AWK, AMPL, and Go Programming | Lex Fridman Podcast #109
Chapters
0:0 Introduction
4:24 UNIX early days
22:9 Unix philosophy
31:54 Is programming art or science?
35:18 AWK
42:3 Programming setup
46:39 History of programming languages
52:48 C programming language
58:44 Go language
61:57 Learning new programming languages
64:57 Javascript
68:16 Variety of programming languages
70:30 AMPL
78:1 Graph theory
82:20 AI in 1964
87:50 Future of AI
89:47 Moore's law
92:54 Computers in our world
100:37 Life
00:00:00.000 |
The following is a conversation with Brian Kernighan, 00:00:03.340 |
a professor of computer science at Princeton University. 00:00:07.560 |
He was a key figure in the computer science community 00:00:10.140 |
in the early Unix days, alongside Unix creators, 00:00:21.440 |
and has written a lot of books on programming, 00:00:24.340 |
computers and life, including "The Practice of Programming," 00:00:30.160 |
and his latest, "Unix, a History and a Memoir." 00:00:34.100 |
He co-created AWK, the text processing language 00:00:39.500 |
He co-designed Ample, an algebraic modeling language 00:00:43.800 |
that I personally love and have used a lot in my life 00:01:25.200 |
It really is the best way to support this podcast 00:01:29.660 |
If you enjoy this thing, subscribe on YouTube, 00:01:57.340 |
The mattress controls temperature with an app 00:02:03.820 |
Research shows the temperature has a big impact 00:02:09.020 |
Anecdotally, it's been a game changer for me. 00:02:14.300 |
that track heart rate, heart rate variability 00:02:18.620 |
showing it all on their app once you wake up. 00:02:23.500 |
you can control the temperature of each side of the bed. 00:02:32.000 |
So ladies, if a temperature controlled mattress 00:02:41.120 |
but the cooling alone is honestly worth the money. 00:02:47.260 |
but when I do, I choose the 8Sleep Pod Pro mattress. 00:02:51.660 |
Check it out at 8sleep.com/lex to get $200 off. 00:02:56.660 |
This show is also sponsored by Raycon earbuds. 00:03:07.700 |
of listening to podcasts, audio books, and music. 00:03:17.500 |
In fact, I often listen to brown noise with these 00:03:26.460 |
great sound, great bass, six hours of playtime. 00:03:30.180 |
In fact, for fun, I have one of the earbuds in now, 00:03:39.120 |
It kind of makes me feel like I'm in a music video. 00:03:41.540 |
So they told me to say that a bunch of celebrities 00:03:44.820 |
use these, like Snoop Dogg, Melissa Etheridge, and Cardi B. 00:03:55.600 |
To mention celebrities I actually care about, 00:03:58.320 |
I'm sure if Richard Feynman was still with us, 00:04:01.180 |
he'd be listening to the Joe Rogan experience 00:04:11.040 |
and increases the chance that he'll support this podcast 00:04:14.640 |
So for all of the sponsors, click all of the links. 00:04:20.000 |
And now, here's my conversation with Brian Kernighan. 00:04:30.600 |
Can you tell the story, like you describe in your new book, 00:04:39.580 |
So I think the gist of it is that at Bell Labs in 1969, 00:04:45.800 |
there were a group of people who had just finished 00:04:54.300 |
So we can go back sort of an infinite regress in time, 00:04:57.040 |
but the CTSS was a very, very, very nice time-sharing system. 00:05:17.040 |
Certainly at the time, it was the only time-sharing, 00:05:27.040 |
- Yeah, if we go back into, let's call it the 1950s 00:05:35.600 |
although not terribly powerful by today's standards, 00:05:49.280 |
write your program on it, send it over a counter, 00:05:51.880 |
hand it to an operator, and some while later, 00:05:55.720 |
oh, you made a mistake, and then you'd recycle. 00:05:59.440 |
So the idea of time-sharing was that you take 00:06:02.240 |
basically that same computer, but connect to it 00:06:06.240 |
with something that looked like an electric typewriter. 00:06:09.400 |
That could be a long distance away, it could be close, 00:06:11.920 |
but fundamentally what the operating system did 00:06:14.920 |
was to give each person who was connected to it 00:06:18.080 |
and wanting to do something a small slice of time 00:06:24.840 |
So I might be editing a file, so I would be typing, 00:06:30.960 |
oh, he typed character, let me remember that, 00:06:33.400 |
and then it'd go back to doing something else. 00:06:34.960 |
So it'd be going around and around a group of people 00:06:45.120 |
that they pretty much had the whole machine to themselves, 00:06:56.840 |
that there's others, in a sense, the illusion, 00:07:04.240 |
You had, if it were well done, and if it were fast enough, 00:07:13.000 |
and it was very much better than the punch card model. 00:07:16.520 |
And so CTSS, the compatible time-sharing system, 00:07:32.800 |
It had two banks of 32K words instead of one. 00:07:46.400 |
So, by today's standards, that's down in the noise. 00:07:53.240 |
So, CTSS was just a wonderful environment to work on. 00:08:06.800 |
And so I spent the summer of '66 working on that. 00:08:09.520 |
Had a great time, met a lot of really nice people, 00:08:31.720 |
- Now, the actual time-sharing, the scheduling, 00:08:55.760 |
Suppose that you and I are contending at high noon 00:08:59.880 |
then probably the simplest algorithm is a round-robin, 00:09:02.420 |
one that gives you a bit of time, gives me a bit of time. 00:09:08.680 |
Are you text editing or are you compiling or something? 00:09:15.040 |
- So, okay, so Multics was trying to just do some of the, 00:09:20.280 |
- Well, it was meant to be much more than that. 00:09:29.980 |
something that where you could actually think of it 00:09:35.080 |
Sort of like cloud computing today, same idea, 00:09:55.960 |
- Do you think people at that time had the dream 00:09:58.560 |
of what cloud computing is starting to become now, 00:10:09.080 |
You just kind of plug in, add your little computation 00:10:19.280 |
But my sense is, given that it was over 50 years ago, 00:10:31.680 |
Now, I'm betting that they didn't have the same view 00:10:38.840 |
the idea that your grandmother would be shopping on Amazon. 00:10:51.500 |
- What was your dream of computers at that time? 00:10:55.680 |
'Cause you have predicted what computers are today. 00:11:07.480 |
I was surrounded by really, really nice people. 00:11:10.040 |
Cambridge is a very fine city to live in in the summer, 00:11:20.360 |
And I think the good fortune of being there for summer 00:11:31.760 |
- So Bell Labs is this magical, legendary place. 00:11:46.600 |
- Yeah, so Bell Labs is physically scattered around, 00:11:52.320 |
The primary location was in a town called Murray Hill, 00:12:03.400 |
Think of it as about 15, 20 miles straight west 00:12:05.400 |
of New York City, and therefore about an hour north 00:12:15.040 |
three or 4,000 people there, many of whom had PhDs 00:12:20.760 |
chemistry, physics, materials kinds of things, 00:12:24.400 |
but very strong math and rapidly growing interest 00:12:29.040 |
in computing as people realized you could do things 00:12:31.160 |
with computers that you might not have been able 00:12:37.440 |
that had worked on models of what was going on. 00:12:44.080 |
And again, I wasn't a permanent employee there. 00:12:49.520 |
- I mean, if you could just linger on it a little bit, 00:12:55.440 |
'Cause some of the, the number of Nobel Prizes, 00:13:04.040 |
developments including Unix, it's just, it's unbelievable. 00:13:07.840 |
So was there something special about that place? 00:13:11.560 |
- Oh, I think there was very definitely something special. 00:13:15.760 |
It's a very large number of people, very highly skilled, 00:13:19.040 |
and working in an environment where there was always 00:13:27.240 |
which provided basically the country's phone service. 00:13:30.120 |
The goal of AT&T was to provide service for everybody. 00:13:33.400 |
And the goal of Bell Labs was to try and make that service 00:13:39.160 |
And that meant doing research on a lot of different things, 00:13:46.400 |
or fiber optical cables, or microwave systems, 00:13:53.200 |
And it was kind of just the beginning of real boom times 00:13:56.560 |
in computing as well, 'cause when I was there, 00:14:04.520 |
and so people were discovering that you could do 00:14:10.800 |
- So Multics, in spite of having an enormous number 00:14:14.560 |
of really good ideas, lots of good people working on it, 00:14:16.840 |
fundamentally didn't live up, at least in the short run, 00:14:22.160 |
to its goal of being this information utility. 00:14:25.560 |
It was too expensive, and certainly what was promised 00:14:45.480 |
so General Electric was the hardware operation. 00:14:48.320 |
So Bell Labs, realizing this wasn't going anywhere 00:14:50.880 |
on a timescale they cared about, pulled out of the project. 00:14:54.160 |
And this left several people with an acquired taste 00:14:59.160 |
for really, really nice computing environments, 00:15:03.520 |
And so they started thinking about what could you do 00:15:06.800 |
if you were gonna design a new operating system 00:15:09.480 |
that would provide the same kind of comfortable computing 00:15:12.920 |
as CTSS had, but also the facilities of something 00:15:23.920 |
what is characterized as a little-used PDP-7, 00:15:27.280 |
where he started to do experiments with file systems, 00:15:31.080 |
just how do you store information on a computer 00:15:33.640 |
in an efficient way, and then this famous story 00:15:36.360 |
that his wife went away to California for three weeks 00:15:39.160 |
taking their one-year-old son, and three weeks, 00:15:43.280 |
and he sat down and wrote an operating system, 00:15:47.440 |
So software productivity was good in those days. 00:16:03.440 |
It had, I would have to look up the numbers exactly, 00:16:09.320 |
maybe 16K, 16-bit words or something like that, 00:16:13.280 |
relatively slow, probably not super expensive, 00:16:17.120 |
maybe, again, making this up, I'd have to look it up, 00:16:21.840 |
- Which is not super expensive in those days, right? 00:16:27.680 |
but a modest group of people could get together. 00:16:30.880 |
But in any case, it came out, if I recall, in 1964, 00:16:34.880 |
so by 1969, it was getting a little obsolete, 00:16:41.520 |
- If you can sort of comment, what do you think 00:16:43.400 |
it's like to write an operating system like that? 00:16:45.680 |
So that process that Ken went through in three weeks, 00:16:48.680 |
because you were, I mean, you're a part of that process. 00:16:52.800 |
You contributed a lot to Enix's early development. 00:16:57.600 |
So what do you think it takes to do that first step, 00:17:01.360 |
that first kind of, from design to reality on the PDP? 00:17:07.160 |
I had nothing to do with it, so I did not write it. 00:17:21.400 |
but it's something that lets you run processes of some, 00:17:24.600 |
lets you execute some kind of code that has been written. 00:17:27.320 |
It lets you store information for periods of time 00:17:30.820 |
so that it doesn't go away when you turn the power off 00:17:38.560 |
that are technically not part of an operating system, 00:17:42.400 |
In this case, Ken wrote an assembler for the PDP-7 00:17:46.900 |
He did a text editor so that he could actually create text. 00:17:49.880 |
He had the file system stuff that he had been working on, 00:17:52.160 |
and then the rest of it was just a way to load things, 00:17:55.760 |
executable code from the file system into the memory, 00:18:01.880 |
when it was finished or in some other way quit. 00:18:12.320 |
These things were assembly language until probably the, 00:18:25.200 |
to write any kind of complex system in assembly. 00:18:32.940 |
what we think of as software engineering with assembly 00:18:41.480 |
It's been a long time since I wrote assembly language. 00:18:43.760 |
It is absolutely true that in assembly language, 00:19:00.400 |
So part of it is an ability to see the big picture. 00:19:08.680 |
So the big picture was in some sense more manageable. 00:19:11.840 |
I mean, then realistically, there's an enormous variation 00:19:20.200 |
is kind of the singularity in my experience of programmers 00:19:33.760 |
It's a fascinating thing that there are unique stars 00:19:53.440 |
that there's a system that was created in three weeks 00:20:03.660 |
that is now, you could think of most of the computers 00:20:18.420 |
that all of a sudden these computers took over the world 00:20:21.000 |
and they started from this little initial seed of Unix, 00:20:31.120 |
There's no way you could predict that kind of evolution. 00:20:40.960 |
And so I look at it and think, gee, that's kind of neat. 00:20:47.760 |
I think the real question is what does Ken think about that? 00:20:51.020 |
'Cause he's the guy arguably from whom it really came. 00:20:57.220 |
and then others around in that Bell Labs environment. 00:21:00.220 |
But if you had to pick a single person, that would be Ken. 00:21:10.940 |
funny or profound from that time that just kind of stand out? 00:21:15.740 |
And again, it's a question of can you resurrect them 00:21:21.780 |
But I think part of it was that Bell Labs at the time 00:21:27.100 |
because there were a lot of interesting people 00:21:29.020 |
and the environment was very, very open and free. 00:21:46.660 |
and often tweaking the bureaucracy in one way or another. 00:21:58.860 |
to the bureaucracy and I'm sure the bureaucracy 00:22:15.300 |
Not just the initial, but just carry through the years, 00:22:20.640 |
What's the fundamental philosophy behind the system? 00:22:23.340 |
- I think one aspect of the fundamental philosophy 00:22:25.620 |
was to provide an environment that made it easy to write 00:22:38.380 |
For example, it was used extensively for word processing, 00:22:41.380 |
but it wasn't designed as a word processing system. 00:22:57.980 |
So the programmers could be highly productive. 00:23:03.100 |
And there's some observation from Dennis Ritchie, 00:23:11.900 |
where people could work as programmers on a system. 00:23:16.900 |
I think in that sense, certainly for many, many years, 00:23:25.020 |
of because it made it really easy to write programs, 00:23:29.500 |
Those programs tended to be used by other programmers. 00:23:39.340 |
- And you were part of that community of programmers. 00:23:41.780 |
So what was it like writing programs on that early Unix? 00:23:56.620 |
there was an enormous amount of what you would, 00:24:07.620 |
and very responsive system and tremendous colleagues 00:24:19.060 |
you could have something limping along that night 00:24:21.300 |
or the next day, and people would react to it, 00:24:27.780 |
And the feedback loop was then very, very short and tight. 00:24:31.660 |
And so a lot of things got developed fairly quickly 00:24:39.860 |
And I think that was part of what made it fun, 00:24:46.860 |
but I think it's even more fun when you do something 00:24:54.540 |
the fact that they used it is part of the reward mechanism. 00:25:11.580 |
somebody would come into your office and say something. 00:25:18.940 |
- Yeah, yeah, no, Bell Labs was fundamentally 00:25:24.380 |
were in two or three quarters, and there was a room, 00:25:33.460 |
make up a number of that, which had some access 00:25:39.940 |
and people hung out there, and it had a coffee machine. 00:25:52.700 |
all on one machine, so there was no need for internet. 00:25:56.500 |
- It's fascinating to think about what computing 00:26:11.460 |
I don't know where else that could have existed 00:26:13.180 |
in the world, I mean, given how that came together. 00:26:34.980 |
Xerox PARC contributed an enormous amount of good material, 00:26:38.140 |
and many of the things we take for granted today 00:26:40.540 |
in the same way came from Xerox PARC experience. 00:26:43.300 |
I don't think they capitalized in the long run as much. 00:26:46.420 |
Their parent company was perhaps not as lucky 00:26:54.940 |
where there was a tremendous amount of influence. 00:26:58.020 |
There were a lot of good university activities. 00:27:00.180 |
MIT was obviously no slouch in this kind of thing, 00:27:10.620 |
because of the various ways that AT&T operated, 00:27:13.540 |
and sort of it had to, the focus was on telephones. 00:27:17.660 |
- I think that's a mischaracterization in a sense. 00:27:23.820 |
It was very definitely proprietary, licensed, 00:27:33.500 |
and because of that, generations of university students 00:27:37.660 |
and their faculty people grew up knowing about Unix, 00:27:41.740 |
and there was enough expertise in the community 00:27:54.780 |
with that licensed code and gradually picked up 00:28:10.500 |
Now, there was an enormous amount of legal jockeying 00:28:13.140 |
around this in the late, early to late '80s, early '90s, 00:28:22.460 |
I guess the open source movement might have started 00:28:26.020 |
when Richard Stallman started to think about this 00:28:28.300 |
in the late '80s, and by 1991, when Torvalds decided 00:28:32.660 |
he was going to do a Unix-like operating system, 00:28:40.460 |
that first he had a target, he could see what to do, 00:28:44.300 |
because the kind of the Unix system call interface 00:28:49.380 |
and so he was able to build an operating system 00:28:56.140 |
in many cases what you're really thinking is Linux. 00:28:59.860 |
- It's funny that from my distant perception, 00:29:04.740 |
without actually knowing it, but what you're really saying, 00:29:12.940 |
- So it felt open source, because universities 00:29:15.860 |
are not trying to make money, so it felt open source 00:29:18.540 |
in the sense that you can get access if you wanted. 00:29:23.020 |
of universities had the license, and they were able 00:29:24.900 |
to talk to all the other universities who had the license, 00:29:27.380 |
and so technically not open, technically belonging to AT&T, 00:29:34.860 |
- And so there's a ripple effect that all the faculty 00:29:57.240 |
make it easy for programmers, that seems to be 00:30:09.020 |
- So is that an accident when you focus on the programmer, 00:30:17.540 |
was that it began on extremely modest hardware, 00:30:21.180 |
very, very, very tiny, and so you couldn't get carried away, 00:30:32.360 |
and so that enforced a certain minimality of mechanisms, 00:30:43.480 |
rather than having lots of different special cases. 00:30:45.880 |
I think the file system in Unix is a good example 00:30:48.760 |
of that file system interface in its fundamental form 00:31:06.740 |
and so in particular, the idea of reading and writing 00:31:09.560 |
to devices is the same as reading and writing 00:31:14.600 |
and then that gets carried further in other parts. 00:31:27.420 |
or something like that, took a lot of those ideas 00:31:34.720 |
so that in Plan 9, a lot of different resources 00:31:42.200 |
where finding the right model of how to do something 00:31:45.480 |
means that an awful lot of things become simpler, 00:31:48.040 |
and it means, therefore, that more people can do useful, 00:31:54.440 |
- So you said you're not a very good programmer. 00:31:58.480 |
- You're the world's most modest human being, okay, 00:32:04.440 |
but you do radiate a sort of love for programming, 00:32:22.640 |
that you really wanna do, what should that program be, 00:32:27.520 |
and that's some understanding of what the task is, 00:32:30.600 |
what the people who might use this program want, 00:32:37.720 |
The science part is trying to figure out how to do it well, 00:32:40.440 |
and some of that is real computer science-y stuff, 00:32:45.200 |
like what algorithm should we use at some point, 00:32:48.040 |
mostly in the sense of being careful to use algorithms 00:32:52.280 |
that will actually work properly, scale properly, 00:32:57.960 |
when a linear algorithm should be the right thing, 00:33:06.360 |
but also it's, I think, an engineering field as well, 00:33:10.280 |
and engineering's not quite the same as science 00:33:12.440 |
because in engineering you're working with constraints. 00:33:18.520 |
so what is a good algorithm for this kind of thing, 00:33:27.920 |
what's likely to happen in the future with maintenance, 00:33:33.040 |
all of those kind of things that if you're an engineer, 00:33:37.160 |
whereas if you think of yourself as a scientist, 00:33:39.120 |
well, you can maybe push them over the horizon in a way, 00:33:48.560 |
what's your process like of writing a program, 00:33:50.640 |
say a small and large sort of tinkering with stuff? 00:33:57.960 |
and just kind of evolve iteratively with a loose notion, 00:34:09.280 |
in the kind of software engineering courses in undergrad 00:34:14.880 |
- It's certainly much more the informal incremental. 00:34:17.440 |
First, I don't write big programs at this point. 00:34:20.160 |
It's been a long time since I wrote a program 00:34:21.720 |
that was more than, I call it a few hundred or more lines, 00:34:31.640 |
or often for something that I wanna talk about in a class, 00:34:34.560 |
and so those necessarily tend to be relatively small. 00:34:41.400 |
tends to be for sort of exploratory data analysis 00:34:49.200 |
and for that, those programs tend to be very small. 00:34:53.920 |
you're just using existing tools like counting things, 00:35:00.200 |
because two or three lines will tell you something 00:35:02.800 |
about a piece of data, and then when it gets bigger, 00:35:05.160 |
well, then I will probably write something in Python 00:35:10.720 |
up to, call it a few hundred lines or something like that, 00:35:14.560 |
and it's been a long time since I wrote programs 00:35:25.400 |
that was done by myself, Al Aho, and Peter Weinberger. 00:35:32.680 |
It was a language that was meant to make it really easy 00:35:34.800 |
to do quick and dirty tasks like counting things 00:35:45.040 |
rearranging it in some way or summarizing it. 00:35:51.520 |
I mean, it's still exceptionally widely used today. 00:36:03.160 |
that does something seemingly trivial on a single line, 00:36:09.880 |
somehow reveals something fundamental about the data, 00:36:17.120 |
- Yeah, it's very good for that kind of thing, 00:36:35.960 |
And well, this is paternal interest, I guess, 00:36:38.440 |
but I think in terms of programming languages, 00:36:41.000 |
you get the most bang for the buck by learning AWK, 00:36:46.600 |
but it does pretty darn well on these little things 00:36:49.960 |
where you just wanna see all the somethings in something. 00:36:58.680 |
- So what kind of stuff do you love about AWK? 00:37:01.040 |
Like, is there, if you can comment on sort of things 00:37:05.160 |
that give you joy when you can, in a simple program, 00:37:11.600 |
is there something that stands out from particular features? 00:37:14.600 |
- I think it's mostly the selection of default behaviors, 00:37:21.080 |
What AWK does is to read through a set of files, 00:37:36.880 |
there is a corresponding action that you might perform, 00:37:56.880 |
and I think we captured that reasonably well in AWK, 00:38:05.240 |
there's fields separated by white space or something, 00:38:11.200 |
and it collects information as it goes along, 00:38:18.000 |
So lots of things that just make it so that a program 00:38:31.840 |
you don't have to open up another whole thing, 00:38:35.200 |
in the interaction with the operator directly. 00:38:37.960 |
Is there other shell commands that you love over the years, 00:38:58.880 |
- So grep is, it basically searches the input 00:39:01.800 |
for particular patterns, regular expressions, 00:39:15.200 |
which is the regular expression you're looking for, 00:39:20.240 |
So in that sense, it's a much simpler version 00:39:22.560 |
and you could write grep and AWK as a one-liner, 00:39:25.560 |
and I use grep probably more than anything else 00:39:30.440 |
at this point, just because it's so convenient and natural. 00:39:35.040 |
- Why do you think, it's such a powerful tool, grep and AWK, 00:39:38.640 |
why do you think operating systems like Windows, 00:39:44.800 |
Sort of, you can, of course, I use, which is amazing now, 00:39:51.560 |
which you could basically use all the fun stuff 00:40:16.400 |
and I think some of it's the weight of history 00:40:22.000 |
MS-DOS was a pretty pathetic operating system, 00:40:24.480 |
although common on an unboundedly large number of machines, 00:40:34.640 |
and I think Microsoft spent a lot of their energy 00:40:37.920 |
on making that graphical interface what it is, 00:40:56.080 |
whereas teaching something like the command line 00:41:06.280 |
Now you mentioned Whistle or whatever it's called, 00:41:12.240 |
I've never actually pronounced the Whistle, I like it. 00:41:20.600 |
of take all your favorite tools from Unix and Linux 00:41:23.280 |
and just make them work perfectly on Windows, 00:41:29.880 |
and I use that on my one remaining Windows machine 00:41:53.320 |
- I've been so excited that I could use BASH, 00:41:57.080 |
that you bash, write scripts quickly in Windows, 00:42:20.920 |
which I use because it's kind of a reasonable balance 00:42:30.200 |
and so I basically do most of my computing on that. 00:42:41.040 |
but otherwise, it tends not to be used that much. 00:42:55.600 |
- Did that, sorry to interrupt, does that precede VI? 00:43:03.160 |
It is derived from Rob's experience with ED and VI. 00:43:18.320 |
- So what's, actually, what's the history of editors? 00:43:40.840 |
there were editors, there was an editor on CTSS 00:43:43.880 |
that I don't even remember what it was called. 00:43:46.120 |
It might've been edit, where you could type text, 00:44:10.760 |
because it was before mice, and even before cursors, 00:44:24.240 |
Ken took QED and stripped it way, way, way, way down, 00:44:31.160 |
And it was very simple, but it was a line-oriented editor. 00:44:49.280 |
- So you could work on parts of a file, essentially. 00:45:19.800 |
and you could sort of move where you were on the screen in-- 00:45:26.160 |
- Printing, and there were a number of editors there. 00:45:31.680 |
and still use, is VI, which was done by Bill Choi. 00:45:35.200 |
And so that dates from probably the late '70s, as a guess, 00:45:40.200 |
and it took full advantage of the cursor controls. 00:45:45.240 |
I suspected Emacs was roughly at the same time, 00:45:48.340 |
but I don't know, I've never internalized Emacs. 00:45:56.360 |
I use VI sometimes, and I use SAM when I can. 00:46:05.640 |
from typically the plan line operating system distribution. 00:46:41.760 |
and give a brief history of programming languages 00:46:46.400 |
- So I guess you could say programming languages 00:47:07.960 |
And so I think the first programming languages 00:47:18.360 |
that would convert mnemonics like add, A-D-D, 00:47:30.040 |
So you could put a name on a location in a program 00:47:39.920 |
And early on, and this would be the late '40s 00:47:46.680 |
there were assemblers written for the various machines 00:47:51.000 |
You may have seen in the paper just a couple of days ago, 00:47:55.880 |
called AutoCode, a language which I knew only by name. 00:48:00.880 |
But it sounds like it was a flavor of assembly language, 00:48:06.720 |
And it replaced a language that Alan Turing wrote, 00:48:25.800 |
So the EdSac had its, and the Manchester had its, 00:48:28.880 |
and the IBM, whatever, 7090 or 704 or whatever had its, 00:48:34.720 |
So everybody had their own assembly language. 00:48:35.840 |
- And assembly languages have a few commands, additions, 00:48:42.920 |
- Right, they have exactly, in their simplest form at least, 00:48:52.840 |
And so you have to know the machine intimately 00:48:56.720 |
And if you write an assembly language program 00:49:00.360 |
"Gee, it's nice, I'd like it in a different machine," 00:49:08.720 |
was people realized you could play this game again, 00:49:16.320 |
to the way that real people might think about 00:49:20.760 |
And there were, I guess, arguably three or four 00:49:32.840 |
- I didn't know that, formula translation, wow. 00:49:35.440 |
There was COBOL, which is the Common Business Oriented 00:49:37.840 |
Language that Grace Hopper and others worked on, 00:49:49.360 |
I guess you could argue BASIC was in there somewhere. 00:49:56.360 |
And so they were closer to what you and I might think of 00:50:05.880 |
Fortran for formula translation, engineering computations, 00:50:09.120 |
let's say COBOL for business, that kind of thing. 00:50:11.720 |
- And still used today, at least Fortran probably. 00:50:16.760 |
But the deal was that once you moved up that level, 00:50:19.440 |
then you, let's call it Fortran, you had a language 00:50:21.960 |
that was not tied to a particular kind of hardware 00:50:30.000 |
It meant you only had to write the program once, 00:50:35.920 |
if you were a random engineer, physicist, whatever, 00:50:39.760 |
You didn't have to hire a programmer to do it for you. 00:50:42.680 |
It might not be as good as you'd get with a real programmer, 00:50:45.840 |
And so it democratized and made much more broadly available 00:50:54.680 |
- Yeah, anybody who wants, who is willing to invest 00:50:59.440 |
and is not then tied to a particular kind of computer. 00:51:03.560 |
And then in the '70s, you get system programming languages, 00:51:07.880 |
- What does system programming languages mean? 00:51:16.560 |
that would necessary to write so-called system programs, 00:51:19.360 |
things like text editors or assemblers or compilers 00:51:22.720 |
or operating systems themselves, those kinds of things. 00:51:28.360 |
- Feature rich, they have to be able to do a lot of stuff, 00:51:30.760 |
a lot of memory management, access processes, 00:51:35.640 |
- It's a different flavor of what they're doing. 00:51:37.200 |
They're much more in touch with the actual machine 00:51:42.360 |
That is, you can talk about memory in a more controlled way. 00:51:47.840 |
that the machine supports and the way they're, 00:51:50.720 |
and more ways to structure and organize data. 00:52:02.160 |
C is, I think, the only real survivor of that. 00:52:08.080 |
you get things like object-oriented programming languages 00:52:12.120 |
because as you write programs in a language like C, 00:52:16.560 |
and it's too hard to keep track of the pieces 00:52:21.080 |
or something like that to prevent you from doing bad things. 00:52:29.600 |
I mean, there's also a parallel, slightly parallel track 00:52:38.680 |
There's the Java story, there's the JavaScript, 00:52:41.880 |
there's all the stuff that the cool kids these days 00:52:53.120 |
and C is probably one of the most important languages 00:53:11.320 |
- I think it found a sweet spot of expressiveness, 00:53:47.880 |
it could be used on all those computers that ran Unix, 00:53:53.400 |
and that way Unix, the operating system itself, 00:54:00.680 |
in one of these things where things fed on each other 00:54:05.960 |
- What did it take to write sort of a definitive book, 00:54:11.960 |
like it's more definitive to a particular language 00:54:22.720 |
at least from my perspective, maybe you can correct me, 00:54:27.400 |
of how this language is supposed to be used and applied. 00:54:34.960 |
Did you have those kinds of ambitions in mind 00:54:42.840 |
- So it's an accident of timing, skill, and just luck. 00:54:56.440 |
And at that point, Unix was starting to spread. 00:55:00.040 |
but it would be dozens to hundreds of Unix systems, 00:55:03.320 |
and C was also available on other kinds of computers 00:55:17.720 |
and Bell Labs was really the only source for it, 00:55:31.480 |
So I twisted his arm until he agreed to write a book, 00:55:38.560 |
I guess, of going first is that then other people 00:55:40.840 |
have to follow you if they're gonna do anything. 00:55:51.600 |
and the reference manual in that book is his, period. 00:55:58.760 |
So just crystal clear prose, very, very well expressed. 00:56:13.400 |
But I spent a lot of time trying to find examples 00:56:16.840 |
and that would tell people what they might need to know 00:56:20.160 |
that they should be thinking about needing it. 00:56:50.800 |
So what, and that's a representative example, 00:56:57.080 |
- I think a good example will tell you how to do something 00:57:31.360 |
that are representative of what people want to do 00:57:35.000 |
and spell those out so that they can then take those 00:57:39.400 |
and see the core parts and modify them to their taste. 00:57:44.400 |
And I think that a lot of programming books that, 00:57:54.480 |
They don't give you examples that are both realistic 00:58:09.200 |
into the computer and how we would do something useful 00:58:11.920 |
with them and then how I put them back out again, 00:58:17.180 |
there is something magical of doing something 00:58:25.560 |
but the attempt in all cases was to get something 00:58:31.560 |
or would be very representative of useful things 00:58:37.960 |
But within that vein of fundamentally text processing, 00:58:43.680 |
- So you've also written a book on Go language. 00:58:47.420 |
I have to admit, so I worked at Google for a while 00:58:56.760 |
So Go and Rust are two languages that I hear very, 00:59:01.660 |
spoken very highly of and I wish I would like to, 00:59:06.840 |
There's Julia, there's all these incredible modern languages 00:59:16.280 |
where does Go sit in this broad spectrum of languages? 00:59:19.640 |
And also how do you yourself feel about this wide range 00:59:26.480 |
that you may never even get to try to explore 00:59:31.520 |
- So I think, so Go first comes from that same 00:59:36.520 |
Bell Labs tradition in part, not exclusively, 00:59:39.240 |
but two of the three creators, Ken Thompson and Rob Pike. 00:59:45.560 |
And then with this very, very useful influence 00:59:51.840 |
the Klaus Spirth influence through Robert Griesemer 00:59:55.560 |
who was, I guess, a second generation down student at ETH. 01:00:00.560 |
And so that's an interesting combination of things. 01:00:03.200 |
And so some ways Go captures the good parts of C, 01:00:08.200 |
it looks sort of like C, it's sometimes characterized 01:00:12.940 |
On the surface, it looks very, very much like C. 01:00:17.540 |
But at the same time, it has some interesting 01:00:25.200 |
is particularly useful, and again, I'm not a Go expert. 01:00:31.800 |
about 90% of the work was done by Alan Donovan, 01:00:36.860 |
But Go provides a very nice model of concurrency. 01:00:44.780 |
communicating sequential processes that Tony Hoare 01:00:47.400 |
set forth, geez, I don't know, 40 plus years ago. 01:00:51.340 |
And Go routines are, to my mind, a very natural way 01:00:59.400 |
And in the few experiments I've done with them, 01:01:01.800 |
they're easy to write and typically it's gonna work 01:01:07.240 |
So I think that's one place where Go stands out, 01:01:16.140 |
- Just to comment on that, do you think C foresaw, 01:01:27.700 |
I mean, maybe it was seen, but not at the level 01:01:30.440 |
where it was something you had to do anything about. 01:01:46.200 |
And so what happened instead was that instead 01:01:52.600 |
And that's where that parallel thread stuff comes in. 01:01:55.680 |
- So if you can comment on all the other languages, 01:02:01.040 |
does it break your heart that you'll never get 01:02:18.580 |
And I often give, I have one sort of small example 01:02:23.580 |
that I will write in as many languages as I possibly can. 01:02:27.320 |
I've got it in 20 odd languages at this point. 01:02:30.220 |
And that's so I do a minimal experiment with a language, 01:02:46.420 |
And what pain did I go through to learn how to do it? 01:03:04.000 |
of the programming language is probably the first step. 01:03:06.340 |
Right, so there you're taking the first step. 01:03:08.760 |
- Yeah, and so my experience with some languages 01:03:21.660 |
It just takes in lines of text of varying lengths, 01:03:26.460 |
that have no more than 60 characters on each line. 01:03:28.900 |
So think of it as just kind of the flow of process 01:04:07.980 |
and it took me several days to get it working 01:04:15.940 |
and it's back to what we were just talking about, 01:04:18.280 |
I couldn't find good, consistent documentation on Rust. 01:04:24.180 |
but at the time, everything in the Rust world 01:04:27.900 |
And so you would find what looked like a working example, 01:04:37.540 |
Rust is a language I would like to get back to, 01:04:44.060 |
If you don't have something that is the right combination, 01:04:48.700 |
and yet I have enough disposable time, whatever, 01:04:53.520 |
to make it worth learning a new language at the same time, 01:04:58.140 |
- So what do you think about another language of JavaScript 01:05:02.100 |
that's this, well, let me just sort of comment on this. 01:05:09.780 |
the probably like the ugliest language possible, 01:05:21.620 |
but possibly in the future taking over everything, 01:05:24.000 |
because they've now learned to make it very efficient. 01:05:29.780 |
- Yeah, well, I think you've captured it in a lot of ways. 01:05:40.500 |
It was just not fit for academics to work on. 01:05:54.820 |
it's absolutely a viable solution on back ends, 01:06:00.260 |
Used well, I think it's a pretty good language. 01:06:15.860 |
So I don't know whether it will ever take over the world. 01:06:32.420 |
which JavaScript, and actually most languages, 01:06:36.780 |
such a big part of the experience of programming 01:06:46.060 |
I think that's probably different from the experience 01:06:48.060 |
that we just talked about from Unix and C days 01:06:59.460 |
- Yeah, that's a very perceptive kind of question. 01:07:02.860 |
One of the reasons programming was fun in the old days 01:07:06.260 |
was that you were really building it all yourself. 01:07:24.440 |
you have to typically download a boatload of other stuff 01:07:31.380 |
I've been doing some playing with machine learning 01:07:40.940 |
And down comes another gazillion megabytes of something 01:07:48.060 |
And if it doesn't work, you have no recourse. 01:07:51.300 |
There's absolutely no way you could figure out 01:07:55.220 |
And I think it's worse in the NPM environment 01:08:00.500 |
I think there's less discipline, less control there. 01:08:03.100 |
- And there's aspects of not just not understanding 01:08:09.140 |
So you don't want to run a nuclear power plant 01:08:29.720 |
when people could sort of, the community of it. 01:08:36.800 |
There's the Ruby community, there's the Python community, 01:08:50.000 |
'cause I honestly don't think there is one language 01:08:51.960 |
that will suffice for all the programming needs 01:08:56.880 |
Well, arguably, but I think if you look at the, 01:09:00.000 |
that sort of the distribution of how they are used, 01:09:06.780 |
that probably account for 95% of all programming 01:09:13.600 |
And then there's another, well, 2000 languages 01:09:23.320 |
But I think new languages are a good idea in many respects 01:09:25.920 |
'cause they're often a chance to explore an idea 01:09:36.480 |
For example, they're a particularly good place 01:09:50.160 |
I mean, you just go back as early as recursion Lisp 01:09:57.120 |
and pattern-based languages, and gee, I don't know, 01:10:04.200 |
Lambda's interesting ideas that showed up first 01:10:10.680 |
and then find their way into mainstream languages. 01:10:18.000 |
And so I think the languages in the playground themselves 01:10:25.880 |
but the ideas that come from there are invaluable. 01:10:28.540 |
- So let's go to something that when I found out recently, 01:10:33.880 |
so I've known that you've done a million things, 01:10:39.680 |
and before you interrupt me by minimizing your role in it. 01:10:46.520 |
- Yeah, minimizing functions, right, exactly. 01:10:57.360 |
When I first came to it about 10 years ago or so, 01:11:04.280 |
- Sure, so AMPL is a language for mathematical programming, 01:11:08.200 |
technical term, think of it as linear programming, 01:11:10.760 |
that is setting up systems of linear equations 01:11:14.720 |
that are of some sort of system of constraints, 01:11:20.600 |
that have to be less than this, greater than that, 01:11:22.600 |
or whatever, and you're trying to find a set of values 01:11:25.640 |
for some decision variables that will maximize 01:11:42.560 |
- And it specifies, so there's objective function 01:11:45.240 |
constraints and variables that become separate 01:12:08.800 |
the optimization systems that do the solving. 01:12:12.000 |
Then you can have other people come to the table 01:12:26.800 |
maybe you can comment how you got into that world 01:12:30.160 |
and what is the beautiful or interesting idea 01:12:36.240 |
So I preface it by saying I'm absolutely not an expert 01:12:39.800 |
on this and most of the important work in AMPL 01:12:48.440 |
and in the industrial engineering and management 01:12:54.800 |
who was a numerical analyst and optimization person. 01:13:05.120 |
- Yeah, linear programming is the simplest example of this. 01:13:07.600 |
So linear programming as it's taught in school 01:13:09.700 |
is that you have a big matrix, which is always called A, 01:13:14.880 |
So B is a set of constraints, X is the decision variables, 01:13:18.560 |
and A is how the decision variables are combined 01:13:39.980 |
that matrix A is a very, very, very intricate, 01:13:50.540 |
in a way that is totally unobvious to anybody. 01:13:58.860 |
the original model, which you and I would write, 01:14:01.060 |
you know, we'd write mathematics on the board, 01:14:06.420 |
So you need a language to write those kinds of constraints. 01:14:10.260 |
And Bob Forer for a long time had been interested 01:14:16.500 |
There was a modeling language around called GAMS, 01:14:21.260 |
but it looked very much like Fortran, it was kind of clunky. 01:14:24.660 |
And so Bob spent a sabbatical year at Bell Labs in 1984, 01:14:29.180 |
and he and, he was in the office across from me, 01:14:39.660 |
And he wanted to design a language that would make it 01:14:43.760 |
so that you could take these algebraic specifications, 01:14:51.060 |
and convert them into basically this A matrix, 01:15:00.740 |
And so we talked about the design of the language. 01:15:05.140 |
I don't remember any of the details of this now, 01:15:15.820 |
And I wrote the first version of this AMPL program, 01:15:30.980 |
We wrote, it was, you know, 3,000 lines or something, 01:15:41.740 |
and convert it into something that a solver could work with. 01:15:51.260 |
in the same way that lots of programs do the same thing, 01:16:01.980 |
Like I literally, I remember on stuff I worked, 01:16:07.620 |
that I'm pretty sure never programmed in their life, 01:16:10.780 |
just to understand what the optimization problem is. 01:16:24.300 |
- It's not too bad, because most of the solvers 01:16:26.300 |
have some mechanism that lets them import a model in a form. 01:16:35.020 |
or if you're doing things that are not linear programming, 01:16:39.820 |
that lets you provide things like functions to be called, 01:16:47.140 |
So all Ample does is to generate that kind of thing, 01:16:51.500 |
and then solver deals with all the hard work. 01:16:54.220 |
And then when the solver comes back with numbers, 01:16:57.380 |
Ample converts those back into your original form. 01:17:00.220 |
So you know how much of each thing you should be buying, 01:17:11.900 |
except that we wrote a couple of versions of a book on it. 01:17:14.300 |
- Which is one of the greatest books ever written. 01:17:30.340 |
I remember liking the typography, so I don't know. 01:17:54.940 |
- But it was nevertheless, I'm going by memories. 01:18:23.500 |
- The answer is no, although I'm told that somebody asked 01:18:28.980 |
P would equal NP, and he said either P is zero or N is one. 01:18:35.660 |
This is why Jeff Dean is a lot smarter than I am. 01:18:41.660 |
- I have no intuition, but I've got a lot of colleagues 01:18:45.940 |
who've got intuition, and their betting is no. 01:18:51.180 |
Okay, so what is computational complexity theory, 01:18:55.620 |
and do you think these kinds of complexity classes, 01:18:58.260 |
especially as you've taught in this modern world, 01:19:07.420 |
The last time I touched anything to do with that-- 01:19:18.900 |
- Oh, absolutely, before, I did this in 1968, 01:19:31.660 |
and you just wanna divide the nodes into two piles 01:19:45.940 |
- Well, as it turns out, I worked with Shen Lin 01:19:48.420 |
at Bell Labs on this, and we were never able to come up 01:19:52.140 |
with anything that was guaranteed to give the right answer. 01:19:54.220 |
We came up with heuristics that worked pretty darn well, 01:19:57.940 |
and I peeled off some special cases for my thesis, 01:20:02.260 |
And that was just about the time that Steve Cook 01:20:04.700 |
was showing that there were classes of problems 01:20:28.300 |
in terms of classes, you were just trying to find-- 01:20:31.140 |
- A heuristic that kinda does the job pretty well. 01:20:34.460 |
- You were trying to find something that did the job, 01:20:38.700 |
let's say, a closed form or algorithmic thing 01:20:41.740 |
that would give you a guaranteed right answer. 01:20:44.340 |
I mean, compare graph partitioning to max flow min cut, 01:20:50.180 |
That's the same problem, except there's no constraint 01:20:52.860 |
on the number of nodes on one side or the other of the cut. 01:21:09.260 |
So why did you, is there another alternate universe 01:21:27.300 |
but so you pursued your kind of love of programming. 01:21:49.460 |
When I got here as a grad student at Princeton 01:22:00.940 |
you mentioned during award winner, et cetera, 01:22:13.620 |
And that tended to be things like writing programs 01:22:24.260 |
or a literature survey on artificial intelligence. 01:22:32.220 |
- What was the AI landscape, ideas, dreams at that time? 01:23:05.700 |
boy, we could really do those sorts of things. 01:23:08.880 |
And, you know, I read the Kool-Aid in some sense. 01:23:24.220 |
what people had thought was just a few years down the pike 01:23:36.380 |
We finally do play games like go and chess and so on 01:23:42.500 |
and machine translation is a lot better than it used to be, 01:23:45.100 |
but that's, you know, 50, close to 60 years of progress 01:23:56.580 |
that actually can learn from some of that data. 01:23:58.940 |
- And the infrastructure to support developers 01:24:02.600 |
working together like an open source movement, 01:24:13.780 |
- Well, I guess the lesson is that in the short run, 01:24:24.700 |
and in the long run, you probably shouldn't be too pessimistic. 01:24:28.620 |
It reminds me of this remark from Arthur Clarke, 01:24:36.500 |
"says that something is possible, he's probably right. 01:24:41.160 |
"And if he says it's impossible, he's almost surely wrong." 01:24:48.380 |
So what are your thoughts on this new summer of AI 01:24:52.580 |
now in the work with machine learning and neural networks? 01:24:55.420 |
You've kind of mentioned that you started to try to explore 01:24:57.900 |
and look into this world that seems fundamentally different 01:25:01.420 |
from the world of heuristics and algorithms like search, 01:25:08.980 |
huge amounts of data and learn from that data, right? 01:25:19.800 |
Most of what I know I've learned from my students, 01:25:30.560 |
I mean, games is one where it obviously has had an effect 01:25:40.700 |
I think there are serious problems in certain kinds 01:25:49.180 |
And if the data we give them has something wrong with it, 01:25:52.060 |
then what they learn from it is probably wrong too. 01:25:54.900 |
And the obvious thing is some kind of bias in the data. 01:25:59.140 |
That the data has stuff in it like, I don't know, 01:26:02.340 |
women aren't as good as men at something, okay? 01:26:07.380 |
But if it's in the data because of historical treatment, 01:26:11.480 |
then that machine learning stuff will propagate that. 01:26:17.740 |
- The positive part of that is what machine learning does 01:26:37.440 |
And if it works that way, that would be absolutely great. 01:26:40.000 |
And what I don't know is whether it does work that way 01:26:48.520 |
and amplify things that have been wrong in the past. 01:26:52.640 |
And I don't know, but I think that's a serious thing 01:26:58.740 |
- Let me ask you an out there question, okay? 01:27:01.200 |
I know nobody knows, but what do you think it takes 01:27:03.920 |
to build a system of human level intelligence? 01:27:15.140 |
but really the dream is to create human level 01:27:23.060 |
- I haven't a clue and I don't know, roughly speaking. 01:27:27.040 |
- I was trying to trick you into a hypothesis. 01:27:31.500 |
in his paper on machine intelligence back in, 01:27:34.660 |
geez, I don't know, early '50s or something like that. 01:27:38.300 |
And I don't know whether the Turing test is-- 01:27:45.780 |
whether you can read anything into the conclusions 01:27:58.900 |
And you can speak broadly than just artificial intelligence. 01:28:01.740 |
It's basically computing taking over the world 01:28:09.220 |
this possibility of computing being everywhere? 01:28:16.420 |
I think almost all technologies over the long run 01:28:33.220 |
And AI within it is gonna be one of those as well. 01:28:41.620 |
That the use of things like social media and so on means that 01:28:49.820 |
there's an enormous amount more known about us by people, 01:28:56.940 |
than perhaps one ought to feel comfortable with. 01:29:01.080 |
- So that's an example of a possible negative effect 01:29:09.700 |
It's an interesting one 'cause it could also be a positive 01:29:18.140 |
- So I have a deep interest in human psychology 01:29:22.980 |
and humans seem to be very paranoid about this data thing. 01:29:32.900 |
so it's exciting to me to see what society looks like 01:29:37.460 |
that the concerns about privacy might be flipped 01:29:39.940 |
on their head based purely on human psychology 01:29:52.020 |
you talked about programming languages in their design, 01:30:17.420 |
- Well, the frivolous answer is no exponential 01:30:27.740 |
So if it goes on long enough, that might be all we need. 01:30:34.140 |
we've seen places where Moore's law has changed. 01:30:45.700 |
the ability to put more things in a given area 01:30:48.060 |
to go horizontally instead of vertically as it were. 01:31:07.780 |
I don't know, I just said that if I say it won't, 01:31:12.540 |
- So I just talked to Jim Keller and he says, 01:31:18.500 |
for a long, long time because you mentioned the atom. 01:31:21.780 |
We actually have, I think a thousand fold increase, 01:31:36.420 |
which is an interesting, optimistic viewpoint. 01:31:40.660 |
But how do you think the programming languages 01:31:49.420 |
Do you think there'll be a fundamental change 01:31:51.420 |
in the way programming languages are designed? 01:32:08.220 |
And that more will be done by sort of declarative 01:32:12.700 |
rather than procedural mechanisms where I say, 01:32:24.260 |
domain of specialized languages for narrow domains, 01:32:31.860 |
And so I don't have to say so much in so much detail, 01:32:35.660 |
some collection of software, let's call it languages 01:32:41.340 |
we'll figure out how to do what I want to do. 01:32:44.820 |
- Interesting, so increased levels of abstraction. 01:32:59.740 |
that introduces computing and programming to non-majors. 01:33:03.280 |
Just from that experience, what advice do you have 01:33:07.740 |
for people who don't know anything about programming 01:33:12.940 |
where programming seems to become more and more 01:33:31.260 |
but I think everybody should at least understand 01:33:32.980 |
sort of what it is so that if you say to somebody, 01:33:35.660 |
I'm a programmer, they have a notion of what that might be, 01:33:40.140 |
or this was decided by a computer running a program, 01:33:43.560 |
that they have some vague intuitive understanding 01:33:47.580 |
and accurate understanding of what that might imply. 01:33:55.180 |
which is very definitely for non-technical people, 01:33:59.340 |
or English major, try and explain how computers work, 01:34:03.700 |
how they do their thing, what programming is, 01:34:11.400 |
and what do they do when they're talking to each other. 01:34:24.180 |
but at least they've got a somewhat better idea 01:34:27.140 |
of what all this stuff is about, not just the programming, 01:34:29.580 |
but the technology behind computers and communications. 01:34:32.620 |
- Do they try and write a program themselves? 01:34:45.220 |
that has a very small repertoire, a dozen instructions, 01:34:47.800 |
and they write trivial assembly language programs for that. 01:34:51.900 |
- Wow, so can you, just, if you were to give a flavor 01:34:55.060 |
to people of the programming world, of the computing world, 01:35:04.300 |
at the lowest level of what the program is really doing? 01:35:15.580 |
So the idea that computers have a fairly small repertoire 01:35:19.380 |
of very simple instructions that they can do, 01:35:42.340 |
and less dependent on particular architectures. 01:35:44.940 |
And then we talk about a lot of the different kinds 01:35:50.620 |
that they don't probably realize are programs, 01:35:52.740 |
like they're running Mac OS on their computers 01:35:57.620 |
or maybe Windows, and they're downloading apps 01:36:00.220 |
on their phones, and all of those things are programs 01:36:08.140 |
- Yeah, it's easy to forget that they're actual programs 01:36:17.660 |
I'm expecting them to make an enormous conceptual leap 01:36:20.580 |
from their five or 10-line toy assembly language thing 01:36:28.260 |
that is a browser on their phone or whatever, 01:36:33.460 |
- So if you look in broad strokes at history, 01:36:39.740 |
how do you think the world changed because of computers? 01:36:48.020 |
if there's something you've noticed over the years 01:36:54.540 |
the students are more distracted looking at their, 01:37:06.460 |
both locally and far away, and when I was the age 01:37:11.300 |
of those kids, making a phone call to somewhere 01:37:14.160 |
was a big deal because it cost serious money, 01:37:29.500 |
People think nothing of having correspondence, 01:37:34.100 |
regular meetings, video, whatever, with friends 01:37:37.460 |
or family or whatever in any other part of the world, 01:37:43.060 |
And so that's just the communication aspect of it. 01:37:47.100 |
- Do you think that brings us closer together, 01:37:55.940 |
from the closeness of human-to-human contact? 01:37:59.140 |
- I think it depends a lot on all kinds of things. 01:38:02.820 |
So I trade mail with my brother and sister in Canada 01:38:05.860 |
much more often than I used to talk to them on the phone. 01:38:14.420 |
whereas 20 years ago, I probably wouldn't have talked 01:38:25.020 |
I watch the kids on campus, and they're mostly walking 01:38:29.820 |
around with their heads down, fooling with their phones 01:38:34.900 |
I don't know that that has brought them closer together 01:38:40.500 |
There's sociological research that says people are, 01:38:43.740 |
in fact, not as close together as they used to be. 01:38:59.140 |
nobody can predict the future, but are you excited 01:39:02.100 |
and I kind of touched this a little bit with AI, 01:39:04.820 |
but are you excited by the future in the next 10, 20 years 01:39:11.580 |
You were there when there was no computers, really, 01:39:15.900 |
and now computers are everywhere, all over the world, 01:39:23.100 |
almost every person in the world has a device. 01:39:25.580 |
So are you hopeful, optimistic about that future? 01:39:32.420 |
I mean, I think there are some things about that 01:39:40.940 |
And at the same time, at least in the short run, 01:39:50.360 |
and it's an enormous amount more us and them, 01:39:53.180 |
and people are using computers in all kinds of ways 01:39:58.820 |
about what's going on, and that is affecting politics 01:40:01.860 |
locally and, I think, everywhere in the world. 01:40:04.220 |
- Yeah, the long-term effect on political systems 01:40:14.440 |
- People now have a voice, which is a powerful thing. 01:40:24.100 |
and the chaos that emerges from that is fascinating to watch. 01:40:29.180 |
- If you can go back and relive a moment in your life, 01:40:33.700 |
one that made you truly happy outside of family, 01:40:40.060 |
is there a moment or moments that jump out at you 01:40:48.040 |
I think there were lots and lots and lots of good times 01:40:50.340 |
at Bell Labs where you would build something, 01:41:10.460 |
low-hanging fruit and interesting things to work on, 01:41:16.140 |
we were all together in this, and if you did something, 01:41:32.700 |
- And all your stupid mistakes are right there 01:41:39.140 |
but it's beautiful 'cause it does have a positive impact 01:41:53.780 |
- Thank you for listening to this conversation 01:41:55.380 |
with Brian Kernighan, and thank you to our sponsors, 01:42:16.800 |
It really is the best way to support this podcast 01:42:21.180 |
It's how they know I sent you and increases the chance 01:42:24.740 |
that they'll actually support this podcast in the future. 01:42:27.700 |
If you enjoy this thing, subscribe on YouTube, 01:42:32.660 |
support it on Patreon, or connect with me on Twitter 01:42:35.980 |
at Lex Friedman, spelled somehow, miraculously, 01:42:56.200 |
Thank you for listening and hope to see you next time.