为什么MIT停止教授SICP

ref: Programming by poking: why MIT stopped teaching SICP

Sussman’s answer was that: (1) he and Hal Abelson got tired of teaching it (having done it since the 1980s). So in 1997, they walked into the department head’s office and said: “We quit. Figure out what to do.” And more importantly, (2) that they felt that the SICP curriculum no longer prepared engineers for what engineering is like today. Sussman said that in the 80s and 90s, engineers built complex systems by combining simple and well-understood parts. The goal of SICP was to provide the abstraction language for reasoning about such systems.

主要原因还是因为SICP课程不太适合现代软件工程. 80, 90年代, 软件工程师通过将一些简单易懂的部件组合起来, 来构建复杂的系统, 而SICP的目标则是通过一种抽象语言来理解这种系统

Today, this is no longer the case. Sussman pointed out that engineers now routinely write code for complicated hardware that they don’t fully understand (and often can’t understand because of trade secrecy.) The same is true at the software level, since programming environments consist of gigantic libraries with enormous functionality. According to Sussman, his students spend most of their time reading manuals for these libraries to figure out how to stitch them together to get a job done. He said that programming today is “More like science. You grab this piece of library and you poke at it. You write programs that poke it and see what it does. And you say, ‘Can I tweak it to do the thing I want?'”. The “analysis-by-synthesis” view of SICP — where you build a larger system out of smaller, simple parts — became irrelevant. Nowadays, we do programming by poking.

而现代软件工程, 则是建立在各种各样的library上的. 通常这些lib过于复杂以至于你没有办法完全理解(除非你来维护或者是这方面领域专家), 大部分人只能通过阅读manual来了解如何使用. 而SCIP里面的"分析-综合"的观点, 放在现在看来, 已经不太合适宜了.