軟件設計經典書籍推薦

 

軟件設計經典書籍推薦

 

design-patterns-book-cover 設計模式最經典的書籍自然是GOF的《設計模式》,但很多人的反應是這本書太難理解了,並不適合初學者閱讀。這話說得在理。一方面,本書使用的C++示例難倒了一大羣Java和.NET的開發人員;另一方面,這本書的風格過於專業化,更偏向於學術論文的風格(事實上,本書的雛形就是來源於GOF中Erich Gamma的博士論文),因此就顯得有些晦澀難懂了。

基本上,本書可以作爲我們參考的標準,是經常查閱的文獻資料。如果你對某個設計模式還有困惑不解之處,閱讀本書,然後細細品味,總會給你一些豁然開朗的感覺。誇張點說,這本書可以說是設計模式的紅寶書,即使人手一冊,也不爲過。說句題外話,我還是喜歡外版書的封面設計,給人一種藝術的美感,讓人看着就有想買的衝動。國內專業書籍的裝幀與設計,做得好的,真的很少。

head_first_design_patterns_cover

 

對於設計模式,這幾年被人廣泛推崇的還是這本Head First Design Patterns,中文版被譯作《設計模式深入淺出》。書名就代表了本書的性質是面向初學者的。而它的著作風格纔是真正引人注目和稱道的。專業書籍的風格通常會存在迥然不同的兩種風格。一種風格深入淺出,趣味盎然,閱讀過程輕鬆愉快,而給出的實例也多以生活中的例子進行類比,幫助讀者對書內容的理解。這本書就是這一類書籍的箇中翹楚。dahuadp去年在國內計算機圖書界,獨領風騷的一本《大話設計模式》,同樣屬於這樣的風格。程傑也因爲該書在去年榮獲了51cto的年度IT圖書的最佳原創作者獎。該書的成功就在於它繼承了這樣一種集娛樂與技術爲一體的獨特風格,讓技術人員看到,原來,技術書籍也可以這樣寫,讀起來也可以這樣有趣。至於另一種寫作風格則偏向於循規蹈矩,描述技術問題勝在其條理清楚,如山澗流水,優雅而從容,卻最終能夠融匯成一條大河。很難說兩種風格孰優孰劣,前者勝在趣味,後者勝在嚴謹。我並不是說有趣的書就一定不嚴謹,只是相對而言,一本書若要有趣,就必須給出生動的比喻或者隱喻,而這樣的修辭總會或多或少使其本質發生小小的變形。然而這兩種風格,若要成功,最關鍵的還是要看著者的技術功底和筆力。

Java-Pattern-Chinese 雖然設計主要還是要看思想,但很多讀者還是比較在意每本書的代碼載體。Head First Design Patterns一書給出的是Java示例,而《大話設計模式》則是C#。還有一本面向初學者的好書是閻宏先生所著的《Java與模式》。本書利用中國傳統文化來闡述設計之道,又引入了大量的Java實例,尤其是對Java的API或框架進行了深入分析。所以讀來既有趣味,又有文化的底蘊,同時還不乏實際的例子給出標準的範本。我以爲,對於初學者,本書是再合適不過的了。

big0131489062 若要理解UML,並將軟件開發和設計有效地與UML結合起來,那麼最佳的選擇是閱讀Craig Larman的經典著作Applying UML and Patterns。本書已經出版到第三版。一本書若是能夠再版、三版,絕對有其值得稱道之處。該書全面地介紹了RUP開發模型,並將UML與開發過程、設計模式等有效地結合起來。隨着本書章節的逐步演進,讀者的能力也將得到逐步的提高。本書的中文版名爲《UML和模式應用》,似乎現在僅出版了第二版的中文版本,不由不讓人感嘆我們總是在追着技術前進的步伐在跑,甚至是優秀書籍的出版,我們也是在後面追趕着,卻始終追趕不上。

agile-software-development-principles-patterns-and-practices 將敏捷、面向對象思想、設計模式有機結合起來,會是哪一本書?還用問嗎,自然是Bob大叔的巔峯之作Agile Software Development: Principles, Patterns, and Practices了。本書中文版的譯者鄧輝先生功底紮實,比較好地將原書的神韻傳達了出來。

若要問哪些書(當然是指技術書籍)可以讓我重讀不厭?那麼這本書一定要排在前列。實際上,像這一類的書籍都是值得反覆閱讀的,因爲每一次閱讀,它都會給我們新的啓發與體會。所謂“讀書百遍,其義自現”。技術書籍本身存在一定的難度,不同水平的人閱讀同一本書的收穫是大不相同的。而在不同階段的同一個人,因爲技術水平的變化,自然每次都能夠讀出新意來。本書附帶的代碼是Java,同時還包含少量C++代碼。之後,Bob大叔又推出了該書的C#版,算是滿足了廣大的C#開發者的強烈需求。

