Cosell: Oh, yeah. That’s another thing that makes me a little bit moredinosaurlike. Everything builds assuming what came before. I remember onour old PDP-11, 7th edition Unix, we were doing some animation andgraphics. That was a big deal. It was hard to program. The displays weren’thandy. There were no libraries.

Each generation of programmers gets farther and farther away from thelow-level stuff and has fancier and fancier tools for doing things. The goodpart is they can do cleverer things. The baseline is so good that the nextthing is spectacular and that then becomes the baseline and two years laterit becomes even better. The trouble is that these baselines are getting moreand more complicated. The PDP-1 instruction set was like a walk in thepark compared to some of the stuff that’s happening.

I would hate to be the guys at Microsoft who have to build these operatingsystems that run on the quad-core multiprocessor. Video cards have grownto the point where they have multiple megs of memory, and completepipeline parallel processors on them that can do array and vector things onthe fly. So you now use your video card as this very fancy data processor. Ikeep thinking how hard it must be to program these things.

We had a thing called an IMLAC, which is one of the early machines thatactually had a nice integrated vector display on it the way the old PDP-1 didbut it was a mini computer. There was a program for that that had yousitting on a little cart doing a 3-D display of a maze. So you saw the wallscoming by. You could peek around corners. I was fascinated because it didhidden-line suppression. This is in the era where guys are writing articles inCommunications of the ACM about algorithms. I have a whole book abouthow to use symmetric coordinates and somebody’s algorithm for figuringout where two lines cross so you know where a line crosses a plane so youknow that that’s where you have to stop the line because it now becomeshidden.

Doing the hidden-line thing was a big deal back then and that program did it.I was just stunned by that program. That was big deal code—singular stuff.Now, as far as I can tell, the video cards take 3-D coordinates and the videocards do the hidden-line suppression. Eight, nine years ago things liketexture mapping and ray tracing were big deals. Hard to do in code. It tookyour program hours to get the glint off of a sphere.

And now I discover that video cards do the ray tracing. So on the one handyou have these guys working at NVIDIA and stuff who must be doingincredibly complicated stuff and you have the modern programmer who nolonger can be content just writing a thing with little line-drawn walls—hehas to master this incredible 3-D video environment that’s built on librariesthat have gotten more and more complicated. They’re easier than it wouldbe to write the code yourself, but I can’t fathom how people can absorb allof that these days. It just seems so huge to me.

I run into that just with doing Tk. I’ve been trying to do a little Tk programand I am stunned by how complicated Tk is and how many hooks it’s got,and it’s what you need to do in order to make the button be bigger orsmaller or here or there. Mastering that thing is just a huge thing.Understanding the PDP-1 time-sharing system was simple by comparison.

So I don’t envy modern programmers, and it’s going to get worse. Thesimple things are getting packaged into libraries, leaving only the hard things.That stuff is getting so complicated, but the standards that people areexpecting are stunning. One of the ones they showed me stunned me. Hewas showing me Google Maps that will do routes for you. One of the thingsyou can do is you can grab a piece of the route with your mouse and dragthat piece of the route somewhere else to tell Google that you want theroute go there. Then it remaps the route so that it goes through where youjust dragged the point. Now I know what’s going on in there: a pile ofJavaScript code for the mouse tracking. When you let go of the mouse it hasto do an Ajax XML request to tell momma system that he just put this pointon the route. The route then has to do incremental updates. Calculating theroute. I can’t even imagine how they do that code so well. People complainthat you get routed through people’s backyards and stuff like that, but theoptimal-route problems are one of the classic problems of computerscience. How to take this arbitrary graph and find the shortest path througha graph. Just stunning.

At one level I’m thinking, “This is way cool that you can do that.” The otherlevel, the programmer in me is saying, “Jesus, I’m glad that this wasn’taround when I was a programmer.” I could never have written all this codeto do this stuff. How do these guys do that? There must be a generation ofprogrammers way better than what I was when I was a programmer. I’mglad I can have a little bit of repute as having once been a good programmerwithout having to actually demonstrate it anymore, because I don’t think Icould.

This is a good time to be an over-the-hill programmer emeritus, becauseyou have a few props because you did it once, but the world is so wondrousthat you can take advantage of it, maybe even get a little occasional creditfor it without having to still be able to do it. Whereas if you were incollege—if you major in computer science and you have to go out there andyou have to figure out how you are going to add to this pile of stuff—saveme.

Donald Knuth

Of all the subjects of this book, Donald Knuth perhaps least needs an introduction.For the past four decades he has been at work on his multivolume masterworkThe Art of Computer Programming, the bible of fundamental algorithms and datastructures, which American Scientist included on its list of the top 12 physicalsciencesmonographs of the century, in the company of works by Russell andWhitehead, Einstein, Dirac, Feynman, and von Neumann. He popularized the useof asymptotic (a.k.a. Big-O) notation in analyzing algorithms, invented LR parsing,and defended goto statements from Dijkstra’s criticism.

But he is not simply a theorist. After finishing Volume III of The Art of ComputerProgramming in 1976, Knuth took what was supposed to be a year off to writethe typesetting software TeX and METAFONT so he could see his books typesetto his own satisfaction. Ten years later he was done, having along the wayinvented a new style of programming, “literate programming,” and an algorithmfor breaking paragraphs of text into lines for typesetting that is still pretty muchthe state of the art.

His numerous awards have included the first Association for Computing MachineryGrace Murray Hopper Award (1971), the Turing Award (1974), and the NationalMedal of Science (1979). In 1990 he stopped using email, explaining that his jobwas not “to be on top of things” but “to be on the bottom of things” deeplyunderstanding and explaining large areas of computer science so he could explainthem in his books.

In this interview we talked about Knuth’s enthusiasm for literate programming, hisambivalence about black boxes, and what he sees as a regrettable “overemphasison reusable software.”

Seibel: When did you learn to program?

Knuth: I was a freshman at Case Institute of Technology. This was the fallof 1956 and during that quarter or semester they got a computer.

Seibel: This was the IBM 650?

Knuth: It was the 650, yeah. That was the first computer that they mademore than a hundred of. I think they had thousands of them but maybe notten thousand. But it was the first mass-produced computer, so even Casegot one.

I was employed in the statistics lab sorting cards. I would tabulate data forthe statisticians and that helped supplement my scholarship. There was thisroom on the first floor with a window in it and you could see this machinebehind the window with lights flashing. It looked pretty fascinating.


Перейти на страницу:
Изменить размер шрифта: