咱們接著“谷歌小哥出品程序員必讀書單1.0(上)”繼續(xù)說。
軟件開發(fā)
1. 編程實(shí)踐

Brian Kernighan是這個(gè)星球上最好的計(jì)算機(jī)書籍作者:從上古時(shí)期的Software Tools,到早期的Unix編程環(huán)境和C程序設(shè)計(jì)語言,再到這本程序設(shè)計(jì)實(shí)踐,每本書都是必讀之作。
盡管程序設(shè)計(jì)實(shí)踐只有短短200余頁,但它使用精煉的代碼和簡要的原則覆蓋了程序設(shè)計(jì)的所有關(guān)鍵概念(包括編程風(fēng)格,算法與數(shù)據(jù)結(jié)構(gòu),API設(shè)計(jì),調(diào)試,測試,優(yōu)化,移植,以及領(lǐng)域特定語言等概念)。如果你想快速掌握良好的編程實(shí)踐,或者你覺著900多頁的代碼大全過于沉重,那么程序設(shè)計(jì)實(shí)踐是你的不二之選。我第一次讀這本書就被它簡潔的語言和優(yōu)雅的代碼所吸引,以至于讀研時(shí)我買了三本程序設(shè)計(jì)實(shí)踐——一本放在學(xué)校實(shí)驗(yàn)室,一本放在宿舍,一本隨身攜帶閱讀。我想我至少把它讀了十遍以上——每一次都有新的收獲。

無論在哪個(gè)版本的程序員必讀書單,代碼大全都會高居首位。和其它程序設(shè)計(jì)書籍不同,代碼大全用通俗清晰的語言覆蓋了軟件構(gòu)建(Software Construction)中各個(gè)層次上所有的重要概念——從變量命名到類型設(shè)計(jì),從控制循環(huán)到代碼結(jié)構(gòu),從測試和調(diào)試到構(gòu)建和集成,代碼大全可謂無所不包,你可以把這本書看作為程序員的一站式(Once and for all)閱讀手冊。更珍貴的是,代碼大全在每一章末尾都給出了價(jià)值很高的參考書目(參考我之前的如何閱讀書籍一文),如果你是一個(gè)初出茅廬的程序員,代碼大全是絕好的閱讀起點(diǎn)。
延伸閱讀:
編寫可讀代碼的藝術(shù):專注于代碼可讀性(Code Readability),這本書來自Google的兩位工程師對Google Code Readability的總結(jié)。它給出了大量命名,注釋,代碼結(jié)構(gòu),以及API設(shè)計(jì)等日常編碼的最佳實(shí)踐,并包含了很多看似細(xì)微但卻可以顯著提升代碼可讀性的編程技巧。這本書的翻譯還不錯(cuò),但如果你想體會書中的英語幽默(例如Tyrannosaurus——Stegosaurus——Thesaurus),建議閱讀它的英文影印版;
卓有成效的程序員:專注于生產(chǎn)效率(Productivity),它既包含源自作者多年經(jīng)驗(yàn)的高生產(chǎn)率原則,也包含大量的提高生產(chǎn)率的小工具,每個(gè)追求高生產(chǎn)率的程序員都應(yīng)該閱讀這本書;
UNIX編程藝術(shù):專注于程序設(shè)計(jì)哲學(xué),這本書首先總結(jié)出包括模塊化,清晰化,可組合,可分離等17個(gè)Unix程序設(shè)計(jì)哲學(xué),接下來通過Unix歷史以及各種Unix編程工具展示了這些原則的應(yīng)用。盡管個(gè)人覺的這本書有些過度拔高Unix且過度貶低Windows和M$,但書中的Unix設(shè)計(jì)哲學(xué)非常值得借鑒。
2. 面向?qū)ο蟪绦蛟O(shè)計(jì)

無論是在Amazon還是在Google上搜索設(shè)計(jì)模式相關(guān)書籍,Head First設(shè)計(jì)模式都會排在首位——它使用風(fēng)趣的語言和詼諧的圖示講述了觀察者,裝飾者,抽象工廠,和單例等關(guān)鍵設(shè)計(jì)模式,使得初學(xué)者可以迅速的理解并掌握設(shè)計(jì)模式。Head First設(shè)計(jì)模式在Amazon上好評如潮,就連設(shè)計(jì)模式原書作者Erich Gamma都對它給出了很高的評價(jià)。
需要注意,Head First設(shè)計(jì)模式是非常好的設(shè)計(jì)模式入門書,但千萬不要把這本書作為學(xué)習(xí)設(shè)計(jì)模式的唯一的書——是的,Head First設(shè)計(jì)模式擁有風(fēng)趣的語言和詼諧的例子,但它既缺乏實(shí)際的工程范例,也沒有給出設(shè)計(jì)模式的應(yīng)用/適用場景。我個(gè)人建議是在讀過這本書之后立即閱讀“四人幫”的設(shè)計(jì)模式或Bob大叔的敏捷軟件開發(fā),以便理解設(shè)計(jì)模式在實(shí)際中的應(yīng)用。

