1. 程式人生 > >計算機專業推薦書單

計算機專業推薦書單

【動機】就計算機這個專業來說吧,因為我是非科班出身的學生,要重新開始補相應的知識,目前定下來要學習的基礎理論知識有:離散數學,資料結構與演算法,

組成原理,彙編,作業系統,網路等等,有的時候覺得這裡每一個知識點要學的深入的話都是無底洞,不過我又是那種喜歡追根究底的人,比如學習a知識的時候要

用到b知識,我會停下來學學b知識,然後一直這樣下去.....有時候也會覺得很累,覺得沒有一個盡頭。最近也看到一個觀點:讀書應該“不求甚解”,我想了很久

,還是不明白其中的大意。上面我提到的那些知識點要怎樣才能達到“知道”的度?一般的,“知道”這個度又是如何掌握的?


--------------------------------------------

數學

--------------------------------------------
離散數學

============================================

具體數學:電腦科學基礎(英文版.第2版)         
 
【原書名】 Concrete Mathematics A Foundation for Computer Science(Second Edition) 
【原出版社】 Addison Wesley  
【作者】 (美)Ronald L.Graham,Donald E.Knuth,Oren Patashnik  
【叢書名】 經典原版書庫  
【出版社】 機械工業出版社  

http://www.china-pub.com/computers/common/info.asp?id=7210

【評論】
如果認真讀這本書,會改變我們從小已經被糟蹋了的數學思維。慢慢讀,不應該太功利。作者很有趣。如果認真對待裡面的公式,會發現它們很奇妙。一點也不枯


前天收到了本書 , 大師寫的就是不一樣, 是學習計算機方面的絕好的書,文字很幽默而且它教給你的不是金子而是點石成金之術,聽說很久以前國內就引進了

也有中文版,莊心谷老師翻譯的(中文版:《具體數學》,出版社:西安電子科技大學,這本書的89年版在中國有翻譯出版,譯者好象是莊心谷
由西安電子科技大學出版社出版,出版時間是1992年。)。我還喜歡一本是RICHARD A.BRUALDI的組合數學,寫的非常好
絕對經典的一本好書,“圖靈獎”得主Donald E.Knuth撰寫《計算機程式設計藝術》第1卷和第3卷的數學基礎
作者文風幽默倒是確確實實的。書上頁邊的旁註很有意思。說是學生們筆記中的旁註。以前的學生的注(或五花八門的評論),能如此大量出現在教科書裡,國情

真是大大的不同。
訓練思維的好書,國內找不到這樣的書。看這本書不輕鬆,要有很好的數學功底,但看懂它能極大的提升你的功力,要想成為真正的牛人這本書不容錯過!
從來計算機數學不分家,這本書可以真正的稱為計算機的數學基礎,出自名家之手,又被斯坦福等大學採用,看後收益不淺,果真不同凡響。想學好計算機,這本

書絕不會令你失望。
這本書好就好在讓人的思維為之一變,讓人覺得原來事情可以這樣看啊!~
讀過的最好看的數學書。

亞馬遜如是說:The material is very dense, and it's not a book I'd recommend for casual reading: this is stuff you only work

through if you're going to need it. But if you *are* going to need it, this book will make it a lot more pleasant.
不能當小說看。但是當需要時,此書將變得樂趣無窮。

--------------------------------------------

演算法

--------------------------------------------

資料結構與演算法(英文影印版)  
 
【原書名】 Data Structures and Algorithms   
【原出版社】 Pearson Education  
【作者】 Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman  
【叢書名】 大學計算機教育國外著名教材系列(影印版)  
【出版社】 清華大學出版社  
http://www.china-pub.com/computers/common/info.asp?id=14954

【參考資料】

【評論】
本書是20多年前出版的,採用pascal描述。
該書有中譯本,書名《資料結構與演算法》,唐守文等翻譯,1987年科學出版社出版。

Bible!!20年來這本書依然是講解基本資料結構與演算法最清晰、優美、權威的教科書!
aho幫的data structures and algorithms和cormen等introduction to algorithms是學習資料結構與演算法最完美的方案!

這本書是作者另外的那本書《Design and Analysis of Computer Algorithms》的前6章的精簡版本。
http://www.cocw.net/mit/Electrical-Engineering-and-Computer-Science/6-046JFall-2004/Readings/index.htm
Aho, Alfred V., John E. Hopcroft, and Jeffrey D. Data Structures and Algorithms. Reading, MA: Addison-Wesley, 1983. ISBN:

我覺得三位大師的書最大的特點是好懂好學,深入淺出,解釋的例子舉得很好,能夠讓你弄清原理。

這本書非常非常適合作為計算機專業本科生資料結構和演算法的教材,至今為止我還沒找到比這本書更好的介紹基本資料結構和演算法的書。正如aho幫經典的編譯原

理書(dragon book)一樣,這本書同樣經典、權威、優美、清晰!!

============================================


演算法引論:一種創造性方法         
 
