The Cruelty of Really Teaching Computer Science
|
"The Cruelty of Really Teaching Computer Science" is a 1988 paper by E. W. Dijkstra, which argues that computer programming should be understood as a branch of mathematics, and that the formal provability of a program is a major criterion for correctness.
Despite the title, most of the article is on Dijkstra's attempt to put computer science into a wider perspective within science, teaching being addressed as a corollary at the end. Specifically, Dijkstra states a "proposal for an introductory programming course for freshmen" that consists of Hoare logic as an uninterpreted formal system.
Criticism
Dijkstra's position was and is controversial among software engineering proponents. The paper triggered a discussion in 1990 in the Communications of the Association for Computing Machinery because many computer science educators felt that Dijsktra's views were exclusionary of women, who, it was claimed, would be more interested in group projects and the use of software products, in place of the exacting demand, by Dijkstra, for formal, mathematical thought by individuals, who would then defend their programs and derivations to like-minded peers.
Dijkstra felt that "really teaching" computer science was imparting, to the student, the ability to work within formal systems and although he believed that computer science is "applied" mathematics, Dijkstra did not believe that the sobriquet "applied" weakens the "cruelty", but rather that it makes it "worse".
From "real life", down to examples involving the linkage of railroad cars, Dijkstra throughout his career gave examples of how rigid formal constraints emerge from practical examples and as such presented a confusing picture. On the one hand, many people in the discussion and outside felt he was the very type of the "ivory tower" theorist, but on the other hand Dijkstra's methodology demanded that the practitioner, since computer science is applied math, do the "math" all the way down to program code and/or linking railroad cars in such a fashion to minimize trips to the loo.
This was strange to his audience because computer science, by 1990 a "mature" discipline, had become bifurcated itself into the practical and applied, and as a result of this bifurcation, many students were beginning to ask in good faith why they (to use a common complaint) had to learn how to write "a compiler" when so many "compilers" had been written.
They asked, in good faith, whether it wouldn't be better to learn how to interact as a team player and use the numerous software tools to solve problems, and why it was necessary to be so apparently arrogant as to appoint oneself to re-analyze the problem, "all the way down".
Others framed computer science as a species of engineering and pointed to the need for engineers to compromise on the one hand with the physical world and on the other with cost control. This view was foreign to Dijkstra as well after his initially positive reaction, in 1968, to the then-neologistic phrase "software engineering" because he viewed the cost controls as artifacts that could become excuses and the controls of nature as nonexistent in digital systems, which above the level of circuits guarantee a second, constructed nature.
Dijkstra, to the end of his life, maintained that computing's central challenges haven't been met to his satisfaction because he seems to have had a very strong belief that the "truth" of computing (program correctness) should take pride of place. He didn't replace all other criterion of quality (such as maintainability and efficiency) with correctness; the view that he did derives from an inability to see how Dijkstra thought.
Dijkstra, it seems from the record, thought in a way derived from his early training and education, a traditional education in Holland which was meant to prepare an elite (similar to that in France) not for technical tasks but for legislation and governance. This type of training in the "ideal world" requires the statesman to think in a way described as "lexical" in that the statesman (again in a terribly ideal world) satisfies Constitutional principles before other "priorities", and the statesman doesn't "do" trade-offs that sacrifice core principles.
Dijkstra took this world-view (which is based in part on Kant) into a technical career, and seems to have believed that program correctness was "constitutional" in that an incorrect program (or group solution) was worthless or even of negative worth.
His view seems to have been shared by earlier computer scientists: for example, in Gerald Weinberg's 1972 book The Psychology of Computer Programming, Weinberg related a story in which a programmer, proposing an elegant but "inefficient" solution, tells the author of the inelegant, "efficient", and buggy solution, "but your solution doesn't work: if the solution doesn't have to work, then Begin..End is a valid solution".
However, this worldview never became universal and in the name of controlling "costs" often invisible to the applied computer scientist, it has been replaced by trading-off correctness with "getting it done" in a way Dijkstra did not like.
At the bottom of Dijkstra's famous aphorisms and his "cruelty" article is sedimented a set of core ideas including the priority of computing truth, and also the assumption that the computer scientist, as such, will be a traditional subject (often called an "intellectual") who would not stop thinking when the thinking stepped beyond the needs of the institution or group. The fact that he also stressed the applied nature of computing merely shows that he hadn't learned to draw a bright line between opposed terms (such as pure and applied) which he may have felt, based on early exposure to Kant, were an organic unity: two things that die in isolation from each other.
Today, in most cases, computer science is taught very differently from the way in which Edsger would want. It is taught to students who have preselected themselves as numbers people where numbers are bifurcated from words and in some sort of opposition, and also as practical, hard headed people, concerned with securing their rights as part of an identity group in many cases (such as women).
Unfortunately, this fails to prepare many for the "cruelty" of writing, for example, a C compiler in C, and, the very act seems unnatural, and carrying coals to Newcastle in the problem formulation alone. At one and the same time, Dijkstra seems to have had no pity for these students, and a great deal.
Whether or not one "agrees" with Dijkstra, engaging his works as a form of computing philosophy is rewarding, and his battle over the Cruelty was, if not his finest hour (as was, probably, his letter in March 1968 to CACM about structured programming) an illuminating moment, in which failure to understand occurred on both sides of the issue.
External links
- Handwritten manuscript (http://www.cs.utexas.edu/users/EWD/ewd10xx/EWD1036.PDF) in PDF format.
- Transcription (http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html)