國外程式設計師推薦:每個程式設計師都應讀的書

黃利民發表於2011-12-20

【更新】:近日(2012年8月17日)重看 StackOverflow 的原討論帖,發現於今年年初被關閉了。不過有人做了彙總,把其他回覆中提到的書籍,放在投票數最高的回覆中。新更新新增 59 本書,詳情可見文章後半部分。

編者按:2008年8月4日,StackOverflow 網友 Bert F 發帖提問:哪本最具影響力的書,是每個程式設計師都應該讀的

“如果能時光倒流,回到過去,作為一個開發人員,你可以告訴自己在職業生涯初期應該讀一本,你會選擇哪本書呢?我希望這個書單列表內容豐富,可以涵蓋很多東西。”

很多程式設計師響應,他們在推薦時也寫下自己的評語。以前就有國內網友介紹這個程式設計師書單,不過都是推薦數 Top 10的書。其實除了前10本之外,推薦數前30左右的書籍都算經典,伯樂線上整理編譯這個問答貼,同時摘譯部分推薦人的評語。下面就按照各本書的推薦數排列。

 

1. 《程式碼大全 史蒂夫·邁克康奈爾

推薦數:1684

code complete 程式碼大全

“優秀的程式設計實踐的百科全書,《程式碼大全》注重個人技術,其中所有東西加起來,就是我們本能所說的“編寫整潔的程式碼”。這本書有50頁在談論程式碼佈局。” —— Joel Spolsky

對於新手來說,這本書中的觀念有點高階了。到你準備閱讀此書時,你應該已經知道並實踐過書中99%的觀念。– esac

 

2. 《程式設計師修煉之道

推薦數:1504

Pragmatic Programmer 程式設計師修煉之道

對於那些已經學習過程式設計機制的程式設計師來說,這是一本卓越的書。或許他們還是在校生,但對要自己做什麼,還感覺不是很安全。就像草圖和架構之間的差別。雖然你在學校課堂上學到的是畫圖,你也可以畫的很漂亮,但如果你覺得你不太知道從哪兒下手,如果某人要你獨自畫一個P2P的音樂交換網路圖,那這本書就適合你了。—— Joel

3. 《計算機程式的構造和解釋

推薦數:916

Structure and Interpretation of Computer Programs 計算機程式的構造和解釋

就個人而言,這本書目前為止對我影響醉倒的一本程式設計書。

程式碼大全》、《重構》和《設計模式》這些經典書會教給你高效的工作習慣和交易細節。其他像《人件集》、《計算機程式設計心理學》和《人月神話》這些書會深入軟體開發的心理層面。其他書籍則處理演算法。這些書都有自己所屬的位置。

然而《計算機程式的構造和解釋》與這些不同。這是一本會啟發你的書,它會燃起你編寫出色程式的熱情;它還將教會你認識並欣賞美;它會讓你有種敬畏,讓你難以抑制地渴望學習更多的東西。其他書或許會讓你成為一位更出色的程式設計師,但此書將一定會讓你成為一名程式設計師。

同時,你將會學到其他東西,函數語言程式設計(第三章)、惰性計算、超程式設計、虛擬機器、直譯器和編譯器。

一些人認為此書不適合新手。個人認為,雖然我並不完全認同要有一些程式設計經驗才能讀此書,但我還是一定推薦給初學者。畢竟這本書是寫給著名的6.001,是麻省理工學院的入門程式設計課程。此書或許需要多做努力(尤其你在做練習的時候,你也應當如此),但這個價是對得起這本書的。

你還不確信麼?那就讀讀第一版的前言或序言。網上有免費的電子版。 – Antti Sykäri

 

4. 《C程式設計語言

推薦數:774

The C Programming Language C程式設計語言

這本書簡潔易讀,會教給你三件事:C 程式語言;如何像程式設計師一樣思考;底層計算模型。(這對理解“底層”非常重要)—— Nathan

 

5. 《演算法導論

推薦數:671

Introduction to algorithms 演算法導論

程式碼大全》教你如何正確程式設計;《人月神話》教你如何正確管理;《設計模式》教你如何正確設計……

在我看來,程式碼只是一個工具,並非精髓。開發軟體的主要部分是建立新演算法或重新實現現有演算法。其他部分則像重新組裝樂高磚塊或建立“管理”層。我依然夢想這樣的工作,我的大部分時間(>50%)是在寫演算法,其他“管理”細節則留給其他人…… —— Ran Biron

 

6. 《重構:改善既有程式碼的設計

推薦數:617

Refactor 重構:改善既有程式碼的設計

