1. 程式人生 > >沒有讀過的書,就不要瞎推薦了!

沒有讀過的書,就不要瞎推薦了!

馬克·吐溫曾經說過,經典小說是那種“眾人都想讀卻少有人真正花時間去讀”的書籍。“經典”的程式設計書也是如此。 

在Stack Overflow(以及許多其他程式設計論壇)上,時不時有人討論“哪些書籍值得程式設計師一讀”。這個問題不斷被提出、被回答,形式不盡相同。有這麼一組書籍似乎總是躋身榜首,那麼就讓我們來一探究竟。 

大多數程式設計師真正讀過的書籍 :

1. 《程式碼大全》(Code Complete) 

2. 《程式設計師修煉之道》(The Pragmatic Programmer) 

3. 《C程式設計語言(第二版)》(C Programming Language (2nd Edition) 

4. 《重構:改善既有程式碼的設計》(Refactoring: Improving the Design of Existing Code) 

5. 《人月神話:軟體專案管理之道》(The Mythical Man-Month) 

6. 《編碼:隱匿在計算機軟硬體背後的語言》(Code: The Hidden Language of Computer Hardware and Software Head First Design Patterns) 

7. 《Head First設計模式》(Head First Design Patterns) 

8. 《程式設計珠璣》(Programming Pearls) 

9. 《Effective Java (第二版)》或《Effective C++》 

10. 《測試驅動開發》(Test Driven Development: By Example) 

這些書我都讀過,我相信很多水平還不錯的程式設計師也都讀過了。如果你對此部落格的程式設計內容有興趣,那麼這份書單裡的大部分(如果不是全部)你可能都已經讀過了,所以我就不花時間逐個單獨探討了。

我覺得上述每一本都是各自領域的佳作。很多有志於提高個人技能的軟體開發人員都會閱讀這些書籍。  

在最常推薦的程式設計書籍中,有另一組值得特別關注。我把這書單稱為“程式設計師聲稱自己讀過的書

”。我可不是說所有推薦這些書的人都沒讀過;我只不過是懷疑有很多人聲稱自己讀過而實際上並非如此。以下是書單: 

 

程式設計師聲稱自己讀過的書 

1. 《演算法導論》(Introduction to Algorithms) 

本書可能是所有已出版的程式設計書中標題最具誤導性的一本。它在許多大學中廣泛使用,通常出現於研究生水平的演算法課程中。因此,在大學修過演算法課程的程式設計師手裡可能都有一本《演算法導論》。

但是,除非你有電腦科學(特別是在演算法方向)碩士學位及其以上的水平,我懷疑你可能就沒讀幾章。這個標題具有誤導性,因為“導論”這個詞讓人誤以為這本書對程式設計初學者比較友好,而事實並非如此。這本書詳盡地介紹了演算法,就跟市面上其他類似書籍一樣。所以還是別推薦給新手了。 

2. 《編譯原理技術與工具》(龍書) (Compilers: Principles, Techniques, and Tools (the Dragon Book)) 

這本書裡涵蓋了編寫編譯器時所需要了解的所有內容。其中包括詞法分析(lexical analysis),語法分析(syntactic analysis),型別檢查(type checking),程式碼優化(code optimization)和許多其他更高深的主題。

請不要把這本書推薦給新手,他們只需要解析含有數學公式或HTML的簡單字串;

除非你真的需要實現一個有效的編譯器(或直譯器),否則你沒必要承受來自這本書的全部功力。要是有人只是需要做簡單的文字解析,你還向人家推薦這本書,那就說明你自己沒讀過。 

3.《計算機程式設計藝術》(The Art of Computer Programming) 

我經常聽到這本書被列為“每個程式設計師都應該閱讀的”系列程式設計書籍,但這是在胡說八道。

在被你們拍磚之前,請允許我解釋一下。《計算機程式設計藝術》並不適合從頭讀到尾。這是一本參考大全。

它立在你的書架上,看著就令人印象深刻(事實也的確如此),但是要看完它得花上幾年時間,你也記不住什麼實質性內容。

這並不是說留一本這樣的書毫無價值,這套書多次救我於水火之中,始終是我的殺手鐗,真的走投無路了我就去找它。

它的資訊密集,學術性強,並且示例都是用匯編語言寫的。從積極的方面來說,如果你在這本書裡找解決方案(在相應部分已經出版的前提下)卻無功而返,那解決方案八成是不存在的。它在所涵蓋的主題領域方面幾乎面面俱到。

 4.《設計模式:可複用的面向物件軟體元素》(四人幫)(Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four)) 

《設計模式》是這個書單中唯一一本我親自從頭讀到尾的,因此我很難決定它該歸到哪個列表。它在這個書單上並不是因為我覺得很少有人讀過這本書。

許多人讀過,只是有更多的人聲稱自己讀過而實際上並沒有。《設計模式》的問題在於:書中的大部分資訊(但並非所有的資訊)可以在其他地方找到。這使得初學者能在維基百科上讀了一些模式方面的內容之後,就敢在求職面試中聲稱他們讀過這本書。

如果有更多人花時間閱讀這本書的原版,就能少些人試圖將17種模式硬塞入日誌框架了。書中最精彩的是每章中解釋何時適合使用模式的部分,但很遺憾的是,很多其他與設計模式相關的資料中沒能體現這種智慧的光芒。 

5.《C++程式設計語言》(The C++ Programming Language) 

本書更像是一本程式語言參考書而非程式設計指南。肯定有很多證據表明有人讀過這本書,否則我們就不會有這麼多的C ++編譯器可供選擇。但是,我們不應該把這本書介紹給想要學習C ++的初級程式設計師(甚至其他程式語言的專家),讓他們去看《C++ Primer》會比較合適。  

正如我之前所說,我知道有一些人真的讀過這些書。這篇文章不是針對你的,它針對的是那些謊稱讀過的吹牛人士。 如果你沒讀過,就不要推薦給別人, 這隻會起到反效果。

通常閱歷豐富的人可能會推薦一本更好的書(更專注於特定的問題領域,更容易理解,更適合特定的程式語言或程式設計技能水平)。除此之外,當你被真的讀過《計算機程式設計藝術》的人用MMIX知識難倒的時,你就很尷尬了(如果你不知道我在說什麼,那麼我就是在說你)。