設(shè)計(jì)模式作為設(shè)計(jì)模式領(lǐng)域的開山之作,Erich Gamma,Richard Helm,Ralph Johnson等四位作者將各個(gè)領(lǐng)域面向?qū)ο蟪绦蜷_發(fā)的經(jīng)驗(yàn)總結(jié)成三大類23種模式,并給出了每個(gè)模式的使用場景,變體,不足,以及如何克服這些不足。這本書行文嚴(yán)謹(jǐn)緊湊(四位作者都是PhD),并且代碼源自實(shí)際項(xiàng)目,屬于設(shè)計(jì)模式領(lǐng)域的必讀之作。
需要注意:設(shè)計(jì)模式不適合初學(xué)者閱讀——它更像是一篇博士論文而非技術(shù)書籍,加上它的范例都具有很強(qiáng)的領(lǐng)域背景(諸如GUI窗口系統(tǒng)和富文本編輯器),缺乏實(shí)際經(jīng)驗(yàn)的程序員很難理解這本書。
延伸閱讀:
敏捷軟件開發(fā)(原則模式與實(shí)踐):盡管標(biāo)題帶有“敏捷”,但這本書實(shí)際是一本面向?qū)ο蟪绦蛟O(shè)計(jì)讀物——Bob大叔通過豐富的例子講解設(shè)計(jì)模式的應(yīng)用和SOLID面向?qū)ο笤O(shè)計(jì)原則,如果你覺著設(shè)計(jì)模式過于晦澀,那么你完全可以從這本書開始學(xué)習(xí)。這本書使用Java作為講解語言,它也有對應(yīng)的C#版本;
代碼整潔之道:同樣是Bob大叔的作品,這本書教導(dǎo)讀者使用面向?qū)ο?敏捷開發(fā)原則編寫清晰可維護(hù)的代碼;
企業(yè)應(yīng)用架構(gòu)模式:這本書專注于架構(gòu),作者M(jìn)artin Fowler針對企業(yè)應(yīng)用的特點(diǎn)(諸如持久化數(shù)據(jù),多人訪問,操作數(shù)據(jù)的界面以及復(fù)雜的業(yè)務(wù)邏輯),總結(jié)出若干企業(yè)架構(gòu)模式,以便程序員構(gòu)建強(qiáng)大且可擴(kuò)展的企業(yè)應(yīng)用。
3. 重構(gòu)

任何產(chǎn)品代碼都不是一蹴而就,而是在反復(fù)不斷的修改中進(jìn)化而來。重構(gòu)正是這樣一本介紹如何改進(jìn)代碼的書籍——如何在保持代碼行為的基礎(chǔ)上,提升代碼的質(zhì)量(這也是重構(gòu)的定義)。
我見過很多程序員,他們經(jīng)常聲稱自己在重構(gòu)代碼,但他們實(shí)際只做了第二步(提升代碼的質(zhì)量),卻沒有保證第一步(保持代碼行為),因此他們所謂的重構(gòu)往往會適得其反——破壞現(xiàn)有代碼或是引入新bug。這也是我推薦重構(gòu)這本書的原因——它既介紹糟糕代碼的特征(Bad smell)和改進(jìn)代碼的方法,也給出了重構(gòu)的完整流程——1. 編寫單元測試保持(Preserve)程序行為;2. 重構(gòu)代碼;3. 保證單元測試通過。重構(gòu)還引入了一套重構(gòu)術(shù)語(諸如封裝字段,內(nèi)聯(lián)方法,和字段上移),以便程序員之間交流。只有理解了這三個(gè)方面,才能算是理解重構(gòu)。

這里再重復(fù)一遍重構(gòu)的定義——在保持代碼行為的基礎(chǔ)上,提升代碼的質(zhì)量。重構(gòu)專注于第二步,即如何提升代碼的質(zhì)量,而修改代碼的藝術(shù)專注于第一步,即如何保持代碼的行為。
提升代碼質(zhì)量并不困難,但保持代碼行為就難多了,尤其是對沒有測試的遺留代碼(Legacy Code)而言——你需要首先引入測試,但遺留代碼往往可測試性(Testability)很差,這時(shí)你就需要把代碼變的可測試。修改代碼的藝術(shù)包含大量的實(shí)用建議,用來把代碼變的可測試(Testable),從而使重構(gòu)變?yōu)榭赡埽固岣叽a質(zhì)量變?yōu)榭赡堋?/p>
延伸閱讀:
重構(gòu)與模式:這本書的中文書名存在誤導(dǎo),它的原書書名是Refactoring to Patterns——通過重構(gòu),把模式引入代碼。這本書闡述了重構(gòu)和設(shè)計(jì)模式之間的關(guān)系,使得程序員可以在更高的層次上思考重構(gòu),進(jìn)行重構(gòu)。
4. 軟件測試