我想我不得不推薦《重構》:改進現有程式碼的設計。—— Martin

我必須承認,我最喜歡的程式設計語錄是出自這本書:任何一個傻瓜都能寫出計算機能理解的程式,而優秀的程式設計師卻能寫出別人能讀得懂的程式。—— Martin Fowler

 

7. 《設計模式

推薦數:617

Design Patterns 設計模式

就我而言,我認為四人幫編著的《設計模式》是一本極為有用的書。雖然此書並不像其他建議一樣有關“元”程式設計,但它強調封裝諸如模式一類的優秀程式設計技術,因而鼓勵其他人提出新模式和反模式(antipatterns),並運用於程式設計對話中。—— Chris Jester-Young

 

8. 《人月神話

推薦數:588

The Mythical Man-Month 人月神話

 

9. 《計算機程式設計藝術

推薦數:542

The Art of Computer Programming 計算機程式設計藝術

這是高德納傾注心血寫的一本書。—— Peter Coulton

 

10. 《編譯原理(中文版) | 英文版(龍書)

推薦數:462

Compilers: Principles, Techniques, and Tools 編譯原理:原理、技術與工具

我很奇怪,居然沒人提到龍書。(或許已有推薦,我沒有看到)。我從沒忘過此書的第一版封面。此書讓我知道了編譯器是多麼地神奇絕妙。- DB

 

11. 《深入淺出設計模式(中文版) | 英文影印版

推薦數:445

我知道四人幫的《設計模式》是一本標準書,但倒不如先看看這部大部頭,此書更為簡易。一旦你瞭解瞭解了基本原則,可以去看四人幫的那本聖經了。- Calanus

 

12. 《哥德爾、艾舍爾、巴赫書:集異璧之大成

推薦數:437

如果下昂真正深入閱讀,我推薦道格拉斯·侯世達(Douglas Hofstadter)的《哥德爾、艾舍爾、巴赫書》。他極為深入研究了程式設計師每日都要面對的問題:遞迴、驗證、證明和布林代數。這是一本很出色的讀物,難度不大,偶爾有挑戰,一旦你要鏖戰到底,將是非常值得的。 – Jonik

 

13. 《程式碼整潔之道

推薦數:329

雖然《程式碼整潔之道》和《程式碼大全》有很多共同之處,但它有更為簡潔更為實際的清晰例子。 – Craig P. Motlin

 

14. 《Effective C++》和《More Effective C++

推薦數:297

在我職業生涯早期,Scott Meyer的《Effective C++》和後續的《More Effective C++》都對我的程式設計能力有著直接影響。正如當時的一位朋友所說,這些書縮短你培養程式設計技能的過程,而其他人可能要花費數年。

去年對我影響最大的一本書是《大教堂與市集》,該書教會我很有關開源開發過程如何運作,和如何處理我程式碼中的Bug。 – John Channing

 

15. 《程式設計珠璣

推薦數:282

儘管我不得不羞愧地承認,書中一半的東西我都沒有理解,但我真的推薦《程式設計珠璣》,書中有些令人驚奇的東西。 – Matt Warren

 

16. 《修改程式碼的藝術by Michael Feathers

我認為沒有任何一本書能向這本書一樣影響了我的程式設計觀點。它明確地告訴你如何處理其他人的程式碼,含蓄地教會你避免哪些(以及為什麼要避免)。- Wolfbyte

同意。很多開發人員討論用乾淨的石板來編寫軟體。但我想幾乎所有開發人員的某些時候是在吃其他開發人員的狗食。– Bernard Dy

 

17. 《編碼:隱匿在計算機軟硬體背後的語言

我推薦Charles Petzold的《編碼》。在這個充滿工具和IDE的年代,很多複雜度已經從程式設計師那“抽取”走了,這本書一本開眼之作。 – hemil

 

18. 《禪與摩托車維修藝術 / Zen and the Art of Motorcycle Maintenance》

對我影響最大的那本書是 Robert Pirsig 的《禪與摩托車維修藝術》。不管你做什麼事,總是要力求完美,徹底瞭解你手中的工具和任務,更為重要的是,要有樂趣(因為如果你做事有樂趣,一切將自發引向更好的結果)。 – akr

(編注:關於這本書,也可以看看阮一峰的讀後感。)

 

19. 《Peopleware / 人件集:人性化的軟體開發

Demarco 和 Lister 表明,軟體開發中的首要問題是人,並非技術。他們的答案並不簡單,只是令人難以置信的成功。第二版新增加了八章內容。 – Eduardo Molteni

 

