Structure and Interpretation of Computer Programs

Last updated
Structure and Interpretation of Computer Programs
SICP cover.jpg
Cover of the second edition
Author Harold Abelson, Gerald Jay Sussman, Julie Sussman
Subject Computer science
Genre Textbook
Publisher MIT Press
Publication date
1984 (1st ed.), 1996 (2nd ed.), 2022 (JavaScript ed.)
Pages657
ISBN 0-262-51087-1 (2nd ed.)
LC Class QA76.6 .A255 1996
Website mitpress.mit.edu/sicp

Structure and Interpretation of Computer Programs (SICP) is a computer science textbook by Massachusetts Institute of Technology professors Harold Abelson and Gerald Jay Sussman with Julie Sussman. It is known as the "Wizard Book" in hacker culture. [1] It teaches fundamental principles of computer programming, including recursion, abstraction, modularity, and programming language design and implementation.

Contents

MIT Press published the first edition in 1984, and the second edition in 1996. It was formerly used as the textbook for MIT's introductory course in computer science. SICP focuses on discovering general patterns for solving specific problems, and building software systems that make use of those patterns. [2]

MIT Press published the JavaScript edition in 2022. [3]

Content

The book describes computer science concepts using Scheme, a dialect of Lisp. It also uses a virtual register machine and assembler to implement Lisp interpreters and compilers.

Topics in the books are:

Chapter 1: Building Abstractions with Procedures

  1. The Elements of Programming
  2. Procedures and the Processes They Generate
  3. Formulating Abstractions with Higher-Order Procedures

Chapter 2: Building Abstractions with Data

  1. Introduction to Data Abstraction
  2. Hierarchical Data and the Closure Property
  3. Symbolic Data
  4. Multiple Representations for Abstract Data
  5. Systems with Generic Operations

Chapter 3: Modularity, Objects, and State

  1. Assignment and Local State
  2. The Environment Model of Evaluation
  3. Modeling with Mutable Data
  4. Concurrency: Time Is of the Essence
  5. Streams

Chapter 4: Metalinguistic Abstraction

  1. The Metacircular Evaluator
  2. Variations on a Scheme – Lazy Evaluation
  3. Variations on a Scheme – Nondeterministic Computing
  4. Logic Programming

Chapter 5: Computing with Register Machines

  1. Designing Register Machines
  2. A Register-Machine Simulator
  3. Storage Allocation and Garbage Collection
  4. The Explicit-Control Evaluator
  5. Compilation

Characters

Several fictional characters appear in the book:

License

The book is licensed under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license. [4]

Coursework

The book was used as the textbook for MIT's former introductory programming course, 6.001, [5] from fall 1984 through its last semester, in fall 2007. [6] Other schools also made use of the book as a course textbook. [7] Various versions of the JavaScript edition have been used by the National University of Singapore since 2012 in the course CS1101S. [8]

Reception

Byte recommended SICP in 1986 "for professional programmers who are really interested in their profession". The magazine said that the book was not easy to read, but that it would expose experienced programmers to both old and new topics. [9]

Influence

SICP has been influential in computer science education, and several later books have been inspired by its style.

See also

Related Research Articles

In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that map values to other values, rather than a sequence of imperative statements which update the running state of the program.

<span class="mw-page-title-main">Lisp (programming language)</span> Programming language family

Lisp is a family of programming languages with a long history and a distinctive, fully parenthesized prefix notation. Originally specified in 1960, it is the third-oldest high-level programming language still in common use, after Fortran and COBOL. Lisp has changed since its early days, and many dialects have existed over its history. Today, the best-known general-purpose Lisp dialects are Common Lisp, Scheme, Racket, and Clojure.

<span class="mw-page-title-main">Programming language</span> Language for communicating instructions to a machine

A programming language is a system of notation for writing computer programs.

<span class="mw-page-title-main">Scheme (programming language)</span> Dialect of Lisp

