Programs (SICP) changed the intellectual landscape of introductory computing courses. Unfortunately, three problems-its lack of an explicit program design methodology, its reliance on domain knowledge, and the whimsies of Schemehave made it integrate poorly with the rest of the curriculum and fail to maintain its position in several departments. In this paper we analyze the structural constraints of the typical computer science curriculum and interpret SICP and Scheme from this perspective. We then discuss how our new book, How to Design Programs, overcomes SICP's problems. We hope that this discussion helps instructors understand the structure and interpretation of introductory courses on computer science. The publication of The Structure and Interpretation of Computer Programs (SICP) [1] changed the landscape of the introductory computing curriculum. Originally intended for MIT's introductory course for computer science and electrical engineering majors, use of the book quickly spread around the world. As universities from Japan to Germany adopted the book, they also switched to Scheme and a (mostly) functional approach to programming. The success of SICP and Scheme is mostly due to its fresh philosophy. The SICP approach liberates the introductory course from the tyranny of syntax. Instead of arranging a course around the syntactic constructs of a language, SICP briefly explains the simple syntax of Scheme and then presents a series of deep concepts in computing and programming: functional programming, higher-order functions, data abstraction, streams, data-directed programming, a simulation of OOP via message passing, logic programming, interpreters, compilers, and register machines.
REF critically examine the introductory computer science curriculum, focusing on the shortcomings of the classic Structure and Interpretation of Computer Programs, and proposing an alternative based (in part) upon the use of sub-languages; one inspiration for our course is their advocacy of that approach.
The structure and interpretation of the computer science curriculum
Functional and Declarative Programming in Education
Computer Science