This page describes and provides access to print, video, and online content for four courses, which I have developed and taught at Princeton and Brown throughout my career and have been adopted in various forms at institutions throughout the world.

- A course on algorithms that provides useful information about algorithms every programmer should know.
- An introductory computer science course suitable for any college student.
- A course on the analysis of algorithms that introduces the topics in discrete mathematics needed to study the performance of computer programs.
- A course that introduces analytic combinatorics, a calculus for studying properties of discrete structures.

The courses are based on a 21st century model for disseminating knowledge, which is described on the IDEAS page and in an invited talk on this site. The best way to understand the model is as a natural extension that embraces technology of the familiar and highly successful “textbook” model that is still widely used for many core subjects throughout academia in the US since the 20th century. A short guide to this material follows.