程序員最應該真正讀的書籍

馬克·吐溫曾經說過,所謂經典小說,就是指不少人但願讀過,但不多人真正花時間去讀的小說。這種說法一樣適用於「經典」的計算機書籍。

在Stack Overflow(以及其它不少軟件論壇)上,諸如」程序員最應該讀的計算機書籍有哪些?「這樣的問題會週期性的出現。這樣的問題不斷的被提出、被回答,只是形式不一樣罷了。相同的幾本書老是會出如今清單的前幾名內,因此,若是想知道人們談論的都是些什麼,你有必要去讀一讀這些書的。
大多數程序員真正讀過的計算機書籍


•    代碼大全(Code Complete)——兩屆Software Jolt Award震撼大獎得主! 
•    程序員修煉之道(The Pragmatic Programmer) 
•    C程序設計語言( C Programming Language)(第2版) 
•    重構:改善既有代碼的設計(Refactoring: Improving the Design of Existing Code) 
•    人月神話(The Mythical Man-Month) 
•    編碼——隱匿在計算機軟硬件背後的語言(Code: The Hidden Language of Computer Hardware and Software) 
•    Head First 設計模式(Head First Design Patterns) 
•    編程珠璣(Programming Pearls) 
•    Effective Java中文版(Effective Java (2nd Edition))or Effective C++(第三版)中文版 
•    Test Driven Development: By Example程序員

•    計算機程序的構造和解釋》(Structure and Interpretation of Computer Programs, SICP)面試



上面的這些書我本身都讀過,因此我不難相信不少不是很優秀的程序員也都讀過它們。若是你對編程有足夠的興趣,可以來到這裏讀這篇博客,你極可能讀過其中的大部分,甚至還有不少不在這個清單中的,因此我就不浪費時間每本書都評論一番了。我想說的是,這個清單上的每本書都是它各自領域裏的奇書。因此,不少有願望不斷提升本身的編程技術的程序員都讀過這些書,這就不足爲怪了。

在人們備受推崇的計算機書籍中,還有一類書受到了獨特的待遇。我稱下面這個清單爲「最常被程序員們謊稱讀過的計算機書籍」。這並非說推薦這些書的人都沒有真正讀過它們。我只是有至關的信心懷疑更多的人只是在口頭上宣稱讀過下列書籍,而實際上不多人真正讀過它們。下面就是這個清單。
最常被程序員們謊稱讀過的計算機書籍


•    算法導論(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中文版》。算法

相關文章
相關標籤/搜索