20. 《Coders at Work / 程式設計人生

一本非常有影響力的書,可以從中學到一些業界頂級人士的經驗,瞭解他們如何思考並工作。 – Jahanzeb Farooq

 

21. 《Surely You’re Joking, Mr. Feynman! / 別鬧了,費曼先生!》

雖然這本書可能有點偏題,但不管你信不信,這本書曾在電腦科學專業課程的閱讀列表之上。一個優秀的角色模型,一本有關好奇心的優秀書籍。 – mike511

 

22. 《Effective Java 中文版》

此書第二版教你如何編寫漂亮並高效的程式碼,雖然這是一本Java書,但其中有很多跨語言的理念。 – Marcio Aguiar

 

23. 《Patterns of Enterprise Application Architecture / 企業應用架構模式》

很奇怪,還沒人推薦 Martin Fowler 的《企業應用架構模式》- levi rosol

 

24. 《The Little Schemer》和《The Seasoned Schemer nmiranda

這兩本是LISP的英文書,尚無中文版。美國東北大學網站上也有電子版。

 

25. 《互動設計之路》英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》該書作者:Alan Cooper,人稱Visual Basic之父,互動設計之父。

本書是基於眾多商務案例,講述如何建立更好的、高客戶忠誠度的軟體產品和基於軟體的高科技產品的書。本書列舉了很多真實可信的實際例子,說明目前在軟體產品和基於軟體的高科技產品中,普遍存在著“難用”的問題。作者認為,“難用”問題是由這些產品中存在著的高度“認知摩擦”引起的,而產生這個問題的根源在於現今軟體開發過程中欠缺了一個為使用者利益著想的前期“互動設計”階段。“難用”的產品不僅損害了使用者的利益,最終也將導致企業的失敗。本書通過一些生動的例項,讓人信服地講述了由作者倡導的“目標導向”互動設計方法在解決“難用”問題方面的有效性,證實了只有改變現有觀念,才能有效地在開發過程中引入互動設計,將產品的設計引向成功。

本書雖然是一本面向商務人員而編寫的書,但也適合於所有參與軟體產品和基於軟體的高科技產品開發的專業人士,以及關心軟體行業和高科技行業現狀與發展的人士閱讀。

他還有另一本中文版著作:《About Face 3 互動設計精髓

 

26. 《Why’s (Poignant) Guide to Ruby

如果你不是程式設計師,閱讀此書可能會很有趣,但如果你已經是個程式設計師,可能會有點乏味。

 

27. Unix程式設計藝術

It is useful regardless operating system you use. – J.F. Sebastian
不管你使用什麼作業系統,這本書都很有用。 – J.F. Sebastian

 

28. 《Practices of an Agile Developer / 高效程式設計師的45個習慣:敏捷開發修煉之道

45個習慣,分為7個方面:工作態度、學習、軟體交付、反饋、編碼、除錯和協作。

每一個具體的習慣裡,一開始提出一個謬論,然後展開分析,之後有正隊性地提出正確的做法,並設身處地地講出了正確做法給你個人的“切身感受”,最後列出幾條注意事項,幫助你修正自己的做法(“平衡的藝術”)。

 

29. 《Test-Driven Development by Example. / 測試驅動開發

前面已經提到的很多書都啟發了我,並影響了我,但這本書每位程式設計師都應該讀。它向我展示了單元測試和TDD的重要性,並讓我很快上手。 – Curro

我不關心你的程式碼有多好或優雅。如果你沒有測試,你或許就如同沒有編寫程式碼。這本書得到的推薦數應該更高些。人們討論編寫使用者喜歡的軟體,或既設計出色並健壯的高效程式碼,但如果你的軟體有一堆bug,談論那些東西毫無意義。– Adam Gent

 

30. 《Don’t Make Me Think / 點石成金:訪客至上的網頁設計祕笈

取決於你所追求的目標。我喜歡《程式碼大全》是因純程式設計,《點石成金》是一本有關UI設計的卓越書籍。 – Justin Standard

 

【更新】:2012年8月17日19:08:39

最近有其他網站轉載此文,但標題被改為《一個合格的程式設計師應該讀的30本書》。這標題改的不好,偏離原文意思了。況且上文中不止提到了30本書。

今日重看 SO 那個原帖,發現於今年年初被關閉了。不過有人做了彙總,把其他回覆中提到的書籍,放在投票數最高的回覆中。

《Modern C++ Design》 by Andrei Alexandrescu

Best Software Writing I》 by Joel Spolsky

《The Practice of Programming | 程式設計實踐》by Kernighan and Pike