關(guān)于軟件測試的書籍很多,但很少有一本測試書籍能像How to Break Software這般既有趣又實(shí)用。不同于傳統(tǒng)的軟件測試書籍(往往空話連篇,無法直接應(yīng)用),How to Break Software非常實(shí)際——它從程序員的心理出發(fā),分析軟件錯(cuò)誤/Bug最可能產(chǎn)生的路徑,然后針對這些路徑進(jìn)行殘酷的測試,以保證軟件質(zhì)量。
我在第一次閱讀這本書時(shí)大呼作者太過“殘忍”——連這些刁鉆詭異的測試招數(shù)都能想出來。但這種毫不留情(Relentless)的測試風(fēng)格正是每個(gè)專業(yè)程序員所應(yīng)具備的心態(tài)。
注意:如果你是一個(gè)測試工程師,那么在閱讀這本書前請三思——因?yàn)殚喿x它之后你會讓你身邊的程序員苦不堪言,甚至連掐死你的心都有 :-D。

How to Break Software注重黑盒測試,而這本xUnit Test Patterns則注重白盒測試。正如書名所示,xUnit Test Patterns覆蓋了單元測試的每個(gè)方面:從如何編寫良好的單元測試,到如何設(shè)計(jì)可測試(Testable)的軟件,再到如何重構(gòu)測試——可以把它看作為單元測試的百科全書。
延伸閱讀:
Practical Unit Testing with JUnit and Mockito:盡管xUnit Test Patterns覆蓋了單元測試的方方面面,但它的問題在于不夠與時(shí)俱進(jìn)(07年出版)。Practical Unit Testing彌補(bǔ)了這個(gè)缺陷——它詳細(xì)介紹了如何通過測試框架JUnit和Mock框架Mockito編寫良好的單元測試,并給出了大量優(yōu)秀單元測試的原則;
單元測試的藝術(shù)(第2版):可以把這本書看作為前一本書的.Net版,適合.Net程序員;
Google軟件測試之道:這本書詳細(xì)介紹了Google如何測試軟件——包括Google的軟件測試流程以及Google軟件測試工程師的日常工作/職業(yè)發(fā)展。需要注意的是:這本書中的測試流程在國內(nèi)很可能行不通(國內(nèi)企業(yè)缺乏像Google那般強(qiáng)大的基礎(chǔ)設(shè)施(Infrastructure)),但它至少可以讓國內(nèi)企業(yè)有一個(gè)可以效仿的目標(biāo);
探索式軟件測試:James Whittaker的另一本測試著作,不同于傳統(tǒng)的黑盒/白盒測試,這本書創(chuàng)造性的把測試比喻為“探索”(Exploration),然后把不同的探索方式對應(yīng)到不同的測試方式上,以便盡早發(fā)現(xiàn)更多的軟件錯(cuò)誤/Bug。
5. 項(xiàng)目管理

很多程序員都向往成為橫掃千軍(One-man Army)式的“編程英雄”,但卓越的軟件并非一人之力,而是由團(tuán)隊(duì)合力而成。極客與團(tuán)隊(duì)就是這樣一本寫給程序員的如何在團(tuán)隊(duì)中工作的絕好書籍,它圍繞著HRT三大原則(Humility謙遜,Respect尊重,和Trust信任),系統(tǒng)的介紹了如何融入團(tuán)隊(duì),如何打造優(yōu)秀的團(tuán)隊(duì),如何領(lǐng)導(dǎo)團(tuán)隊(duì),以及如何應(yīng)對團(tuán)隊(duì)中的害群之馬(Poisonous People)。這本書實(shí)用性極強(qiáng),以至于Python之父Guido van Rossum都盛贊這本書“說出了我一直在做但總結(jié)不出來的東西”。

盡管人月神話成書于40年前,但它仍是軟件項(xiàng)目管理最重要的書籍。人月神話源自作者Fred Brooks領(lǐng)導(dǎo)并完成System/360和OS/360這兩個(gè)即是放到現(xiàn)在也是巨型軟件項(xiàng)目的里程碑項(xiàng)目的經(jīng)驗(yàn)總結(jié)。它覆蓋了軟件項(xiàng)目各個(gè)方面的關(guān)鍵概念:從工期管理(Brooks定律)到團(tuán)隊(duì)建設(shè)(外科團(tuán)隊(duì)),從程序設(shè)計(jì)(編程的本質(zhì)是使用正確的數(shù)據(jù)結(jié)構(gòu))到架構(gòu)設(shè)計(jì)(概念完整性),從原型設(shè)計(jì)(Plan to Throw one away)到團(tuán)隊(duì)交流(形式化文檔+會議)。令人驚訝的是,即便40年之后,人月神話中的關(guān)鍵概念(包括焦油坑,Brooks定律,概念完整性,外科團(tuán)隊(duì),第二版效應(yīng)等等)依然適用,而軟件開發(fā)的核心復(fù)雜度仍然沒有得到解決(沒有銀彈)。
延伸閱讀:
人件(原書第3版):從人的角度分析軟件項(xiàng)目。人件從雇傭正確的人,創(chuàng)建健康的工作環(huán)境,以及打造高效的開發(fā)團(tuán)隊(duì)等角度闡述了如何改善人,從而改善軟件項(xiàng)目;
門后的秘密:卓越管理的故事:這本書生動的再現(xiàn)了軟件項(xiàng)目管理工作的場景,并給出了各種實(shí)用管理技巧,如果你有意轉(zhuǎn)向管理崗位,這本書不容錯(cuò)過;
大教堂與集市:這本書從黑客的歷史說起,系統(tǒng)而又風(fēng)趣的講述了開源運(yùn)動的理論和實(shí)踐,以及開源軟件項(xiàng)目是如何運(yùn)作并發(fā)展的。了解開源,從這本書開始。
6. 專業(yè)開發(fā)