【原書名】 Introduction to Algorithms: A Creative Approach 
【原出版社】 Addison Wesley/Pearson  
【作者】 (美)Udi Manber  
【譯者】 黃林鵬 謝瑾奎 陸首博  
【出版社】 電子工業出版社  
 
本書是國際演算法大師烏迪?曼博(Udi Manber)博士撰寫的一本享有盛譽的著作,組織結構清晰且易於理解,強調了創造性,具有濃郁特色,時至今日仍有巨大的

價值,適合作為計算機及相關專業演算法和高階演算法課程的教材。

============================================

演算法導論(第二版 影印版)         
  
【原書名】 Introduction to Algorithms(Second Edition) 
【原出版社】 The MIT Press  
【作者】 (美)Thomas H.Cormen Charles E.Leiserson Ronald L.Rivest Clifford Stein  
【出版社】 高等教育出版社 

資料”等等資料

【評論】
這本書的英文簡稱或暱稱不是ITA,而是CLR(第一版)或CLRS(第二版),其實就是幾位作者的姓名縮寫加在一起

百科全書的組織方式,麻省理工的團隊作品,經典中之經典,作者剛剛獲得去年的圖靈獎,國外絕大多數大學演算法課的必備教材。

許多美國大學的研究生院都把這本書作為教材,詳細講解。在《程式設計師》的演算法書排名上位列第二,僅次於大名頂頂的 the art of computer programming

我最初注意到CLR大約是96年,當時看到不少論文後面把它作為參考文獻。後來領導安排我教離散數學,這不是我的特長科目,所以備課的時候我找了不少相關的

書籍和文章,其中包括純數學的,也包括資料結構和演算法方面的,因為我更關心學生在做課題的過程中的實際演算法設計和分析能力。我發現最近出的一些資料結構

和演算法教材除了把TAOCP作為權威來源以外,也把CLR作為標準參考書。TAOCP的傳奇很多人都熟悉,但CLR知道的就不多了。我也是一樣無知,所以就在網上找了

一些材料,瞭解到CLR的一些特點。我的感覺是用CLR教研究生是一個不錯的選擇(我們教研室教演算法的老師覺得它比Aho幫的演算法設計與分析深度淺,但是我說

CLR更全、更現代、學生更容易接受)。

講演算法講的比較好的幾本書之一。雖然自己英文不是很好,看這本書是看完一節,查一次英漢詞典,但是總體來說,書流暢敘述了對於演算法的講解,整體還是比較

通俗易懂的。原汁原味的書,看著是種享受。不過讀過幾遍後,還是有不懂的地方,有時還要溫習一下,又會有不同的領悟。

作者之一Ronald Rivest是RSA的設計者,於2002年獲得圖靈獎。

如果不想急功近利,又不想陷入基礎理論的浩瀚煙海,那麼本書就是大家的最好選擇.演算法類很優秀的書,通俗易懂,深入淺出,很適合中初類讀者。

<<現代計算機常用資料結構和演算法>>是CLR 1ed(美國1990年出版),1994年南京大學計算機系潘金貴翻譯,書號是ISBN 7-305-02424-4/TP*83,花了兩年多時

間1992年翻譯出來的,1994南大出版.

既有詳細的解說又有嚴格的數學論證,好書,強烈推薦。 演算法書中的經典!內容全面準確,對每個演算法都有理論上的證明,語言嚴謹流暢,是每個演算法愛好者或程

序設計人員的必備參考書!

按照這本書自己的講法,它不僅適合研究生,也適合本科生,因為書中的材料被組織成相對較小的章節,可以靈活地取捨和組織。對國內的本科生來說,用英語學

習專業材料通常有一定的問題。主要原因是不習慣而不是看不懂。這本書的寫作風格平實(或者說枯燥),應該不難閱讀。但是如果是頭一次閱讀專業英文教材,

一般會感覺到不容易形成摘要。

行文流暢,讓人有欲罷不能之感.有些與資料結構重合的部分一對比不知比嚴蔚敏的相應章節好上多少,真正的大師水準.就個人感覺,隱藏在演算法背後的設計思想與

設計技術剖析的不細,更多的筆墨放在了證明上,此乃白璧微瑕.

關於這本書和那本《algorithms in C++》的感想:
那本書是用 C++ 程式碼來描述演算法。作者是老師,而不是工程師。這本書是用偽碼來描述演算法。
那本書偏重演算法的實現。這本書偏重演算法的證明和分析。
那本書的習題多為“Write a program ...”。這本書的習題多為“Give an algorithm ...”or “Give a proof ...”.
這本書比那本書厚。

內容特點是抽象和形式化,既有嚴格的理論證明,又具有很強的構造性

演算法是程式設計的靈魂,而此書堪稱演算法分析著作中的“獨孤九劍”,故我強烈推薦。

我選的第一本演算法教材,本書的確很全面論述了演算法的內容,而且對各個層次讀者都有考慮,建議買一本讀一讀,很值。
理論嚴謹,啟發性高,具有大量的圖表;對演算法一步步的推導,萬丈高樓從地起!既適合研究生與科研人員,又適合初學者,看了絕對大有裨益!!

