Seibel: In 1974 you said that by 1984 we would have “Utopia 84,” the sortof perfect programming language, and it would supplant COBOL andFortran, and you said then that there were indications that such language isvery slowly taking shape. It’s now a couple of decades since ’84 and itdoesn’t seem like that’s happened.

Knuth: No.

Seibel: Was that just youthful optimism?

Knuth: I was thinking about Simula and trends in object-orientedprogramming when I wrote that, clearly. I think what happens is that everytime a new language comes out it cleans up what’s understood about theold languages and then adds something new, experimental and so on, andnobody has ever come to the point where they have a new language andthen they want to stop at what’s understood. They’re always wanting topush further.

Maybe someday somebody will say, “No, I’m not going to be innovative; I’mjust going to be clean and simple, and I’m going to stick to it.” Pascal wasstarted with that philosophy but then didn’t continue. Maybe we’ll get to atime when somebody will say, “Let’s set our sights lower and really try tomake something that’s going to be stable.” It might be a good idea.

Seibel: Isn’t part of the problem that while there are misfeatures, there arealso missing features and if a thing is missing you’ve got to make upsomething to fill that gap.

Knuth: Yeah, that’s right. It’s got to be extensible somehow. Java didn’tmake itself extensible in a good way.

Seibel: You’ve designed some languages yourself—probably the mostwidely used of which is TeX.

Knuth: So TeX is a programming language but I had to put in thosefeatures kicking and screaming. Guy Steele, Terry Winograd, LeslieLamport, and different people needed things when they were using TeX as afront end for their material. I think Terry Winograd was writing a book onthe syntax of natural languages, so he had some really powerful macros thathe wanted to write in order to make the diagrams in his book. That pushedTeX a lot towards becoming a programming language in the earliest days.

Seibel: Do you ever wish you had focused more on the design of thelanguage, as a language?

Knuth: I don’t know. I guess so. In a way I resent having every language beuniversal because they’ll be universal in a different way. It’s a little bitlike Unix having 30 definitions of regular expressions under one roof—dependingon which part of Unix you’re using you’ve got a slightly different flavor ofregular expressions. If every tool that you have includes a Turing machineinside, is this really the way to go? I was really thinking of TeX as somethingthat the more programming it had in it, the less it was doing its real missionof typesetting.

When I put in the calculation of prime numbers into the TeX manual I wasnot thinking of this as the way to use TeX. I was thinking, “Oh, by the way,look at this: dogs can stand on their hind legs and TeX can calculate primenumbers.”

Seibel: But people use the fact that it’s a Turing-complete programminglanguage to do typesetting-related computations. If it wasn’t Turing-completethey would be unable to do those things.

Knuth: Yeah, that’s right. I wrote a programming language for simulation inthe ’60s that I had to work hard to kill because it had a lot of users, butthen when Simula came out I liked Simula better and I told people to stopusing my SOL language. Mostly I don’t consider that I have great talent forlanguage design.

With TeX I was interacting with hundreds of years of human history and Ididn’t want to throw out all of the things that book designers have learnedover centuries and start anew and say, “Well, forget that guys; you know,we’re going to be logical now.” In this case, the name of the game wasmostly to take an enormously complicated problem and find a fairly smallset of primitives that would support it. Instead of having 1,000 primitives, Ihave 100 primitives or something like that. But going down to 50 primitives,10 primitives—which we would do if we wanted to be mathematicallyclean—I believe wouldn’t work. The problem of making books goes toomuch into the complexity of the world, which just doesn’t want to besimplified.

Seibel: I haven’t really done a study, but it seems like the vast majority ofmathematical and scientific papers are typeset with TeX these days. Theremust have been things you’ve seen typeset in TeX that made you think,“Wow, my program played a part in this.”

Knuth: Well, the proof of Fermat’s Last Theorem was one of those. It’sone of the most famous mathematical papers. And it happens all the timethat I see books that I know wouldn’t have been written if the authors hadhad to go through channels the way they used to. It’s again a little bit of theblack-box thing.

It used to be, you would have to type something up and that would go intoa compositor and it would come back in galley proofs, and so on. You’regoing through all kinds of levels of people who aren’t mathematicians andthen coming out with the product at the end. So you don’t dare do anythingthat would confuse any of the people in that line.

But if you can see yourself what it’s going to look like, and you can make upa notation that isn’t in somebody’s style sheet because it just happens to bethe right one for your problem, then you’re encouraged to do a muchbetter job.

So this brings me great satisfaction all the time when I know that peoplehave been able to cut through this and their creativity goes directly to thereader.

Seibel: Do you feel like programmers and computer scientists are awareenough of the history of our field? It is, after all, a pretty short history.

Knuth: There aren’t too many that are scholars. Even when I startedwriting my books in 1963, I didn’t think people knew what had happened in1959. I was reading in American Scientist last week about people who hadrediscovered an algorithm that Boyer and Moore had discovered in 1980. Ithappens all the time that people don’t realize the glorious history that wehave. The idea that people knew a thing or two in the ’70s is strange to a lotof young programmers.

It’s inevitable that in such a complicated field that people will be missingstuff. Hopefully with things like Wikipedia, achievements don’t get forgottenthe way they were before. But I wish I could also instill in more people thelove that I have for reading original sources. Not just knowing that so-and-sogets credit for doing something, but looking back and seeing what thatperson said in his own words. I think it’s a tremendous way to improveyour own skills.

It’s very important to be able to get inside of somebody else’s way ofthinking, to decode their vocabulary, their notation. If you can understandsomething about the way they thought and the way they made a discovery,then that helps you make your own discoveries. I often read sourcematerials of what brilliant people have said about this stuff in the past. It’ll beexpressed in unusual ways by today’s conventions, but it’s worth it to me topenetrate their notation and to try to get into their idea.

For example I spent a good deal of time trying to look at Babylonianmanuscripts of how they described algorithms 4,000 years ago, and what didthey think about? Did they have while loops and stuff like this? How wouldthey describe it? And to me this was very worthwhile for understandingabout how the brain works, but also about how they discovered things.

A couple of years ago I found an old Sanskrit document from the 13thcentury that was about combinatorial math. Almost nobody the authorknew would have had the foggiest idea what he was talking about. But Ifound a translation of this document and it was speaking to me. I had donesimilar kinds of thinking when I was beginning in computer programming.


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