The Essential Knuth

Dated:

Approaching him seemed impossible. I had to wait my turn. Swarmed by admirers, Donald E. Knuth was struggling not to spill his drink at a reception in honor of Alan M. Turing. The rain outside and the fact that it was a summer day (June 22, 2012) meant that we were somewhere in England.

I walked around a bit, took another glass of champagne, and bumped into Bertrand Meyer. We talked about Agile Methods and Edsger W. Dijkstra. Bertrand had a big camera around his neck and at some point he asked me to hold his glass (which I did) so that he could take some fifty snapshots a second of a tall man standing on the window sill. It was Donald Knuth who had moved from one side of the chamber to the other in order to view the Olympic torch that was passing through Manchester. Bertrand was, just like me, waiting to approach Knuth at the right moment.

Realizing that my turn would not come automatically, I stepped forward and introduced myself to Knuth. He knew who I was by name and that I wanted his feedback on my research — I had taken care of that by sending him my book The Dawn of Software Engineering: from Turing to Dijkstra. After listening to him for about an hour, I realized that an in-depth interview would serve my cause for the history of computing even better.

A few weeks later I sent my booklet on Peter Naur to Don Knuth and requested an interview with him. He accepted and we met at Schloss Dagstuhl in Wadern, Germany on November 22, 2012. I drove Don and his lovely wife Jill to a hotel in Frankfurt where he and I got down to discussing the past. The interview led to the transcript presented in this booklet.

The transcript is mostly ordered chronologically. It starts briefly with Knuth's childhood and his avocations, music and physics. The first topic of major concern is his early encounters with computer programming. How, when, and why did Alan Perlis's Internal Translator and Stan Poley's SOAPII assembly program influence Knuth's own programming work? How did Knuth view the programming language ALGOL60? Which new style of programming did Knuth acquire after studying the BALGOL compiler?

Knuth was essentially living two separate lives. During daylight he ran down the visible and respectable lane of mathematics — a lane on which many a traveler equated elegance with a short proof. During nighttime, Knuth trod the unpaved road of computers and compilers. Passers-by were few in number and diverse in programming habits. Perlis and Poley, for example, had very different approaches to programming, as Knuth notes in the interview. It was the latter's elegant style that helped show Knuth the way ahead. Around 1960, Knuth began to associate the mathematical connotation of short and sweet with an elegant program.

On his honeymoon in 1961, Knuth discovered that the roads of mathematics and computer programs intersect. For, Jill was not only accompanied by her newly wed husband on their joint trip through Europe, but also by Noam Chomsky's book Syntactic Structures which Knuth was studying eagerly. Chomsky showed Knuth how mathematics and computing can be practiced together. One year later, Knuth met Bob Floyd who would teach him that you really could use mathematical reasoning to understand computer programs. The early sixties thus not only brought Jill and Don Knuth officially together, it also married mathematics and programming.

A second topic — discussed throughout — is the relationship between Dijkstra, Naur, and Knuth; thereby following up on my conversation with Naur in which the distinction between intuition and formal methods comes to the fore. What is Knuth's take on formalism? How does he compare Dijkstra's devotion to formal reasoning with Naur's plea for pluralism in software engineering?

Other recurring topics are:

the advent of logic, undecidability, and Turing machines in computing,

the dichotomy between machine efficiency and generality (à la ALGOL68), and

the eternal quest for machine-independent programming (cf. Knuth's experiences with floating point arithmetic and TeX).

Structured Programming of course deserves separate attention. The 1972 book Structured Programming — written by Dijkstra, Hoare, and Dahl — was, as Knuth explains, revolutionary in his thinking. In his 1974 article `Structured Programming with go to Statements', Knuth wanted to show that goto statements are sometimes consistent with well-understood structure and why in this context program manipulation systems sound promising. Many historical actors attached their own meaning to the words ``structured programming'', whence my interest in obtaining a brief comparison from Knuth between the views of Böhm, Brooks, Jacopini, and himself.

Knuth also mentions several software pioneers that he knew personally, ranging from the programmer Ned Irons to the logician Dana Scott. In the last part of the interview, Knuth compares the study of the history of computing with that of mathematics and science. A historian himself, he expresses his reservations about the trend of writing about history without any appeal to technical content.

My main purpose to embark on this project was to get Knuth's perspective on the past on paper, realizing full well that I would not be able to cover all of his technical contributions. There is thus plenty of room for further research. The history of computing is, in my opinion, badly in need of a critical mass. Moreover, historical accounts can drastically help computer professionals understand their own research problems. Therefore, I strongly encourage the reader to delve into the careers of Knuth and other software pioneers, and to share his or her findings with all of us. (And if you plan to do so, feel free to contact me so that we can study and document the past together!)