門檻低,適用人群廣!想作程式設計師,演算法必須學,這是少有的不打擊積極性的書。

絕對的經典!深入淺出!大量的圖表,對演算法不是直接給出,而是一步步的推導,讓人有知其然而知其所以然的感覺!適合各種水平的人看,如果你願意,甚至可

以把他作為數學書看!!著次地,怎一個爽字了得。

雖然說是抽象了點,但是隻有這樣才能夠從最基本的原理出發,獲取演算法的精髓。這本書既特別適合初學者,對想要更深一層研究演算法的也很有裨益。最適合計算

機演算法初學者的名著!

它很厚實,不僅在於它的尺寸,更在於它所承載的知識。
外形的厚重與閱讀的舒暢使它成為經典的對立統一,就像是一名外形高大的卻身懷絕世輕功的武林高手。

幾乎所有的演算法教科書都把這本《演算法導論》列為參考首選。對每個演算法都給出了嚴格的數學證明,讓人看了有種:知其然而知其所以然的感覺!!

我們傾向於把CLR和TAOCP進行對比。
從寫作質量上看,兩者都是罕見的上品。
從範圍上看,TAOCP的整套書比一卷本(很龐大的一卷!)的CLR巨集大,但是TAOCP的後幾卷還沒出來,CLR覆蓋的有些內容在TAOCP的前三卷裡面沒有討論。
從詳盡程度上看,CLR很詳盡,而TAOCP極詳盡。
從作者的聲譽上看,寫TAOCP的Knuth是大名家,百年一遇的天才;主筆CLR的Cormen從學術成就還不能說已經非常卓著。當然CLR中的R即Rivest也是個非常人物

,公開祕鑰密碼演算法RSA就是此公的傑作。
有一個現象很有意思,TAOCP是Knuth在CalTech上研究生的時候就開始寫作的,而CLR是Cormen還在MIT做博士生的時候就已經出版了!
從出版後的影響上看,TAOCP出版了三卷後,Knuth就獲得了圖靈獎,而這三卷書則塑造了電腦科學。CLR目前是演算法的標準教材,美國許多名校的計算機系都使

用它,另外許多專業人員也經常引用它。
我覺得Knuth的寫作有一個標準,那就是成為科學史上的里程碑。我們會想起歐幾里德的“幾何原本”,牛頓的“自然哲學的數學原理”。
CLR會達到什麼地位,一代人、兩代人的標準教材還是更高?Only time will tell.
從書籍產生的意義講:AOCP和CLR不能項比較。AOCP在計算機領域是屬於開創性的作品,具有學科經典的地位。爾後,有關資料結構和演算法的書基本都是對AOCP的

解讀、大眾化、實用化,同時增加一些改進的、新的演算法。CLRS基本也屬於此類。只是他的寫法較好,理論深度適中。另外,兩書的習題都非常豐富。我認為,如

果不做習題,書的價值將減少一半。

但TAOCP給人的感覺比較學院派,而ITA則相對來說較為實用一點。

============================================

程式設計珠璣(第二版)        

【原書名】 Programming Pearls Second Edition  
【原出版社】 Addison Wesley  
【作者】 Jon Bentley  
【譯者】 謝君英 石朝江  
【叢書名】 大師簽名系列  
【出版社】 中國電力出版社 

============================================

--------------------------------------------

網路

--------------------------------------------
計算機網路(第4版)                
 
【作者】 謝希仁  
【叢書名】 高等學校電子資訊類規劃教材  
【出版社】 電子工業出版社  
http://www.china-pub.com/computers/common/info.asp?id=12772

【評論】
國內網路書籍絕對的經典之作!

============================================

計算機網路(第4版)(中文版)         
 
【原書名】 Computer Networks, Fourth Edition 
【原出版社】 Pearson Education  
【作者】 Andrew S.Tanenbaum,Vrije Universiteit,Amsterdam,The Netherlands  
【譯者】 潘愛民  
【叢書名】 世界著名計算機教材精選  
【出版社】 清華大學出版社

【評論】

《計算機網路》這本書有20多年的歷史(1980年第1版)和積累,作者有豐富的知識基礎和教學經驗。本書基本上按照從底向上的思路,內容涉獵非常廣,但是並不

深入,然而作者提供了很多參考資料,所以,這本書既是一本教材,也是一本很好的參考書。實際上,在國外,還有完全不同思路的教材也同樣很受歡迎,比如

James Kurose和Keith Ross合著的《Computer networking: A top-down approach featuring the Internet》也是一本不錯的網路教材,它從應用層

開始講起,由上至下,由淺入深,適合於作為學習用書。

其實這一版本的書和第三版區別不大,第四版主要是刪掉了第三版中講述ATM的部分,然後是將以前應用層中的安全部分作為第8章重點講述,其餘的差別很小.個人認

