Among computer science graduates, Edsgar W. Dijkstra is a man who needs little introduction. A few decades back, an interesting interview of his was broadcasted on Dutch TV. The video description is as follows:
In the autumn of 2000, the Dutch broadcasting organization VPRO Television visited Austin to make a video of a visit with the most famous Dutch computing scientist. The product of this project was broadcast in April 2001 as a 25-minute episode of the science series Noorderlicht, under the title "Denken Als Discipline".
Roughly a year after this video was broadcasted, Prof. Dijkstra died after a long struggle with cancer. This blog post would not have been possible without the help of some kind souls (Jos Wassink, Karin Spiegel, and Chris Kotrla) who dedicated their time to digitize and translate the above interview in English. I am merely curating the thoughts Prof. Dijkstra expressed during the interview, for improved readability.
Prof. Dijkstra: You just cobble something together to sell. It need not be any good. As long as you can fool people into buying it, you can always try to make better versions later. So then you get these version numbers, even with decimals, version 2.6 or 2.7. That's nonsense. While version 1 should have been the finished product.
Computer science is no more about computers than astronomy is about telescopes.
Narrator: Professor Edsger W. Dijkstra is Holland's first programmer. In 1972, he received the Turing Award, the Nobel Prize of Computer Science. He and his wife now live in Austin, Texas, where they moved in 1984.
Prof. Dijkstra: At the time, most university departments in the Netherlands aimed to water down their curriculum. At the same time, the University of Texas in Austin tried to reduce the student enrollment and to increase their quality. It was an opposite development which was much more attractive than what was happening in Dutch higher education.
The universities will continue to lack the courage to teach hard science, they will continue to misguide the students, and each next stage of infantilization of the curriculum will be hailed as educational progress.
Narrator: Quality, correctness, and elegance are what Dijkstra thinks should characterize a computer program. In 1954 he resolved to make programming a science, but it has been an uphill struggle.
Prof. Dijkstra: I lose no sleep that businesses feel they cannot afford to deliver first-rate products. It doesn't keep me from continuing my work.
You should not give the world what it asks for, but what it needs.
Prof. Dijkstra: There are very different programming styles. I tend to see them as Mozart versus Beethoven. When Mozart started to write, the composition was finished. He wrote the manuscript in one go. In beautiful handwriting, too. Beethoven was a doubter and a struggler, who started writing before he finished the composition and then glued corrections onto the page. In one place he did this nine times. When they peeled them, the last version proved identical to the first one. That iterative method of programming is somehow a very Anglo-Saxon custom. British education is pervaded by it. People learn, when they write, not to try to get it right the first time. Just write what's on your mind and then rewrite repeatedly, to get the product you want. That's partly why word processors are marketed so aggressively and partly why they have been so successful there. While it is one of the advantages of working with pen and paper that when you start a sentence, you should have it ready.
Narrator: Dijkstra is a prolific writer: musings, talks, mathematical proofs, and books. His EWD's, these initials followed by a serial number are considered his best scientific contributions.
Prof. Dijkstra: For myself, the most important thing has been the daily discipline of neatly writing down your thoughts and what you do. Due to modern technology, they have been much more influential than they would have been in the past. You might describe them as a modern form of scientific correspondence. Albeit that the intellectual traffic has been mostly one-directional. The serial numbers have crept up to over 1300. In length, they vary enormously, from 80 pages to one page. As time goes by, they tend to become ever shorter. Everyone to whom I sent them, was implicitly willing to function as an internal node of the dissemination tree and to send second-generation copies on to others. How many people they have reached, I have never been able to estimate. A few hundred, I'd say.
Prof. Dijkstra: In order to compose, you have to write scores. But to be a composer is not to write scores. To be a composer is to conceive music. In the early days of programming, you had to write machine code. Meaningless sequences of capitals and numbers. That's the analog of writing scores. People thought that that was programming. Later, that was made easier by the invention of the higher programming languages: Fortran, Pascal, C++, and suchlike. People thought that those languages would solve the programming problem. But when you look closely, the trivial aspects of programming had been automated while the harder ones remained. The higher programming languages which had been intended to facilitate programming proved, coupled with the increasing ambitions of the applications to be more intellectually demanding to the programmer.
The competent programmer is fully aware of the limited size of his own skull. He, therefore, approaches his tasks in full humility and avoids clever tricks like the plague. - EWD 340
Prof. Dijkstra: I remember, in 1970 or thereabouts, I first went to explain to companies how to develop programs and keep them under tight control. I first went to Paris and then to Brussels. In Paris, I delivered a lecture at the Sorbonne and people were very enthusiastic. On the way home, I told the same story at a large software house in Brussels. The lecture was a complete failure. In a sense, one of my least successful lectures. I later found out why. The management didn't want faultless programs because the company derived its stability from maintenance contracts. And the programmers weren't interested because they derived their intellectual excitement from the fact that they didn't quite know what they were doing. They felt that if you knew precisely what you were doing and didn't run risks, it was a boring job.
We should not add bugs to a program out of nonchalance. We should do so systematically and with great care.
Prof. Dijkstra: If in physics there's something you don't understand you can always hide behind the uncharted depths of nature. You can always blame God. You didn't make it so complex yourself. But if your program doesn't work, there is no one to hide behind. You cannot hide behind an obstinate nature. A zero is a zero, a one is a one. If it doesn't work, you've messed up.
I realized my previous projects had been finger exercises. I had to tackle complexity itself. But it took a long time to muster the courage to do so.
Narrator: At the end of the 60s, Dijkstra saw that the complexity got the better of the programmers. And that it threatened the most prestigious projects.
Prof. Dijkstra: That happened in 1969 just after the first successful moon landing. I was at a NATO conference on software engineering in Rome where I met Joel Aron, who was head of IBM's Federal Systems Division, which had been responsible for the software of the moon shot. I knew that each Apollo flight required some 40,000 new lines of code. I don't know what unit a line of code is but 40,000 is a lot. I was duly impressed that they got so many lines of code correct. So when I met Joel, I said: "how do you do it?". "Do what?", he asked. "Getting that software right". "Right?", he said. He said that in one of the calculations of the orbit of the lunar module, the moon had been defined as repelling instead of attracting. They had discovered that error by accident. Imagine, by accident five days before the shot. I went white and said: "Those guys have been lucky!" Yes, Joel Aron agreed.
Program testing can convincingly show the presence of bugs, but it hopelessly inadequate to show their absence.
Narrator: Dijkstra knew personally how frighteningly complex programs could become. He had finished the operating system of Holland's biggest computer, the X-8 under great pressure.
Prof. Dijkstra: I feared that I wouldn't get it right. That I would lose control of it. For the X-8 in Eindhoven, we tried to design a multiprogramming system. We were working with a machine with a real-time interrupt which really means that you cannot test your program. I knew that if we designed the program with insufficient care, we would end up with something which, once entered into the computer wouldn't work, and would make irreproducible errors, the cause of which we would be unable to determine. That was the reason why we applied all possible control mechanisms in the development stage.
Elegance is not a dispensable luxury but a factor that decides between success and failure.
Prof. Dijkstra: One of the things I discovered as early as the 1960s is that mathematical elegance is not a question of esthetics, of taste, or fashion, but something you can translate into a technical notion. The Concise Oxford Dictionary gives one of the meanings of elegant as ingeniously simple and effective. In practice, a program is manageable if you make a truly elegant program, firstly because it is shorter than most alternatives and consists of discrete paths each of which you can replace by an alternative implementation without influencing the rest of the program. But also, curiously the most elegant programs are often the most efficient.
When there were no computers, programming was no problem. When we had a few weak computers, it became a mild problem. Now that we have gigantic computers, programming is a gigantic problem.
Prof. Dijkstra: My first programming years were a bit strange compared to now in that I programmed for non-existent machines. My friends Bram Loopstra and Carel Scholten built the machine and in the meantime, I wrote the relevant software. I was used to not testing a program because the machine to test it on wasn't finished. I knew right away that you had to create something that could keep under your intellectual control.
Prof. Dijkstra: I started work at the Mathematical Centre in March 1952. My wife-to-be had worked there since the summer of 1949. She had a job as a calculator. I was taken on as a programmer. And I rather liked her. Our first date was the concert on the occasion of the Mathematical Congress in 1954 in Amsterdam. Then the news was out that I was sweet on her. People complimented me on my taste. Professionally, I was strongly influenced by my mother. She was a brilliant mathematician. I remember when I had bought my books for the next school year I saw the goniometry book, which scared me with all those Greek letters. I asked my mother if goniometry was hard. She said, "not at all". "Make sure you know all the formulae by heart and if you need more than five lines, you're on the wrong track."
Prof. Dijkstra: Why has elegance found so little following? That is the reality of it. Elegance has the disadvantage if that's what it is that hard work is needed to achieve it and a good education to appreciate it.