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.) |
Pages | 657 |
ISBN | 0-262-51087-1 (2nd ed.) |
LC Class | QA76.6 .A255 1996 |
Website | mitpress |
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.
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]
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:
Several fictional characters appear in the book:
The book is licensed under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license. [4]
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]
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. [8]
A review of SICP as an undergraduate textbook by Philip Wadler noted the weaknesses of Scheme as an introductory language for a computer science course. [9] Wadler criticized in particular the lack of pattern matching, obscuring equational reasoning and making the teaching of proofs harder; the lack of algebraic data types in Scheme and the over-reliance on cons pairs for both code and data representation, which can confuse beginning students; and the choice of strict instead of lazy evaluation as the standard evaluation strategy.
SICP has been influential in computer science education, and several later books have been inspired by its style.
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.
The Knights of the Lambda Calculus is a semi-fictional organization of expert Lisp and Scheme hackers. The name refers to the lambda calculus, a mathematical formalism invented by Alonzo Church, with which Lisp is intimately connected, and references the Knights Templar.
Lisp is a family of programming languages with a long history and a distinctive, fully parenthesized prefix notation. Originally specified in the late 1950s, it is the second-oldest high-level programming language still in common use, after Fortran. 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.
A programming language is a system of notation for writing computer programs. Programming languages are described in terms of their syntax (form) and semantics (meaning), usually defined by a formal language. Languages usually provide features such as a type system, variables, and mechanisms for error handling. An implementation of a programming language is required in order to execute programs, namely an interpreter or a compiler. An interpreter directly executes the source code, while a compiler produces an executable program.
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:
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.
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."
Computer Science and Artificial Intelligence Laboratory (CSAIL) is a research institute at the Massachusetts Institute of Technology (MIT) formed by the 2003 merger of the Laboratory for Computer Science (LCS) and the Artificial Intelligence Laboratory. Housed within the Ray and Maria Stata Center, CSAIL is the largest on-campus laboratory as measured by research scope and membership. It is part of the Schwarzman College of Computing but is also overseen by the MIT Vice President of Research.
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.
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.
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.
Programming language theory (PLT) is a branch of computer science that deals with the design, implementation, analysis, characterization, and classification of formal languages known as programming languages. Programming language theory is closely related to other fields including mathematics, software engineering, and linguistics. There are a number of academic conferences and journals in the area.
In computing, a meta-circular evaluator (MCE) or meta-circular interpreter (MCI) is an interpreter which defines each feature of the interpreted language using a similar facility of the interpreter's host language. For example, interpreting a lambda application may be implemented using function application. Meta-circular evaluation is most prominent in the context of Lisp. A self-interpreter is a meta-circular interpreter where the interpreted language is nearly identical to the host language; the two terms are often used synonymously.
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.
The history of the programming language Scheme begins with the development of earlier members of the Lisp family of languages during the second half of the twentieth century. During the design and development period of Scheme, language designers Guy L. Steele and Gerald Jay Sussman released an influential series of Massachusetts Institute of Technology (MIT) AI Memos known as the Lambda Papers (1975–1980). This resulted in the growth of popularity in the language and the era of standardization from 1990 onward. Much of the history of Scheme has been documented by the developers themselves.
Coders at Work: Reflections on the Craft of Programming (ISBN 1-430-21948-3) is a 2009 book by Peter Seibel comprising interviews with 15 highly accomplished programmers. The primary topics in these interviews include how the interviewees learned programming, how they debug code, their favorite languages and tools, their opinions on literate programming, proofs, code reading, and so on.
George Springer was an American mathematician and computer scientist. He was professor emeritus of computer science at Indiana University Bloomington.
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.