Ken Iverson
| Ken Iverson | |
|---|---|
| Nationality | Canadian |
| Death date | 2004-10-19 |
| Birth date | 1920-12-17 |
| Known for | Creator of APL; Array programming paradigm; Iverson notation |
| Fields | Computer science; Mathematics |
| Notable works | A Programming Language (1962) |
| Awards | Turing Award (1979) |
| Wikidata | Q92629 |
Ken Iverson (1920–2004) was a Canadian mathematician and computer scientist best known as the creator of the programming language APL and a pioneer of the array programming paradigm. APL (short for “A Programming Language”) uses a concise, symbolic notation to manipulate arrays (vectors, matrices, and higher-dimensional tables of data) as single entities. Iverson believed that good notation should serve as a “tool of thought,” combining the clarity of mathematics with the universality of executable code. He championed interactive computing and educational uses of computing as part of his vision. For these contributions – especially the development of APL and related ideas – he was awarded the ACM Turing Award in 1979. Iverson’s work has had a lasting influence on later array-oriented languages and data-analysis tools (from MATLAB and R to Python’s numerical libraries), and on how programmers exploit hardware vector instructions and parallel processing today.
Early Life and Education
Ken Iverson was born on December 17, 1920, near Camrose, Alberta, Canada. His parents were farmers of Norwegian descent who had settled in Alberta as children. Iverson began schooling in a one-room rural schoolhouse in 1926 but left formal education after Grade 9, during the Depression, to work on the family farm – partly because he did not want to become a teacher. A self-learner from an early age, Iverson later took correspondence courses in high school subjects and taught himself calculus from a textbook.
In 1942, Iverson was drafted into the Canadian Army during World War II, and in 1943 he transferred to the Royal Canadian Air Force as a flight engineer specializing in reconnaissance. During his service he completed nearly a full high-school curriculum by correspondence. After the war ended, encouraged by fellow servicemen, he enrolled at Queen’s University in Kingston, Ontario, benefiting from veterans’ education programs. There Ken Iverson studied mathematics and physics, graduating first in his class with a B.A. in 1950.
Iverson won a scholarship to Harvard University for graduate studies in mathematics. He earned an M.S. in 1951 and a Ph.D. in Applied Mathematics in 1954 from Harvard. His doctoral research (supervised by computer pioneer Howard Aiken and economist Wassily Leontief) extended Leontief’s economic input-output models to include capital goods. This work involved heavy use of matrix (array) computations, motivating Iverson to write software for the Harvard Mark I computer to experiment with large matrices. His education – combining pure mathematics, new “automatic data processing” at Harvard, and practical work – forged the foundations for his later ideas about mathematical notation and programming.
Major Works and Ideas
Iverson’s central contribution was APL, a highly expressive programming notation that treats arrays as fundamental objects. The genesis of APL began in the late 1950s while Iverson was teaching and researching at Harvard. He found traditional mathematical notation inadequate for describing data-processing tasks. In a graduate course on automatic data processing, he started developing a new notation based on matrix algebra and tensors. In 1957 he took a leave to work in industry (at McKinsey & Co.) and used this notation to describe data-processing concepts. His first paper using the notation was “The Description of Finite Sequential Processes” (1960).
After joining IBM Research in 1960, Iverson published two books that distilled his notation and ideas: Automatic Data Processing (with colleague Fred Brooks, 1963) and A Programming Language (1962). These works (originally part of one project) introduced a rich symbolic grammar for array manipulation. APL’s design had several key ideas:
- Arrays as first-class values: Instead of iterating over individual numbers, operations in APL apply to whole arrays at once. An array can be a vector (one-dimensional list), matrix (two-dimensional), or higher-dimensional. For example, adding two matrices corresponds to adding each pair of elements; APL allows such vectorized operations natively.
- Operators and functions: APL built upon mathematical functions (like addition, multiplication, sine, etc.) and higher-order operators. A function (called a verb in APL terminology) takes arrays as arguments; an operator (or adverb/conjunction in later terminology) takes functions as arguments to produce new functions. For instance, one (binary) operator in APL is “`+/`” which means “sum reduction”. Writing `+/A` on an array `A` yields the sum of all its elements. This single symbol `+/` both signifies the addition function and the idea of applying it across an array.
- Concise, symbolic notation: APL used unique keyboard symbols (some borrowed from mathematics and some invented) to represent array operations. For example, `×` for multiplication, `÷` for division, `⍴` (rho) for reshaping arrays, `⌈` for maximum, and so on. APL’s terseness meant that complex expressions could be written compactly. (This also meant it required special fonts or keyboards, which later was addressed by descendant languages.)
- Interactive, exploratory programming: APL was one of the first languages designed for interactive time-sharing systems. Instead of the batch processing norm of the era, users could type expressions at a terminal and see immediate results. This made APL suitable for teaching, prototyping, and exploratory data analysis. In 1966 Iverson and his IBM colleague Adin Falkoff worked with philosophers Larry Breed and Phil Abrams to implement APL\360, an interactive interpreter for the IBM System/360. The APL\360 system was renowned for its efficiency and powerful features (Garce Hopper Prize, 1973, recognized the team’s work).
Iverson’s Turing Award citation (1979) summarized his achievements: he “pioneered programming languages and mathematical notation” that became APL; advanced interactive computing; promoted educational uses of APL; and contributed broadly to programming language theory and practice. His famous Turing lecture was titled “Notation as a Tool of Thought,” highlighting his view that carefully designed symbol systems could extend human reasoning power. In it he argued that a clear, executable notation might first appear hard to learn but could expose patterns that lead to more efficient algorithms later. This philosophy permeated much of Iverson’s work: he often said that freeing the mind from tedious bookkeeping by using good notation allows focus on higher problems.
In the 1970s and 1980s Iverson continued to refine APL’s ideas. He wrote influential papers like “Operators and Functions” (1978) which clarified APL’s function/operator design, and “Rationalized APL” (1984) which sought to standardize and extend the language (for example by formally adding nested arrays or boxed arrays). He worked at I.P. Sharp Associates in Toronto (1980–87), a center of APL innovation. There he collaborated on Dictionary APL, an effort to codify the language’s syntax and semantics in a definitive reference manual (often called the Dictionary). He also developed J with colleague Roger Hui in 1990. J is a modern array language carrying on APL’s legacy: it re-implements APL’s ideas using ASCII characters (no special symbols) and adds new refinements (such as explicit rank operators and more orthogonal combinators). J kept Iverson’s vision alive on personal computers and modern Unix/Windows platforms.
Method and Philosophy
Iverson’s approach to programming language design was distinctive. He treated a programming language primarily as a notation – a system of symbols and rules – rather than simply as instructions for machines. He believed notation should reduce cognitive load, channeling human thought into calculations as directly as possible. As Iverson put it, a well-crafted notation “relieves the brain of unnecessary work” and allows it to focus on complex ideas. In practical terms, this meant APL prioritized expressive power and orthogonality (few constructs combining in many ways) over mnemonic ease.
Two key components of Iverson’s methodology were abstraction over arrays and function composition. By making arrays fundamental, he enabled programmers to think at the level of entire data sets instead of element-by-element loops. For example, the concept of a reduction (collapsing an array along a dimension) and a scan (cumulative reduction) were built-in behaviors in APL. Similarly, the idea of a rank of a function (the number of dimensions it naturally operates on) helped formalize how functions apply to multidimensional data. Iverson also embraced higher-order functions: in APL, one can apply an operator to any (noun or function) argument and produce a new function. This led to elegant definitions of things like inner and outer products, and allowed writing code in a “point-free” or tacit style without naming intermediate arrays.
Interactive computing was another cornerstone of Iverson’s view. From the early 1960s, APL was meant for rapid feedback: mathematicians and analysts could experiment at a terminal, using expressible notation closely tied to their mathematical intuition. Iverson worked closely on the implementation side to support this; APL’s interpreters executed powerful operations in short time and often provided immediate results to users. This emphasis on the human–computer conversation prefigured later interactive environments (like MATLAB or Mathematica) and is now taken for granted in data-analysis tools.
It is important to define some terms Iverson used. An array is a collection of values (like numbers) arranged in one or more dimensions. A scalar is a 0-dimensional array (a single number); a vector is 1D, a matrix is 2D, and so on. In an array language, a quaternary array can be multiplied by another by applying the multiplication function across matching elements (or using matrix multiplication as an example of an array operation). A function (or verb in Iverson’s later parlance) takes arrays as input and returns arrays; an operator (or adverb/conjunction) takes one or more functions as input to produce a new function. For novices, a simple illustration: in APL, writing `+/ A` means “apply the addition function (`+`) as a reduction (`/`) to the entire array `A`,” which gives the sum of all elements of `A`. This single expression replaces an explicit loop that might be required in conventional languages like Fortran or C.
Iverson also emphasized algorithmic clarity. He argued that writing out an algorithm in a clear, mathematical way is more important initially than making it run fast; once clear, one can optimize it. In this sense, APL and his notation did not shy away from expressive, complex operations even if they were not trivially efficient in early hardware. His faith was that clear expression of complex ideas as concise notation would ultimately guide efficient implementations, and indeed APL’s core interpreter routines were heavily optimized as hardware evolved.
Influence on Modern Languages
Iverson’s work has had a broad and continuing influence. The array programming paradigm he championed – manipulating whole datasets in bulk with vectorized operations – is now ubiquitous in scientific computing, engineering, and data analysis. Languages and systems that embody these ideas include MATLAB, R, Julia, and libraries like NumPy in Python. In these environments, one can add two arrays of the same size, multiply matrices, or compute elementwise sine of a vector with simple expressions. This directly reflects Iverson’s vision: to allow complex numeric and matrix computations to be written succinctly without writing loops. Even spreadsheet software loosely follows this model by allowing array formulas (for example, Excel’s array functions) that operate on ranges of cells as units.
Within the niche of “APL family” languages, Iverson’s influence is direct. The APL language itself and its successor J remain in use, and a dedicated APL community persists (there are modern APL interpreters like Dyalog APL and GNU APL). Notably, Iverson’s ideas influenced the creation of A (a language at Morgan Stanley in the 1980s) and k and q (language family by Arthur Whitney in the 1990s for high-performance financial analytics). These also use array and functional constructs in a terse form. The notion of tacit programming – defining computations by combining functions rather than naming variables – which Iverson explored deeply, can also be seen in modern functional languages and idioms (for example, function composition operators in Haskell or Kotlin).
Iverson mentored and inspired many computer scientists. Arthur Whitney, one of his collaborators on APL at I.P. Sharp, credited Iverson with developing the concept of the APL “rank operator,” and later took these ideas into his own languages A, k, and q. Roger Hui worked with Iverson on J and continued its development. Donald McIntyre, who knew Iverson from APL, also contributed to array languages and visualization (co-authored The J Programming Language later on).
More broadly, Iverson’s philosophy of notation as thought paved the way for domain-specific languages and computer-aided mathematics. Data scientists today often use languages or tools that blend statistics, linear algebra, and visualization symbiotically – a spirit that can be traced back to Iverson’s efforts to unify programming and mathematics. The technical community’s interest in vectorized processing maps directly onto the modern hardware landscape, where CPUs have vector instructions (SIMD) and GPUs do massive parallel array math. APL-style thinking showed how to express large-scale data transformations compactly, and that approach informs parallel computing frameworks and GPU programming to this day.
In industry, companies that relied on numerical computation found APL and its descendants useful. For example, investment banks and insurance companies used APL for quantitative modeling because one could prototype sophisticated calculations very rapidly. The lingering legacy is visible in specialized analytics languages (like kdb+/q for time-series data) that trace conceptual lineage to Iverson’s work.
Critiques and Challenges
While pioneering, Iverson’s APL approach also faced criticisms and limitations. The most cited challenge is the language’s steep learning curve due to its unusual notation. APL’s alphabet and symbols are unlike most programming languages; newcomers might be intimidated by a screen of non-English symbols. This made APL less accessible to programmers without extensive training. To some, APL code can appear like cryptic mathematics or even a foreign language. As a result, APL never gained mainstream usage outside certain business and academic communities. Even with tools to emulate APL keyboards, the barrier of special symbols was significant enough that it remains a niche language today. (The creation of J, which uses ASCII symbols and more verbose keywords, was partly a response to this issue.)
Another critique is that APL’s expressiveness can lead to obscure one-liners. A very concise APL program might do several complex operations in a single line; this is powerful but can hinder readability and maintainability, especially if the notation isn’t widely taught. Some practitioners joke that APL code, to the uninitiated, looks like hieroglyphics. This readability issue stood in contrast to more verbose block-structured languages like Fortran or COBOL, which teams found easier to share and review (at the expense of more typing). Iverson would counter that one should invest in understanding notation rather than dumbing it down, but in practice the trade-off limited APL’s adoption.
APL was also originally an interpreted language on relatively slow hardware, so heavy reliance on high-level array operations could be less efficient than carefully tuned low-level code. By the late 1960s and 1970s, hardware was improving, and APL interpreters (like APL2) became faster; but in the early years APL programs sometimes ran slower than equivalent Fortran code. Iverson himself argued that the clarity of an APL algorithm would eventually allow someone to derive a more efficient implementation in another form; nonetheless, performance concerns did push some in industry to switch away from pure APL when raw speed was needed.
In educational circles, some felt APL’s notational novelty distracted from learning core programming concepts. For example, teaching programming logic with APL’s terse style was not universally welcomed. In retrospect, some commentators saw Iverson’s approach as oriented toward mathematicians at the cost of software engineering principles (like modularity or error handling) that became more central later. However, others praised APL for teaching algorithmic thinking concisely.
Overall, the balance is that Iverson’s ideas were ahead of their time in many ways, even if aspects (mainly the notation) kept them from broader acceptance. His successors addressed some issues: later APLs relaxed syntax, and languages like J and others use more typical characters. But APL’s core vision – treat data in bulk – remains influential, even if in different guises.
Legacy
Ken Iverson’s legacy lives on in several ways. Technically, the array programming paradigm he helped define is now a standard feature of numerical computing. Anyone who has done data analysis with vectorized functions or written a list comprehension in Python is, in a sense, building on what Iverson invented. His ideas opened the field for thinking of entire data sets as units of computation, which is now commonplace in fields like statistics, signal processing, and machine learning.
Iverson’s emphasis on notation as a tool of thought reverberates in modern programming language theory. Today we see powerful symbolic languages (SIMD intrinsics, GPU shading languages, etc.) developed with human cognition in mind. Computer algebra systems and languages like Julia explicitly aim to combine mathematical notation with high performance — an echo of Iverson’s vision. His work also helped seed the practice of interactive programming environments, which eventually led to Jupyter notebooks and REPL-driven development in many scientific languages.
In the APL community, Iverson is commemorated by awards and remembrance. In 1983 the ACM Special Interest Group on APL (SIGAPL) established the Kenneth E. Iverson Award for outstanding contributions to APL. This yearly award recognizes those who carry forward Iverson’s ideals in implementation, education, or promotion of APL and array programming. Notable figures like Adin Falkoff, Gene McDonnell, Roger Hui, and the developers of APL systems have received this honor. The award helps keep alive the collaborative spirit Iverson fostered among APL users and implementers.
Industry and academia have also honored Iverson. He was elected to the National Academy of Engineering (USA) in 1979, received the IEEE Harry Goode Award in 1975, and was a charter recipient of the IEEE Computer Pioneer Award in 1982. In 1991 he was awarded the U.S. National Medal of Technology by President George H. W. Bush, jointly with Walter Feffer and John F. Brown for their work on APL and its bringing into broad use. He held an IBM Fellowship (1971) and was posthumously celebrated in talks and symposia on array languages.
At a personal level, Iverson influenced many students and colleagues by his teaching style and insight. Colleagues recall that he was known for mental agility and a sense of humor about odd details (for example, one anecdote from Roger Hui’s memoir recalls Iverson’s fare during a dining out – he’d crumple clean bills before tipping!). These recollections highlight his image as a brilliant and somewhat eccentric thinker. He continued to work on APL and J almost up until his death; in October 2004 he suffered a fatal stroke while working on a new J computer lab.
Today, APL and J remain active languages with communities and applications in finance, engineering, research, and education. Their existence is a living legacy of Iverson’s vision. Even when Iverson’s name is not cited, programmers use libraries and languages that echo his principles. The modern focus on array syntax in data frames, queries over data sets, and domain-specific languages can all trace threads back to Iverson’s pioneering work. In that sense, his influence is woven into the fabric of how we do computational math and data analysis in the 21st century.
Selected Works
- Automatic Data Processing (with Frederick Brooks), John Wiley & Sons, 1963. (Foundations of data processing notation.)
- A Programming Language, Addison-Wesley, 1962. (Introduced the APL notation and demonstrated its use.)
- “Notation as a Tool of Thought,” Communications of the ACM, 23(8):444–465, 1980. (Turing Award lecture on language and notation.)
- “Operators and Functions,” APL Quote Quad (APL journal), 1978. (Paper formalizing APL’s function/operator design.)
- Rationalized APL, I.P. Sharp Associates, 1984. (Monograph on a standardized APL notation.)
- A Dictionary of APL (three editions, 1984–1987). (Comprehensive reference for APL syntax and semantics.)
- The Book of J (edited by Roger Hui), 1990. (Includes contributions capping Iverson’s work on the J language.)
Timeline
- 1920 – Born on December 17 in Camrose, Alberta, Canada.
- 1942–45 – Served in Canadian Army and RCAF during WWII.
- 1950 – Earned B.A. (Mathematics & Physics) from Queen’s University (Kingston, Ontario).
- 1951–54 – M.S. (1951) and Ph.D. (1954) in Applied Mathematics from Harvard University (thesis on economic input-output models and matrix methods).
- 1954–60 – Instructor and Assistant Professor at Harvard; developed APL notation and taught data processing courses.
- 1960 – Joined IBM Research. Began publishing “Iverson Notation” and designs for APL.
- 1962 – Published A Programming Language book, formalizing the language known as APL.
- 1965 – IBM’s APL\360 interpreter (for System/360) deployed, making APL widely available on time-sharing systems.
- 1971 – Named IBM Fellow.
- 1975 – Received IEEE Harry Goode Memorial Award.
- 1979 – Received ACM Turing Award (for APL and related contributions). Also elected to National Academy of Engineering.
- 1980 – Left IBM; joined I.P. Sharp Associates in Toronto. Continued APL research and publications.
- 1983 – SIGAPL’s APL Person-of-Year award renamed the Kenneth E. Iverson Award.
- 1987 – End of tenure at I.P. Sharp. Worked on APL, then on next projects.
- 1989–90 – Collaborated with Arthur Whitney and Roger Hui to develop the J programming language. First public release of J in 1990.
- 1991 – Awarded U.S. National Medal of Technology (with Walter Feffer and John Brown).
- 1998 – Honorary D.Sc. from York University, Toronto.
- 2004 – Died on October 19 in Toronto, while still actively involved in APL/J development.
Ken Iverson’s pioneering blend of mathematics, notation, and computation remains influential. His legacy lives on in the programming languages and tools that continue to treat data as arrays and computation as notation-guided thought.