1. 程式人生 > >JAVA程式設計師必看的15本書-JAVA自學書籍推薦

JAVA程式設計師必看的15本書-JAVA自學書籍推薦

     作為Java程式設計師來說,最痛苦的事情莫過於可以選擇的範圍太廣,可以讀的書太多,往往容易無所適從。我想就我自己讀過的技術書籍中挑選出來一些,按照學習的先後順序,推薦給大家,特別是那些想不斷提高自己技術水平的Java程式設計師們。此外,大家可以加入457036818交流群,互相分享一下關於JAVA方面的知識。一、Java程式設計入門類   對於沒有Java程式設計經驗的程式設計師要入門,隨便讀什麼入門書籍都一樣,這個階段需要你快速的掌握Java基礎語法和基本用法,宗旨就是“囫圇吞棗不求甚解”,先對Java熟悉起來再說。用很短的時間快速過一遍Java語法,連懵帶猜多寫寫程式碼,要“知其然”。1、《Java程式設計思想》   在有了一定的Java程式設計經驗之後,你需要“知其所以然”了。這個時候《Java程式設計思想》是一本讓你知其所以然的好書,它 對於基本的面向物件知識有比較清楚的交待,對Java基本語法,基本類庫有比較清楚的講解,可以幫你打一個良好的Java程式設計基礎。這本書的缺點是實在太 厚,也比較羅嗦,不適合現代人快節奏學習,因此看這本書要懂得取捨,不是每章每節都值得一看的,挑重點的深入看就可以了。2、《Agile Java》中文版
  這本書是出版社送給我的,我一拿到就束之高閣,放在書櫃一頁都沒有翻過,但 是前兩天整理書櫃的時候,拿出來一翻,竟然發現這絕對是一本好書!這本書一大特點是以單元測試和TDD來貫穿全書的,在教你Java各種重要的基礎知識的 過程中,潛移默化的影響你的程式設計思維走向敏捷,走向TDD。另外這本書成書很新,以JDK5.0的語法為基礎講解,要學習JDK5.0的新語法也不錯。還 有這本書對於內容取捨也非常得當,Java語言畢竟類庫龐大,可以講的內容太多,這本書選擇的內容以及內容的多寡都很得當,可以讓你以最少的時間掌握 Java最重要的知識,順便培養出來優秀的程式設計思路,真是一本不可多得的好書。   雖然作者自己把這本書定位在入門級別,但我不確定這本書用來入門是不是稍微深了點,我自己也準備有空的時候翻翻這本書,學習學習。二、Java程式設計進階類
  打下一個良好的Java基礎,還需要更多的實踐經驗積累,我想沒有什麼捷徑。有兩本書值得你在程式設計生涯的這個階段閱讀,培養良好的程式設計習慣,提高你的程式碼質量。1、《重構 改善既有程式碼的設計》   這本書名氣很大,不用多介紹,可以在閒暇的時候多翻翻,多和自己的實踐相互印證。這本書對產生影響是潛移默化的。2、《測試驅動開發 by Example》   本書最大特點是很薄,看起來沒有什麼負擔。可以找一個週末的下午,一邊看,一邊照做,一個下午就把書看完,這本書的所有例子跑完了。這本書的作用是通過實戰讓你培養TDD的思路。三、Java架構師之路   到這個階段,應該已經非常嫻熟的運用Java程式設計,而且有了一個良好的程式設計思路和習慣了,但是可能還缺乏對應用軟體整體架構的把握,現在就是邁向架構師的第一步。1、《Expert One-on-One J2EE Design and Development》
  這本書是Rod Johnson的成名著作,非常經典,從這本書中的程式碼誕生了springframework。但是好像這本書沒有中譯本。2、《Expert One-on-One J2EE Development without EJB》   這本書由gigix組織翻譯,多位業界專家參與,雖然署名譯者是JavaEye,其實JavaEye出力不多,實在是忝居譯者之名。   以上兩本書都是Rod Johnson的經典名著,Java架構師的必讀書籍。在所推薦的這些書籍當中,是看過的最仔細,最認真的書,當時讀這本書幾乎是廢寢忘食的一氣讀完的, 有小時候挑燈夜讀金庸武俠小說的勁頭,書中所講內容和自己的經驗知識一一印證,又被無比精闢的總結出來,讀完這本書以後,有種被打通經脈,功力爆增的感 覺。   但是後來看過一些其他人的評價,似乎閱讀體驗並沒有那麼high,也許是因為每個人的知識積累和經驗不同導致的。那個時候剛好是經驗知識積累已經足夠豐富,但是還沒有系統的整理成型,讓這本書一梳理,立刻形成完整的知識體系了。3、《企業應用架構模式》 Martin的又一本名著,但這本書只是泛泛的看了一遍,並沒有仔細看。這本書 似乎更適合做框架的人去看,例如如果打算自己寫一個ORM的話,這本書是一定要看的。但是做應用的人,不看貌似也無所謂,但是如果有空,還是推薦認真看 看,會讓知道框架為什麼要這樣設計,這樣的層次可以晉升到框架設計者的角度去思考問題。Martin的書向來都是推崇,但是從來都沒有像Rod Johnson的書那樣非常認真去看。4、《敏捷軟體開發原則、模式與實踐》   Uncle Bob的名著,敏捷的經典名著,這本書比較特別,與其說是講軟體開發過程的書,不如說講軟體架構的書,本書用了很大篇幅講各種面向物件軟體開發的各種模式,個人以為看了這本書,就不必看GoF的《設計模式》了。四、軟體開發過程   瞭解軟體開發過程不單純是提高程式設計師個人的良好程式設計習慣,也是增強團隊協作的基礎。1、《UML精粹》 UML其實和軟體開發過程沒有什麼必然聯絡,卻是軟體團隊協作溝通,撰寫軟體文件需要的工具。但是UML真正實用的圖不多,看看這本書已經足夠了,完全沒有必要去啃《UML使用者指南》之類的東西。要提醒大家的是,這本書的中譯本翻譯的非常之爛,建議有條件的看英文原版。2、《解析極限程式設計 擁抱變化》XP   這是Kent Beck名著的第二版,中英文對照。沒什麼好說的,必讀書籍。3、《統一軟體開發過程》UP   其實UP和敏捷並不一定衝突,UP也非常強調迭代,測試,但是UP強調的文件和過程驅動卻是敏捷所不取的。不管怎麼說,UP值得去讀,畢竟在中國真正接受敏捷的企業很少,還是需要用UP來武裝一下自己的,哪怕是披著UP的XP。4、《敏捷建模》AM Scott Ambler的名著,這本書非常的progmatic,告訴怎麼既 敏捷又UP,把敏捷和UP統一起來了,又提出了很多progmatic的建議和做法。可以把《解析極限程式設計擁抱變化》、《統一軟體開發過程》和《敏捷建 模》這三本書放在一起讀,看XP和UP的不同點,再看AM是怎麼統一XP和UP的,把這三種理論融為一爐,形成自己的理論體系,那麼也可以去寫書了。五、軟體專案管理   如果突然被領導提拔為專案經理,而完全沒有專案管理經驗,肯定會心裡沒底;如果覺得自己管理專案不善,很想改善專案管理能力,那麼去考PMP肯定是遠水不解近渴的。1、《快速軟體開發》   這也是一本名著。可以這樣說,有本書在手,就有了一個專案管理的高階參謀給 你出謀劃策,再也不必擔心自己不能勝任的問題了。這本書不是講管理的理論的,在實際的專案管理中,講這些理論是不解決問題的,這本書有點類似於“軟體專案 點子大全”之類的東西,列舉了種種軟體專案當中面臨的各種問題,以及應該如何解決問題的點子,只需要稍加變通,找方抓藥就行了。六、總結   在這份推薦閱讀書籍的名單中,沒有列舉流行的軟體框架類學習書籍,例如Struts,Hibernate,Spring之類,也沒有列舉AJAX方面的書籍。是因為這類書籍容易過時,而上述的大半書籍的生命週期都足夠長,值得去購買和收藏。【二.Java書籍Top 10】 下面是Java Inside上推薦的十本不錯的Java書籍。1)Java Language Specification, Third Edition (by James Gosling) 本書由Java技術的發明者編寫,是Java TM程式語言的權威性技術指南。如果你想知道語言之構造的精確含義,本書是最好的資源。2)Effective Java , Second Edition (by Joshua Bloch) 本書介紹了在Java程式設計中78條極具實用價值的經驗規則,這些經驗規則涵蓋了大多數開發人員每天所面臨的問題的解決方案。通過對Java平臺設計專家所使用的技術的全面描述,揭示了應該做什麼,不應該做什麼才能產生清晰、健壯和高效的程式碼。. 本書中的每條規則都以簡短、獨立的小文章形式出現,並通過例子程式碼加以進一步說明。本書內容全面,結構清晰,講解詳細。可作為技術人員的參考用書。…3)Java Concurrency in Practice (by Brian Goetz) 隨著多核處理器的普及,使用併發成為構建高效能應用程式的關鍵。Java 5以及6在開發併發程式取得了顯著的進步,提高了Java虛擬機器的效能,提高了併發類的可伸縮性,並加入了豐富的新併發構建塊。在本書中,這些便利工具的創造者不僅解釋了它們究竟如何工作、如何使用,同時,還闡釋了創造它們的原因,及其背後的設計模式。 本書既能夠成為讀者的理論支援,又可以作為構建可靠的,可伸縮的,可維護的併發程式的技術支援。本書並不僅僅提供併發API的清單及其機制,本書還提供了設計原則,模式和思想模型,使我們能夠更好地構建正確的,效能良好的併發程式。 本書的讀者是那些具有一定Java程式設計經驗的程式設計師、希望瞭解Java SE 5,6線上程技術上的改進和新特性的程式設計師,以及Java和併發程式設計的愛好者。4)Java Puzzles: Traps, Pitfalls and Corner Cases (by Joshua Bloch) Java教父的又一經典名著–Java Puzzlers,Amazon五星圖書。認為你到底有多瞭解Java?你是一個程式碼神探嗎?你是否曾經花費過數天時間去追蹤一個由Java或其類庫的陷阱和缺陷而導致的bug?你喜歡智力測驗嗎?那麼這本書正好適合你!5)Thinking in Java (by Bruce Eckel) 本書贏得了全球程式設計師的廣泛讚譽,即使是最晦澀的概念,在Bruce Eckel的文字親和力和小而直接的程式設計示例面前也會化解於無形。從Java的基礎語法到最高階特性(深入的面向物件概念、多執行緒、自動專案構建、單元測試和除錯等),本書都能逐步指導你輕鬆掌握。 從本書獲得的各項大獎以及來自世界各地的讀者評論中,不難看出這是一本經典之作。本書的作者擁有多年教學經驗,對C、C++以及Java語言都有獨到、深入的見解,以通俗易懂及小而直接的示例解釋了一個個晦澀抽象的概念。本書共22章,包括操作符、控制執行流程、訪問許可權控制、複用類、多型、介面、通過異常處理錯誤、字串、泛型、陣列、容器深入研究、Java I/O系統、列舉型別、併發以及圖形化使用者介面等內容。這些豐富的內容,包含了Java語言基礎語法以及高階特性,適合各個層次的Java程式設計師閱讀,同時也是高等院校講授面向物件程式設計語言以及Java語言的絕佳教材和參考書。6)Better, faster, lighter Java (by Justin Gehtland, Bruce A. Tate) Java的開發者正深陷於複雜性的泥沼中而無法自拔。我們的經驗和能力正接近極限,程式設計師為了編寫支援所選框架的程式所花的時間比解決真正問題的時間要多得多。我們不禁要問,有必要把Java搞得這麼複雜嗎?. 答案是否定的。本書給你指引了一條出路。無論是維護應用程式,還是從頭開始設計,你都能夠超越成規,並大幅精簡基本框架、開發過程和最終程式碼。你能重新掌握一度失控的J2EE應用程式。.. 在本書中,原作者Bruce A.Tate與Justin Gehtland將循序漸進、娓娓道來。首先,他們列出了五項基本法則。他們展示瞭如何構建簡單、解耦的程式碼,並告訴你如何選擇技術。他們還對兩種被廣泛運用的開源程式如何迎合這些概念進行了剖析。最後,作者還將利用這些基本概念構建一個簡單但內涵豐富的應用程式來解決現實世界中所遇到的問題。7)Core Java (vol. 1, 2) (by Cay S. Horstmann, Gary Cornell) 《Java核心技術》出版以來一直暢銷不衰,深受讀者青睞,每個新版本都儘可能快地跟上Java開發工具箱發展的步伐,而且每一版都重新改寫了部分內容,以便適應Java的最新特性。本版也不例外,它反映了Java SE 6的新特性。全書共14章,包括Java基本的程式結構、物件與類、繼承、介面與內部類、圖形程式設計、事件處理、Swing使用者介面元件、部署應用程式和Applet、異常日誌斷言和除錯、泛型程式設計、集合以及多執行緒等內容。. 全書對Java技術的闡述精確到位,敘述方式深入淺出,幷包含大量示例,從而幫助讀者充分理解Java語言以及Java類庫的相關特性。8) The Java Virtual Machine Specification (by Tim Linholm, Frank Yellin) 如果你需要了解Java虛擬機器的byte code,或者是一些編譯方面的東西,這本書絕對讓你得償所願。其不但包含了機器碼的規範說明,同時它也是Java編譯器和執行環境的規格說明書。9)Robust Java: Exception Handling, Testing, and Debugging (by Stephen Stelting) 處理異常涉及開發、設計和體系結構等方面的知識。本書共分3個部分。   第Ⅰ部分介紹Java異常的產生機理和用法,介紹一些最佳實踐,講述各類異常處理使用的一般API和技術。   第Ⅱ部分闡述可測試性設計,介紹故障模式分析,討論常見API的異常及起因,分析J2EE體系結構和分散式API的異常模式。   第Ⅲ部分討論在軟體開發週期執行異常和錯誤處理,分析軟體體系結構、設計模式、測試和除錯,列舉成熟的設計模式,介紹處理策略對系統體系結構的影響,講述如何構建健壯系統。 10)Java Code Convention 最後一本當然是Java編碼規範,這是由Sun公司官方出品的。這也是每個程式設計師為了得供程式的易讀性,可維護性需要知道的。【三.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程式設計師的3本進階書 】 原作者在這篇文章中介紹3本不錯的技術書籍。作者認為這些書籍對新手或者學生而言尤其有幫助。通過一些基礎性的教程入門後,我們可以使用Java做基礎性的程式設計。然而,當我們需要從初級提升更高的一個層次時,大多數的人卻不知道從何入手。一些好的書籍在這個階段可以很好地幫助初級開發人員。《Head First設計模式》 這本書介紹 GoF 常用設計模式的方式引人入勝。如果只看封面很難看出來這是一本技術書籍,更不用說這本技術書籍介紹的還是面向物件程式設計的一些很有用的技巧。這本書採用 Kathy Sierra 式編寫風格:雖然她的部落格已經關了,但是還是能從前面這個連結看到一些她的文章,建議讀一讀。如果你周圍有人認為設計模式沒有什麼用處,這本書倒是能夠讓他們改變看法。個人而言,我認為經典的 GoF 手冊是一個很好的參考,但它並不是專為新手準備的。因此強烈推薦在校生(包括那些不清楚組合模式是什麼的程式設計師們)閱讀此書。 書中介紹的設計模式是程式開發中比較基本的程式設計模式,也是面向物件程式設計的程式設計師應該瞭解和掌握的。接下來要介紹的這本書則更偏向於Java語言本身,這也是我日常使用的程式語言。《Effective Java中文版》第二版 每個Java程式設計師的書桌上都應該放有這本書。讓我們先了解下作者: Joshua Bloch是Google公司的首席Java設計師,並且也是一位Jolt 獎獲得者。他之前是Sun的一位傑出工程師(distinguished engineer),也是Transarc公司的一個資深系統設計師。Bloch主導了眾多基於Java平臺的軟體系統的設計和實現,包括JDK5.0的功能加強以及獲得過獎項的Java集合框架的設計實現。他同時也參與編寫了《Java解惑 | Java Puzzlers》 和《Java併發程式設計實戰 | Java Concurrency in Practice》這兩本技術書。 就憑“Java集合框架開發者”這個稱號,我們就應該認真聽取這位值得尊敬的程式設計師的建議。這些建議在這本書中組織成78個點:讀者可以按照自己的速度進行閱讀。
  • 在複寫equals和hashcode方法時,我們應該遵循什麼規則?
  • 不可變類(immutable class)是什麼?
  • 在特定的情況下,應當選用哪種最相關的異常型別?執行時異常(Runtime exception)還是可捕獲異常(checked exception)?
  • 對於一個託管語言(managed language,詳細請參考 wiki介紹),如何在混淆編譯時保留(preserve)類的成員?
