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

Required texts

Norman Ramsey and Sam Kamin, Programming Languages: An Interpreter-Based Approach, Draft manuscript, January 2011.
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 he has modernized the software associated with the book. Source code and examples from the book are available in a git repository at linux.cs.tufts.edu:/comp/105/book-code.

Because the book is a work in progress, it is not available at the bookstore. Instead, you will need to buy a copy from the instructor. The cost, which covers only the cost of reproduction, is $35.

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

The best introduction to Standard ML for C programmers.

David Schmidt, Denotational Semantics: A Methodology for Language Development, Allyn and Bacon, 1986.

It's hard to find good books on denotational semantics. The advantage of this book is that a free PDF is available on Creative Commons license. I haven't used it before, but I hope it will prove useful.

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