APL, developed in early 1960s, is still used, especially in finance. More felt is its influence on algebra of programming (via FP) and on Matlab. Started as a notation for a (tensor) algebra course, APL lets us look at computation from a vantage point, discern patterns of data flow and put them into words.
APL was developed when parsing technology and the art and science of programming language design were just emerging. It is only now that we understand, from experience and information theory, that trying to assign meaning to any possible combination of tokens is a bad idea. Mathematical notation is also evolving and sometimes messy and hence is not always a good basis for a programming language. (The evolution of Maxwell equations notation comes to mind.)
How to liberate APL from its style? For two years, I have been trying to explain APL ideas to two bright sophomores, by implementing step by step a small array DSL embedded in OCaml. The students never heard of OCaml, let alone APL. In my tutorial, I will give a taste of that seminar course and tell what came out of it: a new understanding of Game of Life and Plasma Fractals, leading to many tantalizing extensions.
Explain main ideas and innovations of APL, and how to realize them in one’s favorite language
On many examples (mainly involving arrays, matrices, images) show how to look at computation from a `higher’ point of view; how to see, and make explicit, data flow; how use and design operations on whole arrays. (Hint: loops or recursive functions are both low-level). The higher level does not have to mean inefficient!
The main ideas are actually very old. We are going back to the origins of procedural, flowchart, and modular programming: the ideas of Iverson, McIlroy, Parnas, Goguen – but look at them with today’s eyes and using today’s languages.
I will use my favorite language, OCaml. I deliberately use a very simple subset of OCaml: essentially, typed lambda-calculus with some data types and constants. The code can be easily re-implemented in Scala, Haskell, F# – probably Swift, Rust and even Java.
Mainstream software developers, exposed or curious about imperative-less programming. The knowledge of neither APL nor OCaml is presupposed.
The tutorial is about the Art of programming: a way of programming by discerning patterns of data flow, and by finding, or coining, words to aptly express them