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

  1. Peter Seibel, "Hal Abelson", Code Quarterly, 2011. (See also: Adam Gordon Bell, "Hal Abelson on SICP", CoRecursive podcast, 2019.)
  2. Harold Abelson and Gerald Jay Sussman, Structure & Interpretation of Computer Programs (draft of the book), MIT AI Lab Technical Report 735, 31 July 1983.
  3. Hal Abelson, interview by Barbara Boucher Owens, Computing Educators Oral History Project, 2012.
  4. Harold Abelson and Gerald Jay Sussman, "Acknowledgments", Structure and Interpretation of Computer Programs, MIT Press / McGraw-Hill, 1984/1996.
  5. Harold Abelson and Gerald Jay Sussman, "Preface to the First Edition", Structure and Interpretation of Computer Programs, MIT Press / McGraw-Hill, 1984/1996.
  6. MIT 6.001 Fall 1983 problem sets, CMU AI Repository (see ps1.txt in fall83.tgz).
  7. Bob Giansiracusa, post to net.ai, 28 January 1984; Brian C. Smith, post to net.ai, 22 March 1984.
  8. U.S. Copyright Office, registration TX0001501216, 1984.