Knuth on Software Tools and Techniques
An interview with Donald Knuth
Donald E. Knuth, is considered by many to be the world's preeminent computer scientist. The first three volumes of The Art of Computer Programming, definitive reference works for almost 30 years, earned him the ACM's Turing Award in 1974 and the National Medal of Science in 1979. Knuth has also developed breakthrough applications in computer typesetting (TeX and METAFONT) and software development ( WEB), and has over 100 publications to his credit.
Now Professor Emeritus at Stanford University, Knuth is once again channeling his full energies into writing, as he is preparing Volume IV of The Art.... Dan Doernberg of Computer Literacy Bookshops, interviewed him on December 7th 1993. Below is reprinted a small excerpt of this interview, which sheds some light on what a pioneer of computer science thinks about software tools and techniques.
CLB: What is your current hardware and software environment?
Knuth: I use CWEB for my programming. I use the Emacs editor very heavily, and I use a great high-level language called METAPOST for drawing technical illustrations. This is a new language by John Hobby that is going to be released soon, I think. It's based on METAFONT. 75% of the code is mine from METAFONT, but it's fixed up so that it generates PostScript. I love it.
I also use Mathematica. The people at Maple are trying to convince me to switch over to Maple, another excellent system. At the moment, I like Mathematica because you don't have to type your multiplication signs; you can say ``
2X'' instead of ``
2*X''. Also, the Mathematica manual is exceptionally good.
CLB: What about object-oriented programming? Is it just a current buzzword, or does this approach appeal to you?
Knuth: I've always thought of programming in that way, but I haven't used languages that help enforce the discipline; I've always enforced the discipline myself in other languages. Programming languages can now catch you if you make a mistake, and they make it easier for you to hide information from one part of the program to another. In my own programs, with older languages, I wouldn't use what I wasn't supposed to use; I would have to discipline myself to follow these rules. I could, so I did. There weren't programs I couldn't write... but the new tools do help.
The problem that I have with them today is that... C++ is too complicated. At the moment, it's impossible for me to write portable code that I believe would work on lots of different systems, unless I avoid all exotic features. Whenever the C++ language designers had two competing ideas as to how they should solve some problem, they said ``OK, we'll do them both''. So the language is too baroque for my taste. But each user of C++ has a favorite subset, and that's fine. CWEB fully supports C++ as well as C.