《Pragmatic Thinking and Learning: Refactor Your Wetware》 by Andy Hunt

《Software Estimation: Demystifying the Black Art》 by Steve McConnel

《The Passionate Programmer| 我程式設計,我快樂:程式設計師職業規劃之道》by Chad Fowler

《Hackers: Heroes of the Computer Revolution | 黑客:計算機革命的英雄》

《Algorithms + Data Structures = Programs》

《Writing Solid Code》

JaveScript:The Good Parts | JavaScript語言精粹》

《Getting Real 》by 37 Signals

Foundations of Programming 》by Karl Seguin

《Computer Graphics: Principles and Practice in C (2nd Edition) | 計算機圖形學原理及實踐:C語言描述》

《Thinking in Java | Java程式設計思想》by Bruce Eckel

《The Elements of Computing Systems》

《Refactoring to Patterns | 重構與模式 》 by Joshua Kerievsky

Modern Operating Systems | 現代作業系統》by Andrew S. Tanenbaum

《The Annotated Turing》

《Things That Make Us Smart》 by Donald Norman

《The Timeless Way of Building | 建築的永恆之道 》by Christopher Alexander

《The Deadline: A Novel About Project Management》 by Tom DeMarco

《The C++ Programming Language | C++程式設計語言》by Stroustrup

Patterns of Enterprise Application Architecture | 企業應用架構模式

《Computer Systems – A Programmer’s Perspective | 深入理解計算機系統》

《Agile Principles, Patterns, and Practices in C#》 by Robert C. Martin

Growing Object-Oriented Software, Guided by Tests

《Framework Design Guidelines | .NET設計規範:約定、慣用法與模式》 by Brad Abrams

《Object Thinking》 by Dr. David West

《Advanced Programming in the UNIX Environment | UNIX環境高階程式設計》 by W. Richard Stevens

《Hackers and Painters: Big Ideas from the Computer Age  | 黑客與畫家》

《The Soul of a New Machine | 新機器的靈魂》 by Tracy Kidder

CLR via C# | 框架設計》 by Jeffrey Richter

Design Patterns in C#》 by Steve Metsker

《Alice in Wonderland | 愛麗絲夢遊仙境》 by Lewis Carol

Zen and the Art of Motorcycle Maintenance | 禪與摩托車維修藝術》by Robert M. Pirsig

《About Face – The Essentials of Interaction Design | About Face3互動設計精髓

《Here Comes Everybody: The Power of Organizing Without Organizations | 未來是溼的:無組織的組織力量》 by Clay Shirky

《The Tao of Programming》

《Computational Beauty of Nature》

Philip and Alex’s Guide to Web Publishing

《Object-Oriented Analysis and Design with Applications | 物件導向分析與設計》 by Grady Booch

Effective Java | Effective Java中文版》 by Joshua Bloch

《Computability: An Introduction to Recursive Function Theory》 by N. J. Cutland

《Masterminds of Programming | 程式設計大師智慧/程式設計之魂》

《Tao Te Ching | 道德經》

《The Productive Programmer | 卓有成效的程式設計師

《The Art of Deception》 by Kevin Mitnick

《The Career Programmer: Guerilla Tactics for an Imperfect World》 by Christopher Duncan

《Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp》

《Masters of Doom | Doom啟示錄》

Pragmatic Unit Testing in C# with NUnit》 by Andy Hunt and Dave Thomas with Matt Hargett

《How To Solve It: A New Aspect of Mathematical Method | 怎樣解題:數學思維的新方法》 by George Polya

《The Alchemist | 牧羊少年奇幻之旅》 by Paulo Coelho

《Smalltalk-80: The Language and its Implementation》

《Writing Secure Code (2nd Edition) 》by Michael Howard

《Introduction to Functional Programming》 by Philip Wadler and Richard Bird

《No Bugs!: Delivering Error Free Code in C and C++》 by David Thielen

《Rework | 重來:更為簡單有效的商業思維》 by Jason Freid and DHH

《JUnit in Action | JUnit實戰》

【更新】:這篇文章所列書單作為翻譯小組獎勵計劃的書籍列表後,大家的補充如下

@boydwang 推薦《Head First 設計模式》,理由:我見過的講設計模式最棒的書!

@sunbiaobiao 推薦 《HTTP權威指南》,理由:經典,不多解釋 :)

後語

除這個書單之外,曾經也有微博網友推薦《一些經典的計算機書籍》,大約在50本。

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

國外程式設計師推薦:每個程式設計師都應讀的書 國外程式設計師推薦:每個程式設計師都應讀的書

相關文章