You are reading the textbook
Structure and Interpretation of Computer Programs
by Harold Abelson and Gerald Sussman—with a twist.
The textbook emphasizes the importance of abstraction for managing
complexity, and introduces the reader to a host of concepts that
lie at the heart of the field of computer science.
Most of these ideas are independent of the programming language used to
express them to employ actual computers for solving computational
problems. They are programming-language independent. The twist then
consists of replacing the programming language that is used in the
examples. While the authors had used the programming language Scheme,
More precisely, this adaptation uses five tiny, carefully designed,
The languages are called Source §1,
Source §2, Source §3, Source §4
and Source §5,
corresponding to the respective chapters 1, 2, 3, 4 and 5 of the textbook.
The Source §1 language contains only constructs that are needed
in the programs contained in chapter 1: constructs required to
build abstractions with functions.
Source §2 is a superset of Source §1;
adding features required to build abstractions with data, on top
of the features of Source §1. Similarly,
Source §3, 4 and 5 extend the previous language
features required to address the subject of the respective textbook chapter.
language has many features that are not covered in this textbook. Indeed,
the Source languages are so small that they can be quite adquately described in
a few pages of text. The online folder
contains the specifications of the Source languages, as reference for
This textbook is interactive. Most programs are links. Clicking on them
takes the reader to a web-based programming environment called the
Academy. In the Source Academy, the reader can run the programs, modify them and
experiment with them, without the need to install any software,
and without any requirements on the computer that they use, as
long as it comes with an internet browser.
The language Scheme has been designed as a sublanguage of Lisp with
its use in education as a central design objective. The language
course, even if one imposes constraints on the language
features to be covered. The reason is that students with prior
knowledge of the language are bound to make use of other features
in their programs. Fellow students will legitimately ask the instructors
about those features, and any answer will either frustate the
student or lead to a tangent that is most likely not conducive to the
not known for its systematic design. Our solution to this challenge
is radical: The Source Academy enforces the use of the respective
Source language when the student clicks on a program of a particular chapter.
Programs that use constructs beyond that language are rejected by the
Source Academy. This allows instructors of a SICP-based course
The original textbook was introduced to the National University of Singapore
by Jacob Katzenelson in 1997, as a more advanced alternative to the regular
Programming Methodology course offered to computer science
students. The course, known as
CS1101S since 1998,
methodology course for Computer Science undergraduate majors in 2018.