Scheme is a dialect of the Lisp family of programming languages. Scheme was created during the 1970s at the MIT Computer Science and Artificial Intelligence Laboratory and released by its developers, Guy L. Steele and Gerald Jay Sussman, via a series of memos now known as the Lambda Papers. It was the first dialect of Lisp to choose lexical scope and the first to require implementations to perform tail-call optimization, giving stronger support for functional programming and associated techniques such as recursive algorithms. It was also one of the first programming languages to support first-class continuations. It had a significant influence on the effort that led to the development of Common Lisp.

In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. It makes the language "sweeter" for human use: things can be expressed more clearly, more concisely, or in an alternative style that some may prefer. Syntactic sugar is usually a shorthand for a common operation that could also be expressed in an alternate, more verbose, form: The programmer has a choice of whether to use the shorter form or the longer form, but will usually use the shorter form since it is shorter and easier to type and read.

In software engineering and computer science, abstraction is the process of generalizing concrete details, such as attributes, away from the study of objects and systems to focus attention on details of greater importance. Abstraction is a fundamental concept in computer science and software engineering, especially within the object-oriented programming paradigm. Examples of this include:

In programming languages, a closure, also lexical closure or function closure, is a technique for implementing lexically scoped name binding in a language with first-class functions. Operationally, a closure is a record storing a function together with an environment. The environment is a mapping associating each free variable of the function with the value or reference to which the name was bound when the closure was created. Unlike a plain function, a closure allows the function to access those captured variables through the closure's copies of their values or references, even when the function is invoked outside their scope.

<span class="mw-page-title-main">Gerald Jay Sussman</span> American computer scientist

Gerald Jay Sussman is the Panasonic Professor of Electrical Engineering at the Massachusetts Institute of Technology (MIT). He has been involved in artificial intelligence (AI) research at MIT since 1964. His research has centered on understanding the problem-solving strategies used by scientists and engineers, with the goals of automating parts of the process and formalizing it to provide more effective methods of science and engineering education. Sussman has also worked in computer languages, in computer architecture, and in Very Large Scale Integration (VLSI) design.

In computer science, a high-level programming language is a programming language with strong abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language elements, be easier to use, or may automate significant areas of computing systems, making the process of developing a program simpler and more understandable than when using a lower-level language. The amount of abstraction provided defines how "high-level" a programming language is.

<span class="mw-page-title-main">Guy L. Steele Jr.</span> American computer scientist (born 1954)

Guy Lewis Steele Jr. is an American computer scientist who has played an important role in designing and documenting several computer programming languages and technical standards.

<span class="mw-page-title-main">Hal Abelson</span> American mathematician

Harold Abelson is an American mathematician and computer scientist. He is a professor of computer science and engineering in the Department of Electrical Engineering and Computer Science at the Massachusetts Institute of Technology (MIT), a founding director of both Creative Commons and the Free Software Foundation, creator of the MIT App Inventor platform, and co-author of the widely-used textbook Structure and Interpretation of Computer Programs, sometimes also referred to as "the wizard book."

<span class="mw-page-title-main">Richard Greenblatt (programmer)</span> American computer programmer (born 1944)

Richard D. Greenblatt is an American computer programmer. Along with Bill Gosper, he may be considered to have founded the hacker community, and holds a place of distinction in the communities of the programming language Lisp and of the Massachusetts Institute of Technology (MIT) Artificial Intelligence Laboratory.

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. More generally, it also encompasses the ability or skill of a programmer to think outside of the pre-conceived notions of a specific language in order to exploratorily investigate a problem space in search of the kind of solutions which are most natural or cognitively ergonomic to it. It is a recurring theme in the seminal MIT textbook Structure and Interpretation of Computer Programs, which uses Scheme, a dialect of Lisp, as a framework for constructing new languages.

A read–eval–print loop (REPL), also termed an interactive toplevel or language shell, is a simple interactive computer programming environment that takes single user inputs, executes them, and returns the result to the user; a program written in a REPL environment is executed piecewise. The term usually refers to programming interfaces similar to the classic Lisp machine interactive environment. Common examples include command-line shells and similar environments for programming languages, and the technique is very characteristic of scripting languages.