為第版還是相當不錯的完全順應了歷史潮流,ATM作為已經或是將要被淘汰出局的技術,確實不用花太多的時間在上面.作為當前網路研究方面熱點的安全問題確實應

該重點講述.

本書講解詳盡,並儘量兼顧全面與重點突出之間的均衡,這種內容安排相信可以滿足大多數人的需求,應該說該書的特點就是內容全面,而且緊跟潮流,對典型的

技術案例做了重點剖析。

我覺得它寫的像一本大全類的書,什麼都說,結果什麼說的不痛不癢,有點像蜻蜓點水那樣子,像是簡介的書那樣,不深入,真的不深入,我還以為外國老寫的書都是比

較風趣幽默的,不過好像看上去也不怎麼風趣幽默!還有失望的是,這麼大的一本書,在網路硬體和網路OS這方面的知識卻介紹的不多,結果我很多想查詢也沒找到.
我覺得如果是初學者看這本書的話,不見的會很好,因為這裡面只是一個簡介,忽略了一些細節的問題和各個原理/協議/標準之間在的聯絡和串通,忽視了一個整體的

網路通訊環境下的通訊的怎麼開始,過程是怎麼樣,結果是怎麼樣,在這樣的一個過程中,各個原理/協議/標準的執行以及他們的細節問題,
總之我覺得這本書是把網路的各個部分分塊了,沒有從整體上來講網路的實現技術.所以我不建議初學者看著本書,但是當你不是初學者的時候,看這本書對你來說就

好像是在看網路概論之類的入門書籍了,真是矛盾啊.

人說“一本好書帶來一個世界”,可這本書是“一個章節帶來一個世界”!作者的知識廣博讓人敬佩,第二章的傅立葉分析光幾句話就把以前學了一個學期訊號課也不

甚了了的地方講清楚了

關於謝老的電子工業出版社的同樣名稱的書與這本書的對比:
強烈建議初學網路的網友,去看謝老的那本書,謝老的那本書,寫作非常嚴謹,並解釋清楚了許多初學者或者是工作多年的仍混淆的基本概念,絕對稱得上字字珠

磯。關鍵在於謝老將一些老的網路技術作了刪減,增加了不少當前熱門的網路技術,可以說是一本跟得上時代的網路教科書。
Andrew的這本有自己的特色,但我覺得在許多方面,比不上謝老的這本國產書。它的內容龐雜,該講清楚的地方沒有講清楚,初學者容易混淆的地方則一筆帶過,

看了這本書的人,也許要將這樣的混淆概念帶到以後的工作中去。這些方面的例子可以具很多。如:路由器的基本原理,謝老的這本就講得比較好。TCP協議流量

控制部分也是謝老的這本比較好。謝老的這本還將ALOHA的原理作為附錄,從正文中刪除了,這也是適應網路發展的要求。最短路徑演算法如果看Andrew的,你很難

懂,但看了謝老的附錄裡的演算法描述,一看就懂,還能明白Andrew沒講的內容。對於應用層協議,謝老的這本抓住重點,寫得簡明扼要,因為讀者基本接觸過或學

到過應用層的一些協議原理。該細的細,該粗的粗。而andrew這本卻是眉毛鬍子一把抓,什麼都羅列來,什麼也沒講明白。特別是關於SNMP部分,沒有謝老的這

本條理清楚。
不多講了,我的意思在於:我們不要迷信外國作者所謂的暢銷書,其實國內作者寫的書比他們更好,我們應該從實際出發,選擇適合自己的書。
我看過謝老的前幾章,確實講的很清楚。如傳送速率(傳輸速率)和傳播速率。很難得國內作者的書比國外好的。

我對比了兩者,覺得還是謝老師的書更加深入淺出,道理清楚,概念解釋的有針對性;而經典呢,似乎一下子難以讓人看進去,而且更像是一篇篇論文,並不解釋

太多的基礎概念和道理,講解的是技術。所以,我也建議初學者或者向我這樣的帶著工作中的疑惑去看書的人,還是買著一本;而有一定水平的當然看經典較好,

也可作為收藏。

這兩本書各有側重點,寫書的目的不太一樣。謝老的這本書側重於網路應用,講述了現有網路的基本原理,側重於現有網路的基本概念,寫得非常流暢,非常適合

有志於網路應用的讀者,這也是國內寫得最好的一本網路應用教程。
而Andrew的那本書,側重於講網路的構成原理,適合於有志於網路設計、網路開發的讀者,其理念在於啟發你設計一個完整網路所要考慮的問題。這本書不算是最

好的,但是一本百科全書(有點這個意思)。我的朋友在加拿大讀書,他們學校用的教材我也看了,比這兩本都要好,理論也講得比較深。
所以這兩本書各有側重點,但都是兩本比較好的書,讀者應該按照自己的發展方向來選擇所用的教材。

講解的非常詳細!對一項技術的優缺點,應用方向,不同技術,不同協議之間的比較都作了詳細深刻講解!與謝希仁的那本《計算機網路》相比,這本書寫的更深

