Five elements of mental discipline.

One of Dijkstra's main questions was:

"Can the programmer arrange his activity in such a way that his growing product remains firmly in his intellectual grip, that he continues to understand what he is doing?" [EWD303]

To write structured programs, Dijkstra proposed five well-known techniques:

  • sequencing
  • operational abstraction
  • representational abstraction
  • configurational abstraction (cf. layered software)
  • textual encapsulation (cf. modularity)

The latter two are discussed here.


Computer efficiency

Here is what a reviewer had to say about the research paper `Dijkstra’s Rallying Cry ...':

The paper is, in essence, about an argument of generality versus computer efficiency. The argument was eventually settled in favour of the former due to the enormous advances in electronic technology. Today, computer efficiency is not an issue any more.

Is this correct? The last sentence seems to contradict Martin Reiser’s “law” which states that


Humble with regard to virtual storage.

Looking back at the late 1960s, Dijkstra mentioned that progress had been made in processor allocation, mainly due to the work of his students Bomhoff and Feijen. With respect to virtual storage implementations, however, Dijkstra humbly admitted that much had still to be done on this subject. Even though he had spent months trying to do so, he was stil not able to find the right abstractions. [EWD300]