back to indexBrian Kernighan: UNIX, C, AWK, AMPL, and Go Programming | Lex Fridman Podcast #109
link |
The following is a conversation with Brian Kernigan, a professor of computer science at Princeton University.
link |
He was a key figure in the computer science community in the early Unix days alongside Unix creators Ken Thompson and Dennis Ritchie.
link |
He coauthored the C programming language with Dennis Ritchie, the creator of C,
link |
and has written a lot of books on programming, computers, and life,
link |
including the practice of programming, the goal programming language, and his latest Unix history and a memoir.
link |
He co created AUK, the text processing language used by Linux folks like myself.
link |
He co designed Ample, an algebraic modeling language that I personally love and have used a lot in my life for large scale optimization.
link |
I think I can keep going for a long time with this creations and accomplishments,
link |
which is funny because given all that, he's one of the most humble and kind people I've spoken to on this podcast.
link |
Quick summary of the ads, two new sponsors, the amazing self cooling 8 sleep mattress and Raycon earbuds.
link |
Please consider supporting the podcast by going to 8sleep.com slash lex and going to buy a raycon.com slash lex.
link |
Click the links by the stuff.
link |
It really is the best way to support this podcast and the journey I'm on.
link |
If you enjoy this thing, subscribe on YouTube, review it with 5,000 Apple podcasts,
link |
support it on Patreon, or connect with me on Twitter at Lex Freedman.
link |
As usual, I'll do a few minutes of ads now and never any ads in the middle that can break the flow of the conversation.
link |
This show is sponsored by 8sleep and it's incredible pod pro mattress that you can check out at 8sleep.com slash lex to get $200 off.
link |
The mattress controls temperature with an app and can cool down to as low as 55 degrees.
link |
Research shows the temperature has a big impact on the quality of our sleep and it totally has been a game changer for me.
link |
The pod pro is packed with sensors that track heart rate, heart rate variability and respiratory rate showing it all on their app once you wake up.
link |
Plus, if you have a partner, you can control the temperature of each side of the bed.
link |
I don't happen to have one, but the 8sleep app reminds me that I should probably get on that.
link |
So ladies, if a temperature controlled mattress isn't a good reason to apply, I don't know what is.
link |
The app's health metrics are amazing, but the cooling alone is honestly worth the money.
link |
As some of you know, I don't always sleep, but when I do, I choose the 8sleep pod pro mattress.
link |
Check it out at 8sleep.com slash lex to get $200 off.
link |
This show is also sponsored by Raycon earbuds.
link |
Get them at buyraycon.com slash lex.
link |
They've quickly become my main method of listening to podcasts, audio books and music.
link |
When I run, do the pushups and pull ups that I've begun to hate at this point or just living life.
link |
In fact, I often listen to brown noise with these when I'm thinking deeply about something.
link |
It helps me focus the mind.
link |
They're super comfortable, pair easily, great sound, great bass, six hours of playtime.
link |
In fact, for fun, I have one of the earbuds in now and I'm listening to Europa by Santana,
link |
probably one of my favorite guitar songs.
link |
It kind of makes me feel like I'm in a music video.
link |
So they told me to say that a bunch of celebrities use these like Snoop Dogg, Melissa Etheridge and Cardi B.
link |
I don't even know who Cardi B is, but her earbud game is on point.
link |
To mention celebrities actually care about, I'm sure if Richard Feynman was still with us,
link |
he'd be listening to Joe Rogan's experience with Raycon earbuds.
link |
Get them at buyraycon.com slash lex.
link |
It's how they know I sent you and increases the chance that he'll support this podcast in the future.
link |
So for all of the sponsors, click all of the links.
link |
It really helps this podcast.
link |
And now here's my conversation with Brian Kernigan.
link |
UNIX started being developed 50 years ago.
link |
It'd be more than 50 years ago.
link |
Can you tell the story like you described in your new book of how UNIX was created?
link |
If I can remember that far back, it was some while ago.
link |
So I think the gist of it is that at Bell Labs in 1969, there were a group of people who had just finished
link |
working on the Multix project, which was itself a follow on to CTSS.
link |
So we can go back sort of an infinite regress in time.
link |
But the CTSS was a very, very, very nice time sharing system.
link |
It was very nice to use.
link |
I actually used it as that summer I spent in Cambridge in 1966.
link |
What was the hardware there?
link |
So what's the operating system?
link |
What's the hardware there?
link |
What's the CTSS look like?
link |
So CTSS looked like kind of like a standard time sharing system.
link |
Certainly at the time, it was the only time sharing of note.
link |
Let's go back to the basic.
link |
What's the time sharing system?
link |
Okay, in the beginning was the word and the word.
link |
And then there was time sharing systems.
link |
If we go back into, let's call it the 1950s and early 1960s, most computing was done on very big computers,
link |
physically big, although not terribly powerful by today's standards that were maintained in very large rooms.
link |
And you use things like punch cards to write your programs on, talk to them.
link |
So you would take a deck of cards, write your program on it, send it over a counter,
link |
hand it to an operator and some while later back would come something that said,
link |
oh, you made a mistake and then you'd recycle.
link |
And so it was very, very slow.
link |
So the idea of time sharing was that you take basically that same computer,
link |
but connect to it with something that looked like an electric typewriter.
link |
That could be a long distance away.
link |
It could be closed.
link |
But fundamentally what the operating system did was to give each person who was connected to it
link |
and wanting to do something a small slice of time to do a particular job.
link |
So I might be editing a file.
link |
So I would be typing and every time I hit a keystroke,
link |
the operating system would wake up and said, oh, he typed a character.
link |
Let me remember that.
link |
Then it'd go back to doing something else.
link |
So it'd be going around and around a group of people who were trying to get something done,
link |
giving each a small slice of time and giving them each the illusion that they pretty much had the whole machine to themselves.
link |
Enhanced time sharing.
link |
That is sharing the computing time resource of the computer among a number of people who were doing it.
link |
Without the individual people being aware that there's others in a sense.
link |
The illusion, the feelings that you had, the machine is your own.
link |
Pretty much that was the idea.
link |
Yes, you had, if it were well done and if it were fast enough and other people weren't doing too much,
link |
you did have the illusion that you had the whole machine to yourself
link |
and it was very much better than the punch card model.
link |
And so CTSS, the compatible time sharing system, was I think arguably the first of these.
link |
It was done, I guess, technically in 64 or something like that.
link |
It ran on an IBM 7094, slightly modified to have twice as much memory as the norm.
link |
It had two banks of 32K words instead of one.
link |
Each word was 36 bits.
link |
So call it, you know, about 150 kilobytes times two.
link |
So by today's standards, that's down in the noise.
link |
But at the time, that was a lot of memory and memory was expensive.
link |
So CTSS was just a wonderful environment to work on.
link |
It was done by the people at MIT, led by Fernando Corbettove, Corby, who died just earlier this year,
link |
and a bunch of other folks.
link |
And then so I spent the summer of 66 working on that, had a great time,
link |
met a lot of really nice people, and indirectly knew of people at Bell Labs,
link |
who were also working on a follow on to CTSS that was called Multix.
link |
So Multix was meant to be the system that would do everything that CTSS did,
link |
but do it better for a larger population, all the usual stuff.
link |
Now, the actual time sharing, the scheduling, what's the algorithm that performs the scheduling?
link |
What's that look like?
link |
How much magic is there?
link |
What are the metrics?
link |
How does it all work in the beginning?
link |
So the answer is I don't have a clue.
link |
I think the basic idea was nothing more than who all wants to get something done.
link |
Suppose that things are very quiet in the middle of the night, then I get all the time that I want.
link |
Suppose that you and I are contending at high noon for something like that.
link |
Then probably the simplest algorithm is around Robin one that gives you a bit of time,
link |
gives me a bit of time, and then we could adapt to that.
link |
Like, what are you trying to do?
link |
Are you text editing or are you compiling or something?
link |
And we might adjust the scheduler according to things like that.
link |
So Multix was trying to just do some of the, clean it up a little bit.
link |
Well, it was meant to be much more than that.
link |
So Multix was the multiplexed information and computing service,
link |
and it was meant to be a very large thing that would provide computing utility,
link |
something that where you could actually think of it as just a plug in the wall service,
link |
sort of like cloud computing today.
link |
But 50 odd years earlier.
link |
And so what Multix offered was a richer operating system environment,
link |
piece of hardware that was better designed for doing the kind of sharing of resources,
link |
and presumably lots of other things.
link |
Do you think people at that time had the dream of what cloud computing is starting to become now,
link |
which is computing is everywhere that you can just plug in almost, you know,
link |
and you never know how the magic works.
link |
You just kind of plug in at your little computation that you need to perform and it does it.
link |
Was that the dream?
link |
I don't know where that was the dream.
link |
I wasn't part of it at that point.
link |
I remember I was an intern for summer, but my sense is given that it was over 50 years ago.
link |
Yeah, they had that idea that it was an information utility,
link |
that it was something where if you had a computing task to do, you could just go into it.
link |
Now, I'm betting that they didn't have the same view of computing for the masses, let's call it,
link |
the idea that, you know, your grandmother would be shopping on Amazon.
link |
I don't think that was part of it.
link |
But if your grandmother were a programmer, it might be very easy for her to go and use this kind of utility.
link |
What was your dream of computers at that time?
link |
What did you see as the future of computers?
link |
Because you have predicted what computers are today, in a sense.
link |
Oh, short answer, absolutely not.
link |
I'm not sure I had a dream.
link |
It was a dream job in the sense that I really enjoyed what I was doing.
link |
I was surrounded by really, really nice people.
link |
Cambridge is a very fine city to live in in the summer, less so in the winter when it snows.
link |
But in the summer, it was a delightful time.
link |
And so I really enjoyed all of that stuff and I learned things.
link |
And I think the good fortune of being there for summer led me then to get a summer job at Bell Labs the following summer.
link |
And that was quite useful for the future.
link |
So this Bell Labs is this magical, legendary place.
link |
So first of all, where is Bell Labs?
link |
And can you start talking about that journey towards Unix at Bell Labs?
link |
Yeah, so Bell Labs is physically scattered around at the time, scattered around New Jersey.
link |
The primary location was in a town called Murray Hill, where a location called Murray Hill is actually that across the boundary between two small towns in New Jersey called New Providence and Berkeley Heights.
link |
Think of it as about 15, 20 miles straight west of New York City and therefore about an hour north of here in Princeton.
link |
And at that time, it had make up a number of 3,000, 4,000 people there, many of whom had PhDs and mostly doing physical sciences, chemistry,
link |
physics, materials, kinds of things, but very strong math.
link |
And it rapidly growing interest in computing as people realized you could do things with computers that you might not have been able to do before.
link |
You could replace labs with computers that had worked on models of what was going on.
link |
So that was the essence of Bell Labs.
link |
And again, I wasn't a permanent employee there.
link |
That was another internship.
link |
I got lucky in internships.
link |
I mean, if you could just linger on it a little bit.
link |
What was the, what was in the air there?
link |
Because some of this, the number of Nobel prizes, the number of touring awards and just legendary computer scientists that come from their inventions,
link |
including developments, including UNIX, it's just unbelievable.
link |
So was there something special about that place?
link |
Oh, I think there was very definitely something special.
link |
I mentioned the number of people, so very large number of people, very highly skilled.
link |
And working in an environment where there was always something interesting to work on because the goal of Bell Labs,
link |
which was a small part of AT&T, which provided basically the country's phone service.
link |
The goal of AT&T was to provide service for everybody.
link |
And the goal of Bell Labs was to try and make that service keep getting better.
link |
So improving service.
link |
And that meant doing research on a lot of different things,
link |
physical devices like the transistor or fiber optical cables or microwave systems.
link |
All of these things the labs worked on.
link |
And it was kind of just the beginning of real boom times in computing as well.
link |
Because when I was there, I went there first in 66.
link |
So computing was at that point fairly young.
link |
And so people were discovering that you could do lots of things with computers.
link |
So how's UNIX born?
link |
So in spite of having an enormous number of really good ideas,
link |
lots of good people working on it fundamentally didn't live up at least in the short run.
link |
And I think ultimately really ever to its goal of being this information utility.
link |
It was too expensive and certainly what was promised was delivered much too late.
link |
And so in roughly the beginning of 1969, Bell Labs pulled out of the project.
link |
The project at that point had included MIT, Bell Labs and General Electric.
link |
General Electric made computers.
link |
So General Electric was the hardware operation.
link |
So Bell Labs realizing this wasn't going anywhere on a timescale they cared about pulled out of the project.
link |
And this left several people with an acquired taste for really, really nice computing environments,
link |
but no computing environment.
link |
And so they started thinking about what could you do if you're going to design a new operating system
link |
that would provide the same kind of comfortable computing as CTSS had,
link |
but also the facilities of something like Multics sort of brought forward.
link |
And so they did a lot of paper design stuff.
link |
And at the same time, Ken Thompson found what is characterized as a little used PDP 7
link |
where he started to do experiments with file systems, just how do you store information on a computer in a deficient way.
link |
And then this famous story that his wife went away to California for three weeks taking their one year old son
link |
and three weeks and he sat down and wrote an operating system, which ultimately became Unix.
link |
So software productivity is good in those days.
link |
So PDP, what's a PDP 7?
link |
So it's a piece of hardware.
link |
Yeah, it's a piece of hardware. It was one of early machines made by Digital Equipment Corporation, DEC.
link |
And it was a mini computer, so called it had, I would have to look up the numbers exactly,
link |
but it had a very small amount of memory, maybe 16k, 16 bit words or something like that, relatively slow.
link |
Probably not super expensive.
link |
Maybe again, making this up, I'd have to look it up $100,000 or something like that,
link |
which is not super expensive in those days, right?
link |
It was expensive. It was enough that you and I probably wouldn't be able to buy one,
link |
but a modest group of people could get together.
link |
But in any case, it came out, if I recall, in 1964.
link |
So by 1969, it was getting a little obsolete, and that's why it was little used.
link |
If you can sort of comment, what do you think it's like to write an operating system like that?
link |
So that process that Ken went through in three weeks,
link |
because you were, I mean, you're part of that process.
link |
You contributed a lot to UNIX's early development.
link |
So what do you think it takes to do that first step, that first kind of from design to reality on the PDP?
link |
Well, let me correct one thing. I had nothing to do with it.
link |
So I did not write it. I have never written operating system code.
link |
And so I don't know now an operating system is simply code. And this first one wasn't very big,
link |
but it's something that lets you run processes of some, let you execute some kind of code that has been written.
link |
It lets you store information for periods of time so that it doesn't go away when you turn the power off or reboot or something like that.
link |
And there's a kind of a core set of tools that are technically not part of an operating system,
link |
but you probably need them. In this case, Ken wrote an assembler for the PDP 7 that worked.
link |
He did a text editor so that he could actually create text.
link |
He had the file system stuff that he had been working on.
link |
And then the rest of it was just a way to load things,
link |
executable code from the file system into the memory, give it control,
link |
and then recover control when it was finished or in some other way quit.
link |
What was the code written in the primarily the programming language? Was it in assembly?
link |
Yeah, PDP 7 assembler that Ken created.
link |
These things were assembly language until probably the call it 1973 or 74, something like that.
link |
Forgive me if it's a dumb question, but it feels like a daunting task to write any kind of complex system in assembly.
link |
It feels like impossible to do any kind of what we think of as software engineering with assembly,
link |
to work on a big picture.
link |
I think it's hard. It's been a long time since I wrote assembly language.
link |
It is absolutely true that in assembly language, if you make a mistake, nobody tells you.
link |
There are no training wheels whatsoever. And so stuff doesn't work. Now what?
link |
There's no debuggers.
link |
Well, there could be debuggers, but that's the same problem, right?
link |
How do you actually get something that will help you debug it?
link |
So part of it is an ability to see the big picture.
link |
Now, these systems were not big in the sense that today's pictures are.
link |
So the big picture was, in some sense, more manageable.
link |
I mean, then realistically, there's an enormous variation in the capabilities of programmers.
link |
And Ken Thompson, who did that first one, is kind of the singularity in my experience of programmers with no disrespect to you or even to me.
link |
Several leagues removed.
link |
I know there's levels. It's a fascinating thing that there are unique stars in particular in the programming space and in a particular time.
link |
You know, the time matters to the timing of when that person comes along.
link |
And a wife does have to leave.
link |
There's this weird timing that happens that in an all of a sudden something beautiful is created.
link |
I mean, how does it make you feel that there's a system that was created in three weeks?
link |
Or maybe you can even say on a whim, but not really.
link |
But of course, quickly, that is now, you could think of most of the computers in the world run on a UNIX like system.
link |
How do you, like, if you kind of zoom from the alien perspective, if you're just observing Earth,
link |
that all of a sudden these computers took over the world and they started from this little initial seed of UNIX?
link |
How does that make you feel?
link |
It's quite surprising. And you asked earlier about prediction.
link |
The answer is no. There's no way you could predict that kind of evolution.
link |
And I don't know whether it was inevitable or just a whole sequence of blind luck.
link |
I suspect more of the latter.
link |
And so I look at it and think, gee, that's kind of neat.
link |
I think the real question is what does Ken think about that?
link |
Because he's the guy arguably from whom it really came.
link |
You know, tremendous contributions from Dennis Ritchie and then others around in that Bell Labs environment.
link |
But, you know, if you had to pick a single person, that would be Ken.
link |
So you've written a new book, UNIX, A History and a Memoir.
link |
Are there some memorable human stories, funny or profound from that time that just kind of stand out?
link |
Oh, there's a lot of them, in a sense.
link |
And again, it's a question of can you resurrect them in real time way as memory fails?
link |
But I think part of it was that Bell Labs at the time was a very special kind of place to work
link |
because there were a lot of interesting people and the environment was very, very open and free.
link |
It was a very cooperative environment, very friendly environment.
link |
And so if you had an interesting problem, you go and talk to somebody and they might help you with the solution.
link |
And it was kind of a fun environment, too, in which people did strange things
link |
and often tweaking the bureaucracy in one way or another.
link |
So rebellious in certain kinds of ways.
link |
In some ways, yeah, absolutely.
link |
I think most people didn't take too kindly to the bureaucracy.
link |
And I'm sure the bureaucracy put up with an enormous amount that they didn't really want to.
link |
So maybe to linger on it a little bit.
link |
Do you have a sense of what the philosophy that characterizes UNIX is?
link |
The design, not just the initial, but just carry through the years.
link |
Just being there, being around it.
link |
What's the fundamental philosophy behind the system?
link |
I think one aspect of fundamental philosophy was to provide an environment that made it easy to write
link |
or easier productive to write programs.
link |
So it was meant as a programmer environment.
link |
It wasn't meant specifically as something to do some other kind of job.
link |
For example, it was used extensively for word processing, but it wasn't designed as a word processing system.
link |
It was used extensively for lab control, but it wasn't designed for that.
link |
It was used extensively as a front end for big other systems, big dumb systems.
link |
But it wasn't designed for that.
link |
It was meant to be an environment where it was really easy to write programs.
link |
So the programmers could be highly productive.
link |
And part of that was to be a community.
link |
And there's some observation from Dennis Ritchie.
link |
I think at the end of the book, it says that from his standpoint, the real goal was to create a community
link |
where people could work as programmers on a system.
link |
And I think in that sense, certainly for many, many years, it succeeded quite well at that.
link |
And part of that is the technical aspects of because it made it really easy to write programs.
link |
People did write interesting programs.
link |
Those programs tended to be used by other programmers, and so it was kind of a virtuous circle of more and more stuff coming out
link |
that was really good for programmers.
link |
And you were part of that community of programmers.
link |
So what was it like writing programs on that early Unix?
link |
You know, I like to program.
link |
I'm not a terribly good programmer, but it was a lot of fun to write code.
link |
And in the early days, there was an enormous amount of what you would today, I suppose, call low hanging fruit.
link |
People hadn't done things before.
link |
And this was this new environment and the whole combination of nice tools and very responsive system.
link |
And tremendous colleagues made it possible to write code.
link |
You could have an idea in the morning.
link |
You could do an experiment with it.
link |
You could have something limping along that night or the next day and people would react to it.
link |
And they would say, oh, that's wonderful, but you're really screwed up here.
link |
And the feedback loop was then very, very short and tight.
link |
And so a lot of things got developed fairly quickly that in many cases still exist today.
link |
And I think that was part of what made it fun because programming itself is fun.
link |
It's puzzle solving in a variety of ways.
link |
But I think it's even more fun when you do something that somebody else then uses.
link |
Even if they whine about it not working, the fact that they used it is part of the reward mechanism.
link |
And what was the method of interaction, the communication when you do that feedback loop?
link |
I mean, this is before the internet.
link |
Certainly before the internet.
link |
It was mostly physical right there.
link |
You know, somebody would come into your office and say something.
link |
So these places are all close, but like offices are nearby.
link |
So you're really lively into interaction.
link |
Yeah, yeah, Bell Labs was fundamentally one giant building and most of the people were involved
link |
in this unique stuff were in two or three quarters and there was a room.
link |
Oh, how big was it?
link |
Probably call it 50 feet by 50 feet, make up a number of that which had some access
link |
to computers there as well as in offices and people hung out there and it had a coffee machine.
link |
And so there was a, it was mostly very physical.
link |
We did use email, of course, and, but it was fundamentally all for a long time, all on one machine.
link |
So there was no need for internet.
link |
It's fascinating to think about what computing would be today without Bell Labs.
link |
It seems so many people being in the vicinity of each other.
link |
It's sort of getting that quick feedback working together.
link |
There's so many brilliant people.
link |
I don't know where else that could have existed in the world and been given how that came together.
link |
How does that make you feel that little element of history?
link |
Well, I think that's very nice, but in a sense it's survivor bias and if it hadn't happened
link |
at Bell Labs, there were other places that were doing really interesting work as well.
link |
Xerox Park is perhaps the most obvious one.
link |
Xerox Park contributed an enormous amount of good material and many of the things we
link |
take for granted today in the same way came from Xerox Park experience.
link |
I don't think they capitalized in the long run as much.
link |
Their parent company was perhaps not as lucky in capitalizing on this.
link |
But that would, that's certainly another place where there was a tremendous amount of influence.
link |
There were a lot of good university activities.
link |
MIT was obviously no slouch in this kind of thing and others as well.
link |
So UNIX turned out to be open source because of the various ways that AT&T operated and
link |
sort of had to, the focus was on telephones.
link |
I think that's a mischaracterization in a sense.
link |
It absolutely was not open source.
link |
It was very definitely proprietary licensed, but it was licensed freely to universities
link |
in source code form for many years.
link |
And because of that, generations of university students and their faculty people grew up
link |
knowing about UNIX and that there was enough expertise in the community that it then became
link |
possible for people to kind of go off in their own direction and build something that looked
link |
The Berkeley version of UNIX started with that licensed code and gradually picked up
link |
enough of its own code contributions, notably from people like Bill Joy, that eventually
link |
it was able to become completely free of any AT&T code.
link |
In other words, an enormous amount of legal jockeying around this in the late early to
link |
late 80s, early 90s, something like that.
link |
And then not some, I guess the open source movement might have started when Richard Stallman
link |
started to think about this in the late 80s and by 1991, when Torvalds decided he was
link |
going to do a UNIX like operating system, there was enough expertise that in the community
link |
that first he had a target.
link |
He could see what to do because the kind of the UNIX system call interface and the tools
link |
and so on were there.
link |
And so he was able to build an operating system that at this point, when you say UNIX in many
link |
cases, what you're really thinking is Linux.
link |
But it's funny that from my distant perception, I felt that UNIX was open source without actually
link |
knowing it, but what you're really saying, it was just freely licensed.
link |
It was freely licensed.
link |
So it felt open source because universities are not trying to make money.
link |
So it felt open source in the sense that you can get access if you wanted.
link |
And a very, very, very large number of universities had the license and they were able to talk
link |
to all the other universities who had the license.
link |
And so technically not open, technically belonging to AT&T pragmatically, pretty open.
link |
And so there's a ripple effect that all the faculty and the students then all grew up
link |
and then they went throughout the world and permeated in that kind of way.
link |
So what kind of features do you think make for a good operating system?
link |
If you take the lessons of UNIX, you said make it easy for programmers.
link |
That seems to be an important one.
link |
But also UNIX turned out to be exceptionally robust and efficient.
link |
So is that an accident when you focus on the programmer or is that a natural outcome?
link |
I think part of the reason for efficiency was that it began on extremely modest hardware.
link |
Very, very, very tiny and so you couldn't get carried away.
link |
You couldn't do a lot of complicated things because you just didn't have the resources,
link |
either processor, speed or memory.
link |
And so that enforced a certain minimality of mechanisms and maybe a search for generalizations
link |
so that you would find one mechanism that's served for a lot of different things rather
link |
than having lots of different special cases.
link |
I think the file system in UNIX is a good example of that file system interface and
link |
its fundamental form is extremely straightforward.
link |
And that means that you can write code very, very effectively for the file system.
link |
And then one of those idea, one of those generalizations is that gee, that file system interface works
link |
for all kinds of other things as well.
link |
And so in particular, the idea of reading and writing to devices is the same as reading
link |
and writing to a disk that has a file system.
link |
And then that gets carried further in other parts of the world, processes become in effect
link |
files in a file system.
link |
And the Plan 9 operating system, which came along, I guess in the late 80s or something
link |
like that, took a lot of those ideas from the original UNIX and tried to push the generalization
link |
even further so that in Plan 9 a lot of different resources are file systems, they all share
link |
So that would be one example where finding the right model of how to do something means
link |
that an awful lot of things become simpler.
link |
And it means therefore that more people can do useful, interesting things with them without
link |
them to think as hard about it.
link |
So you said you're not a very good programmer.
link |
You're the most modest human being.
link |
Okay, but you'll continue saying that.
link |
I understand how this works, but you do radiate a sort of love for programming.
link |
So let me ask, do you think programming is more an art or a science?
link |
Is it creativity or kind of rigor?
link |
I think it's some of each, it's some combination.
link |
Some of the art is figuring out what it is that you really want to do.
link |
What should that program be?
link |
What would make a good program?
link |
And that's some understanding of what the task is, what the people who might use this
link |
And I think that's art in many respects.
link |
The science part is trying to figure out how to do it well.
link |
And some of that is real computer science stuff, like what algorithm should we use at
link |
some point, mostly in the sense of being careful to use algorithms that will actually work
link |
properly, scale properly, avoiding quadratic algorithms when a linear algorithm should
link |
be the right thing, that kind of more formal view of it.
link |
Same thing for data structures.
link |
But also it's, I think, an engineering field as well.
link |
And engineering is not quite the same as science because engineering, you're working with constraints.
link |
You have to figure out not only what is a good algorithm for this kind of thing, but
link |
what's the most appropriate algorithm given the amount of time we have to compute, the
link |
amount of time we have to program, what's likely to happen in the future with maintenance,
link |
who's going to pick this up in the future, all of those kind of things that if you're
link |
an engineer, you get to worry about.
link |
Whereas if you think of yourself as a scientist, well, you can maybe push them over the horizon
link |
And if you're an artist, what's that?
link |
So just on your own personal level, what's your process like of writing a program, say
link |
a small and large sort of tinkering with stuff?
link |
Do you just start coding right away and just kind of evolve iteratively with a loose notion?
link |
Or do you plan on a sheet of paper first and then kind of design in what they teach you
link |
in the kind of software engineering courses and undergrad or something like that?
link |
What's your process like?
link |
It's certainly much more the informal incremental.
link |
First, I don't write big programs at this point.
link |
It's been a long time since I wrote a program that was more than I call it a few hundred
link |
or more lines, something like that.
link |
Many of the programs I write are experiments for either something I'm curious about or
link |
often for something that I want to talk about in a class.
link |
And so those necessarily tend to be relatively small.
link |
A lot of the kind of code I write these days tends to be for sort of exploratory data analysis,
link |
where I've got some collection of data and I want to try and figure out what on earth
link |
is going on in it.
link |
And for that, those programs tend to be very small.
link |
Sometimes you're not even programming, you're just using existing tools like counting things.
link |
Or sometimes you're writing OX scripts because two or three lines will tell you something
link |
about a piece of data and then when it gets bigger, well, then I will probably write something
link |
in Python because that scales better up to call it a few hundred lines or something like
link |
And it's been a long time since I wrote programs that were much more than that.
link |
Speaking of data exploration in OX, first, what is OX?
link |
So OX is a scripting language that was done by myself, L Aho, and Peter Weinberger.
link |
We did that originally in the late 70s.
link |
It was a language that was meant to make it really easy to do quick and dirty tasks like
link |
counting things or selecting interesting information from basically all text files,
link |
rearranging it in some way or summarizing it.
link |
Runs a command on each line or a file.
link |
I mean, it's still exceptionally widely used today.
link |
It's so simple and elegant, the way to explore data turns out you can just write a script
link |
that does something seemingly trivial on a single line and that giving you that slice
link |
of the data somehow reveals something fundamental about the data and that seems to work still.
link |
Yeah, it's very good for that kind of thing.
link |
It's sort of what it was meant for.
link |
I think what we didn't appreciate was that the model was actually quite good for a lot
link |
of data processing kinds of tasks and that it's kept going as long as it has because
link |
at this point it's over 40 years old and it's still, I think, a useful tool and well, this
link |
is paternal interest, I guess, but I think in terms of programming languages, you get
link |
the most bang for the buck by learning OX and it doesn't scale to big programs, but
link |
it does pretty darn well on these little things where you just want to see all the somethings
link |
Yeah, I probably write more OX than anything else at this point.
link |
So what kind of stuff do you love about OX?
link |
If you can comment on things that give you joy when you can, in a simple program, reveal
link |
something about the data, is there something that stands out from particular features?
link |
I think it's mostly the selection of default behaviors that you sort of hinted at at a
link |
What OX does is to read through a set of files and then within each file, it reads through
link |
each of the lines and then on each of the lines, it has a set of patterns that it looks
link |
That's your OX program and if one of the patterns matches, there is a corresponding action that
link |
you might perform and so it's kind of a quadruply nested loop or something like that.
link |
And that's all completely automatic.
link |
You don't have to say anything about it.
link |
You just write the pattern in the action and then run the data by it.
link |
And so that paradigm for programming is a very natural and effective one.
link |
And I think we captured that reasonably well in OX and it does other things for free as
link |
It splits the data into fields so that on each line, there's fields separated by white space
link |
or something and so it does that for free.
link |
You don't have to say anything about it.
link |
And it collects information as it goes along, like what line are we on, how many fields
link |
are there on this line.
link |
So lots of things that just make it so that a program which in another language, let's
link |
say Python would be 5, 10, 20 lines in OX is one or two lines.
link |
So because it's one or two lines, you can do it on the shell.
link |
You don't have to open up another whole thing.
link |
You can just do it right there in the interaction with the operatives directly.
link |
Is there other shell commands that you love over the years like you really enjoy using?
link |
Grapp's the only one.
link |
Yeah, Grapp does everything.
link |
So Grapp is a kind of a, what is it, a simpler version of OX, I would say?
link |
In some sense, yeah, right.
link |
Because what is Grapp?
link |
So Grapp is, it basically searches the input for particular patterns, regular expressions
link |
technically of a certain class.
link |
And it has that same paradigm that OX does, it's a pattern action thing.
link |
It reads through all the files and then all the lines in each file.
link |
But it has a single pattern, which is the regular expression you're looking for, and
link |
a single action printed if it matches.
link |
So in that sense, it's a much simpler version and you could write Grapp in OX as a one liner.
link |
And I use Grapp probably more than anything else at this point, just because it's so convenient
link |
Why do you think, it's such a powerful tool, Grapp and OX.
link |
Why do you think operating systems like Windows, for example, don't have it?
link |
Sort of, you can, of course, I use, which is amazing now.
link |
There's Windows for Linux, like the, which you could basically use all the fun stuff
link |
like Ock and Grapp inside of Windows.
link |
But Windows naturally sort of, as part of the graphical interface, the simplicity of
link |
Grapp, sort of searching through a bunch of files and just popping up naturally.
link |
Why, why don't you think that, why do you think that's unique to the Unix and Linux
link |
It's not strictly unique, but it's certainly focused there.
link |
And I think some of it's the weight of history, that Windows came from MS DOS, MS DOS was
link |
a pretty pathetic operating system, although common on an, you know, unboundedly large
link |
number of machines, but somewhere in roughly the 90s, Windows became a graphical system.
link |
And I think Microsoft spent a lot of their energy on making that graphical interface
link |
And that's a different model of computing.
link |
And it's a model of computing that where you point and click and sort of experiment
link |
with menus, it's a model of computing works right rather well for people who are not programmers.
link |
Just want to get something done, whereas teaching something like the command line to non programmers
link |
turns out to sometimes be an uphill struggle.
link |
And so I think Microsoft probably was right in what they did.
link |
Now you mentioned whistle or whatever it's called the Winix Linux.
link |
I wonder what's pronounced.
link |
WSL is what never actually pronounced the whistle.
link |
But there have been things like that for longest.
link |
Sigwin, for example, which is a wonderful collection of take all your favorite tools
link |
from Winix and Linux and just make them work perfectly on Windows.
link |
And so that's something that's been going on for at least 20 years, if not longer.
link |
And I use that on my one remaining Windows machine routinely because if you're doing
link |
something that is batch computing, suitable for command line, that's the right way to
link |
do it because the Windows equivalents are, if nothing else, not familiar to me.
link |
But I would definitely recommend to people to, if they don't use Sigwin, to try whistle.
link |
I've been so excited that I could use batch, that would be batch, write scripts quickly
link |
It's changed my life.
link |
What's your perfect programming setup?
link |
What operating system?
link |
Perfect is too strong a word.
link |
It's way too strong a word.
link |
What I use by default, I have a, at this point, a 13 inch MacBook Air, which I use because
link |
it's kind of a reasonable balance of the various things I need.
link |
I can carry it around.
link |
It's got enough computing, horsepower, screen's big enough, keyboard's okay.
link |
And so I basically do most of my computing on that.
link |
I have a big iMac in my office that I use from time to time as well, especially when
link |
I need a big screen, but otherwise it tends not to be used that much.
link |
I use mostly SAM, which is an editor that Rob Pike wrote long ago at Bell Labs and.
link |
Did that, sorry to interrupt it.
link |
Does that precede VI?
link |
Does that precede Mac?
link |
It post dates both VI and Emacs.
link |
It is derived from Rob's experience with ED and VI.
link |
That's the original Unix editor.
link |
Dated probably before you were born.
link |
So what's, actually, what's the history of editors?
link |
Can you briefly, because it's such a fact, I use Emacs, I'm sorry to say, sorry to come
link |
But what's the kind of interplay there?
link |
So in ancient times, like call it the first time sharing system is going back to what
link |
we were talking about.
link |
There were editors, there was an editor on CTSS that I don't even remember what it was
link |
It might have been edit, where you could type text, program text, and it would do something
link |
You could save the text.
link |
You could edit it.
link |
The usual thing that you would get in an editor.
link |
And Ken Thompson wrote an editor called QED, which was very, very powerful.
link |
But these were all totally a command based, they were not most or cursor based because
link |
it was before mice and even before cursors, because they were running on terminals that
link |
No CRT type displays, little on the LEDs.
link |
And so then when Unix came along, Ken took QED and stripped it way, way, way, way down.
link |
And that became an editor that he called ED.
link |
And it was very simple, but it was a line oriented editor.
link |
And so you could load a file and then you could talk about the lines one through the
link |
last line and you could print ranges of lines.
link |
You could add text, you could delete text, you could change text, or you could do a substitute
link |
command that would change things within a line or within groups of lines.
link |
So you could work on a part of a file essentially.
link |
You could work on any part of it, the whole thing or whatever, but it was entirely command
link |
line based and it was entirely on paper, okay, paper.
link |
And that meant that you changed, yeah, right, real paper.
link |
And so if you changed the line, you had to print that line using up another line of paper
link |
to see what the change caused, okay.
link |
So when CRT displays came along, then you could start to use cursor control and you
link |
could sort of move where you were on the screen in a...
link |
Without reprinting.
link |
And there were a number of editors there.
link |
The one that I was most familiar with and still use is VI, which was done by Bill Choy.
link |
And so that dates from probably the late 70s as a guess.
link |
And it took a full advantage of the cursor controls.
link |
I suspect that Emacs was roughly at the same time, but I don't know.
link |
I've never internalized Emacs.
link |
So I use, at this point, I stopped using ED, although I still can.
link |
I use VI sometimes and I use SAM when I can.
link |
And SAM is available on most systems?
link |
It was, it is available.
link |
You have to download it yourself from typically the plan line operating system distribution.
link |
It's been maintained by people there.
link |
I'll get home tonight.
link |
It sounds fascinating.
link |
So my love is with Lisp and Emacs have went into that hippie world of...
link |
I think it's a lot of things.
link |
What religion were you brought up with?
link |
Yeah, that's true.
link |
Most of the actual programming I do is CC++ and Python, but my weird sort of, yeah, my
link |
religious upbringing is in Lisp.
link |
So can you take on the impossible task and give a brief history of programming languages
link |
from your perspective?
link |
So I guess you could say programming languages started probably in what, the late 40s or
link |
something like that.
link |
People used to program computers by basically putting in zeros and ones using something
link |
like switches on a console and then, or maybe holes in paper tapes, something like that.
link |
So extremely tedious, awful, whatever.
link |
And so I think the first programming languages were relatively crude assembly languages where
link |
people would basically write a program that would convert mnemonics like add ADD into
link |
whatever the bit pattern was that corresponded to an add instruction and they would do the
link |
clerical work of figuring out where things were so you could put a name on a location
link |
in a program and the assembler would figure out where that corresponded to when the thing
link |
was all put together and dropped into memory.
link |
And then early on, and this would be the late 40s and very early 50s, there were assemblers
link |
written for the various machines that people used.
link |
You may have seen in the paper just a couple of days ago, Tony Berker died.
link |
He did this thing in Manchester called AutoCode, a language which I knew only by name.
link |
But it sounds like it was a flavor of assembly language sort of a little higher in some ways.
link |
And it replaced the language that Alan Turing wrote, which you put in zeros and ones, but
link |
you put them in backwards order because that was a hardware word.
link |
So assembly language is when let's call that the early 1950s.
link |
And so every different flavor of computer has its own assembly language.
link |
So the Ed Sack had its and a Manchester had its and the IBM whatever 7090 or 704 or whatever
link |
had its and so on.
link |
So everybody had their own assembly language.
link |
And assembly languages have a few commands, additions, subtraction and branching of some
link |
kind if then type of situation.
link |
They have exactly in their simplest form at least one instruction per or one assembly
link |
language instruction per instruction in the machine's repertoire.
link |
And so you have to know the machine intimately to be able to write programs in it.
link |
And if you write an assembly language program for one kind of machine and then you say,
link |
I'd like a different machine.
link |
And so what happened in the late fifties was people realized you could play this game
link |
again and you could move up a level in writing or creating languages that were closer to
link |
the way the real people might think about how to write code.
link |
And there were, I guess, arguably three or four at that time period.
link |
There was Fortran, which came from IBM, which was formula translation meant to make it easy
link |
to do scientific and engineering computation.
link |
I just know that formula translation.
link |
That's what it stood for.
link |
There was Kobal, which is the common business oriented language that Grace Hopper and others
link |
worked on, which was aimed at business kinds of tasks.
link |
There was Algol, which was mostly meant to describe algorithmic computations.
link |
I guess you could argue basic was in there somewhere.
link |
I think it's just a little later.
link |
And so all of those moved the level up.
link |
And so they were closer to what you and I might think of as we were trying to write
link |
a program and they were focused on different domains, Fortran for formula translation,
link |
engineering computations, let's say Kobal for business, that kind of thing.
link |
I'm still used to today, at least Fortran probably.
link |
But the deal was that once you moved up that level, then you, let's call it Fortran, you
link |
had a language that was not tied to a particular kind of hardware because a different compiler
link |
would compile for different kind of hardware.
link |
And that meant two things.
link |
It meant you only had to write the program once, which was very important.
link |
And it meant that you could, in fact, if you were a random engineer, physicist, whatever,
link |
you could write that program yourself.
link |
You didn't have to hire a programmer to do it for you.
link |
It might not be as good as you'd get with a real programmer, but it was pretty good.
link |
And so it democratized and made much more broadly available, the ability to write code.
link |
So it puts the power of programming to the hands of people like you.
link |
Anybody who wants, who is willing to invest some time in learning a programming language
link |
and is not then tied to a particular kind of computer.
link |
And then in the seventies, you get system programming languages of which C is the survivor.
link |
And what, what, what does system programming languages mean?
link |
Programs that programming languages that would take on the kinds of things that would necessary
link |
to write so called system programs, things like text editors or assemblers or compilers
link |
or operating systems themselves, those kinds of things.
link |
They have to be feature rich.
link |
They have to be able to do a lot of stuff, a lot of memory management, access processes
link |
and all that kind of stuff.
link |
They have to, it's a different flavor of what they're doing.
link |
They're much more in touch with the actual machine in a, but in a positive way.
link |
That is you can talk about memory in a more controlled way.
link |
You can talk about the different data types that the machine supports and the way they're
link |
and more ways to structure and organize data.
link |
And so the system programming languages, there was a lot of effort in that in the, call it
link |
the late sixties, early seventies.
link |
C is I think the only real survivor of that.
link |
And then what happens after that, you get things like object oriented programming languages
link |
because as you write programs in a language like C, at some point scale gets to, and it's
link |
too hard to keep track of the pieces and there's no guardrails or training wheels or something
link |
like that to prevent you from doing bad things.
link |
So C plus plus comes out of that tradition.
link |
And then it took off from there.
link |
I mean, there's also a parallel, slightly parallel track with a little bit of functional
link |
stuff with Lisbon and so on.
link |
But I guess from that point is just an explosion of languages.
link |
There's the Java story.
link |
There's the JavaScript.
link |
There's all the stuff that the cool kids these days are doing with Rust and all that.
link |
So what's to use here?
link |
You wrote a book, C programming language and C is probably one of the most important languages
link |
in the history of programming languages.
link |
If you kind of look at impact, what do you think is the most elegant or powerful part
link |
Why did it survive?
link |
Why did it have such a long lasting impact?
link |
I think it found a sweet spot that in of expressiveness that you could really write things in a pretty
link |
natural way and efficiency, which was particularly important when computers were not nearly as
link |
powerful as they are today.
link |
You've got to put yourself back 50 years almost in terms of what computers could do.
link |
And that's roughly four or five generations, decades of Moore's law, right?
link |
So expressiveness and efficiency and I don't know, perhaps the environment that it came
link |
with as well, which was Unix.
link |
So it meant if you wrote a program, it could be used on all those computers that ran Unix
link |
and that was all of those computers because they were all written in C and that was Unix,
link |
the operating system itself was portable as were all the tools.
link |
So it all worked together again in one of these things where things fit on each other
link |
in a positive cycle.
link |
What did it take to write sort of a definitive book, probably definitive book on all of
link |
them, like it's more definitive to a particular language than any other book on any other
link |
language and did two really powerful things, which is popularized the language, at least
link |
from my perspective, maybe you can correct me.
link |
And second is created a standard of how this language is supposed to be used and applied.
link |
So what did it take?
link |
Did you have those kinds of ambitions in mind when working on that?
link |
Is this some kind of joke?
link |
No, of course not.
link |
So it's an accident of timing skill and just luck.
link |
A lot of it is, clearly, timing was good.
link |
Now, Dennis and I wrote the book in 1977.
link |
And at that point, Unix was starting to spread.
link |
I don't know how many there were, but it would be dozens to hundreds of Unix systems
link |
and C was also available on other kinds of computers that had nothing to do with Unix.
link |
And so the language had some potential.
link |
And there were no other books on C. And Bell Labs was really the only source for it.
link |
And Dennis, of course, was authoritative because it was his language.
link |
And he had written the reference manual, which is a marvelous example of how to write
link |
a reference manual, really, really, very, very well done.
link |
So I twisted his arm until he agreed to write a book, and then we wrote a book.
link |
And the virtue or advantage, at least, I guess, of going first is that then other people have
link |
to follow you if they're going to do anything.
link |
And I think it worked well because Dennis was a superb writer.
link |
I mean, he really, really did.
link |
And the reference manual in that book is his period.
link |
I had nothing to do with that at all.
link |
So just crystal clear prose and very, very well expressed.
link |
And then he and I, I wrote most of the expository material.
link |
And then he and I sort of did the usual ping ponging back and forth, refining it.
link |
But I spent a lot of time trying to find examples that would sort of hang together and that
link |
would tell people what they might need to know at about the right time that they should
link |
be thinking about needing it.
link |
And I'm not sure it completely succeeded, but it mostly worked out fairly well.
link |
What do you think is the power of example?
link |
I mean, you're the creator, at least one of the first people to do the Hello World
link |
program, which is like the example.
link |
If aliens discover our civilization hundreds of years from now, it'll probably be Hello
link |
World programs just to have broken robot communicating with them with the Hello World.
link |
And that's a representative example.
link |
So what do you find powerful about examples?
link |
I think a good example will tell you how to do something.
link |
And it will be representative of, you might not want to do exactly that, but you will
link |
want to do something that's at least in that same general vein.
link |
And so a lot of the examples in the C book were picked for these very, very simple straightforward
link |
text processing problems that were typical of Unix.
link |
I want to read input and write it out again.
link |
There's a copy command.
link |
I want to read input and do something to it and write it out again.
link |
And so that kind of find things that are representative of what people want to do and spell those
link |
out so that they can then take those and see the core parts and modify them to their taste.
link |
And I think that a lot of programming books that I don't look at programming books a tremendous
link |
amount these days, but when I do, a lot of them don't do that.
link |
They don't give you examples that are both realistic and something you might want to
link |
Some of them are pure syntax.
link |
Here's how you add three numbers.
link |
Well, come on, I could figure that out.
link |
Tell me how I would get those three numbers into the computer and how I would do something
link |
useful with them and then how I put them back out again neatly formatted.
link |
And especially if you follow that example, there's something magical of doing something
link |
that feels useful.
link |
So the attempt, it's absolutely not perfect, but the attempt in all cases was to get something
link |
that was going to be either directly useful or would be very representative of useful
link |
things that a programmer might want to do.
link |
But within that vein of fundamentally text processing, reading text, doing something,
link |
So you've also written a book on Go language.
link |
I have to admit, so I worked at Google for a while and I've never used Go.
link |
Well, you missed something.
link |
Well, I know I missed something for sure.
link |
I mean, so Go and Rust are two languages that I hear very spoken very highly of and I wish
link |
I would like to try.
link |
Well, there's a lot of them.
link |
There's all these incredible modern languages.
link |
But if you can comment before, well, maybe comment on what do you find?
link |
Where does Go sit in this broad spectrum of languages?
link |
And also, how do you yourself feel about this wide range of powerful, interesting languages
link |
that you may never even get to try to explore because of time?
link |
So I think, so Go first comes from that same Bell Labs tradition in part, not exclusively,
link |
but two of the three creators, Ken Thompson and Rob Pike.
link |
So literally the people.
link |
And then with this very, very useful influence from the European school in particular, the
link |
Klaus Speer influence through Robert Griezmer, who was, I guess, a second generation down
link |
And so that's an interesting combination of things.
link |
And so some ways Go captures the good parts of C. It looks sort of like C. It's sometimes
link |
characterized as C for the 21st century.
link |
On the surface, it looks very, very much like C. But at the same time, it has some interesting
link |
data structuring capabilities.
link |
And then I think the part that I would say is particularly useful.
link |
And again, I'm not a Go expert, in spite of coauthoring the book, about 90% of the work
link |
was done by Alan Donovan, my coauthor, who is a Go expert.
link |
But Go provides a very nice model of concurrency.
link |
But basically, the cooperating, communicating sequential processes that Tony Horr set forth,
link |
I don't know, 40 plus years ago.
link |
And Go routines are, to my mind, a very natural way to talk about parallel computation.
link |
And in the few experiments I've done with them, they're easy to write and typically
link |
it's going to work and very efficient as well.
link |
So I think that's one place where Go stands out that that model of parallel computation
link |
is very, very easy and nice to work with.
link |
Just a comment on that.
link |
Do you think C for SAW or the early Unix days for SAW threads and massively parallel computation?
link |
I would guess not really.
link |
I mean, maybe it was seen but not at the level where it was something you had to do anything
link |
For a long time, processors got faster and then processors stopped getting faster because
link |
of things like power consumption and heat generation.
link |
And so what happened instead was that instead of processors getting faster, there started
link |
to be more of them.
link |
And that's where that parallel thread stuff comes in.
link |
So if you can comment on all the other languages, is it break your heart that you'll never
link |
get to explore them or how do you feel about the full variety?
link |
It's not break my heart, but I would love to be able to try more of these languages.
link |
The closest I've come is in class that I often teach in the spring here.
link |
It's a programming class and I often give, I have one sort of small example that I will
link |
write in as many languages as I possibly can.
link |
I've got it in 20 languages at this point.
link |
And that's so I do a minimal experiment with a language just to say, okay, I have this
link |
trivial task which I understand the task and it should, it takes 15 lines in AUK and not
link |
much more in a variety of other languages.
link |
How fast does it run and what pain did I go through to learn how to do it?
link |
And that's a, it's like, anecdata, right?
link |
It's very, very, very narrowly.
link |
Yeah, but still it's a little sample because you get the, I think the hardest step with
link |
the programming language is probably the first step, right?
link |
So there you're taking the first step.
link |
And so my experience with some languages is very positive.
link |
Like Lua, a scripting language I had never used and I took my little program, the program
link |
is a trivial format or it just takes in lines of text of varying lengths and it puts them
link |
out in lines that have no more than 60 characters on each line.
link |
So think of it as just kind of the flow of process in a browser or something.
link |
So it's a very short program and in Lua, I downloaded Lua and in an hour I had it working,
link |
never having written Lua in my life, just going with online documentation.
link |
I did the same thing in Scala, which you can think of as a flavor of Java, equally trivial.
link |
I did it in Haskell.
link |
It took me several weeks, but it did run like a turtle.
link |
And I did it in Fortran 90 and it was painful, but it worked.
link |
And I tried it in Rust and it took me several days to get it working because the model of
link |
memory management was just a little unfamiliar to me.
link |
And the problem I had with Rust, and it's back to what we were just talking about, I
link |
couldn't find good consistent documentation on Rust.
link |
Now this was several years ago and I'm sure things have stabilized, but at the time everything
link |
in the Rust world seemed to be changing rapidly and so you would find what looked like a working
link |
example and it wouldn't work with the version of the language that I had.
link |
So it took longer than it should have.
link |
Rust is a language I would like to get back to, but probably won't.
link |
I think one of the issues, you have to have something you want to do and if you don't
link |
have something that is the right combination of I want to do it and yet I have enough disposable
link |
time, whatever, to make it worth learning a new language at the same time, it's never
link |
So what do you think about another language of JavaScript?
link |
That's this, well let me just sort of comment on what I said, when I was brought up, sort
link |
of JavaScript was seen as probably like the ugliest language possible and yet it's quite
link |
arguably quite possibly taking over and not just the front and the back end of the internet,
link |
but possibly in the future taking over everything because they've now learned to make it very
link |
And so what do you think about this?
link |
Yeah, well I think you've captured it in a lot of ways.
link |
When it first came out, JavaScript was deemed to be fairly irregular in an ugly language
link |
and certainly in the academy, if you said you were working on JavaScript, people would
link |
It was just not fit for academics to work on.
link |
I think a lot of that has evolved, the language itself has evolved and certainly the technology
link |
of compiling it is fantastically better than it was and so in that sense, it's absolutely
link |
a viable solution on back ends as well as the front ends.
link |
Used well, I think it's a pretty good language.
link |
I've written a modest amount of it and I've played with JavaScript translators and things
link |
like that, I'm not a real expert and it's hard to keep up even there with the new things
link |
that come along with it.
link |
So I don't know whether it will ever take over the world, I think not, but it's certainly
link |
an important language and worth knowing more about.
link |
There's maybe to get your comment on something which JavaScript and actually most languages
link |
as a Python, such a big part of the experience of programming with those languages includes
link |
libraries, sort of using building on top of the code that other people have built.
link |
I think that's probably different from the experience that we just talked about from
link |
Unix and CDays when you're building stuff from scratch.
link |
What do you think about this world of essentially leveraging, building up libraries on top of
link |
each other and leveraging them?
link |
That's a very perceptive kind of question.
link |
One of the reasons the programming was fun in the old days was that you were really building
link |
The number of libraries you had to deal with was quite small, maybe it was printf or the
link |
standard library or something like that.
link |
And that is not the case today and if you want to do something in, you mentioned Python
link |
and JavaScript and those are the two finding examples, you have to typically download a
link |
boatload of other stuff and you have no idea what you're getting, absolutely nothing.
link |
I've been doing some playing with machine learning over the last couple of days and gee, something
link |
Well, you pip install this and down comes another gazillion megabytes of something and
link |
you have no idea what it was.
link |
And if you're lucky, it works and if it doesn't work, you have no recourse.
link |
There's absolutely no way you could figure out which in these thousand different packages.
link |
And I think it's worse in the NPM environment for JavaScript.
link |
I think there's less discipline, less control there.
link |
And there's aspects of not just not understanding how it worked, but there's security issues,
link |
there's robustness issues, so you don't want to run a nuclear power plant using JavaScript,
link |
So speaking to the variety of languages, do you think that variety is good or do you
link |
hope think that over time we should converge towards one, two, three programming languages
link |
that you mentioned to the bell out days when people could sort of the community of it.
link |
And the more languages you have, the more you separate the communities.
link |
There's the Ruby community, there's the Python community, there's C++ community.
link |
Do you hope that they'll unite one day to just one or two languages?
link |
I certainly don't hope it.
link |
I'm not sure that that's right, because I honestly don't think there is one language
link |
that will suffice for all the programming needs of the world.
link |
Are there too many at this point?
link |
But I think if you look at the distribution of how they are used, there's something called
link |
a dozen languages that probably account for 95% of all programming at this point, and
link |
that doesn't seem unreasonable.
link |
And then there's another, well, 2,000 languages that are still in use that nobody uses and
link |
or at least don't use in any quantity.
link |
But I think new languages are a good idea in many respects, because they're often a chance
link |
to explore an idea of how a language might help.
link |
I think that's one of the positive things about functional languages.
link |
For example, they're a particularly good place where people have explored ideas that at the
link |
time didn't seem feasible, but ultimately have wound up as part of mainstream languages
link |
They just go back as early as recursion and lisp and then follow forward with functions
link |
as first class citizens and pattern based languages and, gee, I don't know, closures
link |
and just on and on and on lambdas.
link |
Interesting ideas that showed up first in, let's call it broadly, the functional programming
link |
community and then find their way into mainstream languages.
link |
Yeah, it's a playground for rebels.
link |
And so I think the languages in the playground themselves are probably not going to be the
link |
mainstream, at least for some while, but the ideas that come from there are invaluable.
link |
So let's go to something that when I found out recently, so I've known that you've done
link |
a million things, but one of the things I wasn't aware of that you had a role in ample.
link |
Before you interrupt me by minimizing your role in it.
link |
Ample is for minimizing functions.
link |
Yeah, minimizing functions, right, exactly.
link |
Can I just say that the elegance and abstraction power of ample is incredible when I first
link |
came to it about 10 years ago or so.
link |
Can you describe what is the ample language?
link |
So ample is a language for mathematical programming, technical term, think of it as linear programming
link |
that is setting up systems of linear equations that are of some sort of system of constraints.
link |
So that you have a bunch of things that have to be less than this, greater than that, whatever,
link |
and you're trying to find a set of values for some decision variables that will maximize
link |
or minimize some objective function.
link |
So it's a way of solving a particular kind of optimization problem, a very formal sort
link |
of optimization problem.
link |
But one that's exceptionally useful.
link |
And it specifies that there's objective function constraints and variables that become separate
link |
from the data it operates on.
link |
So that kind of separation allows you to put on different hats.
link |
One put the hat of an optimization person and then put another hat of a data person
link |
and dance back and forth and also separate the actual solvers, the optimization systems
link |
that do the solving, that you can have other people come to the table and then build their
link |
solvers, whether it's linear or nonlinear, convex, nonconvex, that kind of stuff.
link |
So what is the, maybe you can comment how you got into that world and what is the beautiful
link |
or interesting idea to you from the world of optimization?
link |
So I preface it by saying I'm absolutely not an expert on this and most of the important
link |
work in Ample comes from my two partners in crime on that, Bob Forer, who was a professor
link |
of and in the industrial engineering and management science department at Northwestern and my
link |
colleague at Bell Labs, Dave Gay, who is a numerical analyst and optimization person.
link |
So the deal is linear programming.
link |
Preface this by saying...
link |
Well, let's stay with linear programming.
link |
Yeah, linear programming is the simplest example of this.
link |
So linear programming is taught in school is that you have a big matrix, which is always
link |
called A and you say AX is less than or equal to B. So B is a set of constraints, X is the
link |
decision variables, and A as to how the decision variables are combined to set up the various
link |
A is a matrix and X and B are vectors, and then there's an objective function, which
link |
is just the sum of a bunch of X's and some coefficients on them, and yet that's the thing
link |
you want to optimize.
link |
The problem is that in the real world, that matrix A is a very, very, very intricate,
link |
very large and very sparse matrix where the various components of the model are distributed
link |
among the coefficients in a way that is totally unobvious to anybody.
link |
And so what you need is some way to express the original model, which you and I would
link |
You know, we'd write mathematics on the board, the sum of this is greater than the sum of
link |
that kind of thing.
link |
So you need a language to write those kinds of constraints, and Bob Forer for a long time
link |
had been interested in modeling languages, languages that made it possible to do this.
link |
There was a modeling language around called GAMS, the General Algebraic Modeling System,
link |
but it looked very much like Fortran, it was kind of clunky.
link |
And so Bob spent a sabbatical year at Bell Labs in 1984, and he was in the office across
link |
from me, and it's always geography, and he and Dave Gay and I started talking about this
link |
kind of thing, and he wanted to design a language that would make it so that you could take these
link |
algebraic specifications, you know, summation signs over sets, and that you would write
link |
on the board and convert them into basically this A matrix, and then pass that off to a
link |
solver, which is an entirely separate thing.
link |
And so we talked about the design of the language, I don't remember any of the details
link |
of this now, but it's kind of an obvious thing, you're just writing out mathematical expressions
link |
in a Fortran like, sorry, an algebraic, but textual like language.
link |
And I wrote the first version of this Ample program, my first C++ program.
link |
That's written in C++?
link |
And so I did that fairly quickly.
link |
We wrote, it was, you know, 3,000 lines or something, so it wasn't very big, but it sort
link |
of showed the feasibility of it that you could actually do something that was easy for people
link |
to specify models and convert it into something that a solver could work with, at the same
link |
time, as you say, the model and the data are separate things.
link |
So one model would then work with all kinds of different data in the same way that lots
link |
of programs do the same thing, but with different data.
link |
So one of the really nice things is the specification of the models, human, just kind of like as
link |
you say, it's human readable, like I literally, I remember on stuff I worked, I would send
link |
it to colleagues that I'm pretty sure never programmed in their life, just to understand
link |
what the optimization problem is.
link |
I think how hard is it to convert that?
link |
You said you there's a first prototype in C++ to convert that into something that could
link |
actually be used by the solver.
link |
It's not too bad because most of the solvers have some mechanism that lets them import
link |
a model in a form.
link |
It might be as simple as the matrix itself in just some representation.
link |
Or if you're doing things that are not linear programming, then there may be some mechanism
link |
that lets you provide things like functions to be called or other constraints on the model.
link |
So all Ample does is to generate that kind of thing and then solver deals with all the
link |
And then when the solver comes back with numbers, Ample converts those back into your original
link |
form so you know how much of each thing you should be buying or making or shipping or
link |
So we did that in 84 and I haven't had a lot to do with it since, except that we wrote
link |
a couple of versions of a book on it.
link |
Which is one of the greatest books ever written.
link |
It's an excellent book.
link |
Bob Forer wrote most of it and so it's really, really well done.
link |
He must have been a dynamite teacher.
link |
And typeset in latex.
link |
I remember liking the typography, so I don't know.
link |
We did it with TROF.
link |
I don't even know what that is.
link |
I think of TROF as a predecessor to the tech family of things.
link |
It's a formatter that was done at Bell Labs in this same period of the very early 70s that
link |
predates tech and things like that by five to 10 years.
link |
But it was nevertheless, I'm going by memories, I remember it being beautiful.
link |
Yeah, it was nicely done.
link |
Outside of Unix, Seaog, Golang, all the things we talked about, all the amazing work you've
link |
done, you've also done work in graph theory.
link |
Let me ask this crazy out there question.
link |
If you had to make a bet and I had to force you to make a bet, do you think P equals NP?
link |
The answer is no, although I've told that somebody asked Jeff Dean if that was under
link |
what conditions P would equal NP, and he said either P is zero or N is one, or vice first
link |
P is zero, N is one.
link |
Jeff Dean is a lot smarter than I am.
link |
But your intuition is...
link |
I have no intuition, but I've got a lot of colleagues who've got intuition and their
link |
That's the popular bet.
link |
What is computational complexity theory?
link |
Do you think these kinds of complexity classes, especially as you've taught in this modern
link |
world, are still a useful way to understand the hardness of problems?
link |
I don't do that stuff.
link |
The last time I touched anything to do with that was before it was invented, because it's
link |
I did my PhD thesis on graph...
link |
Before big O notation.
link |
Before, I did this in 1968, and I worked on graph partitioning, which is this question.
link |
You've got a graph that is nodes and edges kind of graph, and the edges have weights,
link |
and you just want to divide the nodes into two piles of equal size, so that the number
link |
of edges that goes from one side to the other is as small as possible.
link |
You developed, so that problem is hard.
link |
Well, as it turns out, I worked with Shen Lin at Bell Labs on this, and we were never
link |
able to come up with anything that was guaranteed to give the right answer.
link |
We came up with heuristics that worked pretty darn well, and I peeled off some special cases
link |
for my thesis, but it was just hard.
link |
That was just about the time that Steve Cook was showing that there were classes of problems
link |
that appeared to be really hard, of which graph partitioning was one.
link |
My expertise, such as it was, totally predates that development.
link |
So the heuristic, which now cares the two of yours names for the traveling salesman
link |
problem and for the graph partitioning, that was like, how did you, you weren't even thinking
link |
in terms of classes.
link |
You were just trying to find a heuristic that kind of does the job pretty well.
link |
You were trying to find something that did the job, and there was nothing that you would
link |
call, let's say, a closed form or algorithmic thing that would give you a guaranteed right
link |
I mean, compare graph partitioning to Max Flowman cut or something like that.
link |
That's the same problem, except there's no constraint on the number of nodes on one
link |
side or the other of the cut, and that means it's an easy problem, at least as I understand
link |
it, whereas the constraint that says the two have to be constrained in size makes it a
link |
Yeah, so the Robert Frost has that poem where you have to choose two paths.
link |
So why did you, is there another alternate universe in which you pursued the Don Knuth
link |
path of algorithm design sort of?
link |
You're infinitely modest, but so you pursued your kind of love of programming.
link |
I mean, when you look back to those, I mean, just looking into that world, does that just
link |
seem like a distant world of theoretical computer science?
link |
Then is it fundamentally different from the world of programming?
link |
I mean, certainly in all seriousness, I just didn't have the talent for it.
link |
When I got here as a grad student at Princeton and I started to think about research at the
link |
end of my, I don't know, first year or something like that, I worked briefly with John Hopcroft
link |
who was an absolutely, you know, he mentioned during award winner, et cetera, a great guy.
link |
And it became crystal clear I was not cut out for this stuff, period, okay.
link |
And so I moved into things where I was more cut out for it and that tended to be things
link |
like writing programs and then ultimately writing books.
link |
You said that in Toronto as an undergrad, you did a senior thesis or a literature survey
link |
on artificial intelligence.
link |
What was the AI landscape, ideas, dreams at that time?
link |
I think that was one of the, well, you've heard of AI winters.
link |
This is whatever the opposite was, AI summer or something.
link |
It was one of these things where people thought that, boy, we could do anything with computers
link |
that all these hard problems, computers will solve them.
link |
They will do machine translation.
link |
They will play games like chess at, they will do machine, you know, prove theorems in geometry.
link |
There are all kinds of examples like that where people thought, boy, we could really
link |
do those sorts of things.
link |
And you know, I read the Kool Aid in some sense, there's a wonderful collection of papers
link |
called computers and thought that was published in about that era and people were very optimistic.
link |
And then of course it turned out that what people thought was just a few years down the
link |
pike was more than a few years down the pike.
link |
And some parts of that are more or less now sort of under control.
link |
We finally do play games like go and chess and so on better than people do.
link |
But there are others and machine translation is a lot better than it used to be.
link |
But that's, you know, 50 close to 60 years of progress and a lot of evolution in hardware
link |
and a tremendous amount more data upon which you can build systems that actually can learn
link |
from some of that.
link |
And the infrastructure to support developers working together, like an open source movement,
link |
the internet period is also an empowering.
link |
But what lesson do you draw from that, the opposite of winter, that optimism?
link |
Well, I guess the lesson is that in the short run, it's pretty easy to be too pessimistic
link |
or maybe too optimistic and in the long run, you probably shouldn't be too pessimistic.
link |
I'm not saying that very well.
link |
It reminds me of this remark from Arthur Clark, a science fiction author who says, you know,
link |
when some distinguished but elderly person says that something is possible, he's probably
link |
And if he says it's impossible, he's almost surely wrong.
link |
But you don't know what the time scale is.
link |
The time scale is critical, right?
link |
So what are your thoughts on this new summer of AI now in the work with machine learning
link |
and neural networks?
link |
You've kind of mentioned that you started to try to explore and look into this world
link |
that seems fundamentally different from the world of heuristics and algorithms like search,
link |
it's now purely sort of trying to take huge amounts of data and learn from that data,
link |
create programs from the data.
link |
Look, I think it's very interesting.
link |
I am incredibly far from an expert.
link |
Most of what I know I've learned from my students and they're probably disappointed in how little
link |
I've learned from them.
link |
But I think it has tremendous potential for certain kinds of things.
link |
I mean, games is one where it obviously has had any effect on some of the others as well.
link |
I think there's, and this is speaking from definitely not expertise, I think there are
link |
serious problems in certain kinds of machine learning, at least because what they're learning
link |
from is the data that we give them.
link |
And if the data we give them has something wrong with it, then what they learned from
link |
it is probably wrong too.
link |
And the obvious thing is some kind of bias in the data, that the data has stuff in it
link |
like, I don't know, women aren't as good as men as men at something, okay?
link |
That's just flat wrong.
link |
But if it's in the data because of historical treatment, then that machine learning stuff
link |
will propagate that.
link |
And that is a serious worry.
link |
The positive part of that is what machine learning does is reveal the bias in the data
link |
and puts a mirror to our own society.
link |
And in so doing helps us remove the bias, helps us work on ourselves, puts a mirror to ourselves.
link |
That's an optimistic point of view.
link |
And if it works that way, that would be absolutely great.
link |
And what I don't know is whether it does work that way or whether the AI mechanisms or machine
link |
learning mechanisms reinforce and amplify things that have been wrong in the past.
link |
And I don't know, but I think that's a serious thing that we have to be concerned about.
link |
Let me ask you an outdoor question.
link |
I know nobody knows, but what do you think it takes to build a system of human level
link |
That's been the dream from the 60s.
link |
We talk about games, about language, about image recognition, but really the dream is
link |
to create human level or super human level intelligence.
link |
What do you think it takes to do that?
link |
I haven't a clue and I don't know, roughly speaking.
link |
I mean, this was trying to trick you into a high class assessment.
link |
Yeah, I mean, Turing talked about this in his paper on machine intelligence back in,
link |
jeez, I don't know, early fifties or something like that.
link |
And he had the idea of the Turing test and I don't know what the Turing test is.
link |
It's a good test of intelligence.
link |
It's an interesting test.
link |
At least it's in some vague sense objective, whether you can read anything into the conclusions
link |
is a different story.
link |
Do you have worries, concerns, excitement about the future of artificial intelligence?
link |
So there's a lot of people who are worried.
link |
And you can speak broadly than just artificial intelligence is basically computing, taking
link |
over the world in various forms.
link |
Are you excited by this future, this possibility of computing being everywhere?
link |
Or are you worried?
link |
It's some combination of those.
link |
I think almost all technologies over the long run are for good, but there's plenty of examples
link |
where they haven't been good either over a long run for some people or over a short
link |
run and computing is one of those and AI within it is going to be one of those as well.
link |
But computing broadly for just a today example is privacy, that the use of things like social
link |
media and so on means that and the commercial surveillance means that there's an enormous
link |
amount more known about us by people, other businesses, government, whatever, than perhaps
link |
one ought to feel comfortable with.
link |
So that's an example.
link |
So that's an example of a possible negative effect of computing being everywhere.
link |
It's an interesting one because it could also be a positive if leveraged correctly.
link |
There's a big if there.
link |
So I have a deep interest in human psychology and humans there seem to be very paranoid
link |
about this data thing that varies depending on age group.
link |
It seems like the younger folks, so it's exciting to me to see what society looks like 50 years
link |
from now that the concerns about privacy might be flipped on their head based purely on human
link |
psychology versus actual concerns or not.
link |
What do you think about Moore's law?
link |
You said a lot of stuff we've talked about with programming languages in their design
link |
and their ideas are come from the constraints and the systems they operate in.
link |
Do you think Moore's law, the exponential improvement of systems will continue indefinitely?
link |
There's mix of opinions on that currently.
link |
Or do you think there'll be a plateau?
link |
Well, the frivolous answer is no exponential can go on forever, run out of something.
link |
Just as we said, time scale matters.
link |
So if it goes on long enough, that might be all we need.
link |
It won't matter to us.
link |
We've seen places where Moore's law has changed.
link |
For example, mentioned earlier, processors don't get faster anymore, but you use that
link |
same growth of the ability to put more things in a given area to grow them horizontally
link |
instead of vertically as it were.
link |
So you can get more and more processors or memory or whatever on the same chip.
link |
Is that going to run into a limitation, presumably, because at some point you get down to the
link |
And so you've got to find some way around that.
link |
Will we find some way around that?
link |
I just said that if I say it won't, I'll be wrong.
link |
So I just talked to Jim Keller and he says, he actually describes, he argues that the
link |
Moore's law will continue for a long, long time because you mentioned the atom.
link |
We actually have, I think, a thousand fold increase, still decrease in transit size,
link |
still possible before we get to the quantum level.
link |
There's still a lot of possibilities, so he thinks he'll continue indefinitely, which
link |
is an interesting optimistic viewpoint.
link |
But how do you think the programming languages will change with this increase?
link |
Whether we hit a wall or not, what do you think?
link |
Do you think there'll be a fundamental change in the way programming languages are designed?
link |
I don't know about that.
link |
I think what will happen is continuation of what we see in some areas, at least, which
link |
is that more programming will be done by programs than by people and that more will be done
link |
by sort of declarative rather than procedural mechanisms where I say, I want this to happen.
link |
You figure out how.
link |
And that is, in many cases, this point, domain of specialized languages for narrow domains,
link |
but you can imagine that broadening out.
link |
And so I don't have to say so much in so much detail.
link |
Some collection of software, let's call it languages or programs or something, will figure
link |
out how to do what I want to do.
link |
So increased levels of abstraction.
link |
And one day, getting to the human level, we're going to just use natural language.
link |
So you taught, still teach, of course, computers in our world here at Princeton that introduces
link |
computing and programming to nonmajors.
link |
Just from that experience, what advice do you have for people who don't know anything
link |
about programming but are kind of curious about this world or programming seems to become
link |
more and more of a fundamental skill that people need to be at least aware of?
link |
Well, I could recommend a good book.
link |
The book I wrote for the course.
link |
I think this is one of these questions of, should everybody know how to program?
link |
And I think the answer is probably not, but I think everybody should at least understand
link |
sort of what it is so that if you say to somebody, I'm a programmer, they have a notion of what
link |
Or if you say, this is a program, or this was decided by a computer running a program
link |
that they have some vague, intuitive understanding, an accurate understanding of what that might
link |
So part of what I'm doing in this course, which is very definitely for non technical
link |
people and a typical person in it is a history or English major, try and explain how computers
link |
work, how they do their thing, what programming is, how you write a program, and how computers
link |
talk to each other, and what do they do when they're talking to each other.
link |
And then I would say nobody, very rarely, does anybody in that course go on to become
link |
a real serious programmer, but at least they've got a somewhat better idea of what all this
link |
stuff is about, not just the programming, but the technology behind computers and communications.
link |
Do they try and write a program themselves?
link |
A very small amount.
link |
And we introduced them to how machines work at a level below high level language.
link |
So we have a kind of a toy machine that has a very small repertoire, a dozen instructions,
link |
and they write trivial assembly language programs for that.
link |
That's interesting.
link |
So can you just, if you were to give a flavor to people of the programming world, of the
link |
computing world, what are the examples they should go with?
link |
So a little bit of assembly to get a sense at the lowest level of what the program is
link |
I mean, in some sense, there's no such thing as the lowest level because you can keep going
link |
down, but that's the place where I drew the line.
link |
So the idea that computers have a fairly small repertoire of very simple instructions that
link |
they can do, like add and subtract and branch and so on, as you mentioned earlier.
link |
And that you can write code at that level and it will get things done.
link |
And then you have the levels of abstraction that we get with higher level languages, like
link |
Fortran or C or whatever, and that makes it easier to write the code and less dependent
link |
on particular architectures.
link |
And then we talk about a lot of the different kinds of programs that they use all the time
link |
that they don't probably realize are programs like they're running macOS on their computers
link |
or maybe Windows, and they're downloading apps on their phones, and all of those things
link |
are programs that are just what we just talked about except at a grand scale.
link |
It's easy to forget that they're actual programs, that people program.
link |
There's engineers that wrote those things.
link |
And so in a way, I'm expecting them to make an enormous conceptual leap from their five
link |
or 10 line toy assembly language thing that adds two or three numbers to something that
link |
is a browser on their phone or whatever, but it's really the same thing.
link |
So if you look at the broad strokes of history, what do you think the world, like how do you
link |
think the world changed because of computers?
link |
It's hard to sometimes see the big picture when you're in it, but I guess I'm asking
link |
if there's something you've noticed over the years that, like you were mentioning, the
link |
students are more distracted looking at their, now there's a device to look at.
link |
Well, I think computing has changed a tremendous amount, obviously, but I think one aspect
link |
of that is the way that people interact with each other, both locally and far away.
link |
And when I was the age of those kids, making a phone call to somewhere was a big deal because
link |
it cost serious money, and this was in the 60s, right?
link |
And today, people don't make phone calls, they send texts or something like that.
link |
So there's up and down in what people do.
link |
People think nothing of having correspondence, regular meetings, video, whatever with friends
link |
or family or whatever in any other part of the world, and they don't think about that
link |
And so that's just the communication aspect of it.
link |
Do you think that brings us closer together or does it make us, does it take us away from
link |
the closeness of human to human contact?
link |
I think it depends a lot on all kinds of things.
link |
So I trade mail with my brother and sister in Canada much more often than I used to talk
link |
to them on the phone.
link |
So probably every two or three days, I get something or send something to them.
link |
Because 20 years ago, I probably wouldn't have talked to them on the phone nearly as
link |
So in that sense, that's brought my brother and sister and I closer together.
link |
That's a good thing.
link |
I watch the kids on campus and they're mostly walking around with their heads down, fooling
link |
with their phones to the point where I have to duck them.
link |
I don't know that that has brought them closer together in some ways.
link |
There's sociological research that says people are in fact not as close together as they
link |
I don't know whether that's really true, but I can see potential downsides and kids
link |
where you think, come on, wake up and just smell the coffee or whatever.
link |
But if you look at, again, nobody can predict the future, but are you excited, kind of touched
link |
this a little bit with AI, but are you excited by the future in the next 10, 20 years that
link |
computing will bring?
link |
You were there when there was no computers really.
link |
And now computers are everywhere, all over the world and Africa and Asia and just every
link |
person, almost every person in the world has a device.
link |
So are you hopeful, optimistic about that future?
link |
It's mixed, if the truth be told.
link |
I mean, I think there are some things about that that are good.
link |
I think there's the potential for people to improve their lives all over the place and
link |
that's obviously good.
link |
And at the same time, at least in the short run, you can see lots and lots of bad as people
link |
become more tribalistic or parochial in their interests and there's an enormous amount more
link |
us than them and people are using computers in all kinds of ways to mislead or misrepresent
link |
or flat out lie about what's going on and that is affecting politics locally and I think
link |
everywhere in the world.
link |
Yeah, the long term effect on political systems and so on, who knows.
link |
People now have a voice, which is a powerful thing.
link |
People who are oppressed have a voice, but also everybody has a voice and the chaos that
link |
emerges from that is fascinating to watch.
link |
It's kind of scary.
link |
If you can go back and relive a moment in your life, one that made you truly happy outside
link |
of family or was profoundly transformative.
link |
Is there a moment or moments that jump out at you from memory?
link |
I don't think specific moments.
link |
I think there were lots and lots and lots of good times at Bell Labs where you would
link |
build something and it worked.
link |
Did I say it worked?
link |
So the moment it worked.
link |
And somebody used it and they said, gee, that's neat.
link |
Those kinds of things happened quite often in that sort of golden era in the 70s when
link |
Unix was young and there was all this low hanging fruit and interesting things to work
link |
on and a group of people who kind of, we were all together in this and if you did something,
link |
they would try it out for you.
link |
And I think that was in some sense a really, really good time.
link |
And AUK was AUK an example of that, when you built it and people used it.
link |
And now millions of people use it.
link |
And all your stupid mistakes are right there for them to look at, right?
link |
It's terrifying, vulnerable, but it's beautiful because it does have a positive impact on
link |
so, so many people.
link |
So I think there's no better way to end it.
link |
Brian, thank you so much for talking.
link |
Thank you for listening to this conversation with Brian Kernigan.
link |
And thank you to our sponsors, Aidsleep Mattress and Raycon Earbuds.
link |
Please consider supporting this podcast by going to Aidsleep.com slash Lex and to buy
link |
Raycon.com slash Lex.
link |
Click the links, buy the stuff.
link |
These both are amazing products.
link |
It really is the best way to support this podcast and the journey I'm on.
link |
It's how they know I sent you.
link |
It increases the chance that they'll actually support this podcast in the future.
link |
If you enjoy this thing, subscribe on YouTube, review it with Firestars and Apple Podcasts.
link |
Support on Patreon or connect with me on Twitter at Lex Freedman, spelled somehow miraculously
link |
without the letter E, just F R I D M A N.
link |
Because when we immigrated to this country, we were not so good at spelling.
link |
And now let me leave you with some words from Brian Kernigan.
link |
And comment bad code, rewrite it.
link |
Thank you for listening and hope to see you next time.