不要被庸俗的譯名迷惑,程序員修煉之道是一本價(jià)值極高的程序員成長手冊。這本書并不局限于特定的編程語言或框架,而是提出了一套切實(shí)可行的實(shí)效(Pragmatic)開發(fā)哲學(xué),并通過程序設(shè)計(jì),測試,編程工具,以及項(xiàng)目管理等方面的實(shí)例展示了如何應(yīng)用這套開發(fā)哲學(xué),從而使得程序員更加高效專業(yè)。有人把這本書稱之為迷你版代碼大全——代碼大全給出了大量的優(yōu)秀程序設(shè)計(jì)實(shí)踐,偏向術(shù);而程序員修煉之道給出了程序設(shè)計(jì)實(shí)踐背后的思想,注重道。

程序員修煉之道指出了如何成為專業(yè)程序員,這本程序員職業(yè)素養(yǎng)則指出了專業(yè)程序員應(yīng)該是什么樣子——承擔(dān)責(zé)任;知道自己在做什么;知道何時(shí)說不/何時(shí)說是;在正確的時(shí)間編寫正確的代碼;懂得自我時(shí)間管理和工期預(yù)估;知道如何應(yīng)對壓力。如果你想成為專業(yè)程序員(Professional Developer)(而不是碼農(nóng)(Code Monkey)),這本書會為你指明前進(jìn)的方向。
延伸閱讀:
高效程序員的45個(gè)習(xí)慣:“敏捷”版的程序員修煉之道,可以把這本書作為程序員修煉之道的補(bǔ)充;
精益創(chuàng)業(yè):盡管這是一本講如何創(chuàng)業(yè)的書,但其中的精益生產(chǎn),最小價(jià)值產(chǎn)品,以及構(gòu)建-度量-學(xué)習(xí)循環(huán)都值得程序員借鑒。
7. 大師之言

奇思妙想:15位計(jì)算機(jī)天才及其重大發(fā)現(xiàn)是一本極具眼光的技術(shù)訪談書籍——在這本書訪談的15位計(jì)算機(jī)科學(xué)家中,竟出現(xiàn)了12位圖靈獎(jiǎng)獲得者——要知道圖靈獎(jiǎng)從1966年設(shè)獎(jiǎng)到現(xiàn)在也只有六十幾位獲獎(jiǎng)?wù)叨选?br>
奇思妙想把計(jì)算機(jī)科學(xué)分為四大領(lǐng)域:編程語言;算法;架構(gòu);人工智能。并選取了每個(gè)領(lǐng)域下最具代表性的計(jì)算機(jī)科學(xué)家進(jìn)行訪談。因?yàn)檫@些計(jì)算機(jī)科學(xué)家都是其所在領(lǐng)域的開拓者,因此他們能給出常人無法給出的深刻見解。通過這本書,你可以了解前三十年的計(jì)算機(jī)科學(xué)的發(fā)展歷程——計(jì)算機(jī)科學(xué)家做了什么,而計(jì)算機(jī)又能做到/做不到什么。從而避免把時(shí)間浪費(fèi)在前人已經(jīng)解決的問題(或者根本無法解決的問題)上面。

同樣是訪談錄,同樣訪談15個(gè)人,編程人生把重點(diǎn)放在程序員(Coders at work)上。它從各個(gè)領(lǐng)域選取了15位頂尖的程序員,這些程序員既包括Ken Thompson和Jamie Zawinski這些老牌Unix黑客,也包括Brad Fitzpatrick這樣的80后新生代,還包括Frances Allen和Donald Knuth這樣的計(jì)算機(jī)科學(xué)家。這種多樣性(Diversity)使得編程人生兼具嚴(yán)謹(jǐn)性和趣味性,無論你是什么類型的程序員,都能從中受益良多。
延伸閱讀:
圖靈和ACM圖靈獎(jiǎng)(1966-2011):通過圖靈獎(jiǎng)介紹整個(gè)計(jì)算機(jī)科學(xué)發(fā)展史,非常難得的國產(chǎn)精品圖書;
編程大師訪談錄:可以把這本書看作為二十年前的編程人生,被訪談?wù)叨际钱?dāng)時(shí)叱咤風(fēng)云的人物(例如微軟的創(chuàng)造者Bill Gates,Macintosh的發(fā)明者Jeff Raskin,以及Adobe的創(chuàng)始人John Warnock等等)。有趣的是這本書中大量的經(jīng)驗(yàn)和建議到如今依然適用;
編程大師智慧:類似于編程人生,不同的是被訪談?wù)叨际蔷幊陶Z言的設(shè)計(jì)者——這本書覆蓋了除C語言以外的幾乎所有主流編程語言。通過這本書,你可以從中學(xué)到編程語言背后的設(shè)計(jì)思想——編程語言為什么要被設(shè)計(jì)成這樣,是什么促使設(shè)計(jì)者要在語言中加入這個(gè)特性(或拒絕那個(gè)特性)。從而提升對編程語言的理解。
8. 界面設(shè)計(jì)

