Structure and Interpretation of Computer Programs (
SICP) is a textbook published in 1984 about general
computer programmingComputer programming is the process of designing, writing, testing, debugging, and maintaining the source code of computer programs. This source code is written in one or more programming languages. The purpose of programming is to create a program that performs specific operations or exhibits a...
concepts from
MIT PressThe MIT Press is a university press affiliated with the Massachusetts Institute of Technology in Cambridge, Massachusetts .-History:...
written by
Massachusetts Institute of TechnologyThe Massachusetts Institute of Technology is a private research university located in Cambridge, Massachusetts. MIT has five schools and one college, containing a total of 32 academic departments, with a strong emphasis on scientific and technological education and research.Founded in 1861 in...
(MIT) professors Harold Abelson and
Gerald Jay SussmanGerald Jay Sussman is the Panasonic Professor of Electrical Engineering at the Massachusetts Institute of Technology . He received his S.B. and Ph.D. degrees in mathematics from MIT in 1968 and 1973 respectively. He has been involved in artificial intelligence research at MIT since 1964...
, with Julie Sussman. It was formerly used as the textbook of MIT introductory programming class and at other schools.
Using a dialect of the
Lisp programming languageLisp is a family of computer programming languages with a long history and a distinctive, fully parenthesized syntax. Originally specified in 1958, Lisp is the second-oldest high-level programming language in widespread use today; only Fortran is older...
known as Scheme, the book explains core computer science concepts, including
abstractionIn computer science, abstraction is the process by which data and programs are defined with a representation similar to its pictorial meaning as rooted in the more complex realm of human life and language with their higher need of summarization and categorization , while hiding away the...
,
recursionRecursion is the process of repeating items in a self-similar way. For instance, when the surfaces of two mirrors are exactly parallel with each other the nested images that occur are a form of infinite recursion. The term has a variety of meanings specific to a variety of disciplines ranging from...
,
interpretersIn computer science, an interpreter normally means a computer program that executes, i.e. performs, instructions written in a programming language...
and
metalinguistic abstractionIn computer science, metalinguistic abstraction is the process of solving complex problems by creating a new language or vocabulary to better understand the problem space...
, and teaches
modular programmingModular programming is a software design technique that increases the extent to which software is composed of separate, interchangeable components called modules by breaking down program functions into modules, each of which accomplishes one function and contains everything necessary to accomplish...
.
The program also introduces a practical implementation of the
register machineIn mathematical logic and theoretical computer science a register machine is a generic class of abstract machines used in a manner similar to a Turing machine...
concept, defining and developing an assembler for such a construct, which is used as a
virtual machineA virtual machine is a "completely isolated guest operating system installation within a normal host operating system". Modern virtual machines are implemented with either software emulation or hardware virtualization or both together.-VM Definitions:A virtual machine is a software...
for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.
Characters
The book uses some fictional characters repeatedly:
- Ben Bitdiddle. He considerably predates this class, having been created by Steve Ward for use in problem sets for its predecessor, 6.031, in the 1970s. He has since appeared in a large number of other locations, including other classes at MIT and other institutions.
- Eva Lu Ator: the evaluator
- Louis Reasoner: the loose reasoner
- Alyssa P. Hacker: a lisp hacker
License
The book is licensed under a
Creative CommonsCreative Commons is a non-profit organization headquartered in Mountain View, California, United States devoted to expanding the range of creative works available for others to build upon legally and to share. The organization has released several copyright-licenses known as Creative Commons...
Attribution-Noncommercial 3.0 Unported License.
Coursework
The book was used as the textbook of MIT's old introductory programming class, 6.001. This class has been replaced by
6.01, which uses
PythonPython is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...
. Other schools also made use of the book as a course textbook. The second edition (ISBN 0-262-51087-1) appeared in 1996. It is widely considered a classic text in
computer scienceComputer science or computing science is the study of the theoretical foundations of information and computation and of practical techniques for their implementation and application in computer systems...
.
Influence
SICP has been influential in computer science education, and a number of later books have been inspired by its style.
- Structure and Interpretation of Classical Mechanics
Structure and Interpretation of Classical Mechanics is a classical mechanics textbook written by Gerald Jay Sussman and Jack Wisdom with Meinhard E. Mayer. It was published by MIT Press in 2001...
(SICM), another book by Gerald Jay Sussman that uses Scheme
- How to Design Programs
How to Design Programs is a textbook by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi on the systematic design of computer programs published in 2001 by MIT Press. The book introduces the concept of a design recipe, a six-step process for creating programs from...
(HtDP), which intends to be a more accessible book for introductory Computer Science, and to address perceived incongruities in SICP
- Essentials of Programming Languages
Essentials of Programming Languages is a textbook on programming languages by Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes.EOPL surveys the principles of programming languages from an operational perspective...
(EoPL) is a book for Programming Languages courses
- Lisp in Small Pieces
Lisp in Small Pieces is a book by Christian Queinnec on Lisp, Scheme and other related dialects, their interpretation, semantics, and compilation and contains code for 11 interpreters and 2 compilers.The English title is a recursive acronym...
(LiSP), a book full of Scheme interpreters and compilers
Further reading
External links