12本最具影響力的程式設計師書籍

2016-01-01    分類:程式設計師人生、首頁精華10人評論發表於2016-01-01

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

很多人問我這個問題,尤其是那些剛開啟軟體工程生涯的同事和朋友。

要成為一個更好的開發人員,我應該讀哪些書?我真的需要讀書嗎?

這是一個很值得探討的問題,而且也是我在成為軟體工程師之時問了很多導師的一個問題。但問題是,很多人推薦的是不同主題的不同書籍。他們推薦的書在他們看來是偉大的,但沒有人能告訴我,要想成為一個偉大的工程師,我應該閱讀什麼,哪些是重要的、是必讀的書籍。

我從我的導師那兒學到了很多東西,並意識到,我仍然有很多東西需要學習,還有許多不同的書需要閱讀。我決定每個月讀一本專業領域(軟體工程)的書。隨著時間的積累,我總結出了我認為想要成為一個頂級開發人員必須閱讀的書單。

事先宣告——只是閱讀這些書不會讓你成為一個偉大的開發者。你還需要積累多年的工作經驗,並應用這些書中的原則到現實實踐中,並在現實世界中發展你解決問題的能力。

閱讀這些書可以幫助你避免一些常見的陷阱和錯誤,一些開發人員早期經歷的陷阱和犯過的錯誤。我多麼希望在我剛進入軟體領域的時候,就有人向我推薦這些書啊,並且我現在依然很慶幸自己發現並反覆閱讀了這些書!也許你已經在大學讀電腦科學或工程課程的時候讀到過其中的一些書。也許在那個時候,你覺得它們並不重要,但是我可以用我親身經歷來說明我使用和應用了許多來自於這些書的原則。

我還要指出的是,此書單並不詳盡。每年都會有許多偉大的著作問世。這些只是對我和我的職業生涯影響最大的書籍。此外,這些書和使用什麼語言無關,可以應用於任何軟體語言。

好了,讓我們開始介紹這些書吧! (請鼓掌)

(這些都是必不可少的,我將根據它們對我的影響大小從後往前介紹。)

12.《Working Effectively with Legacy Code》

我之所以喜歡這本書,是因為幾乎所有的軟體開發人員,在其職業生涯的某個時刻,往往會不得不支援和工作於遺留系統。在這本書中,Michael Feathers提供了從開始到結束的策略,以便於更有效地工作於未經測試的遺留程式碼庫。本書借鑑了Michael為其著名的Object Mentor專題研討會創作的材料:Michael用於指導的技術,以幫助開發人員,技術管理人員和測試人員掌控遺留系統。

11.《The Mythical Man-Month》

本書是一本經典之作,但最近被修改和更正了。令人驚奇的是這本書仍然與軟體產品開發密切相關。如果你從事軟體的話,這本書是必讀的。這本書最有價值的部分,我相信,是“plan to throw out”原型章節。儘管我們的目標通常是做一個更大,更好,更快,不管它是什麼的東西,但是我們總會構建出一些不得不被廢棄,需要重做的東西。這種情況我親身經歷過很多很多次。因此,關鍵是要plan to throw out(計劃拋棄),這樣你才能適應接下來的情況。如果你夢想第一個產品就ok,那麼你就會有拋棄它們的風險,因為產品的改進和發展是不可避免的。計劃拋棄也有助於通過設定合理的里程碑來達到進度目標。

10.《Design Patterns》

如果你打算成為一名架構師或系統的設計人員,那麼你很有可能會被要求閱讀這本書。這是一本被譽為有史以來最偉大的有關於軟體開發的書,詳細講述了許多不同的設計模式,這麼多年來一直在幫助軟體工程師避免和處理行業面臨的常見問題。遵照這本書的策略可以助你打造更高品質,靈活和可維護的軟體。傳說中的“四人幫”就是這本書,因為它是由四個著名的作者共同編寫的。

9.《Programming Pearls 第二版》

