電腦程式的構造和解釋(原書第2版)
【原書名】 Structure and Interpretation of Computer Programs,Second Edition
【原出版社】 Massachusetts Institute of Technology
【作者】 (美)Harold Abelson,Gerald Jay Sussman,Julie Sussman
【譯者】 裘宗燕
【叢書名】 電腦科學叢書
【出版社】 機械工業出版社
http://www.china-pub.com/computers/common/info.asp?id=17992
【參考資料】
相關網站有本書原始碼及其他教輔資料,網址為:www-mitpress.mit.edu/sicp/
mitpress公開的線上瀏覽版本
http://mitpress.mit.edu/sicp/full-text/book/book.html
the homework answer
http://inst.eecs.berkeley.edu/~cs61a/hw/index.html
http://www-inst.eecs.berkeley.edu/~cs61a/sp06/
作者授課錄影下載
http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/
UC Berkeley的教學錄影(Spring 2004):
http://webcast.berkeley.edu/courses/archive.html?prog=40&group=57
最省事的scheme環境,初學推薦
http://www.drscheme.org/
The Scheme Programming Language, 2nd Edition
?; 1996 Prentice Hall
http://www.scheme.com/tspl2d/
備查
http://www.schemers.org/Documents/Standards/R5RS/
更多關於scheme
http://www.schemers.org/
http://www.swiss.ai.mit.edu/projects/scheme/index.html
http://readscheme.org/
http://dmoz.org/Computers/Programming/Languages/Functional/
http://directory.google.com/Top/Computers/Programming/Languages/Functional/
http://lambda-the-ultimate.org/
http://www.ai.mit.edu/research/publications/publications.shtml
開放式課程計劃OOPS
http://www.cocw.net/
【評論】
紫皮書(Purple Book)!巫師書!!SICP!!!TheBook!!!!
四個名字都是這本書的暱稱,“紫皮書”是因為書皮是紫的,“巫師書”是因為書皮上印著一男一女兩個巫師模樣的人,“SICP”就是書名幾個單詞的首字母,“
TheBook”是因為這本書是在scheme領域內公認的聖經,所以有此暱稱
絕對是好書, 非常具有啟發性.
把編譯器、演算法、硬體的的內容用Lisp語言聯絡起來。
次書是我學習CS的第一本教材(MIT的6.001),非常好。
Its the Best! Its the Worst! Why the split?, May 8, 2000
Reviewer: Peter Norvig (Palo Alto, CA USA) - See all my reviews
I think its fascinating that there is such a split between those who love and hate this book. Most reviews give a bell-shaped
curve of star ratings; this one has a peak at 1, a peak at 5, and very little in between. How could this be? I think it is
because SICP is a very personal message that works only if the reader is a computer scientist (or willing to become one). So
I agree that the book's odds of success are better if you read it after having some experience.
To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are
built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are
the ones who just want to know how to drive their car on the highway, just like everyone else.
if you want to be a real professional, you should read this
Donald Knuth says he wrote his books for "the one person in 50 who has this strange way of thinking that makes a programmer".
I think the most amazing thing about SICP is that there are so FEW people who hate it: if Knuth were right, then only 1 out
of 50 people would be giving this 5 stars, instead of about 25 out of 50. Now, a big part of the explanation is that the
audience is self-selected, and is not a representative sample. But I think part of it is because Sussman and Abelson have
succeeded grandly in communicating "this strange way of thinking" to (some but not all) people who otherwise would never get
there.
Those who hate SICP think it doesn't deliver enough tips and tricks for the amount of time it takes to read. But if you're
like me, you're not looking for one more trick, rather you're looking for a way of synthesizing what you already know, and
building a rich framework onto which you can add new learning over a career. That's what SICP has done for me. I read a draft
version of the book around 1982 and it changed the way I think about my profession. If you're a thoughtful computer scientist
(or want to be one), it will change your life too.
Some of the reviewers complain that SICP doesn't teach the basics of OO design, and so on. In a sense they are right. The
book doesn't directly tell you how to design and write an object-oriented program using the subset of object-oriented
principles that show up in the syntax of Java or C++. Rather, the book tells you what those principles are, how they came to
be selected as worthwhile, how they can be implemented from the ground up, and how a different combination of principles
might be more appropriate for a particular problem. This approach requires you to understand the range of possibilities, and
to think about trade-offs as you go through the design process. Programming is a craft that is subject to frequent failure:
many projects are started and abandoned because the designers do not have the flexibility, experience and understanding to
come up with a suitable design and implementation. SICP gives you an approach that will succeed, but it is an approach based
on principles and wisdom, not on a checklist. If you don't understand the principles, or if you are the kind of person who
wants to be given a cookbook of what to do rather than to think creatively, or if you only want to work on problems that are
pretty much like the problem you worked on last time, then this approach will not work for you. There are other approaches
that will be more reproducible for a limited range of simple problems, but there is no better way than SICP to learn how to
address the truly hard problems.
The Classic, May 20, 2000
Reviewer: paul graham (Cambridge, MA United States) - See all my reviews
This is one of the great classics of computer science. I bought my first copy 15 years ago, and I still don't feel I have
learned everything the book has to teach.
I have learned enough to write a couple books on Lisp that (currently) have four to five stars. Yet SICP, which is pretty
much the bible of our world, has only three? How can this be?
Reading the reviews made it clear what happened. An optimistic professor somewhere has been feeding SICP to undergrads who
are not ready for it. But it is encouraging to see how many thoughtful people have come forward to defend the book.
Let's see if we can put this in terms that the undergrads will understand -- a problem set:
1. Kenneth Clark said that if a lot of smart people have liked something that you don't, you should try and figure out what
they saw in it. List 10 qualities that SICP's defenders have claimed for it.
2. How is the intention of SICP different from that of Knuth? Kernighan & Ritchie? An algorithms textbook?
3. Does any other book fulfill this purpose better?
4. What other programming books first published in the mid 1980s are still relevant today?
5. Could the concepts in this book have been presented any better in a language other than Scheme?
6. Who is al? Why is his name in lowercase?
讀書時曾經讀過William R. Cook的文章《Object-oriented programming versus abstract data types》,當時對文章中的觀點有些疑惑,當我讀到
2.4抽象資料的多重表示時,頓時豁然開朗,作者談及資料導向的程式設計和可加性時給出的圖2-22複數系統的動作表與William R. Cook文中的觀點非常接近。
確實是好書。好書慢慢讀,如品茶、品酒,回味無窮。
如果想對書中所用的Scheme語言做進一步瞭解的話,可以在 http://www.drscheme.org/ 下載DrScheme解釋/編譯器。Scheme語言雖然另類及實際用途有
限,但卻有較高的“可玩性”,主要表現在它對幾類程式設計語言範例(paradigm) -- 過程型/物件導向型/函數型/邏輯型 -- 都能做出良好表達。
說起Comp.Sci.的讀物,其實除了TAOCP、CLR外還有一本經典叫作 SICP (Structure and Interpretation of Computer Programs,俗稱“紫皮書”或“巫
師書”)。MIT和UCBerkeley兩大學府都指定這本書作為電腦科目的入門教材。它涉及的不是具體的資料結構和演算法,而是對“電腦程式”這個概念本身的解構
/解讀。“程式即思維表達”是此書傳遞的一個意念。由於涉及的是程式設計的抽象層面,批評者會認為這本書不夠實用(這在amazon.com上讀者書評中的分歧可
見一斑),但事實上很多頂尖的程式設計師都認為正是這本書幫他們“開了竅”,是一本具有高度啟發性的經典。
我很喜歡SICP,但是要說推薦給出版社我卻很猶豫。原因是雖然這本書追問編程的本質,對有科學探索氣質的人很有吸引力,但是對於大部分忙碌的程式員來說,
恐怕覺得沒有時間慢慢體會它的好處。這本書用LISP的變體SCHEME語言講事,國內對於主流語言趨之若騖的大多數人恐怕不買帳。
對於曲高和寡的著作,出版社引進就會蝕本。好在有線上版本,喜歡的人自可以免費閱讀。