Java 專業人士必備的書籍大放送:
每個程序員都會有一些由於經常被當作專業資料參閱而磨壞的書。下列書籍應該是Java 語言程序員的書架上必備的。書很貴,所以我有意將這份列表弄得很短,僅限於重要書籍。
Thinking in Java (Bruce Eckel)
Thinking in Java, 3rd edition (Bruce Eckel; Prentice Hall PTR,2002 年)
Java 編程思想:第3版(陳昊鵬等譯; 機械工業出版社,2005 年)
Eckel的書對於學習如何在Java 語言環境中使用好面向對象技術極其實用。書中大量的代碼樣例解釋了他所介紹的概念。文字出自一個並不認為Java 技術總是正確答案的人,所以相當地實用。 Eckel 具有多種語言的大量經驗,還有用面向對象方式進行思考的紮實技能。本書將這些技能放到實用的Java 語言環境中。他還在寫一本新書,名為Thinking in Enterprise Java。
Effective Java (Joshua Bloch)
Effective Java: Programming Language Guide(Joshua Bloch; Addison-Wesley,2001 年)
Effective Java 中文版(潘愛民譯; 機械工業出版社,2003 年)
本書是理解優秀Java 程序設計原則的最佳書籍。大多數材料從其他的“學習Java ” 的書中根本找不到。例如,Bloch 書中關於覆蓋equals() 這一章是我讀過的最好的參考資料之一。他也在書中包括了很實用的建議:用接口替代抽像類和靈活使用異常。 Bloch 是Sun 公司Java 平台庫的架構師,所以他透徹地了解這門語言。事實上,他編寫了該語言中大量有用的庫。本書必讀!
The Java Programming Language (Ken Arnold, James Gosling, David Holmes)
The Java Programming Language(Ken Arnold,James Gosling,David Holmes; Addison-Wesley,2000 年)
Java 編程語言(第3 版) (虞萬榮等譯,中國電力出版社,2003 年)
這也許是能弄到的最好的Java 入門讀物。它並不是一個標準規範,而是一本介紹每門語言特性的可讀書籍。這本書在嚴謹性和教育性方面權衡得很好,能夠讓懂編程的人迅速被Java 語言(和其豐富的類庫)所吸引。
Concurrent Programming in Java: Design Principles and Patterns (Doug Lea)
Concurrent Programming in Java: Design Principles and Patterns, 2nd edition(Doug Lea; Addison-Wesley,1999 年)
Java 並發編程―設計原則與模式(第二版) (趙涌等譯,中國電力出版社,2004 年)
不是每個開發人員都需要如此細緻地了解並發性,也不是每個工程師都能達到本書的水準,但卻沒有比本書更好的關於並發性編程的概述了。如果您對此感興趣,請從這裡開始。 Lea 是SUNY 的一名專業程序員,他的和並發性有關的作品和想法都包含在了JDK 5.0 規範(引自JSR166)中,所以您大可放心,他所說的關於有效使用Java 語言的建議是值得一聽的。他是一個很善於溝通的人。
Expert One-On-One J2EE Design and Development (Rod Johnson)
Expert One-On-One J2EE Design and Development(Rod Johnson)
WROX: J2EE 設計開發編程指南(魏海萍譯,電子工業出版社,2003 年)
對於剛接觸J2EE 的人來說,這是唯一的一本如實反映這項技術的書。本書收錄了多年的成功經驗和失敗經驗,不同於其他許多作者,Johnson 樂於將失敗的經驗公諸於眾。 J2EE 常常都被過度使用。 Johnson 的書能幫您避免這一點。
Refactoring (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts)
Refactoring: Improving the Design of Existing Code(Martin Fowler,Kent Beck,John Brant,William Opdyke,Don Roberts;
Addison-Wesley,1999 年)
重構:改善既有代碼的設計(中文版) (侯捷等譯,中國電力出版社,2003 年)
Fowler 寫了幾本現已出版的最流行的編程書,包括Analysis Patterns。他的關於重構的書是這一主題的基本書籍。重構代碼是被程序員忽略的訓練,但卻是程序員最直觀的想法。重構是在不改變代碼結果的前提下改進現有代碼的設計。這是保持代碼整潔的最佳方式,用這種方法設計的代碼總是很容易修改。什麼時候進行重構呢?當代碼“散發出味道”時。 Fowler 的書裡滿是Java 語言代碼的例子。許多Java 語言集成開發環境(IDE)(包括了IBM 的Eclipse)都將Fowler 的重構包含了進去,每一個都使用他的重構名命名,所以熟悉如extract method 等重構方法還是很值得的。
Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)
Design Patterns: Elements of Reusable Object Oriented Software (Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides; Addison-Wesley,1997 年)
設計模式:可複用面向對象軟件的基礎(李英軍等譯,機械工業出版社,2005 年)
這是一本在專業程序員圈子裡更為有名的書,基於作者共同的綽號,這本書被認為是“四人幫(GOF)之書”。模式是思考和解決普通編程問題時可以重用的方式。學習模式是一門學科。使用好模式(或知道什麼時候不使用模式)是一項技能。忽略模式則是錯誤的。書中所有的例子都以C++ 表示,但Java 語言是從那裡誕生的,讓Java 語言程序員由此聯繫到如何在Java 語言中實現這些模式相對簡單一些。熟悉模式並了解如何使用好模式使編程更加簡單。這使得和其他程序員交流也更簡單,因為在針對通用問題的通用解決方案中,模式是描述解決方案中彼此協作的大量相關編程概念的快捷方式。一些更為通用的方式,如工廠方法則是普便存在的,甚至存在於Java 語言本身。關於明智使用模式的這個主題,也可以閱讀Joshua Kerievsky 的Refactoring to Patterns,該書稱可以讓代碼來告訴您何時實現模式。
Patterns of Enterprise Application Architecture (Martin Fowler)
Patterns of Enterprise Application Architecture(Martin Fowler; Addison-Wesley,2002 年)
企業應用架構模式(王懷民等譯,機械工業出版社,2004 年)
比起小型、一次性項目來說,企業開發當然代表了更大的挑戰。那並不意味著企業開髮帶來的所有挑戰都是新挑戰。事實上有些時候,這項開發已經是以前完成過的了。 Fowler 做了很多個這樣的項目。他的書提到了一些通用解決方案,並提供了關於使用、折中和可選方案的指導。 Fowler 在書中包含了一些熟悉的模式,如模型視圖控制器(MVC),他也提供了一些您也許不了解的模式,如處理Web 站點上特定頁面請求或行為請求的Page Controller 模式。正如您對待大多數模式一樣,一旦您讀過許多模式,您就會認為“我已經知道那個模式了” 。也許是這樣,但有一個用來引用模式的通用表達方式還是很有幫助的。在有多個組件(由不同人開發)的大型項目中,該類引用是一項很好的幫助。
UML Distilled (Martin Fowler)
UML Distilled: A Brief Guide to the Standard Object Modeling Language(Martin Fowler; Addison-Wesley 2003 年)
UML精粹:標準對象語言簡明指南(第3版) (徐家福譯,清華大學出版社,2005 年)
對於專業的程序員來說,UML 是一門很重要的通用可視化溝通語言,但是它被過度使用和草率地濫用了。您無需對使用UML 溝通了解太多。 Martin 對UML 的提煉為您提供了最核心的東西。事實上,前後的封頁提供了常規基礎上可能使用到的所有東西。該書中UML 例子的代碼都是Java 代碼。
Test-Driven Development: By Example (Kent Beck)
Test-Driven Development: By Example(Kent Beck; Addison-Wesley 2002 年)
測試驅動開發(中文版) (崔凱譯,中國電力出版社,2004 年)
測試優先編程將使編程發生革命性變化,能助您成為更好的程序員。在寫代碼之前編寫測試開始很難,但卻是一項威力強大的技能。通過優先編寫測試,可使代碼更加簡單,並確保從一開始它就能工作(Beck 實踐著他提倡的測試優先,與人合寫了JUnit,這是Java 語言最流行的測試框架)。 Beck 的書是權威的參考資料,擴展了的Money 例子也用Java 語言寫成。 Beck 詳述瞭如何用測試優先進行思考(這也許是許多程序員首先遇到的障礙)。
The Pragmatic Programmer: From Journeyman to Master (Andy Hunt and Dave Thomas)
The Pragmatic Programmer: From Journeyman to Master(Andrew Hunt 和David Thomas; Addison-Wesley 1999 年)
程序員修煉之道――從小工到專家(馬維達譯,電子工業出版社,2004 年)
做一個純粹的面向對像開發人員有其優勢所在。在當今復雜的社會中,作為Java 語言開發人員,為完成任務常要妥協。 Hunt 和
Thomas 探討瞭如何不將真正重要的東西妥協掉而完成任務。這不是一本關於Java 語言的書,而是Java 語言開發人員重要的思想讀物。例如,我認為沒從“要解決問題,而不是推卸責任”這句忠言中受益的程序員,不能像個自豪的藝術家一樣在他的傑作上籤上大名。
Peopleware: Productive Projects and Teams (Tom DeMarco and Timothy Lister)
Peopleware: Productive Projects and Teams(Tom DeMarco,Timothy Lister; Dorset House,1999 年)
人件(第2版) (UMLChina 翻譯組譯,清華大學出版社,2003 年)
這份列表中的其他所有書籍都至少和技術有些相關。這本書卻不是。在所有技術行話和首字母縮略詞的海洋中,有時軟件開發人員和經理們會忘記:是人製造了軟件。 DeMarco 和Lister 向我們提醒了這一事實,也向我們提醒了形成這一區別的原因。這不是一本關於一門特定編程語言的書籍,但卻是每個Java 語言程序員都應該讀的書。關於“累死程序員如何讓經理們適得其反” 還有許多其他的好書,但這是最好的一本。
學好java語言從閱讀開始!