Programs (SICP JS) was developed at the National
University of Singapore (NUS) for the course CS1101S. The course
was co-taught for six years and counting by Low Kok Lim, whose
sound pedagogical judgment was crucial for the success of
the course and this project. The CS1101S teaching team has included many
NUS colleagues and more than 300
undergraduate student assistants. Their continuous feedback over
issues and remove unnecessary complications and yet retain the
SICP JS is a software project in addition to a book project. We obtained
the LaTeX book sources from the original authors in 2008.
An early SICP JS tool chain
was developed by Liu Hang and refined by Feng Piaopiao. Chan Ger
Hean developed the first tools for the print edition, based on which Jolyn
Tan developed the tools for the first e-book edition and He Xinyue and
Wang Qian repurposed these tools for the current comparison edition.
Samuel Fang designed and developed the online edition of SICP JS.
The online edition of SICP JS and CS1101S rely heavily on a software system
supports are called Source. Many dozens of students have
contributed to the Source Academy during the preparation of SICP JS, and
the system lists them prominently as
Since 2020, the students of the NUS course CS4215, Programming
Language Implementation, contributed several programming language
implementations that are used in SICP JS: The concurrent version
of Source used in section 3.4 was developed by Zhengqun Koo and
Jonathan Chan; the lazy implementation used in section 4.2 was developed
by Jellouli Ahmed, Ian Kendall Duncan, Cruz Jomari Evangelista, and
Alden Tan; the nondeterministic implementation used in section
4.3 was developed by Arsalan Cheema and Anubhav; and Daryl Tan
helped integrate these implementations into the Academy.
We are grateful to STINT, The Swedish Foundation for
International Cooperation in Research and Higher Education,
whose sabbatical program connected Martin and Tobias and allowed
Tobias to work as a co-teacher of CS1101S and join the SICP JS
We would like to acknowledge the courageous work of the
committee of ECMAScript 2015, led by Allen Wirfs-Brock. SICP JS
relies heavily on constant and let declarations and lambda expressions,
additions allowed us to stay close to the original in the presentation
of the most important ideas of SICP. Guy Lewis Steele
Jr., who led the first ECMAScript standardization, provided
detailed and useful feedback on some exercises of chapter
Martin Henz and Tobias Wrigstad
We would like to thank the many people who have helped us develop this
book and this curriculum.
Our subject is a clear intellectual descendant of
wonderful subject on programming linguistics and the lambda calculus
taught at MIT in the late 1960s by Jack Wozencraft and Arthur Evans,
We owe a great debt to Robert Fano, who reorganized MIT's introductory
curriculum in electrical engineering and computer science to emphasize
the principles of engineering design. He led us in starting out on
this enterprise and wrote the first set of subject notes from which
this book evolved.
Much of the style and aesthetics of programming that we try to teach
were developed in conjunction with Guy Lewis Steele Jr., who
collaborated with Gerald Jay Sussman in the initial development of the
Scheme language. In addition, David Turner, Peter Henderson, Dan
Friedman, David Wise, and Will Clinger have taught us many of the
techniques of the functional programming community that appear in this
Joel Moses taught us about structuring large systems. His experience
with the Macsyma system for symbolic computation provided the insight
that one should avoid complexities of control and concentrate on
organizing the data to reflect the real structure of the world being
Marvin Minsky and Seymour Papert formed many of our attitudes about
programming and its place in our intellectual lives. To them we owe
the understanding that computation provides a means of expression for
exploring ideas that would otherwise be too complex to deal with
precisely. They emphasize that a student's ability to write and
modify programs provides a powerful medium in which exploring becomes
a natural activity.
We also strongly agree with Alan Perlis that programming is lots of
fun and we had better be careful to support the joy of programming.
Part of this joy derives from observing great masters at work. We are
fortunate to have been apprentice programmers at the feet of Bill
Gosper and Richard Greenblatt.
It is difficult to identify all the people who have contributed to the
development of our curriculum. We thank all the lecturers, recitation
instructors, and tutors who have worked with us over the past fifteen
years and put in many extra hours on our subject, especially Bill
Siebert, Albert Meyer, Joe Stoy, Randy Davis, Louis Braida, Eric
Grimson, Rod Brooks, Lynn Stein, and Peter Szolovits.
We would like to specially acknowledge the outstanding teaching
contributions of Franklyn Turbak, now at Wellesley; his work
in undergraduate instruction set a standard that we can
all aspire to.
We are grateful to Jerry Saltzer and Jim Miller for
helping us grapple with the mysteries of concurrency, and to
Peter Szolovits and David McAllester for their contributions
to the exposition of nondeterministic evaluation in chapter
Many people have put in significant effort presenting this material at
other universities. Some of the people we have worked closely with
are Jacob Katzenelson at the Technion, Hardy Mayer at the University
of California at Irvine, Joe Stoy at Oxford, Elisha Sacks at Purdue,
and Jan Komorowski at the Norwegian University of Science and
Technology. We are exceptionally proud of our colleagues who have
received major teaching awards for their adaptations of this subject
at other universities, including Kenneth Yip at Yale, Brian Harvey at
the University of California at Berkeley, and Dan Huttenlocher at
Al Moyé arranged for us to teach this material to engineers at
Hewlett-Packard, and for the production of videotapes of these
We would like to thank the talented instructors—in
particular Jim Miller, Bill Siebert, and Mike Eisenberg—who have
designed continuing education courses incorporating these tapes and
taught them at universities and industry all over the world.
Many educators in other countries have put in significant
work translating the first edition.
Michel Briand, Pierre Chamard, and André Pic produced a French edition;
Susanne Daniels-Herold produced a German
edition; and Fumio Motoyoshi produced a Japanese edition.
We do not know who produced the Chinese edition,
but we consider it an honor to have been selected as the
subject of an
It is hard to enumerate all the people who have made technical
contributions to the development of the Scheme systems we use for
instructional purposes. In addition to Guy Steele, principal wizards
have included Chris Hanson, Joe Bowbeer, Jim Miller, Guillermo Rozas,
and Stephen Adams. Others who have put in significant time are
Richard Stallman, Alan Bawden, Kent Pitman, Jon Taft, Neil Mayle, John
Lamping, Gwyn Osnos, Tracy Larrabee, George Carrette, Soma
Chaudhuri, Bill Chiarchiaro, Steven Kirsch, Leigh Klotz, Wayne Noss,
Todd Cass, Patrick O'Donnell, Kevin Theobald, Daniel Weise, Kenneth
Sinclair, Anthony Courtemanche, Henry M. Wu, Andrew Berlin, and Ruth
Beyond the MIT implementation, we would like to thank the many people
who worked on the IEEE Scheme standard, including William Clinger and
Jonathan Rees, who edited the R$^4$RS,
and Chris Haynes, David Bartley, Chris Hanson, and Jim Miller,
who prepared the IEEE standard.
Dan Friedman has been a long-time leader of the Scheme community.
The community's broader work goes beyond issues of language design to
encompass significant educational innovations, such as the high-school
curriculum based on EdScheme by Schemer's Inc., and the wonderful
books by Mike Eisenberg and by Brian Harvey and Matthew Wright.
We appreciate the work of those who contributed to making this a real
book, especially Terry Ehling, Larry Cohen, and Paul Bethge at the MIT
Press. Ella Mazel found the wonderful cover image. For the second
edition we are particularly grateful to Bernard and Ella Mazel for
help with the book design, and to David Jones, TeX wizard
extraordinaire. We also are indebted to those readers who made
penetrating comments on the new draft: Jacob Katzenelson, Hardy
Mayer, Jim Miller, and especially Brian Harvey, who did unto this book
as Julie did unto his book Simply Scheme.
Finally, we would like to acknowledge the support of the organizations
that have encouraged this work over the years, including support from
Hewlett-Packard, made possible by Ira Goldstein and Joel Birnbaum, and
support from DARPA, made possible by Bob Kahn.
Harold Abelson and Gerald Jay Sussman