The Structure and Interpretation of Computer Programs
Course SummaryThis course provides an introduction to programming and computer science. It is taught using Scheme, a dialect of the LISP programming language. It is based on the book Structure and Interpretation of Computer Programs by Abelson, Sussman, and Sussman. An online version of book is available here. The course is taught by Brian Harvey, Computer Science Division, University of California at Berkeley.
This course exposes students to techniques of abstraction at several levels: (a) within a programming language, using higher-order functions, manifest types, data-directed programming, and message-passing; (b) between programming languages, using functional and rule-based languages as examples. It also relates these techniques to the practical problems of implementation of languages and algorithms on a von Neumann machine. There are several significant programming projects to be done in Scheme.
Reading Material1. Structure and Interpretation of Computer Programs 2nd ed
Abelson, Harold, Gerald Jay Sussman, and Julie Sussman. Structure and Interpretation of Computer Programs. 2nd ed. Cambridge, MA: MIT Press, 1996. ISBN: 9780262011532.
(Full-text of the book is available online at the link above)
Course Material1. Revised Report on Scheme (484 KB pdf)
Scheme is a dialect of Lisp programming language invented by Guy Lewis Steele Jr. and Gerald Jay Sussman. It was designed to have an exceptionally clear and simple semantics. A wide variety of programming paradigms can be conveniently expressed in Scheme.
2. Object-Oriented Programming I
3. Object-Oriented Programming II
4. Reference Manual for the OOP Language
5. Highlights of GNU Emacs (167 KB pdf)
6. Emacs Quick Reference Guide
7. Lecture Notes (1.35 MB pdf)
Other Resources1. MIT 6.001 Lecture Notes
The following are lecture notes from a similar course at MIT (6.001 Structure and Interpretation of Computer Programs, Spring 2005)
- Introduction to Computation (PDF - 2.1 MB)
- Scheme Basics (PDF - 1.5 MB)
- A Story about using Lisp in a Startup Company (PDF)
- Procedures, Processes, and Recursion (PDF - 2.1 MB)
- Orders of Growth and Kinds of Procedures (PDF - 1.7 MB)
- Data Abstraction (PDF - 2.1 MB)
- Higher Order Procedures (PDF - 2.1 MB)
- Good Programming Practices (PDF - 1.6 MB)
- Using Higher Order Procedures (PDF - 1.6 MB)
- Symbols and Quotation (PDF - 1.4 MB)
- Tagged Data (PDF - 2.2 MB)
- Advanced Data Types (PDF - 2.2 MB)
- Data Mutation (PDF - 1.7 MB)
- Trees, Graphs and Search (PDF - 2.2 MB)
- Environment Model (PDF 1 of 2 - 1.6 MB) (PDF 2 of 2 - 2.2 MB)
- Object Oriented Programming I (PDF - 2.3 MB)
- Object Oriented Programming II (PDF - 1.7 MB)
- Object Oriented Programming III (PDF - 2.0 MB)
- Interpretation (PDF 1 of 2 - 2.5 MB) (PDF 2 of 2 - 1.3 MB)
- Interpreter Code (PDF)
- The Meta-circular Evaluator (PDF - 2.6 MB)
- Evaluator Code (PDF)
- Lazy Evaluation (PDF 1 of 2 - 2.0 MB) (PDF 2 of 2 - 1.2 MB)
- Lazy Evaluator Code (PDF)
- Asynchronous Computing (PDF - 1.2 MB)
- Universal Machines (PDF)
- Computability (PDF)
2. Simply Scheme: Introducing Computer Science
Brian Harvey, Matthew Wright, Harold Abelson, 2nd Edition, MIT Press, 1999, ISBN 0262082810, 9780262082815.
(Click the button below to see a preview of the book)
Discussion ForumFor discussion on this topic, please go to the relevant forum for The Structure and Interpretation of Computer Programs. Click the button below to open the forum page in a new window.