We tiptoe on the broad shoulders of giants.
This course draws liberally from How to Design Programs (Felleisen, et al.). We’re also especially fond of Structure and Interpretation of Computer Programs (Abelson and Sussman with Sussman), Data Structures and Network Algorithms (Tarjan), and Introduction to Algorithms (Manber). We’ve also drawn on work by Chris Okasaki, Ralf Hinze, Guy Steele, and Manuel Blum. You should read these works and authors in the original.
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 (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. Thanks, similarly, to the staff from the second offering (Fall 2010): Kshitij Lauria, Aimee Lucido, Dan Kimmel, Jonah Kagan, Jordan Place, Nathaniel Ford, and Varun Singh. From the third offering (Fall 2011): Jonah Kagan, Aimee Lucido, Andrew Kovacs, Evan Li, Jeanette Miranda, John Connuck, and Kshitij Lauria. From the fourth offering (Fall 2012): Aimee Lucido, Andy Chen, Jason Fedor, Vishesh Jain, Andrew Kovacs, Roie Levin, Jincheng Li, and Jeanette Miranda.
We have also borrowed material, especially labs, from Brown cs17 courses in past years. We thank them for these materials.