A guided technical learning path
Structure and Interpretation of Computer Programs (Python)
Classic CS curriculum adapted for Python, based on UC Berkeley CS61A
Your Learning Path
Each module builds on the last. Open any published lesson or lab and continue at your own pace.
Built for
Who this course helps
- Learners who meet the course prerequisites
- Independent developers building practical depth
- Teams creating a shared technical vocabulary
What you leave with
A practical body of work from Structure and Interpretation of Computer Programs (Python)
- Use higher-order functions, closures, and lambda expressions to write expressive, reusable code
- Trace program execution using the environment model (frames, scoping, name lookup)
- Think recursively and analyze recursive vs iterative processes
Move from explanation to worked examples and practice in one coherent learning path.
About This Course
This course is not about learning Python syntax. It is about learning how programs work.
Through classic SICP ideas adapted to Python, you will learn to reason about computation, abstraction, state, and interpreters—the foundations behind all modern software systems. Originally developed at MIT by Harold Abelson and Gerald Jay Sussman, SICP teaches the fundamental ideas of computation: abstraction, recursion, interpreters, and the nature of programming languages themselves.
This course adapts the core SICP curriculum into Python, following the approach pioneered by UC Berkeley's CS 61A. Instead of Scheme, all examples and exercises use Python—but the deep ideas remain the same.
The course progresses from simple abstractions (functions) through compound data, state and mutation, object-oriented design, and finally to building your own interpreter. The modules are being rebuilt one at a time as a written lesson followed by a lab that runs in your browser and draws what your code does. Modules 1 to 7 are in the new form; the others keep the book’s text and the earlier lab until they are rebuilt.
Based on Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman (MIT Press, 1996), adapted to Python following UC Berkeley CS 61A.
Prerequisites
- Basic Python fluency (variables, if/else, loops, defining functions)
- Comfort with simple math (algebra-level)
- No prior CS theory or functional programming experience required
What You Will Learn
- Use higher-order functions, closures, and lambda expressions to write expressive, reusable code
- Trace program execution using the environment model (frames, scoping, name lookup)
- Think recursively and analyze recursive vs iterative processes
- Design programs using data abstraction and abstraction barriers
- Process sequences and trees with map, filter, reduce, and recursive traversal
- Reason about mutation, aliasing, and identity in Python
- Use classes, inheritance, and polymorphism effectively
- Build a working interpreter for a small programming language
Terminology Mapping
How classic concepts map to the terminology used in this course.
| Classic | This Course (Python) |
|---|---|
| Procedure / Higher-order procedure | Function / Higher-order function |
| Lambda expression | Lambda expression (same concept) |
| Environment model of evaluation | Environment diagrams (frames & scope) |
| Recursive / iterative process | Recursive / iterative process (no tail-call optimization in Python) |
| Pairs (cons, car, cdr) | Tuples, lists, or closure-based pairs |
| Data abstraction (constructors + selectors) | Data abstraction (same pattern, using functions or classes) |
| Sequences (lists) | Python lists, generators, comprehensions |
| Message passing | Dispatch functions / methods |
| Generic operations / data-directed programming | Polymorphism / duck typing |
| Metacircular evaluator | Interpreter written in Python |
Start now
Module 1: Higher-Order Functions
Pass a function, return a function, and count the calls. About 80 minutes.
Start module 1 — freeHelp shape what we build next
Tell us what you want to learn. This records your interest; it does not enroll you or promise a launch email.