The list of classics given by the author is the following:
- “The Emperor’s Old Clothes,” C.A.R. Hoare
- “An Axiomatic Basis for Computer Programming,” C.A.R. Hoare
- “Gödel’s Undecidability Theorem,” S.F. Andrilli
- “Computing Machinery and Intelligence,” A.M. Turing
- “Reflections on Trusting Trust,” K. Thompson
- “The Humble Programmer,” E.W. Dijkstra
- “An Interview with Edsger W. Dijkstra,” P. Frana
- “Computer Programming as an Art,” D. Knuth
- “The ‘Art’ of Being Donald Knuth,” E. Feigenbaum
- “Donald Knuth: A Life’s Work Interrupted,” E. Feigenbaum
As an exercise, I've decided to read the “The Emperor’s Old Clothes,” by C.A.R. Hoare. Hoare is the inventor of Quicksort and is also a Turing Award recipient for his "fundamental contributions to the definition and design of programming languages", in 1980. This specific paper is basically a transcript of his speech at the Turing Award, when he described some of his experiences while working on several important project such as:
- The first compiler for Algol 60
- The Elliott 503 Mark II software system (a complete failure)
- The formal definition of programming languages (Hoare logic and CSP)
- The study of parallel programming and language constructs for operating systems (e.g., monitors)
- Algol X (also a failure)
- Algol W, which is based on Algol X
- Algol 68 (Hoare considers it to be a failure, but some don't)
- ADA, probably the most controversial topic of the text, about which he states:
- "Do not allow this language in its present state to be used in applications where reliability is critical, i.e., nuclear power stations, cruise missiles, early warning systems, anti-ballistic missile defense systems".
There are many interesting messages through the paper, but the strongest of them is about simplicity and elegance. Hoare argues that the lack of simplicity was the cause of the failure of the ambitious Elliot 503 system. In programming languages, these requirements are mainly due to the fact that the programmer should never be trusted, something already known in 1960. Another lesson is that a team of smart people working on a very challenging task and interesting problem can fail miserably due to the lack of focus, resources, documentation, communication, and control. Therefore, it was inevitable to remember some of my software engineering classes while reading the text.
After the Elliot 503 project, Hoare became an advocate of simplicity and elegance in any other project he participated. Although, he seemed to be right several times, I think he may have been too conservative. Some modern programming languages widely used today do not follow his standards. However, he makes an interesting point that nothing can stand against money. In other words, it is difficult to evaluate his points after the effort and money invested in some of the programming languages in use today.
Another conclusion from Hoare's speech is about how committees make so bad decisions in practice. This phenomenon is not new, but its reasons are still not clear to me. Hoare, together with the experts in programming languages at the time, has been part of several committees with the objective of defining a new programming language, and some of the resulting languages were a disaster.
An interesting point about Hoare's career is that he moved from industry to academia in order to work on the formal definition of programming languages, something that he was not able to do as business. This kind of transition still happens in Computer Science, but I think it is much rarer today. On the other hand, I've found several examples of people leaving academia to industry, specially to work for big companies such as Google, Facebook, and Microsoft.