For papers not on this list, it may be worth searching the Collection of Computer-Science Bibliographies.

Required texts

Norman Ramsey and Sam Kamin (with Russ Cox), Programming Languages: An Interpreter-Based Approach, Draft manuscript, December 2006.
This is the main text for the course. It is a revision (in progress) of Sam Kamin's 1990 textbook. Kamin did an excellent job of cramming a lot of good ideas into a few chapters. To make it possible, he extracted the essence of many different programming languages, and he has expressed those essences in a uniform, LISP-like syntax. Ramsey has updated the text with material on abstract syntax and operational semantics, and with help from Cox has modernized the software associated with the book. Source code and examples from the book are available on the web and on the FAS ``nice'' servers at ~cs152/software.

Because the book is a work in progress, it is not available at the bookstore. Instead, you can get a copy in Maxwell Dworkin 133.

There is a list of errata for the book; you are encouraged to add to it.

Jeffrey D. Ullman, Elements of ML Programming (ML97 edition) , Prentice Hall, Englewood Cliffs/NJ, 1998.

The best introduction to Standard ML for C programmers.

Lloyd Allison, A Practical Introduction to Denotational Semantics , Cambridge University Press, 1986.

This book is short, practical, and easy on the mathematics. It is the only book I know that emphasizes semantics as a tool for language designers and implementors (as opposed to a branch of mathematics).

Supplemental Readings

Particular Languages

C

ML

Scheme

Prolog

CLU

The main source for CLU is the book: Barbara Liskov and John Guttag, Abstraction and Specification in Program Development , MIT-Press / McGraw-Hill, 1986. There is a portable implementation of CLU.

Formal methods for Program Correctness

Memory Management

Theory and Formal Methods

Programming-Language Design

Writing

Miscellaneous Techniques, etc

Literate Programming

General Algorithms

UNIX

Programming Style

Immutable Strings

Floating-Point Arithmetic

Multiple-precision Arithmetic

Game-playing programs

Embedded languages

Continuation-passing style