上面所有的問題(也包括其他74個)都有實用主義者Joshua Bloch的詳細解釋。讀完這本書,程式設計師應該能意識到使用Findbugs、Checkstyle這些工具的必要性了。《Java併發程式設計實戰》 一年前我正努力在做 UI 開發工作時(在Eclipse 外掛中使用SWT/JFace,其他一些專案則使用Swing ),就看了這本書。那時,我想了解如何實現一個快速響應的UI,從而能給使用者更好的使用體驗。我知道自己寫執行緒安全的程式碼是非常複雜的,儘管執行時間長的操作通常是一個獨立的執行緒。UI開發和多核系統應用開發是學習如何開發執行緒安全的軟體系統的一個很好的理由。 這本書的作者如下:Brian Goetz,Joshua Bloch(又出現這位大牛了,我們剛提到過,還記得嗎?), Doug Lea(java.util.concurrent包的開發者), David Holmes,Tim Peierls 和Joseph Bowbeer。

這本書的風格非常直接,有的程式碼在非執行緒安全的環境下表現不錯,可一旦到了執行緒安全的環境下就變得十分的危險。接著,這本書介紹了基本的保證執行緒安全的機制:同步機制,volatile關鍵字等。本書還有對java.util.concurrent介面的介紹,你可以根據自己的需要來選擇適合的併發集合類。這本書也介紹了程式執行時的錯誤管理,以及如何測試程式碼是否是執行緒安全的。而且書中還提供了說明性的註釋(Annotation)(下載),這些註釋通過了FindBugs的檢查!