计算机程序的构造和解释
此条目的语调或风格或许不适合百科全书。 (2014年8月17日) |
计算机程序的构造和解释 | |
---|---|
作者 | 哈尔·阿伯尔森,杰拉德·杰伊·萨斯曼,朱莉·苏斯曼 |
类型 | 教材 |
语言 | 英语 |
主题 | 计算机、计算机程序 |
发行信息 | |
出版机构 | 麻省理工学院出版社 |
出版时间 | 1985年 (第一版);1996年 (第二版) |
出版地点 | 美国 |
页数 | 657 |
规范控制 | |
ISBN | 0-262-51087-1 |
OCLC | [23] |
LC分类法 | QA76.6 .A255 1996 |
《计算机程序的构造和解释》(英语:Structure and Interpretation of Computer Programs,SICP)[1]是一本关于计算机程序设计的总体性观念的基础教科书,由麻省理工学院出版社与麦格罗希尔出版社共同出版营销。本书作者是麻省理工学院教授哈尔·阿伯尔森、杰拉德·杰伊·萨斯曼,此外杰拉德·杰伊·萨斯曼的妻子朱莉·苏斯曼也有参与本书的编纂。封底的作者图像是由其实验室的同僚尼克·帕帕达基斯[2]后制的合成照。
书中使用程序设计语言Lisp的方言Scheme来解释计算机科学的核心概念,包括抽象、递归、解释器以及元语言抽象。具体而微地由宏观到微观给出清楚地轮廓与脉络。
SICP/6.001
麻省理工学院最大的部门,电子工程与计算机科学系,提供的课程被编为“6系列”;而以SICP为底的课程“6.001”,直到2008年退休为止,在过去近三十年一直是“6系列”里头的招牌课程[3],是程序设计以及计算机科学的入门课程之一。
本书在出版印行以前,相关主题以及讲义即先行在麻省理工学院课程6.001使用。到第一版印行前,有一份给该部门教职员生的内部流通版,虽无正式印行,但麻省理工学院人工智能实验室的技术报告第735号(AITR-735)即是此份草稿。由AI及CSL合并后的CSAIL仍保存有这份文件的电子档。[4]
自第一版面世后即有诸多名校跟进使用[5];并引起广大回响,许多著作因之而生。第二版于1996年出版,被它所激发的著作也在不久后陆续改版。
由于两位作者都是自由软件的支持者(而杰拉尔德·杰伊·苏斯曼更是自由软件基金会的创始元老当中,除了理查德·马修·斯托曼以外唯一一位仍持续活动的。),6.001为此而生的Scheme实现品,在自由软件基金会成立前就已经发布,基金会成立后方改名为MIT/GNU Scheme[6]。虽然麻省理工学院人工智能实验室一直在维护MIT/GNU Scheme,但累积一代又一代聪明黑客的心力,这太过于诡异神妙精心设计的产品到最后连自家人都不能完全理解掌握,甚至在最后一期的课程由作者之一且同时回国担任课程教授的杰拉尔德·杰伊·苏斯曼宣布以较为亲切好用且同样优异强大的竞争对手DrScheme[7]为课程正式支持版本,而非长久以来使用的MIT/GNU Scheme;这做法于向来自傲的麻省理工学院十分罕见。[8]
另一位作者Harold Abelson积极推动的MIT OCW理所当然地放上6.001的课程讲义,试卷及参考资料。[9] 而于1986年作者们被Hewlett-Packard(惠普)聘请为其员工上课的录影,也于惠普影视部后制处理之后大方地公开。[10]
十年就是一个世纪的计算机科学领域,6.001屹立不摇近三十年,终于在2008年于MIT功成身退,由开创本课程的教授杰拉尔德·杰伊·苏斯曼亲自划下句点。[11]
对大专院校计算机科学教育的影响
本书被广泛地认为是计算机科学的经典教材,在计算机科学的教学领域产生了深刻的影响。诸多的经典教材都是由本书间接催化,诸如:
- 《经典力学的结构与解释》,由SICP启发,杰拉德·杰伊·萨斯曼参与的古典力学教材。(SICP激发的创作中,唯一非计算机科学领域的。)
- 《如何设计程序》,由SICP出发的改良品。有简体中文版《程序设计方法》。DrScheme 是作者群搭配本书推出的 Scheme 教学用实现品。
- 《程序设计语言的基本要素》,以特定语言Scheme推演全书,这种写法在编程语言结构的主题十分罕见。
- 《碎片化Lisp》,专谈Scheme的编译器与解释器原理与制作。[12]
- 《建议方案》,为了让SICP更容易上手的先备书籍。SICP的部分作者也参与了本书先期的制作过程。[13]
- 《具体抽象》,比SICP拥有更多例子并且不那么要求读者的数学能力。[14]
值得一提的是,几乎所有的派生作都直接或间接地抱怨 SICP “太难”;甚至连 SICP 自身于第二版也试图补充了一些让学习曲线更平滑的材料。第一届的图灵奖得主 艾伦·佩利 甚至在序文为此辩白:
- Do not labor under the illusion that this is a text digestible at MIT only, peculiar to the breed found there. It is precisely what a serious book on programming Lisp must be, no matter who the student is or where it is used.[15]
此外本书的读者群 - 包含教师学生与各界社会人士 - 给了本书十分两极化的评价,但不论好坏都非常有道理。所有改进或取代本书的动机都来自对本书的爱与恨。其中彼德·诺米格的读后感:〈Its the Best! Its the Worst! Why the split?〉[16] 总结了造成双峰现象的各种原因并给了让人信服的统合性结论。
各界评语
封底枚举了美国东北大学计算机与信息学院院长米切尔·旺德于《美国科学家杂志》[17]的发言:
Because of its clarity, simplicity and wit, this work is highly recommended to anyone seeking an understanding of the emerging paradigms of computer science . . . the book should be read by every self-respecting computer scientist.
——Mitchell Wand,American Scientist
除了封底,书籍的官方站点也有收录部分发表于学术界知名期刊的评论[18] :
The book should be obligatory for anyone involved in teaching computer science at degree level: it will convince them that inside computer science there really is a true science trying to get out.
——David Barron,The Times Higher Education Supplement
This is the first introductory book I would strongly recommend to anyone who wants to learn how to construct computer programs . . . if you are looking for a book to thrust into the hands of someone who wants to be initiated into the power and pleasures of programming, this book is the best I have seen yet.
——Kenneth D. Forbus,Artificial Intelligence, 27:1
My only problem with this book is the fact that it is far too fascinating for a first course in computing. I tried to browse it, but I was immediately sucked into reading every wonderful word. Be warned: don't open a copy of this book until you are ready for a programming feast.
——Jon Bentley,Communications of the ACM
各语言版本
原文版
原文版不论第一版或第二版,由于 MIT press 与 McGraw-Hill 的出版协议,遂为两家出版社各自成书与营销。其中 McGraw-Hill 负责北美地区教科书的订购业务,至于用于其他使用目的以及来自其他地区的教科书订购,则都交给 MIT press。随着 6.001 课程的结束,McGraw-Hill 已经停止印行,于是 SICP 原文版只能从 MIT press 订购得到。
日文版
- 原书第一版由元吉文男译出,麦格罗.希尔出版。本译本评价较高,但随着出版社倒闭已经绝版。
- 原书第二版由号称日本第一位黑客,时任麻省理工学院助理教授的和田英一译出,日本培生集团出版。[19]虽然译者学术表现不差,但译本谬误甚多,本书的评价十分低落。
中文版
只有翻译自原书第二版的简体中文版,由北京大学数学学院信息科学系教授裘宗燕译出,机械工业出版社出版。[20]
与 Lisp 的渊源
第一版面世时人工智能相关研究正在没落:经费削减,研究无重大突破。[21]本来注定与人工智能研究要一起老死于实验室的 Lisp,因为这本书不但走出实验室,更风靡新一代的学子,让这过于先进、超越时代的编程语言得以延续生命。在 SICP 出现之前,没有人认为 Lisp 可以担当讲授入门程序设计基础的教学语言。
时至今日由于硬件的高效与低价,使用真正的高级语言,如 Lisp,不再是奢侈的选择。而电脑运算平台往多核心及平行处理发展,函数编程语言的特性也能更有效地运用这类架构。[22] 正由于此书让 Lisp 飞入寻常百姓家延续生命与活力,Lisp 才能于大环境与时机成熟有机会再度火红了起来。
除了对 Lisp 的相关影响,SICP 也影响了编程语言的设计与取舍还有编程典范的发展与盛行。
昵称
此书在黑客圈有两个昵称,一个是“魔法书”,另一个叫“紫皮书”。[23]
此外在任何 Scheme 的论坛,提到“The Bible”就是指 SICP。
在4chan上曾有人索要过一本名为 The Usual Play 的萝莉控漫画的无色情画面版本,而回复者将所有的色情画面都改为了 SICP 的内容截图,发送了一本称为 The Usual Lisp 的修改版。[24][25]这本书因此成了一种模因,经常被用于“镇宅”。这也带出了不少与SICP相关的同人创作。
参考与注解
- ^ 官方站点,包括书的全文。[1] (页面存档备份,存于互联网档案馆)
- ^ Nick Papadakis 于 MIT AI Lab 的主页。[2] (页面存档备份,存于互联网档案馆)
- ^ MIT CSAIL 6.001的课程网站。[3] (页面存档备份,存于互联网档案馆)
- ^ AITR-735,SICP的草稿。 [4][永久失效链接]
- ^ 使用本教材的学校列表。(只列出部分。) [5] (页面存档备份,存于互联网档案馆)
- ^ MIT/GNU Scheme 的站点。 [6] (页面存档备份,存于互联网档案馆)
- ^ DrScheme 的站点。 [7] (页面存档备份,存于互联网档案馆)
- ^ 唯一一次采用DrScheme的 6.001,2007秋季班的课程网页。 [8] (页面存档备份,存于互联网档案馆)
- ^ SICP/6.001的MIT Open Courseware版本。 [9] (页面存档备份,存于互联网档案馆)
- ^ 作者群受 HP 聘请讲授 SICP/6.001 的课程视频。可见到教授年轻时的青涩模样;影片距今已有二十来年。 [10] (页面存档备份,存于互联网档案馆)
- ^ 6.001 的最后一堂课:〈The end of an era.〉[11] (页面存档备份,存于互联网档案馆)
- ^ LiSP 官方站点。书名是电脑界爱玩的把戏,递归式首字母缩略字。[12] (页面存档备份,存于互联网档案馆)
- ^ Simply Scheme 第二版全文。撰书理念以及与 SICP 的渊源于序文可见。 [13] (页面存档备份,存于互联网档案馆)
- ^ 纸本停止印行,电子全文则在网络继续让人浏览。[14] (页面存档备份,存于互联网档案馆)
- ^ Alan J. Perlis 为本书写的序。[15] (页面存档备份,存于互联网档案馆)
- ^ Peter Norvig 的读后感:〈Its the Best! Its the Worst! Why the split?〉[16]
- ^ 并不是台湾代理的《科学人》;《美国科学家》的站点。 [17] (页面存档备份,存于互联网档案馆)
- ^ 學術界人士對 SICP 的評語. [May 3, 2011]. (原始内容存档于2011-08-05).
- ^ 日文版书籍站点。 [18] (页面存档备份,存于互联网档案馆)
- ^ 《计算机程序的构造和解释(原书第2版)》于中国交互出版网。 [19] (页面存档备份,存于互联网档案馆)
- ^ 英文维基百科关于这段历史的页面。[20] (页面存档备份,存于互联网档案馆)
- ^ 可参考《约耳谈软件:爪哇学校的危害》。也有介绍到本书以及 6.001。[21] (页面存档备份,存于互联网档案馆)
- ^ 因为书的封面上有一个魔法师;且封面为罕见的紫色。[22] (页面存档备份,存于互联网档案馆)
- ^ The Usual Lisp. 4chan BBS.[永久失效链接]
- ^ Shameless request. 4chan BBS.[永久失效链接]
关系条目
外部链接
- 官方网站
- Structure and Interpretation of Computer Programs. Interactive Version (页面存档备份,存于互联网档案馆)
- Structure and Interpretation of Computer Programs — JavaScript Adaptation. [2020-10-09]. (原始内容存档于2021-01-18). Martin Henz and Tobias Wrigstad. SICP JavaScript 描述. [2020-10-09]. (原始内容存档于2020-10-13). 译者:飞龙.
- SICP in Python - CS61A: Online Textbook. [2020-10-09]. (原始内容存档于2020-05-30). John Denero. SICP Python 描述 中文版. [2020-10-09]. (原始内容存档于2020-04-21). 译者:飞龙.