本页使用了标题或全文手工转换

计算机程序的构造和解释

维基百科,自由的百科全书
跳到导航 跳到搜索
计算机程序的构造和解释
SICP cover.jpg
第二版封面
作者 哈尔·阿伯尔森, 杰拉德·杰伊·萨斯曼, Julie Sussman
題材 Computer programming
類型 Textbook
出版商 MIT Press
出版日期 1985 (1st ed.), 1996 (2nd ed.)
頁數 657
ISBN 0-262-51087-1
LC分类法 QA76.6 .A255 1996
第一版封面

计算机程序的构造和解释》(英语:Structure and Interpretation of Computer ProgramsSICP[1]是一本关于计算机程序设计的总体性观念的基礎教科书,由MIT press與McGraw-Hill共同出版行銷。作者是麻省理工学院的教授哈尔·阿伯尔森傑拉德·傑伊·薩斯曼,此外傑拉德·傑伊·薩斯曼的妻子Julie Sussman也有參與本書的製作。封底的作者圖像是由其實驗室的同僚Nick Papadakis[2]後製的合成照。

书中使用程序设计语言Lisp的方言Scheme来解释计算机科学的核心概念,包括抽象(abstraction),递归(recursion),直譯器(interpreters),以及元語言抽象英语Metalinguistic_abstraction(metalinguistic abstraction)。具體而微地由宏觀到微觀給出清楚地輪廓與脈絡。

SICP/6.001[编辑]

麻省理工学院最大的部門,电子工程与计算机科学系,提供的课程被编为「6系列」(course 6);而以 SICP 為底的課程“6.001”,直到2008年退休為止,在過去近三十年一直是「6系列」裏頭的招牌課程[3],是程序设计以及電腦科學的入门课程之一。

本書在出版印行以前,相關主題以及講義即先行在麻省理工學院課程6.001使用。到第一版印行前,有一份給該部門教職員生的內部流通版,雖無正式印行,但麻省理工學院人工智能實驗室的技術報告第735號(AITR-735)即是此份草稿。由AI及CSL合併後的CSAIL仍保存有這份文件的電子檔。[4]

自第一版面世後即有諸多名校跟進使用[5];並引起廣大迴響,許多著作因之而生。第二版於1996年出版,被它所激發的著作也在不久後陸續改版。

由於兩位作者都是自由軟體的支持者(而Gerald Jay Sussman更是自由軟體基金會的創始元老當中,除了理查德·马修·斯托曼以外唯一一位仍持續活動的。),6.001為此而生的Scheme實作品,在自由軟體基金會成立前就已經釋出,基金會成立後方改名為MIT/GNU Scheme[6]。雖然麻省理工學院人工智慧實驗室一直在維護MIT/GNU Scheme,但累積一代又一代聰明駭客的心力,這太過於詭異神妙精心設計的產品到最後連自家人都不能完全理解掌握,甚至在最後一期的課程由作者之一且同時回国擔任課程教授的Gerald Jay Sussman宣佈以較為親切好用且同樣優異強大的競爭對手DrScheme[7]為課程正式支援版本,而非長久以來使用的MIT/GNU Scheme;這做法於向來自傲的麻省理工學院十分罕見。[8]

另一位作者 Harold Abelson 積極推動的 MIT OCW 理所當然地放上 6.001 的課程講義,試卷及參考資料。[9] 而於 1986 年作者們被 Hewlett-Packard(惠普) 聘請為其員工上課的錄影,也於惠普影視部後製處理之後大方地公開。[10]

十年就是一個世紀的電腦科學領域,6.001屹立不搖近三十年,終於在2008年於MIT功成身退,由開創本課程的教授Gerald Jay Sussman親自劃下句點。[11]

對大專院校電腦科學教育的影響[编辑]

本書被广泛地认为是计算机科学的经典教材,在计算机科学的教学领域产生了深刻的影响。諸多的經典教材都是由本書間接催化,諸如:

  • Structure and Interpretation of Classical Mechanics (SICM), 由 SICP 啟發,Gerald Jay Sussman 參與的古典力學教材。(SICP激發的創作中,唯一非電腦科學領域的。)
  • How to Design Programs (HtDP),由 SICP 出發的改良品。有簡體中文版《程序設計方法》。DrScheme 是作者群搭配本書推出的 Scheme 教學用實作品。
  • Essentials of Programming Languages (EoPL) ,以特定語言 Scheme 推演全書,這種寫法在程式語言結構的主題十分罕見。
  • Lisp in Small Pieces (LiSP),專談 Scheme 的編譯器與直譯器原理與製作。[12]
  • Simply Scheme,為了讓 SICP 更容易上手的先備書籍。SICP 的部份作者也參與了本書先期的製作過程。[13]
  • Concrete Abstractions,比 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] 總結了造成雙峰現象的各種原因並給了讓人信服的統合性結論。

各界評語[编辑]

封底列舉了美國東北大學计算机與資訊學院院長 Mitchell Wand 於《American Scientist[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 的出版協定,SICP 遂有兩家出版社各自的成書與行銷。其中 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. ^ 官方站点,包括书的全文。[1]
  2. ^ Nick Papadakis 於 MIT AI Lab 的主頁。[2]
  3. ^ MIT CSAIL 6.001 的課程網站。 [3][失效連結]
  4. ^ AITR-735,SICP的草稿。 [4][失效連結]
  5. ^ 使用本教材的學校列表。(只列出部分。) [5]
  6. ^ MIT/GNU Scheme 的站點。 [6]
  7. ^ DrScheme 的站點。 [7]
  8. ^ 唯一一次採用 DrScheme 的 6.001,2007秋季班的課程網頁。 [8][失效連結]
  9. ^ SICP/6.001 的 MIT Open Courseware 版本。 [9]
  10. ^ 作者群受 HP 聘請講授 SICP/6.001 的課程视频。可見到教授年輕時的青澀模樣;影片距今已有二十來年。 [10]
  11. ^ 6.001 的最後一堂課:〈The end of an era.〉[11]
  12. ^ LiSP 官方站點。書名是電腦界愛玩的把戲,遞歸式首字母縮略字[12]
  13. ^ Simply Scheme 第二版全文。撰書理念以及與 SICP 的淵源於序文可見。 [13]
  14. ^ 紙本停止印行,電子全文則在網路繼續讓人瀏覽。[14]
  15. ^ Alan J. Perlis 為本書寫的序。[15][失效連結]
  16. ^ Peter Norvig 的讀後感:〈Its the Best! Its the Worst! Why the split?〉[16]
  17. ^ 並不是臺灣代理的《科學人》;《美國科學家》的站點。 [17]
  18. ^ 學術界人士對 SICP 的評語. [May 3, 2011]. (原始内容存档于2011-08-05). 
  19. ^ 日文版書籍站點。 [18][失效連結]
  20. ^ 《计算机程序的构造和解释(原书第2版)》於中國互動出版網。 [19]
  21. ^ 英文維基百科關於這段歷史的頁面。[20]
  22. ^ 可參考《約耳談軟體:爪哇學校的危害》。也有介紹到本書以及 6.001。[21]
  23. ^ 因为书的封面上有一个魔法师;且封面為罕見的紫色。[22]
  24. ^ The Usual Lisp. 4chan BBS. [失效連結]
  25. ^ Shameless request. 4chan BBS. [失效連結]

關聯條目[编辑]

外部連結[编辑]