咱們接著“谷歌小哥出品程序員必讀書單1.0(上)”繼續說。
軟件開發
1. 編程實踐
Brian Kernighan是這個星球上最好的計算機書籍作者:從上古時期的Software Tools,到早期的Unix編程環境和C程序設計語言,再到這本程序設計實踐,每本書都是必讀之作。
盡管程序設計實踐只有短短200余頁,但它使用精煉的代碼和簡要的原則覆蓋了程序設計的所有關鍵概念(包括編程風格,算法與數據結構,API設計,調試,測試,優化,移植,以及領域特定語言等概念)。如果你想快速掌握良好的編程實踐,或者你覺著900多頁的代碼大全過于沉重,那么程序設計實踐是你的不二之選。我第一次讀這本書就被它簡潔的語言和優雅的代碼所吸引,以至于讀研時我買了三本程序設計實踐——一本放在學校實驗室,一本放在宿舍,一本隨身攜帶閱讀。我想我至少把它讀了十遍以上——每一次都有新的收獲。
無論在哪個版本的程序員必讀書單,代碼大全都會高居首位。和其它程序設計書籍不同,代碼大全用通俗清晰的語言覆蓋了軟件構建(Software Construction)中各個層次上所有的重要概念——從變量命名到類型設計,從控制循環到代碼結構,從測試和調試到構建和集成,代碼大全可謂無所不包,你可以把這本書看作為程序員的一站式(Once and for all)閱讀手冊。更珍貴的是,代碼大全在每一章末尾都給出了價值很高的參考書目(參考我之前的如何閱讀書籍一文),如果你是一個初出茅廬的程序員,代碼大全是絕好的閱讀起點。
延伸閱讀:
編寫可讀代碼的藝術:專注于代碼可讀性(Code Readability),這本書來自Google的兩位工程師對Google Code Readability的總結。它給出了大量命名,注釋,代碼結構,以及API設計等日常編碼的最佳實踐,并包含了很多看似細微但卻可以顯著提升代碼可讀性的編程技巧。這本書的翻譯還不錯,但如果你想體會書中的英語幽默(例如Tyrannosaurus——Stegosaurus——Thesaurus),建議閱讀它的英文影印版;
卓有成效的程序員:專注于生產效率(Productivity),它既包含源自作者多年經驗的高生產率原則,也包含大量的提高生產率的小工具,每個追求高生產率的程序員都應該閱讀這本書;
UNIX編程藝術:專注于程序設計哲學,這本書首先總結出包括模塊化,清晰化,可組合,可分離等17個Unix程序設計哲學,接下來通過Unix歷史以及各種Unix編程工具展示了這些原則的應用。盡管個人覺的這本書有些過度拔高Unix且過度貶低Windows和M$,但書中的Unix設計哲學非常值得借鑒。
2. 面向對象程序設計
無論是在Amazon還是在Google上搜索設計模式相關書籍,Head First設計模式都會排在首位——它使用風趣的語言和詼諧的圖示講述了觀察者,裝飾者,抽象工廠,和單例等關鍵設計模式,使得初學者可以迅速的理解并掌握設計模式。Head First設計模式在Amazon上好評如潮,就連設計模式原書作者Erich Gamma都對它給出了很高的評價。
需要注意,Head First設計模式是非常好的設計模式入門書,但千萬不要把這本書作為學習設計模式的唯一的書——是的,Head First設計模式擁有風趣的語言和詼諧的例子,但它既缺乏實際的工程范例,也沒有給出設計模式的應用/適用場景。我個人建議是在讀過這本書之后立即閱讀“四人幫”的設計模式或Bob大叔的敏捷軟件開發,以便理解設計模式在實際中的應用。
設計模式作為設計模式領域的開山之作,Erich Gamma,Richard Helm,Ralph Johnson等四位作者將各個領域面向對象程序開發的經驗總結成三大類23種模式,并給出了每個模式的使用場景,變體,不足,以及如何克服這些不足。這本書行文嚴謹緊湊(四位作者都是PhD),并且代碼源自實際項目,屬于設計模式領域的必讀之作。
需要注意:設計模式不適合初學者閱讀——它更像是一篇博士論文而非技術書籍,加上它的范例都具有很強的領域背景(諸如GUI窗口系統和富文本編輯器),缺乏實際經驗的程序員很難理解這本書。
延伸閱讀:
敏捷軟件開發(原則模式與實踐):盡管標題帶有“敏捷”,但這本書實際是一本面向對象程序設計讀物——Bob大叔通過豐富的例子講解設計模式的應用和SOLID面向對象設計原則,如果你覺著設計模式過于晦澀,那么你完全可以從這本書開始學習。這本書使用Java作為講解語言,它也有對應的C#版本;
代碼整潔之道:同樣是Bob大叔的作品,這本書教導讀者使用面向對象+敏捷開發原則編寫清晰可維護的代碼;
企業應用架構模式:這本書專注于架構,作者Martin Fowler針對企業應用的特點(諸如持久化數據,多人訪問,操作數據的界面以及復雜的業務邏輯),總結出若干企業架構模式,以便程序員構建強大且可擴展的企業應用。
3. 重構
任何產品代碼都不是一蹴而就,而是在反復不斷的修改中進化而來。重構正是這樣一本介紹如何改進代碼的書籍——如何在保持代碼行為的基礎上,提升代碼的質量(這也是重構的定義)。
我見過很多程序員,他們經常聲稱自己在重構代碼,但他們實際只做了第二步(提升代碼的質量),卻沒有保證第一步(保持代碼行為),因此他們所謂的重構往往會適得其反——破壞現有代碼或是引入新bug。這也是我推薦重構這本書的原因——它既介紹糟糕代碼的特征(Bad smell)和改進代碼的方法,也給出了重構的完整流程——1. 編寫單元測試保持(Preserve)程序行為;2. 重構代碼;3. 保證單元測試通過。重構還引入了一套重構術語(諸如封裝字段,內聯方法,和字段上移),以便程序員之間交流。只有理解了這三個方面,才能算是理解重構。
這里再重復一遍重構的定義——在保持代碼行為的基礎上,提升代碼的質量。重構專注于第二步,即如何提升代碼的質量,而修改代碼的藝術專注于第一步,即如何保持代碼的行為。
提升代碼質量并不困難,但保持代碼行為就難多了,尤其是對沒有測試的遺留代碼(Legacy Code)而言——你需要首先引入測試,但遺留代碼往往可測試性(Testability)很差,這時你就需要把代碼變的可測試。修改代碼的藝術包含大量的實用建議,用來把代碼變的可測試(Testable),從而使重構變為可能,使提高代碼質量變為可能。
延伸閱讀:
重構與模式:這本書的中文書名存在誤導,它的原書書名是Refactoring to Patterns——通過重構,把模式引入代碼。這本書闡述了重構和設計模式之間的關系,使得程序員可以在更高的層次上思考重構,進行重構。
4. 軟件測試
關于軟件測試的書籍很多,但很少有一本測試書籍能像How to Break Software這般既有趣又實用。不同于傳統的軟件測試書籍(往往空話連篇,無法直接應用),How to Break Software非常實際——它從程序員的心理出發,分析軟件錯誤/Bug最可能產生的路徑,然后針對這些路徑進行殘酷的測試,以保證軟件質量。
我在第一次閱讀這本書時大呼作者太過“殘忍”——連這些刁鉆詭異的測試招數都能想出來。但這種毫不留情(Relentless)的測試風格正是每個專業程序員所應具備的心態。
注意:如果你是一個測試工程師,那么在閱讀這本書前請三思——因為閱讀它之后你會讓你身邊的程序員苦不堪言,甚至連掐死你的心都有 :-D。
How to Break Software注重黑盒測試,而這本xUnit Test Patterns則注重白盒測試。正如書名所示,xUnit Test Patterns覆蓋了單元測試的每個方面:從如何編寫良好的單元測試,到如何設計可測試(Testable)的軟件,再到如何重構測試——可以把它看作為單元測試的百科全書。
延伸閱讀:
Practical Unit Testing with JUnit and Mockito:盡管xUnit Test Patterns覆蓋了單元測試的方方面面,但它的問題在于不夠與時俱進(07年出版)。Practical Unit Testing彌補了這個缺陷——它詳細介紹了如何通過測試框架JUnit和Mock框架Mockito編寫良好的單元測試,并給出了大量優秀單元測試的原則;
單元測試的藝術(第2版):可以把這本書看作為前一本書的.Net版,適合.Net程序員;
Google軟件測試之道:這本書詳細介紹了Google如何測試軟件——包括Google的軟件測試流程以及Google軟件測試工程師的日常工作/職業發展。需要注意的是:這本書中的測試流程在國內很可能行不通(國內企業缺乏像Google那般強大的基礎設施(Infrastructure)),但它至少可以讓國內企業有一個可以效仿的目標;
探索式軟件測試:James Whittaker的另一本測試著作,不同于傳統的黑盒/白盒測試,這本書創造性的把測試比喻為“探索”(Exploration),然后把不同的探索方式對應到不同的測試方式上,以便盡早發現更多的軟件錯誤/Bug。
5. 項目管理
很多程序員都向往成為橫掃千軍(One-man Army)式的“編程英雄”,但卓越的軟件并非一人之力,而是由團隊合力而成。極客與團隊就是這樣一本寫給程序員的如何在團隊中工作的絕好書籍,它圍繞著HRT三大原則(Humility謙遜,Respect尊重,和Trust信任),系統的介紹了如何融入團隊,如何打造優秀的團隊,如何領導團隊,以及如何應對團隊中的害群之馬(Poisonous People)。這本書實用性極強,以至于Python之父Guido van Rossum都盛贊這本書“說出了我一直在做但總結不出來的東西”。
盡管人月神話成書于40年前,但它仍是軟件項目管理最重要的書籍。人月神話源自作者Fred Brooks領導并完成System/360和OS/360這兩個即是放到現在也是巨型軟件項目的里程碑項目的經驗總結。它覆蓋了軟件項目各個方面的關鍵概念:從工期管理(Brooks定律)到團隊建設(外科團隊),從程序設計(編程的本質是使用正確的數據結構)到架構設計(概念完整性),從原型設計(Plan to Throw one away)到團隊交流(形式化文檔+會議)。令人驚訝的是,即便40年之后,人月神話中的關鍵概念(包括焦油坑,Brooks定律,概念完整性,外科團隊,第二版效應等等)依然適用,而軟件開發的核心復雜度仍然沒有得到解決(沒有銀彈)。
延伸閱讀:
人件(原書第3版):從人的角度分析軟件項目。人件從雇傭正確的人,創建健康的工作環境,以及打造高效的開發團隊等角度闡述了如何改善人,從而改善軟件項目;
門后的秘密:卓越管理的故事:這本書生動的再現了軟件項目管理工作的場景,并給出了各種實用管理技巧,如果你有意轉向管理崗位,這本書不容錯過;
大教堂與集市:這本書從黑客的歷史說起,系統而又風趣的講述了開源運動的理論和實踐,以及開源軟件項目是如何運作并發展的。了解開源,從這本書開始。
6. 專業開發
不要被庸俗的譯名迷惑,程序員修煉之道是一本價值極高的程序員成長手冊。這本書并不局限于特定的編程語言或框架,而是提出了一套切實可行的實效(Pragmatic)開發哲學,并通過程序設計,測試,編程工具,以及項目管理等方面的實例展示了如何應用這套開發哲學,從而使得程序員更加高效專業。有人把這本書稱之為迷你版代碼大全——代碼大全給出了大量的優秀程序設計實踐,偏向術;而程序員修煉之道給出了程序設計實踐背后的思想,注重道。
程序員修煉之道指出了如何成為專業程序員,這本程序員職業素養則指出了專業程序員應該是什么樣子——承擔責任;知道自己在做什么;知道何時說不/何時說是;在正確的時間編寫正確的代碼;懂得自我時間管理和工期預估;知道如何應對壓力。如果你想成為專業程序員(Professional Developer)(而不是碼農(Code Monkey)),這本書會為你指明前進的方向。
延伸閱讀:
高效程序員的45個習慣:“敏捷”版的程序員修煉之道,可以把這本書作為程序員修煉之道的補充;
精益創業:盡管這是一本講如何創業的書,但其中的精益生產,最小價值產品,以及構建-度量-學習循環都值得程序員借鑒。
7. 大師之言
奇思妙想:15位計算機天才及其重大發現是一本極具眼光的技術訪談書籍——在這本書訪談的15位計算機科學家中,竟出現了12位圖靈獎獲得者——要知道圖靈獎從1966年設獎到現在也只有六十幾位獲獎者而已。
奇思妙想把計算機科學分為四大領域:編程語言;算法;架構;人工智能。并選取了每個領域下最具代表性的計算機科學家進行訪談。因為這些計算機科學家都是其所在領域的開拓者,因此他們能給出常人無法給出的深刻見解。通過這本書,你可以了解前三十年的計算機科學的發展歷程——計算機科學家做了什么,而計算機又能做到/做不到什么。從而避免把時間浪費在前人已經解決的問題(或者根本無法解決的問題)上面。
同樣是訪談錄,同樣訪談15個人,編程人生把重點放在程序員(Coders at work)上。它從各個領域選取了15位頂尖的程序員,這些程序員既包括Ken Thompson和Jamie Zawinski這些老牌Unix黑客,也包括Brad Fitzpatrick這樣的80后新生代,還包括Frances Allen和Donald Knuth這樣的計算機科學家。這種多樣性(Diversity)使得編程人生兼具嚴謹性和趣味性,無論你是什么類型的程序員,都能從中受益良多。
延伸閱讀:
圖靈和ACM圖靈獎(1966-2011):通過圖靈獎介紹整個計算機科學發展史,非常難得的國產精品圖書;
編程大師訪談錄:可以把這本書看作為二十年前的編程人生,被訪談者都是當時叱咤風云的人物(例如微軟的創造者Bill Gates,Macintosh的發明者Jeff Raskin,以及Adobe的創始人John Warnock等等)。有趣的是這本書中大量的經驗和建議到如今依然適用;
編程大師智慧:類似于編程人生,不同的是被訪談者都是編程語言的設計者——這本書覆蓋了除C語言以外的幾乎所有主流編程語言。通過這本書,你可以從中學到編程語言背后的設計思想——編程語言為什么要被設計成這樣,是什么促使設計者要在語言中加入這個特性(或拒絕那個特性)。從而提升對編程語言的理解。
8. 界面設計
書如其名,寫給大家看的設計書是一本面向初學者的快速設計入門。它覆蓋了版式,色彩,和字體這三個設計中的關鍵元素,并創造性的為版式設計總結出CRAP四大原則(Contrast對比,Repetition重復,Alignment對齊,Proximity親密)。全書使用豐富生動的范例告訴讀者什么是好的設計,什么是不好的設計,使得即便是對設計一無所知的人,也可以從這本書快速入門。
寫給大家看的設計書強調實踐,即如何做出好的設計;認知與設計:理解UI設計準則強調理論,即為什么我們會接受這樣的設計而反感那樣的設計。如果你想要搞清楚設計背后的心理學知識,但又不想閱讀大部頭的心理學著作,那么認知與設計是你的首選。
延伸閱讀:
GUI設計禁忌 2.0:這本書指出了GUI設計的原則和常見誤區,然后通過具體范例指出了如何避免這些誤區。如果你的工作涉及到用戶界面,那么這本書會為你減少很多麻煩;
界面設計模式(第2版):這本書將用戶界面中的常見元素/行為組織成彼此關聯的模式,以便讀者理解并舉一反三,從而將其運用到自己的應用中;
移動應用UI設計模式:類似于界面設計模式,但面向移動平臺。它給出了iOS,Android,以及Windows Phones上常用的90余種界面設計模式,從而使得你不必把這些平臺的應用挨個玩一遍也可以掌握各個平臺的設計精髓。如果你主攻Android平臺,那么Android應用UI設計模式會是更好的選擇;
配色設計原理和版式設計原理:如果你讀過寫給大家看的設計書之后想繼續深入學習設計,這兩本書是不錯的起點。
9. 交互設計
書如其名,通用設計法則給出了重要的125個設計原則,并用簡練的語言和范例展示了這些原則的實際應用。每個原則都有對應的參考文獻,以便讀者進一步學習。我之所以推薦這本書,是因為:1. 程序員需要對設計有全面的認識;2. 程序員并不需要知道這些設計原則是怎么來的,知道怎么用即可。這本書很好的滿足了這兩個要求。
交互設計精髓是交互設計領域的圣經級著作。交互設計專家(以及VB之父)Alan Cooper在這本書中詳細介紹了交互設計的原則,流程,以及方法,然后通過各種范例(主要來自桌面系統)展示了如何應用這些原則。
需要注意的是這本書的第4版已經出版,它在第三版的基礎上增加了移動設計以及Web設計等內容。
延伸閱讀:
The Design of Everyday Things:交互設計領域的另一本經典之作,它通過解讀人類行動背后的心理活動,展示了設計問題的根源,并給出了一系列方法用以解決設計問題(需要注意,盡管這本書有中譯版,但中譯版對應的是02年的舊版,而非13年的新版);
The Inmates Are Running the Asylum:Alan Cooper的另一本經典,這本書非常辛辣的指出讓不具備人機交互知識的程序員直接編寫面向用戶的軟件就像讓精神病人管理瘋人院(The Inmates Are Running the Asylum),然后給出了一套交互設計流程以挽救這個局面;
簡約至上:交互式設計四策略:專注于把產品變的更加簡單易用。作者通過刪除,組織,隱藏,和轉移這四個策略,展示了如何創造出簡約優質的用戶體驗。
個人成長
1. 職業規劃
軟件開發者路線圖是一本優秀且實用的程序員職業規劃手冊。這本書由若干個模式組成,每個模式都對應于程序員職業生涯中的特定階段。通過這本書,讀者可以很方便的找到自己目前所處的模式(階段),應該做什么,目標是什么,以及下一個模式(階段)會是什么。如果你時常感到迷茫,那么請閱讀這本路線圖,找到自己的位置,確定接下來的方向。
延伸閱讀:
卡耐基全集:非常著名的為人處世書籍。很多人把這本書歸類到成功學,但我并不這么認為——在我看來,這本書教的更多的是如何成為一個讓大家喜歡的人。作為天天和機器打交道的程序員,這套書會幫助我們與人打交道;
沃頓商學院最受歡迎的談判課:這本書不是教你去談判,而是教你通過談判(Negotiation)去得到更多(Getting more,這也是這本書的原書書名)。小到買菜砍價,大到爭取項目,這本書中的談判原則會讓你收益良多;
程序員健康指南:作為長期與計算機打交道的職業,程序員往往會受到各式各樣疾病的困擾,這本書正是為了解決這個問題而出現:它從改善工作環境,調整飲食結構,預防頭痛眼痛,以及進行室內/室外鍛煉等方面出發,給出了一套全面且可行的程序員健康改善計劃,以幫助程序員打造健康的身體。
2. 思維方式
作為程序員,我們需要不斷地學習——既要學習新技術,也要學習如何解決各種領域的問題。為了提升學習效率,我們需要學習如何學習。程序員的思維修煉正是這樣一本講如何學習的書,它集合了認知科學,神經學,以及行為理論的最新研究成果,并系統的介紹了大腦的工作機制。通過這本書,你將學會如何高效的使用自己的大腦,從而提高思考能力,改善學習效率。
Mastery is not about perfection. It’s about a process, a journey. The master is the one who stays on the path day after day, year after year. The master is the one who is willing to try, and fail, and try again, for as long as he or she lives.
為什么同樣資質的人,大多數人會碌碌無為,而只有極少數能做到登峰造極?如何在領域內做到頂尖?如何克服通往頂尖之路上的重重險阻?如何把事情做到最好回答了這些問題,并極具哲理的指出登峰造極并不是結果,而是一段永不停止的旅程。閱讀這本書不會讓你立刻脫胎換骨,但它會指引你走向正確的道路——通往登峰造極之路。
延伸閱讀:
怎樣解題:數學思維的新方法:不要被標題中的“數學思維”嚇到,它并不僅僅只是一本數學解題書,它所提出的四步解題法(理解題目->擬定方案->執行計劃->總結反思)適用于任何領域;
暗時間:劉未鵬所寫的關于學習思維方法的文章集,既包含了他對學習方法的思考,也包含了大量進一步閱讀的資源;
批判性思維:帶你走出思維的誤區:這本書系統的分析了人類思維的常見誤區,并針對各個誤區給出了解決方案,從而幫助程序員養成嚴謹正確的思考方式;
Conceptual Blockbusting: A Guide to Better Ideas:與批判性思維相反,這本書專注于創造性思維(Creative Thinking),它分析了阻礙創造性思維的常見思維障礙(Blockbuster)以及這些思維障礙背后的成因,并給出了各種方法以破除這些障礙。
3. 求職面試
知己知彼,百戰不殆。金領簡歷:敲開蘋果微軟谷歌的大門是程序員求職的必讀書籍,它覆蓋了程序員求職的方方面面:從開始準備到編寫簡歷,從技術面試到薪酬談判。由于該書作者曾在Google,微軟,和蘋果任職并進行過技術招聘,因此這本書的內容非常實用。
順便吐個槽:這本書翻譯的還不錯,但我實在無法理解封面上的“進入頂級科技公司的葵花寶典”這段文字——找個工作而已,用不著切JJ這么兇殘吧。-_-#
同樣是來自金領簡歷作者的作品,程序員面試金典(第5版)專注于技術面試題,它既包含了IT企業(諸如微軟,Google,和蘋果)的面試流程以及如何準備技術面試,也包含了大量(超過200道)常見技術面試題題目以及解題思路。無論你打算進入國內企業還是外企,你都應該把這本書的題目練一遍,以找到技術面試的感覺(我在求職時就曾經專門搞了一塊白板,然后每二十分鐘一道題的練習,效果很不錯)。
延伸閱讀:
編程之美:微軟技術面試心得:恐怕是國內技術面試第一書,這本書里面的多數題目都曾經是國內IT企業面試的必問題目。這本書的缺點是它太舊而且被用濫了(以至于一些企業開始避免使用這本書上的題目)——但你可以把它當成一本算法趣題來讀;
劍指Offer:名企面試官精講典型編程題:相對于東拼西湊的XX面試寶典,劍指Offer是一本少見的國產精品技術面試書籍,盡管這本書的技術面試題目不多(60余道),但作者為大多數題目都給出了不同方式的解法,并分析了這些解法之間的優劣,此外作者還以面試官的視角分析了技術面試的各個環節,從而幫助讀者把握技術面試;
人人都有好工作:IT行業求職面試必讀:可以把它看做金領簡歷的補充閱讀——這本書的特點在于它給出了非常詳細的簡歷/求職信/電子郵件編寫技巧,而這正是不少國內程序員所缺乏的。
4. 英語寫作
詞匯量決定閱讀能力,語法決定寫作能力。計算機專業詞匯并不多,但精確性非常重要,因此每個程序員都應具備良好的英語語法,但程序員并不需要過于專業的英語語法——掌握常用語法并把它用對就可以。The Only Grammar Book You'll Ever Need正好可以滿足這個需求,盡管它篇幅不大(不足200頁),卻覆蓋了英語中的關鍵語法以及常見錯誤。把這本書讀兩遍,它會大幅度提高你的英語寫作能力。
既是最暢銷的英語寫作書籍,也是計算機書籍中引用最多的非計算機書籍。風格的要素用極其簡練的語言講述了如何進行嚴肅,精確,清楚的英語寫作。從這本書中,你不僅可以學到英語寫作,更可以學到一種嚴謹至簡的處事態度,而這正是專業開發所必需的。
延伸閱讀:
牛津英語用法指南(第3版):全面且權威的英語用法指南,它覆蓋語法,詞匯,發音,以及修辭等方面,并兼顧口語和書面語,以幫助讀者掌握合理的英語用法(Proper English Usage)。不要被這本書的篇幅(1000多頁)嚇到——原書并沒有這么厚,因為這本書被翻譯成中文但又得保留原有的英文內容,所以它的篇幅幾乎翻了一倍??紤]到這本書使用的詞匯都很基礎,所以我認為具有英語基礎的讀者直接閱讀原版(Practical English Usage)會更合適;
寫作法寶:非虛構寫作指南(30周年紀念版):詳盡的非虛構(Non-Fiction)寫作指南,無論你要寫地方,技術,商務,運動,藝術,還是自傳,你都可以從這本書中找到珍貴的建議;
中式英語之鑒:中國人使用英語最大的問題就是會把中式思維摻雜其中,從而形成啰里啰嗦不倫不類的中式英語(Chinglish)。中式英語之鑒系統的探討了中式英語以及其成因,然后根據成因對中式英語進行歸類,并對每個類別給出了大量的實際案例以及修改建議。如果你想擺脫中式英語,那么這本書是絕好的起點。
如何使用這個書單
學而不思則罔,思而不學則殆。
不憤不啟,不悱不發。舉一隅不以三隅反,則不復也。
不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之,學至于行之而止矣。
來自他人的書單
它山之石,可以攻玉。我在本文最后給出其他中外優秀程序員的書單,以便參考&補充。
劉未鵬(暗時間作者)
以下同一條目下用“/”隔開的表示任選,當然也可以都讀。
編碼:隱匿在計算機軟硬件背后的語言
深入理解計算機系統 / Windows核心編程 / 程序員的自我修養
代碼大全 / 程序員修煉之道
編程珠璣 / 算法概論 / 算法設計 / 編程之美
C程序設計語言
C++程序設計語言 / C++程序設計原理與實踐 / Accelerated C++
計算機程序的構造與解釋
代碼整潔之道 / 實現模式
設計模式 / 敏捷軟件開發(原則模式與實踐)
10. 重構
云風(中國游戲編程先行者,前網易游戲部門資深程序員,簡悅創始人)
C++編程思想
Effective C++
深度探索C++對象模型
C++語言的設計與演化
C專家編程
C陷阱與缺陷
C語言接口與實現
Lua程序設計
鏈接器和加載器
10. COM本質論
11. Windows核心編程
12. 深入解析Windows操作系統
13. 程序員修煉之道
14. 代碼大全
15. UNIX編程藝術
16. 設計模式
17. 代碼優化:有效使用內存
18. 深入理解計算機系統
19. 深入理解LINUX內核
20. TCP/IP詳解
洪強寧(豆瓣技術總監)
代碼大全
人月神話
編碼:隱匿在計算機軟硬件背后的語言
計算機程序設計藝術
程序員修煉之道
設計模式
計算機程序的構造與解釋
重構
C程序設計語言
10. 算法導論
陳皓(CoolShell博主)
點石成金:訪客至上的Web和移動可用性設計秘笈
重來:更為簡單有效的商業思維
黑客與畫家
清醒思考的藝術
TCP/IP詳解
UNIX環境高級編程
UNIX網絡編程
張崢(微軟亞洲研究院副院長)
算法概論
Data Structure and Algorithms
C程序設計語言
UNIX操作系統設計
編譯原理
計算機體系結構:量化研究方法
當下的幸福
異類:不一樣的成功啟示錄
Jeff Atwood(Stackoverflow聯合創始人)
代碼大全
人月神話
點石成金:訪客至上的Web和移動可用性設計秘笈
快速軟件開發
人件
The Design of Everyday Things
交互設計精髓
The Inmates Are Running the Asylum
GUI設計禁忌 2.0
10. 編程珠璣
11. 程序員修煉之道
12. 精通正則表達式
Joel Spolsky(Stackoverflow聯合創始人)
軟件項目管理
人件
人月神話
快速軟件開發
編程技藝
代碼大全
程序員修煉之道
編程哲學
禪與摩托車維修藝術
哥德爾、艾舍爾、巴赫:集異璧之大成
建筑模式語言
界面設計
點石成金:訪客至上的Web和移動可用性設計秘笈
交互設計精髓
The Design of Everyday Things
資本運作
漫步華爾街
圖形設計
寫給大家看的設計書
思維方式
影響力
Helplessness On Depression, Development and Death
編程入門
編碼:隱匿在計算機軟硬件背后的語言
C程序設計語言
DHH(Ruby on Rails創始人)
Smalltalk Best Practice Patterns
重構
企業應用架構模式
領域驅動設計
你的燈亮著嗎?發現問題的真正所在
參考
怎樣花兩年時間去面試一個人
What is the single most influential book every programmer should read?
Recommended Reading for Developers
Book Reviews -- Joel Spolsky
The five programming books that meant most to me
原文包涵大量鏈接,微信不方便給出,請戳左下角【閱讀原文】跳轉到原始鏈接。