Dr. Kenneth Iverson Passes Away

Ken Iverson, creator of APL and J, passed away this week.

Comment viewing options

It Has Begun

First Hopper, then Dijkstra, and now Iverson. Our young field is beginning to lose its leading lights. I live in dread of the day when I learn that Knuth has passed, or McCarthy. I worry about who will—who could possibly—replace Martin Gardner when that day comes.

But I'm being selfish. I wish to extend my condolences to Dr. Iverson's family, who have of course not lost a leader in their field, but their father, husband, and friend.

It started longer ago than that...

Christopher Strachey, anybody?

I don't think that Knuth is a leader in the field of programming language design. TeX rather stands as proof of that. and there is room for disagreement on whether Dijkstra's contribution will stand the test of time.

But this shouldn't be what this thread is about. Iverson's death is a real loss.

Dijkstra's contribution...

Dijkstra was part of the committee who designed Algol 60. As all imperative programming languages today draw on Algol, his contribution is not likely to go away.

Maybe Cas had Dijktra's work on programming as mathematics in mind when he wrote that. That work is also well alive in declarative/constraing/contract styles of programming, if not in actual pencil-and-paper program derivation.

Well...the question is really

Well...the question is really whether imperative languages will stand the test of time. There're quite a few fans of Haskell and other functional languages on LtU.

Dijkstra was always pretty insistent that state was an inherent part of computing and ought to be reasoned about formally instead of eliminated. Most of the proof techniques in A Discipline of Programming involved assertions about the state of program variables at a given execution point.

I wouldn't use popularity as a criteria

Well...the question is really whether imperative languages will stand the test of time. There're quite a few fans of Haskell and other functional languages on LtU.

Well, except maybe in academics ground, imperative language are used far far more often than functionnal language, so I wouldn't use popularity as a criteria against imperative languages!

Mutable state

Well...the question is really whether imperative languages will stand the test of time. There're quite a few fans of Haskell and other functional languages on LtU.

I don't know about imperative languages, but mutable state will certainly stand the test of time in my view. There are fundamental reasons why it is an important concept, related to modularity and growth of systems.

Dijkstra cared mostly about simplicity. He _did_ show how reasoning about programs with mutable state can be made simple.

Now I like Haskell, as far as I understand it; but it seems to me that advanced techniques in functional programming, such as monads or continuations, make it more difficult to reason about programs. At the very least, they defy the intuitive notion that you can easily reason about a functional program like we reason about ordinary mathematical expressions.

So Dijkstra's point would be that when a problem cannot be solved by a simple functional program, then it is appropriate to solve it with a simple imperative program.

Of course, what's simple for you might be complicated for me... anyway, Dijkstra's guarded commands language, and the style of proof that is associated with it, based on weakest preconditions, are very simple and elegant.

Obituary

We need to post one. If someone wants to take it upon himself to write an obit for Iverson, please do.

Wikipedia

There is an actively maintained Wikipedia article on Iverson; putting this into shape and then using it as a template for the obituary seems to me a good way to begin.

Globe and Mail Obituary

An obituary has appeared in Canada's national newspaper, Globe and Mail.

Functional Programming and the J Programming Language

I'll use Ehud's post above as a place to anchor links to Iverson, and his legacy.

APL & J are not often taught in depth in undergraduate courses. John Howland, author of Using J as an Expository Language in the Teaching of Computer Science to Liberal Arts Students, teaches Functional Programming and the J Programming Language, one of the few that do, with emphasis on Iverson &c's J Dictionary (pdf).

Iverson

Kenneth E. Iverson (1920-2004) is well known as the designer of APL and J. APL [A Programming Language, 1962] is the prototypical "array programming language," having as its primary data structure the multi-dimensional array and providing a rich set of array processing primitives. Several other languages continued to evolve this approach. Notable among them are K and A+ developed by Arthur Whitney.

APL used to have quite a following, and APL die-hards still see it as one of the most elegant programming languages ever designed, if not the most elegant. However, APL did have some quirks, most notable among them, of course, is the reliance on an extended character set not available on most keyboards, and until recently requiring special facilities to display, print and edit.

Iverson's later work on J implemented his more recent thinking about programming (including things like support for richer phrasal forms, tacit programming, and verb rank). J uses regular ASCII characters, but continues APL's tradition by providing a large set of cryptic but very powerful built-in array operators. Deciding which of the two languages is more readable, is a matter of personal taste.

Iverson enjoyed language and words, and is reported to have read dictionaries "like people read novels." The J language is defined and explained in The J Dictionary.

Iverson was awarded the Turing Award in 1979 [f]or his pioneering effort in programming languages and mathematical notation resulting in what the computing field now knows as APL, for his contributions to the implementation of interactive systems, to educational uses of APL, and to programming language theory and practice.

His Turing Award lecture is titled Notation as a Tool of Thought a phrase that has become associated with him, and perhaps best summarizes his interests and contributions. The lecture is still worth reading by anyone interested in programming languages and notation design.

I conclude with a couple of quotes from Iverson, and a brief explanation of some J terminology.

The thesis ... is that the advantages of executability and universality found in programming languages can be effectively combined, in a single coherent language, with the advantages offered by mathematical notation. -- Notation as a Tool Of Thought, CACM, 23:8, 1980.

[T]he initial motive for developing APL was to provide a tool for writing and teaching. Although APL has been exploited mostly in commercial programming, I continue to believe that its most important use remains to be exploited: as a simple, precise, executable notation for the teaching of a wide range of subjects. -- A Personal View of APL, IBM Sys. Journal, 30:4, 1991.

Rank

An central concept in J, unifying and simplifying the handling of array functions (verbs).

A rank-k cell of A is a subarray of A along k contigous final axes. Primitive functions have intrinsic rank, and operate on arrays as collections of cells of the appropriate rank. For example, matrix inverse has rank 2. When applied to an array of shape 5 4 3, it treats it as a collection of five 4X3 matrices and produces a result of shape 5 3 4.

J allows the programmer to specify the rank of cells a verb should operate on. Rank coercion works for built-in verbs and user written verbs alike.

Tacit Programming

Iverson used the term tacit programming to refer to function definitions which make no explicit mention of the function arguments. The classic example is the average funcion.

sum=. +/       NB. reduce the argument using +
avg=. sum % #  NB. (sum x)%(# x)
NB. [this is the fork phrasal form]

This idea is closely related to the so called point free style in functional programming. Tacit definitions make use of combinators, and are related to the notions found in combinatory logic.

Iverson was one of the pioneers in the field of programming language design, and his contributions and ideas influenced the thinking of many, be it directly or indirectly.