,知識面更廣!不過謝老這本知識結構緊湊,每個概念都給出嚴格定義,較好的把握了重點!所以我還是建議兩本一起看

和大家討論以下學網路必看的一些書籍
我覺得這本和謝老的那本以及tcp/ip詳解應該是必看的
不知大家有沒有看過
機械工業出版的
計算機網路: 自頂向下方法(原書第3版)  
是不是可列於必看之列
還有高傳善翻譯的一本網路互連書
這些書都很經典

學網路,要看的書出這本書以外,還有謝希仁的同名的書,當然《TCP/IP祥解:卷一:協議》也是必不可少的。
我的感覺是這本書是一個非常好入門及提高階段,而《TCP/IP祥解:卷一:協議》則是精通必需的。
謝老的書是對這兩本書的不錯的結合。但深度不及這兩本書。

網路是一個非常大的概念,不可能在一本入門教材裡講得很深入徹底。如果您想要了解那些advanced topic背後的基本原理:如果要學習BSD Socket可以看

rstevens的書,要學習Internet協議可以看Stevens寫的TCP/IP Illustrated和Comer的TCP/IP網際互聯,要學習分散式物件系統可以看《分散式系統原理

》,要學習協議的形式化驗證方法可以看林闖的書……等等

Stevens寫的TCP/IP Illustrated和Comer的TCP/IP網際互聯跟“計算機網路”這本書是互補的。前者針對TCP/IP,後者講網路原理。

比較經典的計算機網路首先推崇的是Richard Steven的書,tcp/ip illustrator三卷;那個時候還流行過Douglas Comer教授的 "internetworking with

tcp/ip 三卷。


--------------------------------------------

作業系統

Andrew S.Tanenbaum ,學界泰斗
五大名著,橫跨三個基礎領域:
作業系統:設計與實現;分散式作業系統;現代作業系統;計算機網路;結構化計算機組成
思路清晰,以發展為主導,注意啟發式引出問題,不僅是計算機專家,亦是教育大家

作業系統領域的經典之作,已被國外多所重點大學採用為教材或作為教學參考書。通過學習本書,讀者定能對作業系統的功能與實現技術有全面的瞭解。

《作業系統概念(6)》和《現代作業系統(2)》,這兩本書都是很經典的作業系統書籍

兩本都是最經典的,但是,我覺的這本內容細一點,雖然作業系統概念容易讀些,但是分散式部分太範,且io和檔案部分個人覺的內容有些泛了,有些佔篇幅了,而這本

是每張都有結合例項,理論也有深度,去掉了分散式。尤其是《作業系統概念》分散式部分,點了又不深入,分佈失演算法思想只給了個綱要,拜占庭問題更是粗略,

分散式部分就象《現代作業系統一樣》該去掉的!

內容很好,比operating system concept要詳細深入,如果再有本《作業系統設計與實現》2版,參考參考minix實現,那就是絕配了!

所以這本書要比作業系統概念好,為啥很多人看<<作業系統概念>>好呢,那是因為將的比較容易懂,我看<<作業系統概念>>用了5天,看小說一樣,它的很多東西都是

點到為止,雖然是有收穫,但看完了,還要參考<<現代作業系統>>

這本應該更好些,<作業系統概念>部分講的並不好,只讓人對作業系統結構的整體概念有個瞭解,深度就比不上modern operating system了,我兩本都看了,比如

io,檔案等部分,很多的關鍵資料結構都沒有給出來

我是University of Melbourne的。我學OS這門課程時用的就是這本書作為textbook,非常經典。另外,我們也要閱讀:《Operating System Concepts

6th》,《The design of the UNIX Operating System》,《Inside Windows2000》,《The Unix Internals》和《Operating Systems:A Modern

Perspective》等和一些論文。

如果我們在上個世紀九十年代初就能看到這樣的好書,現在世界上就會多出個Chinux也說不定。呵呵,不過此書的確經典。

有了minix的書和《understanding linux kernel》這本書不買也罷,不過有錢和有時間看看還是值得。總比國內的什麼湯的教材好多了。

============================================

--------------------------------------------
資料庫

--------------------------------------------
資料庫系統概論


============================================


--------------------------------------------

程式設計

--------------------------------------------

計算機程式的構造和解釋(原書第2版)

【原書名】 Structure and Interpretation of Computer Programs,Second Edition 
【原出版社】 Massachusetts Institute of Technology  
【作者】 (美)Harold Abelson,Gerald Jay Sussman,Julie Sussman  
【譯者】 裘宗燕  
【叢書名】 電腦科學叢書  
【出版社】 機械工業出版社 

【參考資料】
相關網站有本書原始碼及其他教輔資料,網址為:www-mitpress.mit.edu/sicp/

The Scheme Programming Language, 2nd Edition
?; 1996 Prentice Hall
http://www.scheme.com/tspl2d/

開放式課程計劃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語言講事,國內對於主流語言趨之若騖的大多數人恐怕不買帳。
    對於曲高和寡的著作,出版社引進就會蝕本。好在有線上版本,喜歡的人自可以免費閱讀。

