Structure and Interpretation of Computer Programs

  1. Building Abstractions with Procedures
  2. Building Abstractions with Data
  3. Modularity, Objects, and State
  4. Metalinguistic Abstraction
  5. Computing with Register Machines