Precursors of SICP's First Edition
Structure and Interpretation of Computer Programs grew out of course notes for MIT's introductory course, 6.001, which stood on a line of earlier courses reaching back to the late 1960s.[1]
In the late 1960s Jack Wozencraft and Arthur Evans Jr. taught 6.231, a course at MIT on "programming linguistics and the lambda calculus",[2] the formalism for computation that Alonzo Church had introduced in the 1930s (Exercise 2.6 of SICP touches on Church numerals). It never became a regular offering,[1] and nothing from it has surfaced online, but Abelson and Sussman later called it the genesis of the line that led to SICP.[1]
By the mid-1970s Robert Fano had reorganised MIT's electrical engineering and computer science curriculum around principles of engineering design, and personally taught 6.031,[1] the introductory computer science course. Students used ALGOL first, then Lisp.[1] Hal Abelson taught sections under Fano, who became his mentor.[3] The first edition's Acknowledgments credit Fano as the writer of "the first set of subject notes from which this book evolved".[4]
MIT reorganised the curriculum again in 1978-79, and Abelson and Sussman took on the design and teaching of its new introductory computer science course.[1] In the summer of 1980 Sussman dropped ALGOL,[1] which had been included in part for its lexical scoping,[5] a feature Scheme already had.[1] 6.001 began that fall, taught entirely in Scheme.[5] The teaching material for this course evolved into Structure and Interpretation of Computer Programs.
By 1983 many draft manuscripts had been "painstakingly" read by Julie Sussman.[2] It is likely the authors were including these drafts when they said they had "taught this material in its present form since the fall of 1980".[5] Only one is generally available today: MIT AI Lab Technical Report 735, issued on 31 July 1983.[2] It projected a spring 1984 publication and invited comments by ARPANET (HAL@MIT-MC, GJS@MIT-OZ).[2] Students got their copies by "the coupon that was distributed at the first lecture".[6] By early 1984 instructors outside MIT were also planning courses around the book.[7]
The draft's cover shows a single wizard, conjuring the eval/apply roundel,[2] a different figure from the mages on later published covers. Among many other differences from the published book, the draft had a placeholder for an appendix titled "Using Environments to Create Packages".[2]
The first edition was published on 31 August 1984.[8]
References
- Peter Seibel, "Hal Abelson", Code Quarterly, 2011. (See also: Adam Gordon Bell, "Hal Abelson on SICP", CoRecursive podcast, 2019.)
- Harold Abelson and Gerald Jay Sussman, Structure & Interpretation of Computer Programs (draft of the book), MIT AI Lab Technical Report 735, 31 July 1983.
- Hal Abelson, interview by Barbara Boucher Owens, Computing Educators Oral History Project, 2012.
- Harold Abelson and Gerald Jay Sussman, "Acknowledgments", Structure and Interpretation of Computer Programs, MIT Press / McGraw-Hill, 1984/1996.
- Harold Abelson and Gerald Jay Sussman, "Preface to the First Edition", Structure and Interpretation of Computer Programs, MIT Press / McGraw-Hill, 1984/1996.
- MIT 6.001 Fall 1983 problem sets, CMU AI Repository (see ps1.txt in fall83.tgz).
- Bob Giansiracusa, post to net.ai, 28 January 1984; Brian C. Smith, post to net.ai, 22 March 1984.
- U.S. Copyright Office, registration TX0001501216, 1984.