============================================

程式設計語言--實踐之路(圖書館必藏經典,程式設計師必修祕笈,全球上百所大學列為標準教材和首選參考書)         
 
【原書名】 Programming Language Pragmatics  
【原出版社】 Morgan Kaufmann  
【作者】 Michael L.Scott  
【譯者】 裘宗燕  
【出版社】 電子工業出版社 

【評論】

創新性地將程式設計語言的設計與實現和編譯器設計有機結合的實用教本。國外大受好評的程式設計語言教本,被全球上百所大學、學院列為標準教材和首席參考

書目 !這是一本很有特色的計算機程式設計方面的教材,它的核心是討論程式設計語言如何工作的問題,它是程式設計語言和編譯的傳統教科書的混合,再加上一

些有關彙編層體系結構的材料,或以滿足那些沒有學過計算機組織的學生和需要。它不是綜述性語言的教科書,沒有列舉不同語言的細節,而集中通過各種語言的

例子闡釋其基礎概念。本書也沒有解釋如何構造一個編譯器,只是解釋編譯器如何工作,它對源程式做了什麼,以及為什麼要那樣做。 本書在美國使用已有十餘年

,用於講授一門名為“軟體系統”的課程,適合高年級的本科生和一年級的研究生使用,書的內容對專業程式設計師也很有價值。

------------------------
王詠剛《接受程式設計語言的再教育》
http://www.china-pub.com/computers/ebook20001-25000/22979/wz1.doc
再教育?沒錯。依個人愚見,大多數中國程式設計師都需要接受一次有關程式設計語言的再教育,而Michael L.Scott所著的《程式設計語言??實踐之路》則可以成

為這次再教育中的最好讀本之一。 
  對於那些沒時間重溫大學課程的上班族來說,這種補習最好從《程式設計語言??實踐之路》開始。即便不能把這本八九百頁的“大部頭”全部讀完,你也至少能

在閱讀過程中明白三個看似淺顯、實則微妙的“大道理”: 
  其一,語言必須與環境相結合,才能發揮出最大的功用。這裡所說的“環境”通常包括編譯環境、執行環境和應用環境三個方面。舉例來說,如果你打算仿照著

某些開源框架的做法,使用控制反轉和依賴注入技術消除程式碼中某些讓人生厭的依賴關係,你一定會認真研習實現類似技術的語法特徵,但你未必會主動思考以下

幾個問題:在編譯層面,使用了這些語法特徵的程式碼是否會影響到最終生成的目的碼質量?在執行層面,該如何組織這些語法特徵,才能讓使用了相關技術的可

執行程式在支援廢料收集的併發環境下有不俗的表現?在應用層面,這些旨在消除依賴關係的技術會不會破壞新、舊模組間的平衡關係,以至於我們必須花上大量

時間改寫原有的程式碼或接口才能保證系統的平滑升級?全面思考這些與環境相關的問題並不一定會改變你的抉擇,但它卻可以幫助你找到效率、可靠性和可用性之

間的最佳平衡點。在此方面,《程式設計語言??實踐之路》一書所使用的,將程式設計語言與編譯原理、面向物件等知識綜合起來、融會貫通的做法不但可以節省

我們分類學習的大量時間,還可以訓練我們從整體出發、多角度思維的方式與方法,其價值不言而喻。 
  其二,程式設計語言本身所具有的多樣性可以成為我們提高軟體開發水平的最佳指南。說到這裡,我又想起了那些充斥在各大技術網站的,題為“某某語言比某

某語言更強大”或“某某語言已死,某某語言必勝”的帖子。發表這些帖子的帖主也許並不懂得,程式設計語言的世界本來就是一個多樣化的、五彩繽紛的世界,每

一種成功進入應用、教學或科研領域的程式設計語言都有它值得學習和借鑑的地方。如果僅僅根據個人的喜好或是響應時尚的號召,就盲目地吹捧某一種語言並貶

低其他所有語言,這樣的帖子和那些頻繁出現在Fans網站上的“愛死某某某,恨死某某某”的帖子有什麼本質的不同?更為重要的是,如果我們能夠在《程式設計語

言??實踐之路》的指下,真正懂得了函式式語言、資料流語言、邏輯式語言、馮?諾伊曼語言、面嚮物件語言等不同的語言型別在語法設計、編譯器設計和執行環

境設計方面的異同,我們就會驚訝地發現:Scheme語言的lambda表示式可以在C 語言中優雅、高效地解決諸如面向契約設計之類的複雜問題;Ada95語言中提供

的同步和保護機制可以為那些使用Java編寫的多執行緒應用提供重要的參考;Smalltalk語言與編譯和執行環境的緊密結合則可以為我們設計可擴充套件的JavaScript

宿主提供最好的借鑑……從這個意義上說,學習一種語言的意義絕不在於為自己增添一種求職和謀生的手段??真正善於學習的人總能從每種語言的設計和實現中找到

