1.《Code Complete 2》
就是它了!這就是我認為首屈一指值得閱讀的書(請恕我妄言),如果你要成為一個優(yōu)秀的軟件工程師的話。它被廣泛認為是最好的實用性編程指南之一,Steve McConnell最初的《Code Complete》在過去的10多年時間里,一直在幫助開發(fā)人員編寫更好的軟件。現(xiàn)在,這部經典書籍已全面更新,修改成了前沿的實踐方法——以及數(shù)以百計的新的代碼示例——修訂了軟件結構的藝術和科學。從研究、學術界和日常商業(yè)實踐中捕獲知識體系,McConnell將最有效的技術和必須知道的原則總結成清晰又務實的指導。無論你的經驗水平,開發(fā)環(huán)境,還有項目規(guī)模如何,這本書都可以啟迪和激發(fā)你的思考,幫助你打造最優(yōu)質的代碼。
2.《Pragmatic Programmer》
這本書寫于1999年,但是它的概念是我們以一種務實的態(tài)度去開發(fā)復雜系統(tǒng)的基礎。程序員也是工匠,他們被訓練使用一組特定的工具(編輯器,對象管理,版本跟蹤器)生成某種可在一定環(huán)境中(硬件組件上的操作系統(tǒng))工作的產品(程序)。和任何其他工藝一樣,計算機編程也孕育出了智慧,但其中的大多數(shù)智慧是不能從大學或認證課程中學到的。大多數(shù)程序員只能通過獨立的試驗,時間一點點的積累,才能掌握這些所謂的技巧。在《Pragmatic Programmer》一書中,Andrew Hunt和David Thomas編纂了很多他們在分別作為軟件設計者和代碼編寫者的職業(yè)生涯中發(fā)現(xiàn)的真理。
作者的一些實用性建議非常具體,而且顯然很易于實施。他們建議讀者去學習,例如一個文本編輯器,然后在各種情況下使用它。他們還建議使用版本跟蹤軟件——即使是對最小型的項目,學習正則表達式語法和文本操作語言。書中還有其他許多也非常有價值的建議。在調試部分,作者指出:“如果你看到蹄印的話,應該考慮馬這個范圍,而不是斑馬!币簿褪钦f,要懷疑一切,然后從最顯眼的地方尋找問題。還有關于預估時間和費用,以及將集成測試納入到開發(fā)進程的建議。《Pragmatic Programmer》讓人愛不釋手的還有兩個原因:它會更清晰地梳理你自己積累的智慧,它還會給你介紹你還沒考慮到的工作方法。
3.《Structure and Interpretation of Computer Programs》
以一種對解決問題和編程技術分析和嚴謹?shù)膽B(tài)度,這本書面向于工程!禨tructure and Interpretation of Computer Programs》強調通過不同方式來發(fā)揮核心作用,以處理計算模型中的時間。其獨特的方式使得它非常適合于計算機科學課程,以及編程語言和程序設計的入門。這本書進一步解釋了4個最著名的編程語言范式——命令式編程,面向對象編程,基于邏輯編程和應用性編程。
4.《Introduction to Algorithms》
這必須是理解和使用算法(將在軟件開發(fā)中涉及很多)的最佳書籍。有些關于算法的書雖然嚴謹,但不全面——還有一些雖然涉及面廣,但卻缺乏嚴謹性!禝ntroduction to Algorithms》獨特地結合了嚴謹性和全面性。這本書涵蓋了廣泛又深入的算法,使得書中的設計和分析能夠面向所有層次的閱讀人員。每個章節(jié)相對獨立,可看作是一個學習單元。算法用英語和可讀的偽代碼描述。它使用初級基本的解釋,并不犧牲覆蓋的深度和材料的嚴謹性。第一版不僅廣泛成為了世界各地高校的教材,還成為了專業(yè)人士的標準參考書。第二版新增了算法,概率分析,隨機算法,線性規(guī)劃的章節(jié)。
5.《Clean Code》
《Clean Code》,作者Robert C. Martin,分為三個部分。第一部分介紹原則、模式和編寫干凈代碼的實踐方法。第二部分包括若干個復雜度漸進的研究案例。每個案例研究就是一個清潔代碼的練習,也是通過解決代碼庫中的一些問題讓代碼變得健全、高效的練習。第三部分是決定性的一個部分:每個單獨的章節(jié)在創(chuàng)建案例研究的時候包含了一系列啟發(fā)式的教學法。最后得到了描述我們在編寫、閱讀和清理代碼時的思考方式的知識庫。
6.《Refactoring》Martin Fowler寫的《Refactoring》
主要關于改進現(xiàn)有代碼的設計。這是一個改變軟件系統(tǒng)而不改變代碼的外部行為,卻能提高它內部結構的過程。通過重構,你甚至可以將一個糟糕的設計重新制作為一個很好的設計。這本書對重構原則進行了深入探討,包括在哪里發(fā)現(xiàn)重構的機會,以及如何建立所需的測試。另外還有一個目錄有40多個已經用細節(jié)證明的重構,這些細節(jié)包括何時以及為什么要使用重構,逐步說明如何實現(xiàn)重構,并舉例說明重構是如何工作的。這本書用Java作為其主要語言而寫,但其中的思路適用于任何OO語言。
7.《The Art of Computer Programming》
這又是一部經典之作。由著名的計算機科學家教授Donald Knuth編著,并得到行業(yè)內眾多頂尖程序員的一致好評。甚至連Bill Gates也對這本書贊譽有加:
“如果你認為你是一個真正優(yōu)秀的程序員……那么就去讀[Knuth的]《The Art of Computer Programming》吧……如果你能讀懂整本書,那么請一定要給我發(fā)簡歷。”
這本書以基本的編程概念和技術開頭,然后聚焦于更具體的信息結構——計算機內的信息表示,數(shù)據(jù)元素之間的結構關系,以及如何有效地處理這些問題。此外還提供了基本的應用程序給仿真模擬,數(shù)值方法,符號計算,軟件和系統(tǒng)設計。
8.《CODE: The Hidden Language of Computer Hardware and Software》
這本書清理了創(chuàng)建和開發(fā)復雜系統(tǒng)的大量“魔法”,F(xiàn)在的抽象是如此之多,以致于一些低層次的細節(jié)反而不為開發(fā)人員所知。雖然你可能不會發(fā)現(xiàn)自己在實踐中時刻使用著這本書——但我相信,知道自己正在構建什么以及整個編排的工作原理是什么,總歸是一個好主意。當你需要打開“黑匣子”,深入軟件或硬件來解決一個討厭的bug的時候,它就能派上用場了。Charles Petzold寫的《CODE: The Hidden Language of Computer Hardware and Software》梳理了許多編程概念——從數(shù)字系統(tǒng)的十進制,八進制,二進制到高級語言。這本書介紹了基于包的通信協(xié)議和TCP。許多章節(jié)講解了有關硬件的概念,有五個章節(jié)涉及到了軟件和教導操作系統(tǒng),浮點運算和圖形用戶界面。
9.《Programming Pearls第二版》
這本書和這書單上的其他書籍略有不同。我想說這本書可以幫助一個人“像一個程序員一樣思考”!禤rogramming Pearls》是先前發(fā)表在“Communications of the ACM(美國計算機學會通訊)”的15篇專欄的一個綱要。這些專欄涵蓋了廣泛與編程相關的主題:從需求收集到性能優(yōu)化。重點關注編碼技術和算法。
每個專欄被組織為一個章節(jié)。章節(jié)通常以一個實際問題的情景呈現(xiàn)開頭。然后,提出各種解決方案和相應的經驗教訓。寫作風格清晰明快。
《Programming Pearls》不是教授新編程概念的尋常書籍。雖然它包含了優(yōu)秀,有時甚至是相當新奇的想法,但這本書的目的不是教你一些新的東西,而是幫助你成為一個更好的問題解決者。
10.《Design Patterns》
如果你打算成為一名架構師或系統(tǒng)的設計人員,那么你很有可能會被要求閱讀這本書。這是一本被譽為有史以來最偉大的有關于軟件開發(fā)的書,詳細講述了許多不同的設計模式,這么多年來一直在幫助軟件工程師避免和處理行業(yè)面臨的常見問題。遵照這本書的策略可以助你打造更高品質,靈活和可維護的軟件。傳說中的“四人幫”就是這本書,因為它是由四個著名的作者共同編寫的。
成都網(wǎng)站建設還要指出的是,此書單并不詳盡。每年都會有許多偉大的著作問世。這些只是對程序員和程序員的職業(yè)生涯影響最大的書籍。此外,這些書和使用什么語言無關,可以應用于任何軟件語言。