算法導論(Introduction to Algorithms)(CLRS)這本書的名稱是所有出版過的計算機書籍中最讓人誤解一個。它被廣泛的使用在很多大學里,通常被當作畢業生必需的算法課程。于是,只要在大學里上過計算機課程的學生幾乎都有一本這樣的書。然而,除非你擁有計算機碩士學位(而且是算法研究領域的),我懷疑你頂多只讀過算法導論(Introduction to Algorithms)里節選的幾章內容。這個書名讓人誤解,是因為”Introduction”這個詞讓人以為它很適合初級程序員。實際上不是。這本書對算法做盡可能詳盡綜合的介紹,就像其它一些隨處可見的類似的書一樣。請不要再把這本書推薦給初學者。
編譯原理(Compilers: Principles, Techniques, and Tools)(the Dragon Book).這本恐龍封面的書涵蓋了開發一個編譯器你所需要的全部的知識。它的內容包括詞匯分析,語法分析,類型檢查,代碼優化,以及其它很多高深的題目。請不要把這本書推薦給初級程序員,他們需要的只是分析簡單的包含數學公式或 HTML 的字符串。除非你真的需要實現一個能夠實用的編譯器(或解釋器),你根本不需要掌握這本“恐龍”書的全部強大威力。把它推薦給一個遇到簡單文本分析問題的人,這證明你根本沒有讀過它。
計算機程序設計藝術(The Art of Computer Programming)(TAOCP)我經常聽到人們把這本書描述為“每個程序員必讀”的系列計算機書籍。我認為這明顯不是實情。在我說出這樣大不敬的話、被你們用板磚拍死之前,請讓我做解釋一下。這不是一本讓你一頁一頁翻著讀的書。這是一本參考大全書。把它放在你的書架上看起來會很不錯(實際上也它確實很好),但如果想把它通讀一遍,你需要幾年時間,而且最后什么都沒記住。這并不是說手邊放這樣一本書沒有什么價值。它是一本參考書,當我遇到難題,走投無路時,很多次我都在這本書里找到辦法。但這本書終究是被我當作參考書。它復雜難懂,很理論,里面的例子都是匯編語言的。好的一面是,如果你想在這本書里尋找針對某一問題的解決方案,如果你找不到,那就說明這個問題無解。它是一本對它所涉及到的領域做了最最詳盡介紹的一本書。
Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four)這本書是唯一一本在這個清單里我從頭到尾讀過的書,讀的結果是,我不知道該把這本書歸到哪個類別。它出現在這個清單里,并不是因為我認為只有很少人真正讀過它。很多人都讀過。只是因為有更多推薦過這本書的人自己卻沒有讀過。Design Patterns 這邊書的問題在于,很多書里給出的信息,你在其它很多地方都能看到。這樣就使得一個初學者在維基百科上讀了幾篇關于設計模式的內容后,就敢在面試中宣稱自己看過這本書。這就是為什么 Singleton 成了一種新的全局變量的原因。如果有更多的人花時間讀過這本也叫做 Gang of Four 的書的原著,那世界上就不會有這么多人會把 17 種設計模式硬塞到一個日志(logging)框架里了。這本書最精彩的部分是每章里描述如何正確的使用一種模式的段落。遺憾的是,這些精華卻在很多其它設計模式資料里被漏掉了。
C++程序設計語言(The C++ Programming Language)這本書不像一本編程教材,更像一本編程語言參考。有很多的跡象表明有人確實讀過這本書,否則我們不可能有這么多的C++ 編譯器可選擇。編程初學者(或者甚至其它語言的專家),如果想學C++,不應該直接去啃 C++ 程序設計語言(The C++ Programming Language)這本書。告訴他們去讀《C++ Primer 中文版》。
正如我之前說的,我知道你們當中會有一些人真正的讀過這些書。那這篇文章不是針對你的,針對的是那些企圖通過假裝讀過這些書來表現自己的民眾。 如果你自己沒有讀過這些計算機書籍,請不要推薦給別人。這樣做會耽誤別人的時間,誤人子弟,因為一些閱歷更豐富的人可能會有更好的書(更針對某一領域,更容易理解,跟某種編程語言或某種編程水平更契合的書)來推薦。除此之外,你也能避免被那些真正讀過計算機程序設計藝術(The Art of Computer Programming)的人用 MMIX 知識給拷問住造成的尷尬(如果你不知道我在說什么,那我指的就是你)。