這本書和這書單上的其他書籍略有不同。我想說這本書可以幫助一個人“像一個程式設計師一樣思考”。《Programming Pearls》是先前發表在“Communications of the ACM(美國計算機學會通訊)”的15篇專欄的一個綱要。這些專欄涵蓋了廣泛與程式設計相關的主題:從需求收集到效能優化。重點關注編碼技術和演算法。

每個專欄被組織為一個章節。章節通常以一個實際問題的情景呈現開頭。然後,提出各種解決方案和相應的經驗教訓。寫作風格清晰明快。

《Programming Pearls》不是教授新程式設計概念的尋常書籍。雖然它包含了優秀,有時甚至是相當新奇的想法,但這本書的目的不是教你一些新的東西,而是幫助你成為一個更好的問題解決者。

8.《CODE: The Hidden Language of Computer Hardware and Software》

這本書清理了建立和開發複雜系統的大量“魔法”。現在的抽象是如此之多,以致於一些低層次的細節反而不為開發人員所知。雖然你可能不會發現自己在實踐中時刻使用著這本書——但我相信,知道自己正在構建什麼以及整個編排的工作原理是什麼,總歸是一個好主意。當你需要開啟“黑匣子”,深入軟體或硬體來解決一個討厭的bug的時候,它就能派上用場了。Charles Petzold寫的《CODE: The Hidden Language of Computer Hardware and Software》梳理了許多程式設計概念——從數字系統的十進位制,八進位制,二進位制到高階語言。這本書介紹了基於包的通訊協議和TCP。許多章節講解了有關硬體的概念,有五個章節涉及到了軟體和教導作業系統,浮點運算和圖形使用者介面。

7.《The Art of Computer Programming》

這又是一部經典之作。由著名的電腦科學家教授Donald Knuth編著,並得到行業內眾多頂尖程式設計師的一致好評。甚至連Bill Gates也對這本書讚譽有加:

“如果你認為你是一個真正優秀的程式設計師……那麼就去讀[Knuth的]《The Art of Computer Programming》吧……如果你能讀懂整本書,那麼請一定要給我發簡歷。”

這本書以基本的程式設計概念和技術開頭,然後聚焦於更具體的資訊結構——計算機內的資訊表示,資料元素之間的結構關係,以及如何有效地處理這些問題。此外還提供了基本的應用程式給模擬模擬,數值方法,符號計算,軟體和系統設計。

6.《Refactoring》

Martin Fowler寫的《Refactoring》主要關於改進現有程式碼的設計。這是一個改變軟體系統而不改變程式碼的外部行為,卻能提高它內部結構的過程。通過重構,你甚至可以將一個糟糕的設計重新制作為一個很好的設計。這本書對重構原則進行了深入探討,包括在哪裡發現重構的機會,以及如何建立所需的測試。另外還有一個目錄有40多個已經用細節證明的重構,這些細節包括何時以及為什麼要使用重構,逐步說明如何實現重構,並舉例說明重構是如何工作的。這本書用Java作為其主要語言而寫,但其中的思路適用於任何OO語言。

5.《Clean Code》

《Clean Code》,作者Robert C. Martin,分為三個部分。第一部分介紹原則、模式和編寫乾淨程式碼的實踐方法。第二部分包括若干個複雜度漸進的研究案例。每個案例研究就是一個清潔程式碼的練習,也是通過解決程式碼庫中的一些問題讓程式碼變得健全、高效的練習。第三部分是決定性的一個部分:每個單獨的章節在建立案例研究的時候包含了一系列啟發式的教學法。最後得到了描述我們在編寫、閱讀和清理程式碼時的思考方式的知識庫。

4.《Introduction to Algorithms》

這必須是理解和使用演算法(將在軟體開發中涉及很多)的最佳書籍。有些關於演算法的書雖然嚴謹,但不全面——還有一些雖然涉及面廣,但卻缺乏嚴謹性。《Introduction to Algorithms》獨特地結合了嚴謹性和全面性。這本書涵蓋了廣泛又深入的演算法,使得書中的設計和分析能夠面向所有層次的閱讀人員。每個章節相對獨立,可看作是一個學習單元。演算法用英語和可讀的虛擬碼描述。它使用初級基本的解釋,並不犧牲覆蓋的深度和材料的嚴謹性。第一版不僅廣泛成為了世界各地高校的教材,還成為了專業人士的標準參考書。第二版新增了演算法,概率分析,隨機演算法,線性規劃的章節。

