那些影響了幾代程序員的編程書籍
想要成為一名更加優(yōu)秀的程序員,我需要讀書么?需要讀什么書?
其實(shí),在我成為軟件工程師之前,我也問了許多導(dǎo)師這個(gè)問題,也收到了很多建議,我也從這些建議當(dāng)中學(xué)習(xí)到很多東西,漸漸地,我也總結(jié)出來想要成為一名頂級開發(fā)人員,哪些書籍是必讀的。
這些書并不會(huì)立馬使你成為一名出色的程序員,但它們確實(shí)是影響了無數(shù)程序員的書籍,閱讀這些書籍可以幫助開發(fā)人員避免在職業(yè)生涯早期中犯下一些重大錯(cuò)誤。以下就是書單詳情:
1. 《修改代碼的藝術(shù)》
我非常喜歡這本書,因?yàn)槊總€(gè)軟件開發(fā)人員,在他們職業(yè)生涯的某個(gè)階段都需要面對遺留代碼,Michael Feathers提供了詳細(xì)的策略,可以更加有效地處理大量未經(jīng)測試的遺留代碼庫,本書借鑒了Michael為其著名的Object Mentor專題研討會(huì)創(chuàng)作的材料,深入剖析修改遺留代碼的各種方法和策略,從理解遺留代碼、為其編碼測試、重構(gòu)及增加特性等方面給出大量實(shí)用建議,是所有程序開發(fā)人員必讀之作。
2. 《人月神話》
這本書很經(jīng)典,即便出版這么久仍然與軟件產(chǎn)品開發(fā)相關(guān),如果你從事軟件開發(fā)工作,這本書是必讀之書,書中最有價(jià)值的部分,我覺得是【未雨綢繆】,雖然目標(biāo)都是為了創(chuàng)建一個(gè)更好、更大、更強(qiáng)的軟件,但是不得不承認(rèn),許多構(gòu)建的部分必須被丟棄重新構(gòu)建,而且這是很常見的,因此為變更計(jì)劃組織架構(gòu)是非常常見的事。
本書內(nèi)容來自Brooks博士在IBM公司SYSTEM/360家族和OS/360中的項(xiàng)目管理經(jīng)驗(yàn),該項(xiàng)目堪稱軟件開發(fā)項(xiàng)目管理的典范。
3. 《設(shè)計(jì)模式》
如果你打算成為一個(gè)系統(tǒng)的架構(gòu)師,那這本書你可能需要仔細(xì)閱讀一下,這本書被譽(yù)為最偉大的軟件開發(fā)書籍之一,書中介紹了多年來開發(fā)中許多不同的設(shè)計(jì)模式,以此幫助軟件工程師避免和處理一些常見問題,遵循本書的原則,可以幫助你創(chuàng)建更高質(zhì)量、更靈活、更可維護(hù)的軟件。
4. 《編程珠璣》
這本書與名單上的其他書稍有不同??梢哉f這本書幫助一個(gè)人“像程序員一樣思考”?!毒幊讨榄^》是15個(gè)欄目的概要,以前發(fā)表在世界計(jì)算機(jī)界名刊《ACM通訊》,這些專欄涵蓋了與編程相關(guān)的廣泛主題:從需求收集到性能調(diào)優(yōu)。重點(diǎn)主要放在編碼技術(shù)和算法上。
每一欄都被重新組織成一章。章節(jié)通常以提出一個(gè)實(shí)際問題開始。然后提出各種不同的解決方案,寫作風(fēng)格清晰有趣。
《編程珠璣》并不是一本教授新編程概念的普通書籍。雖然它包含了一些很好的,有時(shí)甚至是很新穎的想法,但這本書的目的不是教一些新的東西,而是幫助你成為一個(gè)更好的問題解決者。
5. 《編碼》
這本書清理了創(chuàng)建和開發(fā)復(fù)雜系統(tǒng)的大量障礙?,F(xiàn)在有太多的抽象,以至于開發(fā)人員有時(shí)不知道底層的細(xì)節(jié)。你一定意識不到,其實(shí)你的工作中無時(shí)不刻都在運(yùn)用本書的內(nèi)容,不過我覺得能夠理解自己是在什么基礎(chǔ)上構(gòu)建整個(gè)項(xiàng)目是很有必要的,當(dāng)你想要了解這些知識并深入研究軟件或硬件來修復(fù)Bug的時(shí)候,這本書可能派的上用場,Charles Petzold的這本書介紹了計(jì)算機(jī)工作原理的方方面面,從從十進(jìn)制、八進(jìn)制、二進(jìn)制到高級語言,解釋了基于包的通信協(xié)議和TCP,許多章節(jié)都和硬件有關(guān)。
6. 《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》
這是另一個(gè)經(jīng)典。這是由著名的計(jì)算機(jī)科學(xué)家Donald Knuth教授編寫的,并得到了業(yè)界許多頂級程序員的高度贊揚(yáng)。甚至比爾·蓋茨也說:
如果你認(rèn)為自己真的是一個(gè)很好的程序員……讀讀[Knuth的]《計(jì)算機(jī)編程的藝術(shù)》……如果你能讀完全部內(nèi)容,你絕對要給我發(fā)一份簡歷。
這本書從基本的編程概念和技術(shù)開始,然后更側(cè)重于信息結(jié)構(gòu)——計(jì)算機(jī)內(nèi)部信息的表示、數(shù)據(jù)元素之間的結(jié)構(gòu)關(guān)系以及如何有效地處理它們?;緫?yīng)用于模擬,數(shù)值方法,符號計(jì)算,軟件和系統(tǒng)設(shè)計(jì)。
7. 《重構(gòu)》
Martin Fowler的《重構(gòu)》是關(guān)于改進(jìn)現(xiàn)有代碼的設(shè)計(jì)。它是這樣一種改變軟件系統(tǒng)的過程:它不改變代碼的外部行為,但改進(jìn)其內(nèi)部結(jié)構(gòu)。有了重構(gòu),你甚至可以把一個(gè)糟糕的設(shè)計(jì)改造成一個(gè)良好的設(shè)計(jì)。本書對重構(gòu)的原則進(jìn)行了全面的討論,包括在哪里發(fā)現(xiàn)重構(gòu)的機(jī)會(huì),以及如何設(shè)置所需的測試。還有一個(gè)包含40多種已被證實(shí)的重構(gòu)的目錄,其中詳細(xì)說明了何時(shí)以及為什么要使用這種重構(gòu),如何一步步地實(shí)現(xiàn)它,并舉例說明了它是如何工作的。這本書是用Java作為其主要語言編寫的,但其思想適用于任何OO語言。
8. 《代碼整潔之道》
Bob叔叔撰寫的《代碼整潔之道》共分為三個(gè)部分。第一部分描述了編寫干凈代碼的原則、模式和實(shí)踐。第二部分包括幾個(gè)越來越復(fù)雜的案例研究。每個(gè)案例研究都是一個(gè)清理代碼的練習(xí)——將有一些問題的代碼庫轉(zhuǎn)換為可靠且有效的代碼庫。第三個(gè)部分是味道與啟發(fā),這是一個(gè)單一的章節(jié),包含一系列啟發(fā)和案例研究,最后是一個(gè)知識庫,它描述了我們在編寫、讀取和清理代碼時(shí)的思維方式。
9. 《算法導(dǎo)論》
這必須是理解和使用算法的最好的一本書。有些關(guān)于算法的書雖然嚴(yán)謹(jǐn)?shù)煌暾?,還有一些雖然涉及面廣,但卻不夠嚴(yán)謹(jǐn)?!端惴▽?dǎo)論》兼具了嚴(yán)謹(jǐn)性和全面性。這本書涵蓋了廣泛又深入的算法,使得書中的設(shè)計(jì)和分析適合所有層次的讀者。每個(gè)章節(jié)都相對獨(dú)立,都可以作為一個(gè)學(xué)習(xí)單元。算法用英語和偽代碼描述。講解的方式簡單基礎(chǔ),但有不失內(nèi)容的深度和材料的嚴(yán)謹(jǐn)性。第一版不僅廣泛成為了世界各地高校的教材,還成為了專業(yè)人士的標(biāo)準(zhǔn)參考書。第二版新增了算法,概率分析,隨機(jī)算法,線性規(guī)劃的章節(jié)。
10. 《計(jì)算機(jī)程序的構(gòu)造和解釋》
本書以工程學(xué)為導(dǎo)向,通過分析嚴(yán)謹(jǐn)?shù)姆椒▉斫鉀Q問題和編程技術(shù),強(qiáng)調(diào)通過不同方式來發(fā)揮核心作用,以處理計(jì)算模型中的時(shí)間。它獨(dú)特的方法使它適合介紹計(jì)算機(jī)科學(xué)課程,以及編程語言和程序設(shè)計(jì)。這本書進(jìn)一步解釋了四種最著名的編程語言范例——命令式、面向?qū)ο?、基于邏輯和?yīng)用程序編程。
11. 《程序員修煉之道》
這是我讀的最早的編程書籍之一。雖然這本書是在1999年寫的,但到如今已然有用,程序員是訓(xùn)練有素的工匠,他們使用一組工具(編輯器、對象管理器、版本跟蹤器)來創(chuàng)建某種產(chǎn)品(程序),這些產(chǎn)品(程序)將在某些環(huán)境中運(yùn)行(硬件程序集上的操作系統(tǒng)),與其他任何一門手藝一樣,計(jì)算機(jī)編程產(chǎn)生了大量的智慧,而這些智慧大多不是在大學(xué)或認(rèn)證課程中教授的。在《程序員修煉之道》中
12. 《代碼大全》
如果你想成為一名偉大的軟件工程師,那么這本書是值得一讀的,這本書被廣泛認(rèn)為是編程的最佳實(shí)踐指南之一,Steve McConnell的《代碼大全》幫助開發(fā)人員編寫更好的軟件已經(jīng)超過十年了?,F(xiàn)在這本經(jīng)典的書已經(jīng)完全更新和修訂了,并加入了最前沿的實(shí)踐——以及數(shù)百個(gè)新的代碼樣本——來說明軟件構(gòu)建的藝術(shù)和科學(xué)。
McConnell將最有效的技術(shù)和必須知道的原則整理成清晰、實(shí)用的指導(dǎo)。無論你的經(jīng)驗(yàn)水平、開發(fā)環(huán)境或項(xiàng)目大小如何,本書都將為你提供有用的信息并激發(fā)你的思考——并幫助你構(gòu)建最高質(zhì)量的代碼。