Structure and Interpretation of Computer Programs is a textbook written by Harold Abelman and Gerald Jay Sussman with Julie Sussman in 1986, and rereleased in 1996. The goal of this project is to incrementally solve every problem in the book and host my notes and solutions here.
This is not an exhaustive list, and is subject to change. I have no schedule for completing the exercises in SICP at the moment. If it stops being fun, I will probably stop updating this repository.
-
Read Chapter 1: Building Abstractions with Procedures
- Read Section 1: The Elements of Programming
- Read Section 2: Procedures and the Processes they Generate
- Read Section 3: Formulating Abstractions with Higher-Order Procedures
- Watch lecture 1A: Overview and Introduction to Lisp
- Watch lecture 1B: Procedures and Processes; Substitution Model
- Watch lecture 2A: Higher-Order Procedures
-
Read Chapter 2: Building Abstractions with Data
- Read Section 1: Introduction to Data Abstraction
- Read Section 2: Hierarchical Data and the Closure Property
- Read Section 3: Symbolic Data
- Read Section 4: Multiple Representations for Abstract Data
- Read Section 5: Systems with Generic Operations
- Watch lecture 2B: Compound Data
- Watch lecture 3A: Henderson Escher Example
- Watch lecture 3B: Symbolic Differentiation; Quotation
- Watch lecture 4A: Pattern Matching and Rule-based Substitution
- Watch lecture 4B: Generic Operators
-
Read Chapter 3: Modularity, Objects, and State
- Read Section 1: Assignment and Local State
- Read Section 2: The Environment Model of Evaluation
- Read Section 3: Modeling with Mutable Data
- Read Section 4: Concurrency: Time is of the Essence
- Read Section 5: Streams
- Watch lecture 5A: Assignment, State, and Side-effects
- Watch lecture 5B: Computational Objects
- Watch lecture 6A: Streams, Part 1
- Watch lecture 6B: Streams, Part 2
-
Read Chapter 4: Metalinguistic Abstraction
- Read Section 1: The Metacircular Evaluator
- Read Section 2: Variations on a Scheme--Lazy Evaluation
- Read Section 3: Variations on a Scheme--Nondeterministic Computing
- Read Section 4: Logic Programming
- Watch lecture 7A: Metacircular Evaluator, Part 1
- Watch lecture 7B: Metacircular Evaluator, Part 2
- Watch lecture 8A: Logic Programming, Part 1
- Watch lecture 8B: Logic Programming, Part 2
-
Read Chapter 5: Computing with Register Machines
- Read Section 1: Designing Register Machines
- Read Section 2: A Register-Machine Simulator
- Read Section 3: Storage Allocation and Garbage Collection
- Read Section 4: The Explicit-Control Evaluator
- Read Section 5: Compilation
- Watch lecture 9A: Register Machines
- Watch lecture 9B: Explicit-Control Evaluator
- Watch lecture 10A: Compilation
- Watch lecture 10B: Storage Allocation and Garbage Collection
Other considerations:
- Finish the Spring 2021 semester
- Finish the Fall 2021 semester
- Finish the Spring 2022 semester
- Read The Scheme Programming Language, 4ed.
- Read The Racket Guide
- Read The Little Schemer
- Read The Seasoned Schemer
- Read The Reasoned Schemer
- Read Learn You a Haskell for Great Good!
- Read HPFFP
- Read Category Theory for Programmers
The resources compiled here are a good jumping-off point for learning Scheme and following the curriculum around SICP.
- Full text of SICP as html
- Full text of SICP as pdf
- 1986 video lecture series featuring Abelman and Sussman
- MIT OpenCourseWare #6.001 class of 2005
- The Scheme Programming Language, 4th Edition
- Chez Scheme documentation
- Racket documentation
- Scheme resources
- Scheme community wiki
- Scheme at a Glance
- Planet Scheme blog
- Sara Bander's SICP
- Connor Hoekstra's Code Report on SICP
- abrantesasf's personal SICP study guide