But when you’re attacking—when you’re playing the game, trying to defeatsomething—it arouses competitive hormones or something that juststimulates the brain in a way that probably just means that I’m trying morethan one way to get at it. A good explanation is a similar thing. A goodexplanation somehow combines different viewpoints.
Seibel: Another thing that came out of working on TeX, which youdescribed in “The Errors of TeX,” was a log of every error that you foundin the program. Folks like the Software Engineering Institute people say thatpart of a mature software-engineering process is keeping track of all yourbugs and learning how to prevent the same kind of errors in the future. Butyou said that having kept this log, it doesn’t help you prevent future errors.
Knuth: Yeah. Though it’s hard to say that I wouldn’t have been even worsewithout the log.
Seibel: But you didn’t feel like, “Ah, now that I’ve seen this I won’t do itagain.”
Knuth: I just got to recognize my sins. People keep coming back forabsolution, if you know theological terms.
Seibel: So you find yourself now making bugs in your programs and thensaying, “Oh, I’ve done it again, that same kind of bug.”
Knuth: Yeah.
Seibel: So why is that? Is there something about the nature of the mistakesthat makes it hard to distill a lesson that will prevent making them again?
Knuth: I think it’s probably more that I’ll try harder things. I always trythings that are at my limit. If I had to go back and write those kinds ofprograms again, the easier ones, I wouldn’t make so many mistakes. Butnow that I know some more, I’m trying to write harder stuff. So I makemistakes because I’m always operating at my limit. If I only stay incomfortable territory all the time, that’s not so much fun.
Seibel: So if you just kept writing typesetting systems for the rest of yourlife?
Knuth: Yeah, I would get those pretty good. But we keep raising the barand then we stumble on it. We’re dealing with—as we said earlier—thingsthat are on the edge of what human beings can handle and morecomplicated than have been done before.
If we restrict ourselves to the things that are really easy, then that’s notsatisfactory because our appetite is always to push the boundary and gountil it gets to something we can barely do. And once we’ve got to there,then we’re going to want to push that boundary and so on.
So inevitably we’re going to have bugs unless we decide we’re never goingto write anything that stretches our capabilities. So how are we going to doit better? Every three years there’ll be another buzz word as to somethingthat’s going to solve all these problems and make it really work. Extremeprogramming was one the last two or three years. Before that there wassomething else. Somebody will come up with another supposedly silverbullet and there’ll be a lot of people jumping on that bandwagon and thenthey’ll find, “Oh, it’s still hard.”
Seibel: Has the kind of person who can be a good programmer changedover time?
Knuth: Pretty much a constant in my experience, over a long period ofyears, is that every time I’m exposed to 100 people from some populationor other, except majors in computer science, 2 of them are programmers inthe sense that they really resonate with the machine. Wasilla, Alaska, has10,000 people, so it’s probably got 200 programmers.
Seibel: So has programming changed enough that the kind of person whofalls in that two percent has changed? Or is it still really the same?
Knuth: I don’t know—you can use the word programming in differentsenses. We’re always making tools that are intended to make more of amatch between people’s brains and getting something done in a computer.I’m mostly talking about the way a machine really works when the machineis being pushed to the envelope rather than just getting an answer out.
We’ve got machines that are so powerful now that people who aren’t reallygood at programming, in my esoteric sense, are able to get answers out ofthese machines that would have taken a huge expert to do on old machines.But with the new machines, the people that I’m talking about are going to bedoing the problems that couldn’t be handled by the old machines.
So there’s that change and then there’s the change that I’m really worriedabout: that the way a lot of programming goes today isn’t any fun becauseit’s just plugging in magic incantations—combine somebody else’s softwareand start it up. It doesn’t have much creativity. I’m worried that it’sbecoming too boring because you don’t have a chance to do anything muchnew. Your kick comes out of seeing fun results coming out of the machine,but not the kind of kick that I always got by creating something new. Thekick now is after you’ve done your boring work then all of the sudden youget a great image. But the work didn’t used to be boring.
Seibel: But you still find the kind of programming you do interesting?
Knuth: Oh my God, yes. I’ve got this need to program. I wake up in themorning with sentences of a literate program. Before breakfast—I’m surepoets must feel this—I have to go to the computer and write this paragraphand then I can eat and I’m happy. It’s a compulsion; that I have to admit.
OK, let me show you the program I wrote yesterday. I’m multiplying hugeintegers that are way bigger than the universe—they’re special integers thatyou can compress the representation down, and so I can deal with themeven though I couldn’t represent them in an ordinary notation, and I’vebeen multiplying these integers that are inconceivably large and I’ve beensquaring them and finding out how they look after squaring them. I’m verypuzzled about what’s going on, but this is exciting to me.
Seibel: You’re an academic but also have worked on big systems and havedone some work in industry. How do you see the relation betweenacademic computer science and industrial practice?
Knuth: It’s gone in waves. In the ’60s the academics were way ahead of theindustry and the programs that were produced in industry, except formaybe airline-reservation systems, were laughable to everybody inuniversities.
By 1980 the situation had pretty much reversed and the programs that werebeing written by people in universities were laughed at by the people inindustry because the universities had gone into theological mode and youweren’t allowed to use goto statements. I’m exaggerating to simplify, butbasically there were no-nos in university programs that were keepingpeople’s hands tied, and the people in industry didn’t have to worry aboutthat.
But then in universities people came up with some better ideas aboutnetworking and dealing with large pieces of data and so on, and got ahead.So it goes back and forth. But the trend in a lot of the algorithm and datastructurecommunity has not been to my liking when they have lots of datastructures that are just… baroque is the only word I can think of. They’reintricate and clever and you have to admire them for the intellectualchallenge, but I find them sterile. They don’t connect with life; they’reworking in another world. It’s an OK world and it’s got its structure, andthey’re friendly and nice people, but it doesn’t appeal to me personally andit doesn’t really relate to practice.
I don’t know why it’s important to me if something relates to practice ornot. There are mathematicians who never think about anything finite, andthey hardly ever come down to countably infinite—they publish terrificpapers just talking about kinds of infinity that are mind-boggling and they’reable to make sense out of it and that gives them satisfaction. And there aresimilar things like that in algorithms. But for me I’m turned on much moreby the ideas that I would be able to use in my machine.