计算机程序的构造和解释
此條目的语调或风格或許不适合百科全書。 (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). 译者:飞龙.