This repository serves as a progress tracker for the book Structure and Interpretation of Computer Programs and Brian Harvey’s CS61A lectures. Over the years, I have attempted to start but never finished. I have faced multiple challenges along the way. Therefore, I dedicate this repository as a starting place to help others and as a personal progress tracker, in the hope that this time I will achieve my goal of finishing both the book and the course.
Thanks to teachyourself.cs for introducing me to valuable resources like SICP.
This repository is heavily influenced by theurere's berkeley_cs61a_spring-2011_archive repository and zackads' sicp repository. Some parts of this repository are directly copied from these sources rather than just being inspired by them.
Download Racket. At the time of this writing (February 2025), I am using version 8.15.
To use Berkeley-defined functions such as word and sentence, as shown in Lecture 1, we need to install the Berkeley package in Racket.
Originally, as shown in theurere's berkeley_cs61a_spring-2011_archive repository, you would run the following command:
raco pkg install berkeley
However, this no longer works because the URL that raco tries to access for the zip archive of the package has been restricted.
Instead, you can download the archive directly from here.
After downloading berkeley.zip, install it manually by running:
raco pkg install berkeley.zip
To test if everything works, open DrRacket and paste the following code snippet into the definitions window:
#lang racket
(require berkeley)
(sentence 'hello 'world)
Now, click the "Run" button. In the interactions window, you should see the following output:
'(hello world)
Video lectures and required corresponding reading from SICP
Readings should be done before lecture series.
- Functional programming (1.1)
- Functional programming (1.1)
- Higher-order procedures (1.3)
- Higher-order procedures (1.3)
- User interface Alan Kay (1.3)
- User interface Alan Kay (1.2.1–4)
- Orders of growth (1.2.1–4)
- Recursion and iteration (1.2.1–4)
- Data abstraction (2.1, 2.2.1)
- Sequences (2.1, 2.2.1)
- Example calculator (2.1, 2.2.1)
- Hierarchical data (2.2.2–3, 2.3.1,3)
- Hierarchical data (2.2.2–3, 2.3.1,3)
- Example Scheme (2.2.2–3, 2.3.1,3)
- No lecture available
- Generic operators (2.4–2.5.2)
- Generic operators (2.4–2.5.2)
- Object-oriented programming (OOP above line reader)
- Object oriented programming (OOP above line reader)
- Object oriented programming (OOP above line reader)
- Assignment and state (3.1, 3.2, OOP below line reader)
- Environments (3.1, 3.2, OOP below line reader)
- Environments (3.1, 3.2, OOP below line reader)
- Mutable data (3.3.1–3)
- Mutable data (3.3.1–3)
- Vectors (3.3.1–3)
- No lecture available
- No lecture available
- No lecture available
- Client-server programming (3.4)
- Concurrency (3.4)
- Concurrency (3.4)
- Streams (3.5.1–3, 3.5.5, Therac reader)
- Streams (3.5.1–3, 3.5.5, Therac reader)
- Therac-25 (3.5.1–3, 3.5.5, Therac reader)
- Metacircular evaluator (4.1.1–6, MapReduce reader)
- Metacircular evaluator (4.1.1–6, MapReduce reader)
- Mapreduce (4.1.1–6, MapReduce reader)
- Mapreduce (4.1.7, 4.2)
- Analyzing evaluator (4.1.7, 4.2)
- Lazy evaluator (4.1.7, 4.2)
- Logic programming (4.4.1–3)
- Logic programming (4.4.1–3)
- Review (4.4.1–3)
Note: According to this source, no lectures are actually missing. The gaps in numbering (e.g., no Lecture 15, or 27–29) correspond to half-term breaks and spring breaks, rather than lost content.
- Course Book - Structure and Interpretation of Computer Programs
- Course timetable
- Course syllabus
- Homework assignments (solutions)
- Lab assignments
- Projects
- Project 1 - Twenty-One (code)
- Project 2 - Section 2.2.4 of SICP
- Project 3 - Adventure Game (code)
- Project 4 - Logo interpreter (code)
- Lecture Notes
- Sample Exams
- Midterm 1
- Midterm 2
- Midterm 3
- Final exam
To keep track of progress and manage tasks effectively, You can use Trello. I have created a Trello board template that others can use to organize their own learning journey through SICP and CS61A.
You can access the Trello template here: Trello Board Template.
Feel free to copy and customize it to fit your needs.
If you prefer to track your progress using Markdown, you can use the study plan template I created. It provides a structured way to document your learning journey.
You can access the Markdown study plan template here: Study Plan Template.
While setting up the study plan, I encountered some difficulties in structuring the weeks. The homework schedule follows a 15 week format, whereas the syllabus is organized into 14 weeks. Additionally, different sources suggest slightly different recommended readings, which made it challenging to align everything perfectly. If you notice discrepancies, feel free to adjust the board according to your preferred structure.
This repository is for personal educational use and does not claim ownership over any original course materials from UC Berkeley. Some parts of this repository, including code and resources, are directly copied from publicly available sources, specifically from theurere's berkeley_cs61a_spring-2011_archive repository and zackads' sicp repository.
If any of the linked resources become unavailable or restricted, please refer to official UC Berkeley materials or alternative open-source resources.