書如其名,寫給大家看的設(shè)計(jì)書是一本面向初學(xué)者的快速設(shè)計(jì)入門。它覆蓋了版式,色彩,和字體這三個(gè)設(shè)計(jì)中的關(guān)鍵元素,并創(chuàng)造性的為版式設(shè)計(jì)總結(jié)出CRAP四大原則(Contrast對比,Repetition重復(fù),Alignment對齊,Proximity親密)。全書使用豐富生動的范例告訴讀者什么是好的設(shè)計(jì),什么是不好的設(shè)計(jì),使得即便是對設(shè)計(jì)一無所知的人,也可以從這本書快速入門。

寫給大家看的設(shè)計(jì)書強(qiáng)調(diào)實(shí)踐,即如何做出好的設(shè)計(jì);認(rèn)知與設(shè)計(jì):理解UI設(shè)計(jì)準(zhǔn)則強(qiáng)調(diào)理論,即為什么我們會接受這樣的設(shè)計(jì)而反感那樣的設(shè)計(jì)。如果你想要搞清楚設(shè)計(jì)背后的心理學(xué)知識,但又不想閱讀大部頭的心理學(xué)著作,那么認(rèn)知與設(shè)計(jì)是你的首選。
延伸閱讀:
GUI設(shè)計(jì)禁忌 2.0:這本書指出了GUI設(shè)計(jì)的原則和常見誤區(qū),然后通過具體范例指出了如何避免這些誤區(qū)。如果你的工作涉及到用戶界面,那么這本書會為你減少很多麻煩;
界面設(shè)計(jì)模式(第2版):這本書將用戶界面中的常見元素/行為組織成彼此關(guān)聯(lián)的模式,以便讀者理解并舉一反三,從而將其運(yùn)用到自己的應(yīng)用中;
移動應(yīng)用UI設(shè)計(jì)模式:類似于界面設(shè)計(jì)模式,但面向移動平臺。它給出了iOS,Android,以及Windows Phones上常用的90余種界面設(shè)計(jì)模式,從而使得你不必把這些平臺的應(yīng)用挨個(gè)玩一遍也可以掌握各個(gè)平臺的設(shè)計(jì)精髓。如果你主攻Android平臺,那么Android應(yīng)用UI設(shè)計(jì)模式會是更好的選擇;
配色設(shè)計(jì)原理和版式設(shè)計(jì)原理:如果你讀過寫給大家看的設(shè)計(jì)書之后想繼續(xù)深入學(xué)習(xí)設(shè)計(jì),這兩本書是不錯(cuò)的起點(diǎn)。
9. 交互設(shè)計(jì)

書如其名,通用設(shè)計(jì)法則給出了重要的125個(gè)設(shè)計(jì)原則,并用簡練的語言和范例展示了這些原則的實(shí)際應(yīng)用。每個(gè)原則都有對應(yīng)的參考文獻(xiàn),以便讀者進(jìn)一步學(xué)習(xí)。我之所以推薦這本書,是因?yàn)椋?. 程序員需要對設(shè)計(jì)有全面的認(rèn)識;2. 程序員并不需要知道這些設(shè)計(jì)原則是怎么來的,知道怎么用即可。這本書很好的滿足了這兩個(gè)要求。

交互設(shè)計(jì)精髓是交互設(shè)計(jì)領(lǐng)域的圣經(jīng)級著作。交互設(shè)計(jì)專家(以及VB之父)Alan Cooper在這本書中詳細(xì)介紹了交互設(shè)計(jì)的原則,流程,以及方法,然后通過各種范例(主要來自桌面系統(tǒng))展示了如何應(yīng)用這些原則。
需要注意的是這本書的第4版已經(jīng)出版,它在第三版的基礎(chǔ)上增加了移動設(shè)計(jì)以及Web設(shè)計(jì)等內(nèi)容。
延伸閱讀:
The Design of Everyday Things:交互設(shè)計(jì)領(lǐng)域的另一本經(jīng)典之作,它通過解讀人類行動背后的心理活動,展示了設(shè)計(jì)問題的根源,并給出了一系列方法用以解決設(shè)計(jì)問題(需要注意,盡管這本書有中譯版,但中譯版對應(yīng)的是02年的舊版,而非13年的新版);
The Inmates Are Running the Asylum:Alan Cooper的另一本經(jīng)典,這本書非常辛辣的指出讓不具備人機(jī)交互知識的程序員直接編寫面向用戶的軟件就像讓精神病人管理瘋?cè)嗽海═he Inmates Are Running the Asylum),然后給出了一套交互設(shè)計(jì)流程以挽救這個(gè)局面;
簡約至上:交互式設(shè)計(jì)四策略:專注于把產(chǎn)品變的更加簡單易用。作者通過刪除,組織,隱藏,和轉(zhuǎn)移這四個(gè)策略,展示了如何創(chuàng)造出簡約優(yōu)質(zhì)的用戶體驗(yàn)。
個(gè)人成長
1. 職業(yè)規(guī)劃

