沒有讀過的書,程序員就不要瞎推薦了
馬克·吐溫曾經(jīng)說過,經(jīng)典小說是那種“眾人都想讀卻少有人真正花時間去讀”的書籍。“經(jīng)典”的編程書也是如此。
在Stack Overflow(以及許多其他編程論壇)上,時不時有人討論“哪些書籍值得程序員一讀”。這個問題不斷被提出、被回答,形式不盡相同。有這么一組書籍似乎總是躋身榜首,那么就讓我們來一探究竟。
- 大多數(shù)程序員真正讀過的書籍 :
- 1. 《代碼大全》(Code Complete)
- 2. 《程序員修煉之道》(The Pragmatic Programmer)
- 3. 《C程序設計語言(第二版)》(C Programming Language (2nd Edition)
- 4. 《重構(gòu):改善既有代碼的設計》(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. 《測試驅(qū)動開發(fā)》(Test Driven Development: By Example)
這些書我都讀過,我相信很多水平還不錯的程序員也都讀過了。如果你對此博客的編程內(nèi)容有興趣,那么這份書單里的大部分(如果不是全部)你可能都已經(jīng)讀過了,所以我就不花時間逐個單獨探討了。
我覺得上述每一本都是各自領域的佳作。很多有志于提高個人技能的軟件開發(fā)人員都會閱讀這些書籍。
在最常推薦的編程書籍中,有另一組值得特別關注。我把這書單稱為“程序員聲稱自己讀過的書”。我可不是說所有推薦這些書的人都沒讀過;我只不過是懷疑有很多人聲稱自己讀過而實際上并非如此。以下是書單:
程序員聲稱自己讀過的書
1. 《算法導論》(Introduction to Algorithms)
本書可能是所有已出版的編程書中標題***誤導性的一本。它在許多大學中廣泛使用,通常出現(xiàn)于研究生水平的算法課程中。因此,在大學修過算法課程的程序員手里可能都有一本《算法導論》。
但是,除非你有計算機科學(特別是在算法方向)碩士學位及其以上的水平,我懷疑你可能就沒讀幾章。這個標題具有誤導性,因為“導論”這個詞讓人誤以為這本書對編程初學者比較友好,而事實并非如此。這本書詳盡地介紹了算法,就跟市面上其他類似書籍一樣。所以還是別推薦給新手了。
2. 《編譯原理技術與工具》(龍書) (Compilers: Principles, Techniques, and Tools (the Dragon Book))。
這本書里涵蓋了編寫編譯器時所需要了解的所有內(nèi)容。其中包括詞法分析(lexical analysis),語法分析(syntactic analysis),類型檢查(type checking),代碼優(yōu)化(code optimization)和許多其他更高深的主題。
請不要把這本書推薦給新手,他們只需要解析含有數(shù)學公式或HTML的簡單字符串;
除非你真的需要實現(xiàn)一個有效的編譯器(或解釋器),否則你沒必要承受來自這本書的全部功力。要是有人只是需要做簡單的文本解析,你還向人家推薦這本書,那就說明你自己沒讀過。
3.《計算機程序設計藝術》(The Art of Computer Programming)
我經(jīng)常聽到這本書被列為“每個程序員都應該閱讀的”系列編程書籍,但這是在胡說八道。
在被你們拍磚之前,請允許我解釋一下?!队嬎銠C程序設計藝術》并不適合從頭讀到尾。這是一本參考大全。
它立在你的書架上,看著就令人印象深刻(事實也的確如此),但是要看完它得花上幾年時間,你也記不住什么實質(zhì)性內(nèi)容。
這并不是說留一本這樣的書毫無價值,這套書多次救我于水火之中,始終是我的殺手锏,真的走投無路了我就去找它。
它的信息密集,學術性強,并且示例都是用匯編語言寫的。從積極的方面來說,如果你在這本書里找解決方案(在相應部分已經(jīng)出版的前提下)卻無功而返,那解決方案八成是不存在的。它在所涵蓋的主題領域方面幾乎面面俱到。
4.《設計模式:可復用的面向?qū)ο筌浖亍?四人幫)(Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four))
《設計模式》是這個書單中唯一一本我親自從頭讀到尾的,因此我很難決定它該歸到哪個列表。它在這個書單上并不是因為我覺得很少有人讀過這本書。
許多人讀過,只是有更多的人聲稱自己讀過而實際上并沒有。《設計模式》的問題在于:書中的大部分信息(但并非所有的信息)可以在其他地方找到。這使得初學者能在維基百科上讀了一些模式方面的內(nèi)容之后,就敢在求職面試中聲稱他們讀過這本書。
如果有更多人花時間閱讀這本書的原版,就能少些人試圖將17種模式硬塞入日志框架了。書中最精彩的是每章中解釋何時適合使用模式的部分,但很遺憾的是,很多其他與設計模式相關的資料中沒能體現(xiàn)這種智慧的光芒。
5.《C++程序設計語言》(The C++ Programming Language)
本書更像是一本編程語言參考書而非編程指南??隙ㄓ泻芏嘧C據(jù)表明有人讀過這本書,否則我們就不會有這么多的C ++編譯器可供選擇。但是,我們不應該把這本書介紹給想要學習C ++的初級程序員(甚至其他編程語言的專家),讓他們?nèi)タ础禖++ Primer》會比較合適。
正如我之前所說,我知道有一些人真的讀過這些書。這篇文章不是針對你的,它針對的是那些謊稱讀過的吹牛人士。 如果你沒讀過,就不要推薦給別人, 這只會起到反效果。
通常閱歷豐富的人可能會推薦一本更好的書(更專注于特定的問題領域,更容易理解,更適合特定的編程語言或編程技能水平)。除此之外,當你被真的讀過《計算機程序設計藝術》的人用MMIX知識難倒的時,你就很尷尬了(如果你不知道我在說什么,那么我就是在說你)。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號coderising獲取授權(quán)】