We tiptoe on the broad shoulders of giants.
This course draws liberally from How to Design Programs and How to Design Worlds (both by Felleisen, et al.). We lean heavily on the book and papers of Chris Okasaki. Other books we're especially fond of include Structure and Interpretation of Computer Programs (Abelson and Sussman with Sussman), Data Structures and Network Algorithms (Tarjan), and the remarkable Introduction to Algorithms (Manber). We've also drawn on work by Chris Okasaki, Ralf Hinze, Guy Steele, and Manuel Blum. If your education doesn't lead you to these authors and works, educate yourself.
Special thanks to the following people with whom we have had enlightening conversations, who have suggested some of the material for and exercises in this course, or who have helped us perform the preparatory work for it: Jeff Stix, Danny Yoo, Kathi Fisler, Matthias Felleisen, Prabhakar Ragde, John F. Hughes, Chris King, Guillaume Marceau, Chris Okasaki, Brendan Hickey, Philip Klein, Steve Reiss, and Amy Greenwald.
Very special thanks to the staff of cs019 from its first offering in Fall 2009: Ethan Cecchetti, Jake Eakle, Alvin Kerber, Alex Kruckman, and Jon Sailor. They invested an enormous effort to get this course off the ground, literally constructing it from scratch. The course wouldn't exist without their help.
We have also borrowed material, especially labs, from Brown cs17 courses in past years. We thank them for these materials.