許多可用於提高程式設計水平的關鍵特徵。 
  其三,使用特定語言編寫出來的程式碼是否優雅、可靠,這主要取決於程式設計師對各種基本理念和基本原則的認知程度,而不取決於程式設計師記住了多少複雜的語法

特徵或學會了多少流行類庫的用法。正如《程式設計語言??實踐之路》所說的那樣,“典型的C 程式設計師都極少使用聯合、多重繼承、變動個數的引數,或者. 運算

符”,但是,如果你瞭解了隱藏在這些複雜語法特徵背後的東西??如記憶體空間的分配和定址方式,複本式繼承和共享式繼承之間的關係,引數傳遞和求值順序,動

態方法約束和成員查詢,等等??你就可以在需要使用這些語法特徵的時候滿懷信心地告訴自己:“嘿,這不過是某某原則或某某技術在C 語言中的表現形式罷了,

我能搞定它!”反之,如果你不曉得與資料結構和演算法相關的程式碼在編譯、執行時必然存在的各種均衡與折中問題,即便你把C 語言的標準文件背得滾瓜爛熟,即

便你可以默寫出System.Collections名稱空間中的所有屬性和方法,你也會在體驗過自己開發的軟體與成熟軟體之間的差別後大發感慨:“同樣是使用C 語言,

為什麼我寫的程式總會從頭到腳散發著‘業餘’的氣味兒呢?” 
  關於程式設計語言的本質,Michael L.Scott是這樣說的:“就像自然語言限制著人們解釋和論述的方式一樣,程式設計語言也限定了什麼可以表達,什麼不

能表達,並對程式設計師能夠怎樣思考問題有著深刻而微妙的影響。”既然如此,我們還猶豫什麼呢?與其後悔在學校中虛度了光陰,還不如馬上捧起《程式設計語言?

?實踐之路》這本書,接受一次有關程式設計語言的再教育呢!

Yupo:
這本書的作用有限,並不是所有程式設計的人都必須看的書。對於非計算機專業的人而言,完全可以不看此書。對於一般的計算機應用程式(指比較高層的應用)的開

發者而言,只需要知道如何使用程式設計語言程式設計就足夠了。此書評的作者用不作為了擡高此書而這樣來貶低他們。這樣貶低他們只能說明自己的無知。程式設計

語言只不過是一種工具,就像自然語言是用來交流的工具一樣。應用程式的編寫者有自己的專業,他需要的只是如何使用程式語言來實現自己的設計,而不需要去

深究語言的實現機制。比如說,用Fortran語言編寫科學計算程式的人,並不需要知道語法分析、程式碼生成等編譯過程,一樣能很好地實現自己的設計。這些東西

相關推薦

計算機專業推薦書

【動機】就計算機這個專業來說吧,因為我是非科班出身的學生,要重新開始補相應的知識,目前定下來要學習的基礎理論知識有:離散數學,資料結構與演算法, 組成原理,彙編,作業系統,網路等等,有的時候覺得這裡每一個知識點要學的深入的話都是無底洞,不過我又是那種喜歡追根究底的人,比如學習a知識的時候要 用到b知識,

計算機專業術語對照

內核 template string ftw 批量 version bit adc sed A abstraction layer,抽象層 access,獲取,存取 acoustic coupler,聲音耦合器 Active Directory,活動目錄 Ac

大學的計算機專業學生怎麽學習

數字 發展 最想 方法 行業 rac 整體 總結 心得 如今到大學基本上都是上了十幾年學,不說是學習老手,也是應試老手了,可是大學越上越不會考試了,更不會學習了,面對計算機專業這個對專業要求非常高的專業,得想想怎麽學習,怎麽面對高速發展的技術。非常多人說講究

【書籍下載鏈接】_2_第二輪_計算機專業書籍

書簽 設計培訓 代碼 microsoft 架構 語言 sof 掃描 應用 各位朋友,下面是我收集的書籍,介紹給大家,如果看的還可以,請購買紙質版的圖書。 驅動器 J 中的卷是 Elements 卷的序列號是 8AAF-3206 j:\ 的目錄 2

計算機專業學生在畢業之前應該做的10000件事 ...

成了 路由 解決 開放 map 意見 應該 gae 雲服務器 今天看了一篇,覺得很有感觸,有必要記錄一下(以下內容。。。) 現在正是畢業時節。我想有必要匯總一下計算機專業的學生在獲得學位之前應該(單獨)完成的10000件事情。碰巧的話,學生們在過去學過的課程中完成

關於計算機專業學習

開發 知識 一個 國家 學生 討論 自動化 重復 計算機專業 “我們不需要你在不參考任何資料,能夠實現紅黑樹;我們需要的是你能在實踐當中,選擇恰當的數據結構完成程序開發;在必要的時候,能在已有的數據結構基礎上進行適當改進,滿足工程需要。但要做到這一點,你需要掌握基礎的算法和

為什麽選擇計算機專業

