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