refactoring 即使是最優秀的設計師,也不可能總是在第一次就能將設計做好,因而我們需要重構。講解重構技術的書籍中,最聲名顯赫的無疑就是Martin Fowler的Refactoring: Improving the Design of Existing Code。正是本書開創了重構在軟件開發中的光輝地位。這本書的優秀自然不用我再來饒舌了。Martin Fowler先生是全球知名的軟件大師,他的每一本著作都給業界帶來了深遠的影響。我在一次和Fowler先生的面對面交談中,曾經問他至今最滿意的著作是哪一本。他沒有絲毫的猶豫,就回答是Refactoring。

本書的中文版名爲《重構:改善既有代碼的設計》,譯者爲侯捷和熊節。熊節是敝同鄉,我和他有過一次面談,談起過這本書的翻譯。那些翻譯的往事也讓他感觸頗多吧。本書真正稱得上是軟件書籍中的名著名譯。熊節的中文和英文造詣都很厲害,所以閱讀本書的中文版,你幾乎感覺不到有“隔”了一層的晦澀。通篇閱讀下來,就是那麼流暢。順帶提及,本書是少有的中文版封面設計優於原版設計的特例。

refactoring-to-patterns 雖然說Martin Fowler是重構技術的集大成者,書中提到的重構方法也多數用到了設計模式,但真正將重構與模式結合起來的,還是Joshua Kerievsky,他的著作Refactoring to Patterns 也曾經榮獲了第15屆Jolt大獎。書中強調:“‘通過重構實現模式、趨向模式和去除模式’,而不再是在預先設計中使用模式,也不再過早地在代碼中加入模式。”實際上,這樣的論調恰恰迎合了敏捷社區的需要。極限編程的實踐就要求簡單設計和設計改善,改善的方法就是利用重構合理地引入設計模式,以期改善程序的結構,使其具有更佳的可複用性和可擴展性。此外,本書還是Refactoring: Improving the Design of Existing Code一書的補充,增加了諸如用Factory Method引入多態創建、將聚集操作搬移到Collecting Parameter等重構方法,明確地把設計模式作爲重構技術的一等公民。本書在大陸的中文版爲《重構與模式》,而在臺灣則被候捷和陳裕城譯作《重構-向範式前進》。雖然名字不夠精簡,但卻真正地代表了作者創作本書的含義,就是從Refactoring到Patterns。

big0321127420 雖然Martin Fowler最看重Refactoring: Improving the Design of Existing Code一書,但我個人認爲,他的Patterns of Enterprise Application Architecture一書(中文版名爲《企業應用架構模式》)價值更高,因爲它爲我們設計人員給出了全面、深入、權威的企業級設計指引。

在所有的軟件大師中,或許Martin Fowler是最善於總結的一位。他雖然沒有提出具有獨創性的方法與思想,但很多獨創性的方法與思想到了他的筆下,都能化腐朽爲神奇。本書最好地印證了這樣的奇蹟。在本書誕生之前,實際上關於分層設計、併發處理、對象關係映射、表現模式以及分佈式處理,已經有了許多非常優秀的實踐。但只有Martin Fowler憑藉自己豐富的技術經驗與無與倫比的創作能力,將這些散落的珍珠串聯在了一起,最後形成了一串璀璨奪目的項鍊。透過本書,Fowler將自己善於總結的能力發揮得淋漓盡致,真可以說是“筆落驚風雨,書成泣鬼神。”

domain-driven-design-book-cover Martin Fowler的早期著作中,Analysis Patterns提出了領域邏輯的諸多建模原則和模式,不過真正對領域建模、分析和設計產生奠基作用和推動作用的,還是Eric Evans的大作Domain-Driven Design,中文版名爲《領域驅動設計》。本書的誕生推動了一種設計方法,改變了傳統通過數據設計驅動開發的模式,而是將核心關注點放在了領域邏輯上,而這應該說纔是真正的軟件設計的正道。

Martin Fowler在本書的序中,這樣寫道:“控制複雜問題的關鍵是建立一個好的領域模型,它越過問題域的表象介紹其底層的結構,給軟件開發人員提供所需要的方法。”毋庸置疑,當我們面對複雜多變的領域邏輯時,領域驅動設計已經成爲了我們手中的利器。掌握領域驅動設計,並不能保證所有複雜的設計問題都能夠迎刃而解,但這種思想卻能夠幫助我們像庖丁解牛一般,即使面對紛繁複雜的領域邏輯,也能夠做到“以神遇而不以目視,官知止而神欲行”。

本書堪稱經典,正如Kent Beck的推薦:“每個有思想的軟件開發人員,其書架上都應該珍藏這樣一本書。”說起來,我也是Kent Beck提到的“有思想的軟件開發人員”了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章