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~4.
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ée 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, $\rm\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 suppport 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