软件可能确实与其他任何东西都不同,它的本意就是被抛弃。这一观点的重点就是总把它看作肥皂泡吗?
——Alan J.Perlis
自1980年以来,本书的材料就一直在MIT作为计算机科学学科入门课程的基础。在本书第1版出版前,我们已经用这些材料教了4年课,而到这个第2版出版,时间又过去了12年。我们非常高兴地看到这一工作被广泛接受,并被结合到其他一些教材中。我们已经看到自己的学生掌握了本书中的思想和程序,并把它们作为核心构筑到新的计算机系统或语言里。这些在字面上实现了一个古犹太教法典里的双关语:我们的学生已经变成了我们的创造者。我们非常幸运能有如此有能力的学生和如此有建树的创造者。
在准备这一新版本的过程中,我们结合进了成百的澄清性建议,这些建议来自我们自己的教学实践,也来自MIT和其他地方同行的评论。我们重新设计了书中的大部分主要程序设计系统,包括通用型算术系统、解释器、寄存器机器模拟器和编译器,也重写了所有程序实例,以保证这些代码可以在任何符合IEEE的Scheme标准(IEEE 1990)的Scheme实现上运行。
这个版本强调了几个新问题,其中最重要的是各种不同技术路径在处理计算模型中的时间问题上的中心作用。有关模型包括有状态的对象、并发程序设计、函数式程序设计、惰性求值,以及非确定性程序设计。这里还为并发和非确定性新增了几节,我们也设法把这方面的讨论集成到整本书里,贯穿始终。
本书第1版基本上是按我们在MIT一学期课程的教学大纲撰写的。由于有了第2版中增加的这些新材料,在一个学期里覆盖所有内容已经不可能了,所以,教师需要从中做些选择。在我们自己的教学中,有时会跳过有关逻辑程序设计的一节(4.4节);让学生使用寄存器机器模拟器,但并不去讨论它的实现(5.2节);对编译器则只给出一个粗略的概述(5.5节)。即使如此,这还是一个内容很多的课程。一些教师可能希望只覆盖前面的三章或者四章,而把其他内容留给后续课程。
MIT出版社的万维网网站为本书使用者提供支持,其中包含了取自本书的程序、示例程序作业、支持材料,以及Lisp的Scheme方言的可下载实现。
Harold Abelson和Gerald Jay Sussman