關於我 如何 電子產品 條件 進入 良好的 事情 自主 大學 一 在上高中的時候無意間了解到了計算機專業,從那時起便對計算機產生了濃厚的興趣。因為經常接觸電子產品 ,學習計算機專業可以讓我更好的去了解計算機專業的發展,並能夠讓我去學著編程,去開發一些自己或者他人

IT易學網:寫給計算機專業大學生的忠告

跳槽 計算 專註 畢業生 如果 欲望 社會 get 職業生涯   如果你是在校大學生,如果你也看到這篇文章,看完希望對你有些許幫助吧。  小編我從大學校門出來兩年了,兩年以來的職業生涯中,不斷碰壁,頻頻跳槽,換過兩次崗,才有今天你看到小編我寫的這篇文章。畢業兩年,每月收入和

計算機專業投稿期刊

個數字 評價 其他 最新 for dea rod 網絡 服務 一、計算機科學期刊介紹 計算機科學的publication最大特點在於:極度重視會議,而期刊則通常只用來做re-publication。大部分期刊文章都是會議論文的擴展版,首發就在期刊上的相對較少。也正因為如此

計算機專業的學生必須掌握的五門課程

時也 ret 等等 實驗 語言 科學 解決問題 com 線性代數 轉自:http://www.nowamagic.net/librarys/veda/detail/2192 為了成為牛逼的程序員,知識儲備也一定要牛逼! 計算機專業概念有點大。就計算機科學與技術專業而言,

計算機專業發展歷程

尖端 高速 賓夕法尼亞 計算機網絡 系統集成 工程師 clas 內容 網頁 知亦計算機應用技術專業就業方向數據分析師,數據庫管理員,基礎軟件工程師,圖像識別系統工程師,環境分析儀器工程師,環境監測技術工程師,高級系統架構師,系統集成工程師,語音應用系統分析師,模式識別(

計算機專業C語言編程學習重點:指針化難為易

就是 設計 分布式系 lnp 運行 內存地址 實現 ++ 數據平臺 C語言是面向過程的,而C++是面向對象的 C和C++的區別: C是一個結構化語言,它的重點在於算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(

CFA考經分享 | 計算機專業在職媽媽奮戰CFA一級

沒有 慢慢 寶寶 如果 直接 img images 衍生品 app   作者簡介:  大學專業:本科計算機專業  工作情況:在職,2014年從軟件測試、項目需求轉行,從事傳統小貸和P2P相關業務工作。  備考情況:金程CFA&FRM雙證班學員,2017年11月很幸運

演算法與資料結構+一點點ACM從入門到進階吐血整理推薦書(珍藏版)

轉載自某大佬部落格 https://pymlovelyq.github.io/2018/10/06/Algorithm/ 前言:技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總

西南交通大學計算機專業考研真題答案詳解6:2012年演算法設計題

一、考研真題 1、下面是求兩個集合A和B的並集(AUB)的演算法,集合A和集合B分別用單鏈表La和Lb的帶頭結點的單鏈表表示(連結串列中的資料按升序排序),其並集用單鏈表Lc表示(帶頭結點,其資料也按升序排列),請填空完善演算法。(每空2分)。 2、對給定的帶頭結點的單鏈表L,結點值得型

計算機專業這麼多課程怎麼學

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

計算機專業畢業後的工作方向

計算機專業畢業後大致的工作方向是軟、硬、網、圖 四大類 if 你選擇作技術,then 從現在開始,牢記: 天道酬勤!!! if 你選擇軟體技術 then 每天都要用大量的時間學習高階語言,絕對不能僅限於學校的安排。優秀的程式設計師都是大學階段就已經自學得非常深入了。 if you選擇網路技術,那麼你

西南交通大學計算機專業考研真題答案詳解8:2010年演算法設計題

一、考研真題 3、設計一演算法,實現在資料元素有序的順序儲存結構的線性表中插入一個值為x的操作。如果無儲存空間則插入失敗,函式的返回值為插入成功與否的標誌。(8分) 4、設有兩個整數集合A和B,分別用遞增有序連結串列表示,設計一演算法實現兩個集合的聯合運算,運算結果也有遞增有序連結串列表

計算機專業學習資料總結(~持續更新中)

今天為了複習離散數學,想著上網上找份課本答案(老師沒有給答案),結果那本書的配套題解的PDF大多數都是來自CSDN社群的,CSDN下載需要積分,要麼開通VIP,那VIP的費用實在不是我等窮學生所能支付得起的,我靈機一動便想到了萬能的淘寶賣家果然有賣CSND積分的,花了1塊3,很順利地下載了我想要的輔導書,之前

計算機專業大類下,還有哪些細分的專業,分別是幹什麼的?

作者:羅文 連結:https://www.zhihu.com/question/40819195/answer/129677777 來源:知乎 著作權歸作者所有,轉載請聯絡作者獲得授權。 之前就有想過寫一篇關於這個問題的長文,因為還有工作,慢慢寫了有兩天,很多觀點都會帶有個人知識水平的侷