軟件開發(fā)者路線圖是一本優(yōu)秀且實(shí)用的程序員職業(yè)規(guī)劃手冊。這本書由若干個(gè)模式組成,每個(gè)模式都對應(yīng)于程序員職業(yè)生涯中的特定階段。通過這本書,讀者可以很方便的找到自己目前所處的模式(階段),應(yīng)該做什么,目標(biāo)是什么,以及下一個(gè)模式(階段)會是什么。如果你時(shí)常感到迷茫,那么請閱讀這本路線圖,找到自己的位置,確定接下來的方向。
延伸閱讀:
卡耐基全集:非常著名的為人處世書籍。很多人把這本書歸類到成功學(xué),但我并不這么認(rèn)為——在我看來,這本書教的更多的是如何成為一個(gè)讓大家喜歡的人。作為天天和機(jī)器打交道的程序員,這套書會幫助我們與人打交道;
沃頓商學(xué)院最受歡迎的談判課:這本書不是教你去談判,而是教你通過談判(Negotiation)去得到更多(Getting more,這也是這本書的原書書名)。小到買菜砍價(jià),大到爭取項(xiàng)目,這本書中的談判原則會讓你收益良多;
程序員健康指南:作為長期與計(jì)算機(jī)打交道的職業(yè),程序員往往會受到各式各樣疾病的困擾,這本書正是為了解決這個(gè)問題而出現(xiàn):它從改善工作環(huán)境,調(diào)整飲食結(jié)構(gòu),預(yù)防頭痛眼痛,以及進(jìn)行室內(nèi)/室外鍛煉等方面出發(fā),給出了一套全面且可行的程序員健康改善計(jì)劃,以幫助程序員打造健康的身體。
2. 思維方式

作為程序員,我們需要不斷地學(xué)習(xí)——既要學(xué)習(xí)新技術(shù),也要學(xué)習(xí)如何解決各種領(lǐng)域的問題。為了提升學(xué)習(xí)效率,我們需要學(xué)習(xí)如何學(xué)習(xí)。程序員的思維修煉正是這樣一本講如何學(xué)習(xí)的書,它集合了認(rèn)知科學(xué),神經(jīng)學(xué),以及行為理論的最新研究成果,并系統(tǒng)的介紹了大腦的工作機(jī)制。通過這本書,你將學(xué)會如何高效的使用自己的大腦,從而提高思考能力,改善學(xué)習(xí)效率。

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.
為什么同樣資質(zhì)的人,大多數(shù)人會碌碌無為,而只有極少數(shù)能做到登峰造極?如何在領(lǐng)域內(nèi)做到頂尖?如何克服通往頂尖之路上的重重險(xiǎn)阻?如何把事情做到最好回答了這些問題,并極具哲理的指出登峰造極并不是結(jié)果,而是一段永不停止的旅程。閱讀這本書不會讓你立刻脫胎換骨,但它會指引你走向正確的道路——通往登峰造極之路。
延伸閱讀:
怎樣解題:數(shù)學(xué)思維的新方法:不要被標(biāo)題中的“數(shù)學(xué)思維”嚇到,它并不僅僅只是一本數(shù)學(xué)解題書,它所提出的四步解題法(理解題目->擬定方案->執(zhí)行計(jì)劃->總結(jié)反思)適用于任何領(lǐng)域;
暗時(shí)間:劉未鵬所寫的關(guān)于學(xué)習(xí)思維方法的文章集,既包含了他對學(xué)習(xí)方法的思考,也包含了大量進(jìn)一步閱讀的資源;
批判性思維:帶你走出思維的誤區(qū):這本書系統(tǒng)的分析了人類思維的常見誤區(qū),并針對各個(gè)誤區(qū)給出了解決方案,從而幫助程序員養(yǎng)成嚴(yán)謹(jǐn)正確的思考方式;
Conceptual Blockbusting: A Guide to Better Ideas:與批判性思維相反,這本書專注于創(chuàng)造性思維(Creative Thinking),它分析了阻礙創(chuàng)造性思維的常見思維障礙(Blockbuster)以及這些思維障礙背后的成因,并給出了各種方法以破除這些障礙。
3. 求職面試

