Structure and Interpretation of Computer Programs
Encyclopedia
Structure and Interpretation of Computer Programs (SICP) is a textbook published in 1984 about general computer programming
concepts from MIT Press
written by Massachusetts Institute of Technology
(MIT) professors Harold Abelson and Gerald Jay Sussman
, 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 language
known as Scheme, the book explains core computer science concepts, including abstraction
, recursion
, interpreters
and metalinguistic abstraction
, and teaches modular programming
.
The program also introduces a practical implementation of the register machine
concept, defining and developing an assembler for such a construct, which is used as a virtual machine
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.
Attribution-Noncommercial 3.0 Unported License.
. 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 science
.
Computer programming
Computer 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 Press
MIT Press
The MIT Press is a university press affiliated with the Massachusetts Institute of Technology in Cambridge, Massachusetts .-History:...
written by Massachusetts Institute of Technology
Massachusetts Institute of Technology
The 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 Sussman
Gerald Jay Sussman
Gerald 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 language
Lisp programming language
Lisp 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 abstraction
Abstraction (computer science)
In 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...
, recursion
Recursion
Recursion 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...
, interpreters
Interpreter (computing)
In computer science, an interpreter normally means a computer program that executes, i.e. performs, instructions written in a programming language...
and metalinguistic abstraction
Metalinguistic abstraction
In 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 programming
Modular programming
Modular 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 machine
Register machine
In 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 machine
Virtual machine
A 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
Creative 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 (programming language)
Python 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 science
Computer science
Computer 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 MechanicsStructure and Interpretation of Classical MechanicsStructure 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 ProgramsHow to Design ProgramsHow 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 LanguagesEssentials of Programming LanguagesEssentials 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 PiecesLisp in Small PiecesLisp 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
- A critique of Abelson and Sussman - or - Why calculating is better than scheming
- The Structure and Interpretation of the Computer Science Curriculum, a critical view of SICP and rationale for HtDP
External links
- Official SICP site (including the full text in HTML)
- 1986 Videos of SICP Lectures by the authors
- Official 6.001 site for Spring, 2007 (an MIT course that goes by the same name as the book)
- The MIT Open Courseware version of the SICP course
- SICP in PDF (from Neil Vandyke's TeXinfo version)
- SICP in PDF (optimized for on-screen reading)