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

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