Human communication versus communication with a machine


October 1961

In his technical report (MR 34) of October 1961, Dijkstra made an analogy between human communication and communication with a machine and noted that the analogy is ineffective, an observation which complies with the earlier analogy he made between mathematics and programming, which he viewed to be effective.

According to Dijkstra, human behavior is, in general, unpredictable. Therefore, when two humans speak to each other and wish to understand each other, they need to "speak the feedback, known as `conversation'". That is, they need to interact. Dijkstra viewed an automatic computer, by contrast, as being completely predictable in its behavior. Hence, one-way communication from programmer to automatic computer is possible (and desirable). From this point of view, there is no need for interaction between the programmer and the automatic computer in the form of e.g. testing or debugging.

Dijkstra thus contrasted the informal world of human-to-human communication with an in-principle completely formalizable world of program-to-computer communication. By stating that an automatic computer is completely predictable, Dijkstra was actually referring to a virtual machine, i.e. a mathematical object, not an actual physical device which does have several unpredictabilities. Dijkstra was thus, from the start, discussing the formalizable parts of solving a problem by means of a computer. He was discussing programming and, while doing so, relying on his previously made assumption that programming and mathematics are effectively analogous.

Dijkstra eschewed the informal aspects of computing in his report. For instance, he did not mention the transition from informal requirements to a formal specification or formal program. Nor did he mention the transition from a formal program to the execution of that program on an actual physical device. Unsurprisingly then, Dijkstra was — especially in later years — perceived as somebody who focused primarily on the formal apparatus of his profession, much to the dismay of some of his contemporaries.

Concerning completely predictable (virtual) machine behavior, Dijkstra continued in his report by expressing the desire to define the semantics of a programming language in terms of a (virtual) machine that is "so complete as to react [...] to every arbitrary string of symbols [...]". Inspired by Van Wijngaarden, Dijkstra noted:

When we have thus defined our language, its semantics are completely fixed and its syntax [...] does not have a defining function anymore [...] I regard the definition of its semantics as the design, the description of a machine that has as reaction to an arbitrary process description in this language the actual execution of this process.

The above passage shows that Dijkstra and Van Wijngaarden were (i) not logicians and (ii) were thinking operationally albeit with respect to a virtual machine, not an actual one. According to them, the semantics of a programming language is defined by the structure of a virtual machine, i.e. a mathematical object pur sang.



Dijkstra did not like Object Orientation analogy either

Dijkstra was hostile toward Object Orientation metaphors and analogies too, and was hostile to object orientation in general. He calls it a terrible idea originating from california (even though it may actually come from another part of the world, Norway, but I'm not sure).

The irony and contradiction however is that object orientation was implemented in Wirth's latest language Oberon. Dijkstra didn't seem to grasp modularity either - he doesn't have much written about Modula or Oberon. I think object oriented programming and modularity is just an extension to structured programming. If you look at Oberon or C++ objects, they are very much like STRUCTS in C, or RECORDS in pascal. So for Dijkstra to be against object orientation is very ironic since actually Object Orientation is just the new emperor's clothes (structured programming with extensions)

Another contradiction and ironic thing is that Dijkstra was against teaching by example, whereas Wirth as an engineer preferred examples. There is a video of Wirth speaking about this at some public meeting with Dijkstra, I think on youtube. If anyone has the links, post them.

Are you joking...?

"...Dijkstra didn't seem to grasp modularity either..." Are you joking? His writings, spanning 40+ years contain numerous discussions about the proper modularisation of calculations, arguments, proofs, designs, and so forth. You might say that this question was a major focus of his entire career. Please, study Dijkstra's work before making wildly inaccurate (and rather ridiculous) statements about him.