Programming with
Data Structures and Algorithms

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'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 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.

We have also borrowed material, especially labs, from Brown cs17 courses in past years. We thank them for these materials.