A letter about APL


Tuesday 12 January 1982

On Tuesday 12 January 1982, Dijkstra wrote a letter to Dr. A. Caplin explaining why he had his reservations about the language APL (A Programming Language). Dijkstra did this in response to an earlier letter that he had received from Caplin, a letter in which Caplin asked whether Dijkstra favored APL and, if not, why not. In Caplin's words:

[I] was struck by [...] your search for a notation from mathematics that ``embraces all the required concepts of programming as well as enforcing the discipline of scientific method''. Surely you know that one such notation [APL] does exist, and was worked on by Ken Iverson in Harvard as far back as 1957. [...] Perhaps you have looked at it and dismissed it --- if so, why?

Ken Iverson was the 1979 Turing Award winner. His APL language inspired many researchers, including Donald Knuth and Gerrit Blaauw.

The Dutch engineer Blaauw was a colleague of Howard Aiken during the late 1940s and early 1950s, a colleague of Dijkstra in Amsterdam during the early to mid 1950s, and an employer of IBM in New York from the mid 1950s to the mid 1960s.

After working with Aiken in Harvard, Blaauw brought a lot of know-how with him when he joined the Amsterdam team in 1952. Blaauw showed Dijkstra's colleagues, Loopstra and Scholten, how to build reliable computers that actually work. In 1955, Blaauw left the Netherlands again, this time to join IBM in New York. He became famous during the early 1960s after introducing his three levels of concern: architecture, implementation, and realization. Blaauw was a leading architect of the IBM System 360 together with Fred Brooks and fell in love with Iverson's APL notation.

In 1965, Blaauw returned to the Netherlands to start an academic career at the recently founded Technische Hogeschool Twente. Blaauw taught his students how to design the IBM way. He advocated using one general language, APL, to design both the software and hardware of a computer. Blaauw's design approach was one of prototyping: first build a prototype of the system (by programming in APL), experiment with that prototype and only afterward start implementing the real system.

Blaauw's emphasis on prototyping contrasts with what Dijkstra was delivering in Eindhoven during the 1960s. In fact, already during his earlier years in Amsterdam, Dijkstra wanted to prove a program correct by mathematical reasoning alone. Testing, as advocated by Blaauw, was a last resort to Dijkstra. Nevertheless, even though Blaauw and Dijkstra had different design philosophies, they did remain friendly (albeit somewhat distant) colleagues for the rest of their careers.

Contrasting Blaauw's design perspective with that of Dijkstra helps us understand Dijkstra's response to Caplin's letter. In Dijkstra's words:

A typical characteristic of the APL devotee is, for instance, his closeness to an implementation of it. I know of a visiting professor at an American University who, trying to teach APL, bitterly complained about the absence of APL terminals. He was clearly unable to teach it without them. [...] This is in sharp contrast to people who prefer programming languages that can be adequately ``demonstrated'' ---i.e. shown, taught and discussed--- with pencil and paper.

Abstraction from the machine is what, according to Dijkstra, APL failed to offer.

Source: both letters are in my archive (Map 1: T.U.E. 1973-1984).


1 Comment

Dijkstra considered incorrect

I think you're right in your assesment that "[a]bstraction from the machine is what, according to Dijkstra, APL failed to offer" and Dijkstra was clearly wrong about this. APL existed for years as a design language before it was implemented.

In a recent posting, commenting on the same letter you reference, Roger Hui uses APL notation for mathematic-like proofs: http://archive.vector.org.uk/art10501260 . Roger is the chief implementer of Iverson's later version of APL, called "J".