Tony Hoare nicely summarizes E. W. Dijkstra’s place in computing in chapter 25, “Forty Years with Edsger”:

[He had laid] the foundations that would establish computing as a rigorous scientific discipline; and in his research and in his teaching and in his writing, he would pursue perfection to the exclusion of all other concerns. From these commitments he never deviated, and that is how he has made to his chosen subject of study the greatest contribution that any one person could make in any one lifetime.
The volume under review consists of five parts. Part 1 presents Dijkstra’s Turing Award lecture (1972), “The Humble Programmer”--the most fascinating contribution in the book. It still deserves to be read and reread, and the concepts and observations presented there are still essential. Most importantly:

We all know that the only mental tool by means of which a very finite piece of reasoning can cover a myriad cases is called “abstraction’; as a result the effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer.

This applies to anyone dealing with “complex phenomena,” as observed independently by F. A. Hayek who also emphasized mathematical structures, that is, patterns: “The great strength of mathematics is that it enables us to describe abstract patterns which cannot be perceived by our senses, and to state the common properties of hierarchies or classes of patterns of a highly abstract character” [1]. However, “today’s programming courses rarely do justice to abstraction” (David Gries) and instead emphasize various, often inadequate, tools. As Dijkstra observed in his lecture, “the tools we are trying to use and the language or notation we are using to express or record our thoughts, are the major factors determining what we can think or express at all!” (In the 2000s, most of my graduate-level students taking information system courses knew a lot of tools but had never learned about Dijkstra--or even about the explicit use of abstraction.)

In Part 2’s 11 technical chapters, the authors--famous for their own significant inputs to computing--survey Dijkstra’s contributions and reflect on what has been learned in the decades since. With respect to concurrent and distributed systems, Butler Lampson, in chapter 3, states that “[t]he ideas of sequential process, mutual exclusion, and efficient waiting for a resource, introduced by Dijkstra in the 1960s, are still [concurrent programming’s] foundations,” and Leslie Lamport, in chapter 4, observes that “many of the ideas that we take for granted are due to Dijkstra.” As early as 1968, Dijkstra wrote: “We have found it is possible to design a refined multiprogramming system in such a way that its logical soundness can be proved a priori.” This is quoted by David Gries in chapter 7, “Development of Correct Programs”--arguably the most important chapter in Part 2, and perhaps in the entire book, since it clearly surveys the most wide-ranging influence of Dijkstra’s contributions to computing. Gries observes: “We teach programming, not programs. Edsger made this possible. He did the groundwork upon which everyone else’s work in the field is based.” As another example, Robert van de Geijn and Maggie Myers, in chapter 10, apply Dijkstra’s vision to numerical software, describing their work with quite a few appropriate epigraphs from Dijkstra. Finally, in chapter 12, Jayadev Misra discusses how Dijkstra’s ideas of structuring, so successful in programming, also apply in his mathematical papers by “streamlining mathematical arguments” in succinct and elegant styles. (It may be interesting to compare this chapter with “A Collection of Beautiful Proofs,” chosen by Dijkstra to be published in his *Selected writings on computing* [2].)

Part 3 contains reprints of nine “influential papers” by Dijkstra. As observed by Ludwig von Mises in a more general context, “valuation is subjective”; my choice would also include [3] which, with its thought-provoking title, clearly distinguishes between two kinds of thinking--pondering and reasoning. To quote [3],

Besides the reasoning that actually solves the problem, we have the--hopefully preliminary!--thinking that reduces that amount of reasoning. Let us call it “pondering” [...] When we encouter a “brilliant, elegant solution,” it strikes us, because the argument, in its austere simplicity, is so shatteringly convincing. And don’t think that such a vein of gold was struck by pure luck: the man that found the conclusive argument was someone who knew how to ponder well.

Descriptions of “pondering” or “modeling” in scientific and mathematical literature are often suppressed, resulting in “rabbits” taken out of various magicians’ hats, and Dijkstra emphasized the need to avoid such rabbits (see, for example, chapters 11, 12, 27, and 28). Also, being explicit about pondering is often frowned upon because, as Dijkstra noted at the famous NATO Software Engineering Conference, in 1968, “the reason why many programmers experience the making of predocumentation as an additional burden, instead of a tool, is that whatever predocumentation he produces can never be used mechanically.” (This is obviously correct now.)

Part 4 includes biographical essays. Notably, Krzysztof Apt’s “Edsger Dijkstra, the Man Who Carried Computer Science on His Shoulders” is an excellent assessment of the contributions in the rest of the book. Gries’s and Hoare’s essays (chapters 24 and 25) are most interesting. Of special emphasis in this part and elsewhere are Dijkstra’s 1318 reports that, consecutively numbered and with his initials as a prefix, became known and disseminated as EWDs. To quote Gries from chapter 24, “[t]he best way to learn more about this giant is to read his EWDs” (https://www.cs.utexas.edu/users/EWD/). Some of the EWDs were selected by Dijkstra to be published as [2]. Careful reading of various EWDs leads to deep and thought-provoking conclusions applicable in programming and in life: “whenever I am in need of inspiration, I [...] find and read an EWD that I am unfamiliar with” (Rajeev Joshi, Section 28.6). The EWDs contain honest and strong opinions, do not bowdlerize anything, and for some readers may be more enlightening than Dijkstra’s formally published journal papers. (Quite a few master’s-level information systems students, given the opportunity, selected their favorite EWDs and successfully used them in course exams and in professional life.)

Part 5 includes Manfred Broy’s assessment of Dijkstra as a key lecturer in Marktoberdorf Summer Schools, and Hamilton Richards’s description of Dijkstra’s archives containing a searchable collection of EWDs.

Computing classics are still valid. One can (hope to) agree with Manfred Broy’s statement that, “hopefully, many of his early thoughts will help us to find our path into the future.” However, as an example of the current sad state of affairs, one may quote Brian Randell’s contribution (chapter 26):

For years it was almost obligatory, in any new paper on operating system design, to reference [Dijkstra’s paper, reprinted as chapter 18], especially its structure as a hierarchy of levels of abstraction. Now I fear there are generations of computer scientists who have never heard of it. I urge all members of these generations to read it.

One should also consider Dijkstra’s warning from his Turing Award lecture:

The first effect of teaching a methodology--rather than disseminating knowledge--is that of enhancing the capacities of the already capable, thus magnifying the difference in intelligence. In a society in which the educational system is used as an instrument for the establishment of a homogenized culture, in which the cream is prevented from rising to the top, the education of competent programmers could be politically impalatable.