Foundational Papers in Programming Languages
Here's a rather good paper of the sort that I wish someone had shown me when I first started as a grad student: Conception, evolution, and application of functional programming languages, by Paul Hudak (1989). It gives a good history of how functional languages arose (from Lisp, ISWIM, KRC, and so on) and coalesced (into ML and Haskell and the like), and describes in some detail the salient features of (and issues within) functional programming, including pattern-matching, algebraic datatypes, memoization, nondeterminism, and of course, type-inference and polymorphism. It also includes a short bit on formal semantics, which might give an neophyte the flavor of such a formalism without getting too heavy. The paper is fairly long, but it covers a lot and is written in the old style of clear, readable prose with a minimum of specialized notation.
I found the paper from a link on Wikipedia.
Other papers that fall into this class ("classic papers I wish I'd seen at the beginning") include "The Next 700 Programming Languages" and "The Mechanical Evaluation of Expressions,"[1] both by Peter J. Landin. (I'll post more as I think of them.)
Tree papers that I gladly did read at the beginning are "Definitional Interpreters for Higher-Order Programming Languages" (1972—the original typewritten version is better than the one typeset in TeX that you find sometimes), "The discoveries of continuations" (2005), and "Gedanken" (1970), all by John C. Reynolds. The latter introduces (?) the nice idea of an escape
construct (now often called let/cc
) and "references" as first-class values (or is that older?).
[1] Sadly no longer available online.
Comments
Benjamin Pierce's list seems worth a look as well. It's interesting to see that some of the pretty-great works listed were written by grad students.
Posted by: Jeremy | September 13, 2007 10:08 AM
That list is useful, indeed.
Yet, I think I would get much more out of a personal recommendation. What does Pierce have his grad students read, for example?
Posted by: Ezra | September 13, 2007 12:26 PM