知己知彼,百戰(zhàn)不殆。金領(lǐng)簡歷:敲開蘋果微軟谷歌的大門是程序員求職的必讀書籍,它覆蓋了程序員求職的方方面面:從開始準(zhǔn)備到編寫簡歷,從技術(shù)面試到薪酬談判。由于該書作者曾在Google,微軟,和蘋果任職并進(jìn)行過技術(shù)招聘,因此這本書的內(nèi)容非常實(shí)用。
順便吐個(gè)槽:這本書翻譯的還不錯(cuò),但我實(shí)在無法理解封面上的“進(jìn)入頂級科技公司的葵花寶典”這段文字——找個(gè)工作而已,用不著切JJ這么兇殘吧。-_-#

同樣是來自金領(lǐng)簡歷作者的作品,程序員面試金典(第5版)專注于技術(shù)面試題,它既包含了IT企業(yè)(諸如微軟,Google,和蘋果)的面試流程以及如何準(zhǔn)備技術(shù)面試,也包含了大量(超過200道)常見技術(shù)面試題題目以及解題思路。無論你打算進(jìn)入國內(nèi)企業(yè)還是外企,你都應(yīng)該把這本書的題目練一遍,以找到技術(shù)面試的感覺(我在求職時(shí)就曾經(jīng)專門搞了一塊白板,然后每二十分鐘一道題的練習(xí),效果很不錯(cuò))。
延伸閱讀:
編程之美:微軟技術(shù)面試心得:恐怕是國內(nèi)技術(shù)面試第一書,這本書里面的多數(shù)題目都曾經(jīng)是國內(nèi)IT企業(yè)面試的必問題目。這本書的缺點(diǎn)是它太舊而且被用濫了(以至于一些企業(yè)開始避免使用這本書上的題目)——但你可以把它當(dāng)成一本算法趣題來讀;
劍指Offer:名企面試官精講典型編程題:相對于東拼西湊的XX面試寶典,劍指Offer是一本少見的國產(chǎn)精品技術(shù)面試書籍,盡管這本書的技術(shù)面試題目不多(60余道),但作者為大多數(shù)題目都給出了不同方式的解法,并分析了這些解法之間的優(yōu)劣,此外作者還以面試官的視角分析了技術(shù)面試的各個(gè)環(huán)節(jié),從而幫助讀者把握技術(shù)面試;
人人都有好工作:IT行業(yè)求職面試必讀:可以把它看做金領(lǐng)簡歷的補(bǔ)充閱讀——這本書的特點(diǎn)在于它給出了非常詳細(xì)的簡歷/求職信/電子郵件編寫技巧,而這正是不少國內(nèi)程序員所缺乏的。
4. 英語寫作

詞匯量決定閱讀能力,語法決定寫作能力。計(jì)算機(jī)專業(yè)詞匯并不多,但精確性非常重要,因此每個(gè)程序員都應(yīng)具備良好的英語語法,但程序員并不需要過于專業(yè)的英語語法——掌握常用語法并把它用對就可以。The Only Grammar Book You'll Ever Need正好可以滿足這個(gè)需求,盡管它篇幅不大(不足200頁),卻覆蓋了英語中的關(guān)鍵語法以及常見錯(cuò)誤。把這本書讀兩遍,它會大幅度提高你的英語寫作能力。

