軟件工程這一領域極速發展,日新月異,因此找到一本好書,實屬不易,特別是找到一本與某一特定編程語言相關的書目,更為艱難。 但仍然有一些書籍歷久彌新,比如那些探討元主題、設計模式或者一般思維模式的軟件工程類書籍。
《代碼大全(第二版)》(Code Complete)
《代碼大全(第二版):軟件構建之實踐指南》(Code Complete: a Practical Handbook of Software Construction, 2ndEdition)出自著名IT暢銷書作者史蒂夫·邁克康奈爾(SteveMcConnell)之手,完全稱得上是“有生之年”系列圖書之一,因為幾乎每一個程序員都曾拜讀過此書。
此書對軟件構建進行了全面分析,邏輯嚴密,書中涉及的話題主要涵蓋軟件設計、編碼、調試以及測試等。
因此,對於有着一至三年專業編程經驗的工程師而言,這本書很值得閱讀,並從中受益良多。即使是軟件編程的初學者也可以從這本書中獲得更多的自信,以面對未來的軟件編程工作。
指點迷津:軟件開發人員必須要有能力處理復雜事物,編寫易於維護的代碼,並且手不釋卷——這不僅僅是為了自己,也是為了他人。
《程序員面試金典》(Cracking the Coding Interview)
無論參加編程面試是出於個人興趣還是職業需求,《程序員面試金典:189道知名科技公司編程面試真題及解答》(Cracking the Coding Interview: 189 Programming Questions &Solution)都是一本非常值得推薦的編程類書籍。本書作者蓋爾·拉克曼·麥克道爾(GayleLaakmann McDowell)是一位經驗豐富的軟件工程師,不僅親身參與過編程面試,而且還曾擔任過面試官。在這本書中,她幫助面試者尋找問題背后的細枝末節,並將問題進行拆分,從而更好地理解各個概念。
此外,作者還在書中講解了189道知名企業的編程面試真題及答案,為即將參加編程面試的人們助力。
《代碼整潔之道》(Clean Code)
“Bob大叔”羅伯特·馬丁(RobertC. Martin)的著作《代碼整潔之道:整潔代碼的敏捷實踐方法》(Clean Code: A Handbook of Agile Software Craftsmanship),是全世界最受追捧的編程書目之一。作者希望通過此書來教授軟件工程師如何編寫整潔的代碼。在此書中,作者通過許多實例講解來告訴人們如何重構現有代碼,從而使其更加易於閱讀與維護。但值得注意的是,本書主要針對的是Java編程語言。雖然本書所涉及的某些模式與方法也同樣適用於一般編程或其它編程語言,但其主要受眾仍然是Java程序員。
另外同樣值得注意的一點是,由於此書著於2009年,且受限於現有的工具與IDE,因此書中某些內容已經過時,例如代碼格式部分。但總體來說,這本書仍然值得拜讀。
《重構(第二版)》(Refactoring)
《重構(第二版):改善既有代碼的設計》(Refactoring: Improving the Design of Existing Code, 2nd Edition)的作者是世界軟件開發大師馬丁·福勒(Martin Fowler),正如在20前的第一版中一樣,在這第二版中作者也首先向公眾闡述了何為“重構”。在此書中,作者總結了人們可能會有的疑問,並一一予以解答,具體如下:
· 為什么應該重構代碼?
· 如何辨別哪些代碼需要重構?
· 如何成功重構代碼?
在閱讀此書后,將能更好地理解重構的過程及其一般原則,並將其快速應用於自己的代碼庫。另外,此書的讀者可能還會額外獲贈一個靈敏的“狗鼻子”,當自己的隊友寫的代碼亟需重構時,這個鼻子就能立馬聞出來並提醒對方。
《Head First設計模式》(Head First Design Patterns)
編程著作《Head First設計模式:重視大腦的學習指南》(Head First Design Patterns: A Brain-Friendly Guide)由埃里克·弗里曼(Eric Freeman)、伯特·貝茨(Bert Bates)、凱西·塞拉(Kathy Sierra)與伊麗莎白·羅伯森(Elisabeth Robson)合作完成,主要教授人們設計模式與方法,以供其他開發人員用於創建可重復使用且靈活度高的功能性軟件。在該書中,有許多高質量的可視化圖表,通過這些圖表,讀者們能夠更加容易地學習新概念。
對於想要了解工廠、單例或者依賴注入等模式的人而言,這本書絕對是不二選擇。由於本書所使用的案例均由Java寫成,因此讀者最好能對該語言或其它面向對象的編程語言有所了解。
《企業應用架構模式》(Patterns of Enterprise Application Architecture)
《企業應用架構模式》是馬丁·福勒的又一力作,主要旨在探討企業應用發展的實踐。在本書中,前一部分主要是關於如何開發企業應用的教程;之后,作者又提供了40多種模式,用以解決在創建企業應用過程中可能會遇到的常見問題。此外,書中還包含許多UML圖以及Java代碼或C#代碼示例。
通過閱讀此書,人們將能夠對企業應用進行分層,獲悉組織業務邏輯的主要方法,使用MVC模式來組織Web應用,並且在多事務運行時處理並發數據。
然而,這本書正逐漸淘汰於時代無情的洪流中,因此許多現代術語都未及時更新,例如REST、雲端、JSON等。盡管如此,此書仍然不啻為一本好書,但在真正閱讀時要注意取其所長,棄其所短。
《修改代碼的藝術》(Working Effectively with Legacy Code)
《修改代碼的藝術》是世界級計算機專家邁克爾·費瑟(Michael Feathers)的經典之作,作者在書中提供了許多策略用於處理未經測試的大型遺留代碼庫。在這時,或許許多人都會心生疑惑:已經到2020年了,人們一直都有整潔且易於維護的代碼和微服務,難道處理遺留代碼還算得上什么大問題嗎?實際上,事情絕非如此簡單。目前對於大部分公司而言,遺留代碼問題仍然是一大挑戰。
通過閱讀此書,將能夠理解修改軟件的一般機制,例如添加特性、修正缺陷、優化性能、改進設計等。除此之外,讀者也能學會如何准備遺留代碼的測試,以及如何確定哪些代碼需要修改。
在本書中,作者還提供了包含Java、C++、C和C#的示例,並詳細介紹了如何處理非面向對象的遺留代碼。
《代碼整潔之道:程序員的職業素養》
(The Clean Coder)《代碼整潔之道:程序員的職業素養》(The Clean Coder: A Code of Conduct for Professional Programmers)是“Bob大叔”的另一著作,書中闡述了軟件工藝的技術、原理、工具和實踐,並且提供了一些關於估算、編碼、重構與測試的實用建議。
在閱讀本書后,程序員們將能夠更好地處理矛盾,緩解緊迫的日程表,以及應對不近人情的上司。此外,他們也能夠學會如何高效管理時間,長期應對工作壓力,以及避免身體或精神上的崩潰。最后,讀者也能從這本書中學會如何做到流暢編碼,以及如何在開發人員與團隊之間培養一種合作共贏的良好氛圍。
雖然此書在業界聲譽頗高,但筆者自覺其並非金科玉律。例如,書中包含許多未經證實的事件與假定情況,並且常會由此得出結論稱,軟件開發人員最終要為自己的工作全權負責。為此,書中竟然提出了如下建議:開發人員編寫的代碼如果出了問題,則由該開發人員對因此錯誤而受損的公司進行經濟補償。
因此建議,閱讀此書時注意仔細甄別,披沙揀金。
《算法導論(第三版)》(Introduction to Algorithms)
《算法導論(第三版)》由托馬斯·科爾曼(Thomas H. Cormen)、查爾斯·雷瑟爾森(Charles E.Leiserson)、羅納德·李維斯特(Ronald L. Rivest)與克利福德·斯坦(Clifford Stein)合作編撰而成,被譽為“計算機算法的聖經”,可用於指導各種算法。《算法導論》一書所涵蓋的內容包羅萬象,並且受眾廣泛,無論是“菜鳥”還是“老司機”皆可入坑。此外,書中措辭言簡意賅,涵蓋主題豐富多樣。然而,此書內容偏復雜,因此不易消化。
具體來說,書中涉及的主題包括數據結構、圖論、計算幾何學、快速算法,以及用於處理復雜任務的多項式時間算法等等。雖然書中還包含一些偽代碼示例,但它依舊是一本經典的理論著作。
《程序員修煉之道》(The Pragmatic Programmer)
無論是在技術上還是專業領域,《程序員修煉之道》都熱心地建言獻策。
即使是在現今2020年,該書也仍舊與時俱進,尤其是最新修訂的“20周年典藏版”。書中,作者還談論了諸多話題以探討一個當代程序員應具備哪些素質,比如個人責任感、專業技能以及職業發展。
通過閱讀此書,人們將能夠獲知持續學習的定義及其重要性,編寫靈活、動態、可適應的代碼,解決並發代碼問題,防范安全漏洞,以及進行有效的測試等等。
因此,如果必須推薦一本書,那么《程序員修煉之道》必定是首選。