3.《Structure and Interpretation of Computer Programs》

以一種對解決問題和程式設計技術分析和嚴謹的態度,這本書面向於工程。《Structure and Interpretation of Computer Programs》強調通過不同方式來發揮核心作用,以處理計算模型中的時間。其獨特的方式使得它非常適合於電腦科學課程,以及程式語言和程式設計的入門。這本書進一步解釋了4個最著名的程式語言正規化——指令式程式設計,物件導向程式設計,基於邏輯程式設計和應用性程式設計。

2.《Pragmatic Programmer》

這是我最先閱讀的程式設計書籍之一。是我的一個朋友在我就職第一份專業工作的時候推薦給我的。我很慶幸他這麼做了。儘管這本書寫於1999年,但是它的概念是我們以一種務實的態度去開發複雜系統的基礎。程式設計師也是工匠,他們被訓練使用一組特定的工具(編輯器,物件管理,版本跟蹤器)生成某種可在一定環境中(硬體元件上的作業系統)工作的產品(程式)。和任何其他工藝一樣,計算機程式設計也孕育出了智慧,但其中的大多數智慧是不能從大學或認證課程中學到的。大多數程式設計師只能通過獨立的試驗,時間一點點的積累,才能掌握這些所謂的技巧。在《Pragmatic Programmer》一書中,Andrew Hunt和David Thomas編纂了很多他們在分別作為軟體設計者和程式碼編寫者的職業生涯中發現的真理。

作者的一些實用性建議非常具體,而且顯然很易於實施。他們建議讀者去學習,例如一個文字編輯器,然後在各種情況下使用它。他們還建議使用版本跟蹤軟體——即使是對最小型的專案,學習正規表示式語法和文字操作語言。書中還有其他許多也非常有價值的建議。在除錯部分,作者指出:“如果你看到蹄印的話,應該考慮馬這個範圍,而不是斑馬。”也就是說,要懷疑一切,然後從最顯眼的地方尋找問題。還有關於預估時間和費用,以及將整合測試納入到開發程式的建議。《Pragmatic Programmer》讓人愛不釋手的還有兩個原因:它會更清晰地梳理你自己積累的智慧,它還會給你介紹你還沒考慮到的工作方法。

1.《Code Complete 2》

就是它了!這就是我認為首屈一指值得閱讀的書(請恕我妄言),如果你要成為一個優秀的軟體工程師的話。它被廣泛認為是最好的實用性程式設計指南之一,Steve McConnell最初的《Code Complete》在過去的10多年時間裡,一直在幫助開發人員編寫更好的軟體。現在,這部經典書籍已全面更新,修改成了前沿的實踐方法——以及數以百計的新的程式碼示例——修訂了軟體結構的藝術和科學。從研究、學術界和日常商業實踐中捕獲知識體系,McConnell將最有效的技術和必須知道的原則總結成清晰又務實的指導。無論你的經驗水平,開發環境,還有專案規模如何,這本書都可以啟迪和激發你的思考,幫助你打造最優質的程式碼。

不斷地探索技巧和策略,可以幫助你:

  • 最小複雜性和最大創意的設計
  • 獲得協同開發帶來的好處
  • 應用防禦性程式設計技術,以減少和驅趕錯誤
  • 利用機會安全地重構或改進程式碼
  • 使用針對你專案的結構方法
  • 快速有效地除錯問題
  • 早早地正確解決關鍵的結構問題
  • 從頭到尾專案打造高質量的專案

這12本書到此就介紹完畢了!

如果你讀過這些書,或有任何其他軟體開發人員必讀的書籍,歡迎在評論中留言!

譯文連結:http://www.codeceo.com/article/12-influential-books-programmer.html
英文原文:12 Most Influential Books Every Software Engineer Needs to Read
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章