既是最暢銷的英語寫作書籍,也是計(jì)算機(jī)書籍中引用最多的非計(jì)算機(jī)書籍。風(fēng)格的要素用極其簡練的語言講述了如何進(jìn)行嚴(yán)肅,精確,清楚的英語寫作。從這本書中,你不僅可以學(xué)到英語寫作,更可以學(xué)到一種嚴(yán)謹(jǐn)至簡的處事態(tài)度,而這正是專業(yè)開發(fā)所必需的。
延伸閱讀:
牛津英語用法指南(第3版):全面且權(quán)威的英語用法指南,它覆蓋語法,詞匯,發(fā)音,以及修辭等方面,并兼顧口語和書面語,以幫助讀者掌握合理的英語用法(Proper English Usage)。不要被這本書的篇幅(1000多頁)嚇到——原書并沒有這么厚,因?yàn)檫@本書被翻譯成中文但又得保留原有的英文內(nèi)容,所以它的篇幅幾乎翻了一倍??紤]到這本書使用的詞匯都很基礎(chǔ),所以我認(rèn)為具有英語基礎(chǔ)的讀者直接閱讀原版(Practical English Usage)會更合適;
寫作法寶:非虛構(gòu)寫作指南(30周年紀(jì)念版):詳盡的非虛構(gòu)(Non-Fiction)寫作指南,無論你要寫地方,技術(shù),商務(wù),運(yùn)動,藝術(shù),還是自傳,你都可以從這本書中找到珍貴的建議;
中式英語之鑒:中國人使用英語最大的問題就是會把中式思維摻雜其中,從而形成啰里啰嗦不倫不類的中式英語(Chinglish)。中式英語之鑒系統(tǒng)的探討了中式英語以及其成因,然后根據(jù)成因?qū)χ惺接⒄Z進(jìn)行歸類,并對每個(gè)類別給出了大量的實(shí)際案例以及修改建議。如果你想擺脫中式英語,那么這本書是絕好的起點(diǎn)。
如何使用這個(gè)書單
學(xué)而不思則罔,思而不學(xué)則殆。
不憤不啟,不悱不發(fā)。舉一隅不以三隅反,則不復(fù)也。
不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之,學(xué)至于行之而止矣。
來自他人的書單
它山之石,可以攻玉。我在本文最后給出其他中外優(yōu)秀程序員的書單,以便參考&補(bǔ)充。
劉未鵬(暗時(shí)間作者)
以下同一條目下用“/”隔開的表示任選,當(dāng)然也可以都讀。
編碼:隱匿在計(jì)算機(jī)軟硬件背后的語言
深入理解計(jì)算機(jī)系統(tǒng) / Windows核心編程 / 程序員的自我修養(yǎng)
代碼大全 / 程序員修煉之道
編程珠璣 / 算法概論 / 算法設(shè)計(jì) / 編程之美
C程序設(shè)計(jì)語言
C++程序設(shè)計(jì)語言 / C++程序設(shè)計(jì)原理與實(shí)踐 / Accelerated C++
計(jì)算機(jī)程序的構(gòu)造與解釋
代碼整潔之道 / 實(shí)現(xiàn)模式
設(shè)計(jì)模式 / 敏捷軟件開發(fā)(原則模式與實(shí)踐)
10. 重構(gòu)
云風(fēng)(中國游戲編程先行者,前網(wǎng)易游戲部門資深程序員,簡悅創(chuàng)始人)
C++編程思想
Effective C++
深度探索C++對象模型
C++語言的設(shè)計(jì)與演化
C專家編程
C陷阱與缺陷
C語言接口與實(shí)現(xiàn)
Lua程序設(shè)計(jì)
鏈接器和加載器
10. COM本質(zhì)論
11. Windows核心編程
12. 深入解析Windows操作系統(tǒng)
13. 程序員修煉之道
14. 代碼大全
15. UNIX編程藝術(shù)
16. 設(shè)計(jì)模式
17. 代碼優(yōu)化:有效使用內(nèi)存
18. 深入理解計(jì)算機(jī)系統(tǒng)
19. 深入理解LINUX內(nèi)核
20. TCP/IP詳解
洪強(qiáng)寧(豆瓣技術(shù)總監(jiān))
代碼大全
人月神話
編碼:隱匿在計(jì)算機(jī)軟硬件背后的語言
計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)
程序員修煉之道
設(shè)計(jì)模式
計(jì)算機(jī)程序的構(gòu)造與解釋
重構(gòu)
C程序設(shè)計(jì)語言
10. 算法導(dǎo)論
陳皓(CoolShell博主)
點(diǎn)石成金:訪客至上的Web和移動可用性設(shè)計(jì)秘笈
重來:更為簡單有效的商業(yè)思維
黑客與畫家
清醒思考的藝術(shù)
TCP/IP詳解
UNIX環(huán)境高級編程
UNIX網(wǎng)絡(luò)編程
張崢(微軟亞洲研究院副院長)
算法概論
Data Structure and Algorithms
C程序設(shè)計(jì)語言
UNIX操作系統(tǒng)設(shè)計(jì)
編譯原理
計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法
當(dāng)下的幸福
異類:不一樣的成功啟示錄
Jeff Atwood(Stackoverflow聯(lián)合創(chuàng)始人)
代碼大全
人月神話
點(diǎn)石成金:訪客至上的Web和移動可用性設(shè)計(jì)秘笈
快速軟件開發(fā)
人件
The Design of Everyday Things
交互設(shè)計(jì)精髓
The Inmates Are Running the Asylum
GUI設(shè)計(jì)禁忌 2.0
10. 編程珠璣
11. 程序員修煉之道
12. 精通正則表達(dá)式
Joel Spolsky(Stackoverflow聯(lián)合創(chuàng)始人)
軟件項(xiàng)目管理
人件
人月神話
快速軟件開發(fā)
編程技藝
代碼大全
程序員修煉之道
編程哲學(xué)
禪與摩托車維修藝術(shù)
哥德爾、艾舍爾、巴赫:集異璧之大成
建筑模式語言
界面設(shè)計(jì)
點(diǎn)石成金:訪客至上的Web和移動可用性設(shè)計(jì)秘笈
交互設(shè)計(jì)精髓
The Design of Everyday Things
資本運(yùn)作
漫步華爾街
圖形設(shè)計(jì)
寫給大家看的設(shè)計(jì)書
思維方式
影響力
Helplessness On Depression, Development and Death
編程入門
編碼:隱匿在計(jì)算機(jī)軟硬件背后的語言
C程序設(shè)計(jì)語言
DHH(Ruby on Rails創(chuàng)始人)
Smalltalk Best Practice Patterns
重構(gòu)
企業(yè)應(yīng)用架構(gòu)模式
領(lǐng)域驅(qū)動設(shè)計(jì)
你的燈亮著嗎?發(fā)現(xiàn)問題的真正所在
參考
怎樣花兩年時(shí)間去面試一個(gè)人
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
原文包涵大量鏈接,微信不方便給出,請戳左下角【閱讀原文】跳轉(zhuǎn)到原始鏈接。