<i>How to Design Programs</i> Computer programming textbook by Matthias Felleisen and colleagues

How to Design Programs (HtDP) is a textbook by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi on the systematic design of computer programs. MIT Press published the first edition in 2001, and the second edition in 2018, which is freely available online and in print. The book introduces the concept of a design recipe, a six-step process for creating programs from a problem statement. While the book was originally used along with the education project TeachScheme!, it has been adopted at many colleges and universities for teaching program design principles.

Daniel Paul Friedman is a professor of Computer Science at Indiana University in Bloomington, Indiana. His research focuses on programming languages, and he is a prominent author in the field.

Structure and Interpretation of Classical Mechanics (SICM) is a classical mechanics textbook written by Gerald Jay Sussman and Jack Wisdom with Meinhard E. Mayer. The first edition was published by MIT Press in 2001, and a second edition was released in 2015. The book is used at the Massachusetts Institute of Technology to teach a class in advanced classical mechanics, starting with Lagrange's equations and proceeding through canonical perturbation theory.

In mathematics and computer science, apply is a function that applies a function to arguments. It is central to programming languages derived from lambda calculus, such as LISP and Scheme, and also in functional languages. It has a role in the study of the denotational semantics of computer programs, because it is a continuous function on complete partial orders. Apply is also a continuous function in homotopy theory, and, indeed underpins the entire theory: it allows a homotopy deformation to be viewed as a continuous path in the space of functions. Likewise, valid mutations (refactorings) of computer programs can be seen as those that are "continuous" in the Scott topology.

<i>Structure and Interpretation of Computer Programs, JavaScript Edition</i>

Structure and Interpretation of Computer Programs, JavaScript Edition is an adaptation of the computer science textbook Structure and Interpretation of Computer Programs (SICP). It teaches fundamental principles of computer programming, including recursion, abstraction, modularity, and programming language design and implementation. While the original version of SICP uses the programming language Scheme, this edition uses the programming language JavaScript.

Source is a family of sublanguages of JavaScript, developed for the textbook Structure and Interpretation of Computer Programs, JavaScript Edition. The JavaScript sublanguages Source §1, Source §2, Source §3 and Source §4 are designed to be just expressive enough to support all examples of the respective chapter of the textbook.

References

  1. Raymond, Eric S.; Steele, Guy (1991). The New hacker's dictionary. Internet Archive. Cambridge, Mass. : MIT Press. ISBN   978-0-262-68069-1.
  2. Harvey, B (2011), "Why SICP matters?", The 150th anniversary of MIT, Boston Globe .
  3. Structure and Interpretation of Computer Programs: JavaScript Edition, MIT Press, 2022
  4. "SICP". MIT Press. Archived from the original on 2017-12-26. Retrieved 2007-11-11..
  5. "Electrical Engineering and Computer Science; 6.001 Structure and Interpretation of Computer Programs". OpenCourseWare. MIT. Spring 2005. Retrieved 2020-06-21.
  6. Guy, Donald, "The End of an Era", MIT Admissions (blog comment), archived from the original on 2018-08-21, retrieved 2008-08-05, I talked to Professor Sussman on the phone... He said that he'd actually been trying to have 6.001 replaced for the last ten years (and I read somewhere that Professor Abelson was behind the move too). Understanding the principles is not essential for an introduction to the subject matter anymore. He sees 6.001 as obsolete.
  7. "Universities and Colleges Using SICP". MIT Press. Archived from the original on 2022-04-23. Retrieved 2022-03-30.
  8. "Department of Computer Science; CS1101S Programming Methodology". NUS. Fall 2021. Retrieved 2020-07-17.
  9. Kilov, Haim (November 1986). Byte Magazine Volume 11 Number 12: Knowledge Representation. p. 70.