隨筆-199  評(píng)論-203  文章-11  trackbacks-0
          Java™ 平臺(tái)不久將迎來(lái)它 14 歲的生日,當(dāng)一種成功且被普遍使用的語(yǔ)言達(dá)到這樣一種高度時(shí),伴隨而來(lái)的是產(chǎn)生了大量的庫(kù)、工具和理念 — 這使得許多剛剛接觸 Java 語(yǔ)言的新手可以獲得大量的資源。在這篇文章中,作者(Java 資源的重要貢獻(xiàn)者)將向您介紹這些資源,為積極進(jìn)取的 Java 開(kāi)發(fā)人員提供一份他們應(yīng)該擁有的關(guān)鍵參考資源的列表。

          自 Java 平臺(tái)從 1995 年作為一個(gè)整體引入編程社區(qū)開(kāi)始,它的發(fā)展已經(jīng)遠(yuǎn)遠(yuǎn)超出了早期 Java 專家和推介者所設(shè)想的“applet 無(wú)處不在”這一遠(yuǎn)景。相反,Java 世界出現(xiàn)了 Swing、與 servlet 結(jié)合,從而發(fā)展為 J2EE、出現(xiàn)了 EJB、超越了 Spring 和 Hibernate、添加了泛型,變得越來(lái)越具有動(dòng)態(tài)性,然后實(shí)現(xiàn)了函數(shù)化,在我撰寫(xiě)本文時(shí),Java 繼續(xù)朝著各種有趣的方向發(fā)展。

          這使得沒(méi)有一直跟隨學(xué)習(xí)這門語(yǔ)言的 Java 程序員感到有點(diǎn)吃力。

          作為一名演講人、博客作者、顧問(wèn)和導(dǎo)師,經(jīng)常有一些初、中級(jí) Java 程序員向我詢問(wèn)相關(guān)參考資源,以便幫助他們掌握這個(gè)廣泛的、復(fù)雜的、看似永無(wú)止境的語(yǔ)言。幾年前,我發(fā)表了一個(gè) 推薦讀物列表 專門解答這個(gè)問(wèn)題,但最近,developerWorks 的 Java 編輯讓我整理一份更完整的參考資源列表,而不僅僅包括書(shū)籍 — 考慮到資源列表現(xiàn)在已經(jīng)增長(zhǎng)到了預(yù)期消費(fèi)者即使花費(fèi)十年的時(shí)間閱讀也仍然不得要領(lǐng)的地步,這是一個(gè)很好的提議。

          為了保證客觀性和避免不利的影響,我決定給出各種參考資源的博客空間(blogosphere):Web 站點(diǎn)、研討會(huì)、書(shū)籍、博客、工具,以及任何 Java 開(kāi)發(fā)人員可能感興趣或?qū)λ麄冇杏玫膬?nèi)容,幫助他們從龐大的參考資源中找到自己需要的內(nèi)容。

          這份列表得到了很多人的響應(yīng)(在此我要感謝所有的回復(fù)者)。

          在開(kāi)始之前,需要解釋一點(diǎn):這些參考資源不一定是 Java 世界中最流行、最強(qiáng)大或最有影響的資源 — 這份 列表可能完全不同(盡管我懷疑其中也會(huì)出現(xiàn)很多相同的資源);但每個(gè)希望獲得成功的 Java 開(kāi)發(fā)人員都應(yīng)該將這些參考資源保存在瀏覽器、書(shū)架或備忘錄中。與任何此類型的列表一樣,人們總會(huì)爭(zhēng)論哪些內(nèi)容本來(lái)應(yīng)當(dāng)包含進(jìn)去但卻沒(méi)有出現(xiàn)在列表中,或本不該有的內(nèi)容卻出現(xiàn)在列表中。

          現(xiàn)在開(kāi)始正式介紹這些參考資源。

          Web 站點(diǎn)和開(kāi)發(fā)人員 Web 門戶

          網(wǎng)絡(luò)無(wú)疑改變了共享資源和出版的本質(zhì)(對(duì)我也是一樣:您正在網(wǎng)絡(luò)上閱讀這篇文章),因此,從每位 Java 開(kāi)發(fā)人員都應(yīng)該關(guān)注的關(guān)鍵 Web 站點(diǎn)和開(kāi)發(fā)人員門戶上的關(guān)鍵 Java 參考資源入手似乎比較合理。

          在許多情況下,Web 站點(diǎn)和/或開(kāi)發(fā)人員門戶的價(jià)值不僅僅在于其中提供的參考資源或文章,還包括圍繞該門戶或站點(diǎn)的社區(qū)。靜態(tài) Web 頁(yè)面和下載文件的時(shí)代已經(jīng)一去不復(fù)返了,取而代之的是更“積極” 的論壇、主題文章和交互式討論,討論者不僅包括頻繁訪問(wèn)該站點(diǎn)并組成社區(qū)的開(kāi)發(fā)人員,還包括社區(qū)成員和門戶所有者。隨著技術(shù)的發(fā)展,開(kāi)發(fā)人員也必須跟上技術(shù)的步伐,同時(shí),門戶也要不斷發(fā)展,以滿足社區(qū)不斷變化的需求;與社區(qū)保持開(kāi)放的關(guān)系是實(shí)現(xiàn)活躍門戶的關(guān)鍵因素。

          Web 站點(diǎn)列表(帶有 URL):

          • java.sun.com
            這是 JDK 的發(fā)源地,通常是 Java 開(kāi)發(fā)人員下載 JDK 和文檔副本的首要站點(diǎn)。除此之外,該站點(diǎn)還是查找有關(guān)整個(gè) Java 平臺(tái)的信息的好來(lái)源,包括一段非常詳細(xì)的 JVM 介紹(Hotspot),它極其深入地描述了 JVM 的細(xì)節(jié)。

          • java.net
            Java.NET 站點(diǎn)匯集了開(kāi)源項(xiàng)目、文檔、博客、wiki、新聞和其他社區(qū)資源等各種內(nèi)容。它是 Java 技術(shù)的主要信息來(lái)源,不過(guò)提供的信息似乎過(guò)于繁雜。不過(guò)盡管如此,瀏覽項(xiàng)目列表也會(huì)找到一些真正有用的東西,如 FEST-Swing 項(xiàng)目,它旨在創(chuàng)建一個(gè)用于構(gòu)建 Swing 應(yīng)用程序的“方便接口”,大大簡(jiǎn)化了單元測(cè)試的創(chuàng)建。

          • InfoQ
            由 Floyd Marinescu 創(chuàng)建,他是 The ServerSide 的名譽(yù)主編,InfoQ 與這里列出的許多其他參考資源的區(qū)別是,它是技術(shù)中立的,不僅包括 Java 代碼,還包括 .NET 和 Ruby,并提供了大量靈活的方法和見(jiàn)解。盡管 InfoQ 上的評(píng)論社區(qū)并沒(méi)有 TheServerSide 上的社區(qū)那么龐大和多樣化,但是該社區(qū)中的討論通常更加溫和,而不會(huì)過(guò)于激烈。

          • TheServerSide
            通常稱為“the Slashdot of Java”,TheServerSide 是第一個(gè)公開(kāi)質(zhì)詢、熱烈討論和積極研究企業(yè) Java 主題的地方。有關(guān)輕量級(jí)容器(以 Spring 為代表)的一些最初理念就是從這里誕生的,這里產(chǎn)生了許多 Java 社區(qū)中的“思想領(lǐng)導(dǎo)者”。盡管最近的激烈爭(zhēng)論有時(shí)會(huì)帶有主觀色彩,但 TSS 將始終是許多 Java 內(nèi)容的發(fā)源地,這些內(nèi)容構(gòu)成了我們現(xiàn)在所擁有的 Java 系統(tǒng);同樣,從 TSS 總是可以了解各種 Java 技術(shù)的歷史。

          • DZone
            DZone 最初是一個(gè)面向 Java 開(kāi)發(fā)人員的資源站點(diǎn),但最近它擴(kuò)展到了其他技術(shù)領(lǐng)域。包括 .NET 和 Ruby,以及其他幾個(gè)主題“專區(qū)”。這樣,不僅 Java 開(kāi)發(fā)人員可以利用它來(lái)專門研究 Java 專區(qū),還會(huì)有一些跨平臺(tái)的內(nèi)容,聰明的開(kāi)發(fā)人員可以充分利用這一點(diǎn)。

          • developerWorks Java 技術(shù)專區(qū)
            如果您正在閱讀本文,那么您已經(jīng)找到了 dw。為了解釋清楚,我必須強(qiáng)調(diào)除本文外,我曾在該站點(diǎn)發(fā)表過(guò)其他一些文章,但我可以誠(chéng)實(shí)地說(shuō),dw 是一個(gè)有關(guān) Java 編碼和 JVM 的文章和資源的優(yōu)秀來(lái)源。特別注意,請(qǐng)務(wù)必查看 Java 理論與實(shí)踐,這是一個(gè)由 Brian Goetz 撰寫(xiě)的長(zhǎng)期系列,其中包含一個(gè)共分三部分的 JVM 垃圾收集器系列文章,它以一種淺顯易懂的方式介紹了 GC 的核心概念。

          • IBM alphaWorks
            alphaWorks 是 developerWorks 的姊妹站點(diǎn),IBM 研究人員和員工在此提供他們認(rèn)為會(huì)確定未來(lái)主流的工具和技術(shù)。alphaWorks 提供了十二種不同的類別,從而為 Java 開(kāi)發(fā)人員提供了機(jī)會(huì)來(lái)嘗試各種非常超前的工具、語(yǔ)言、庫(kù)和其他項(xiàng)目 — 它們正處于研究階段。注意,許多項(xiàng)目是為了證明一個(gè)特殊的研究點(diǎn),然后就會(huì)停止,使項(xiàng)目保持在當(dāng)前的效率狀態(tài)。警告:有些項(xiàng)目不是開(kāi)源的,而有些項(xiàng)目不包含源代碼。但相當(dāng)數(shù)量的 alphaWorks 項(xiàng)目最終會(huì)成為主流,要么成為受 IBM 支持的產(chǎn)品,要么作為可從一些 IBM 開(kāi)放源碼位置下載的可用工具。無(wú)論如何,只要關(guān)注 alphaWorks,就可以了解 Java 發(fā)展的方向以及方式。

          • OnJava
            OnJava 是一個(gè)獨(dú)立運(yùn)行的站點(diǎn),用于跟蹤活動(dòng)、記錄會(huì)議、提供各種有關(guān)企業(yè) Java 的觀點(diǎn)。事實(shí)上,這里提供的大部分信息也可以在別處找到,不過(guò)這一點(diǎn)對(duì)于幾乎所有開(kāi)發(fā)人員門戶(包括上面提到的)都是一樣的,想了解 Java 的各種開(kāi)發(fā)的開(kāi)發(fā)人員只需打開(kāi)該站點(diǎn)上的 文章列表,然后逐一閱讀。

          • Artima
            Artima 由 Bill Venners 創(chuàng)建,目前已經(jīng)發(fā)展成一個(gè)巨大的匯集了文章、博客和訪談的站點(diǎn),它不是完全側(cè)重于 Java 開(kāi)發(fā),并且其中還包括了 Java 著作方面的權(quán)威(查看 Bill Joy 自 Java 5 出版后,對(duì) Java 語(yǔ)言復(fù)雜性的懷疑,以及他用于證明所擔(dān)心問(wèn)題的經(jīng)典示例 — Enum<>)。該站點(diǎn)非常值得您訪問(wèn)。

          注意,對(duì)于上面大部分站點(diǎn),為充分利用站點(diǎn)/門戶,需要進(jìn)行某種形式的注冊(cè)。在撰寫(xiě)本文時(shí),所有文章基本上都是免費(fèi)的,只需要一個(gè)用戶名/密碼登錄,以便它們能惟一識(shí)別訪問(wèn)者,還需要提供電子郵件地址,以便定期發(fā)送主題新聞資訊或電子郵件(據(jù)我所知,所有站點(diǎn)將允許您不提供電子郵箱,但我還未這樣做過(guò),因?yàn)槲野l(fā)現(xiàn)新聞咨詢會(huì)不時(shí)告訴我一些有趣的、我還不知道的信息,收件箱中的這些郵件是很有用的)。

          博客(Weblog)

          Blog 使開(kāi)發(fā)人員可以輕松地表達(dá)想法、概念、理念、論點(diǎn)并圍繞技術(shù)展開(kāi)思想討論,并了解特定技術(shù)領(lǐng)域中非常有影響力的“思想領(lǐng)袖”。此外,博客可以通過(guò)提要閱讀器在本地使用,提要閱讀器將文章/條目下載到本地,以便在脫機(jī)時(shí)也可以使用。事實(shí)上,博客已經(jīng)變得非常普遍,以至于出現(xiàn)了專門的設(shè)備(如 Amazon Kindle)來(lái)輕松獲取開(kāi)發(fā)人員所需要的信息。

          關(guān)鍵在于從幾百萬(wàn)個(gè)博客中找到感興趣的內(nèi)容。每位開(kāi)發(fā)人員都有他自己的選擇,哪些需要閱讀,哪些不需要,但有些博客是最基本的,包括:

          注意(大多數(shù))博客內(nèi)容都屬于個(gè)人觀點(diǎn);在這里分享的一些觀點(diǎn)可能在以后被證明是錯(cuò)誤的 — 永遠(yuǎn)不要只根據(jù)博客條目中的信息來(lái)對(duì)產(chǎn)品下結(jié)論。但如果要使思維過(guò)程突破常規(guī),博客將是一種增強(qiáng)技能的強(qiáng)大資源。

          包和/或庫(kù)

          跟蹤 Java 生態(tài)系統(tǒng)中的所有庫(kù)和包是一項(xiàng)繁雜的工作,并且 Java 開(kāi)發(fā)人員很容易就會(huì)忽略這項(xiàng)工作。結(jié)果,開(kāi)發(fā)人員常常發(fā)現(xiàn)自己正在編寫(xiě)的內(nèi)容其實(shí)已經(jīng)存在于平臺(tái)內(nèi)(只要他們?yōu)g覽一下就會(huì)發(fā)現(xiàn)這一點(diǎn))。

          下面列出了“每位 Java 開(kāi)發(fā)人員至少應(yīng)該知道其存在(最好知道如何使用)的十大 Java 包”:

          • java.lang.reflect
            許多 Java 庫(kù)和工具都依賴于 Reflection 包,所以了解它成為了一項(xiàng)必要要求(如果在使用時(shí)不理解它,會(huì)因?yàn)榘踩呗曰蚱渌愋偷幕A(chǔ)設(shè)施不匹配問(wèn)題而導(dǎo)致失敗)。與 Reflection 結(jié)合使用的還有 Java 5 注釋和 java.lang.annotation

          • javax.script
            Java 系統(tǒng)一直在強(qiáng)調(diào)動(dòng)態(tài)語(yǔ)言,了解如何從 Java 代碼內(nèi)部使用腳本語(yǔ)言可以使開(kāi)發(fā)人員擴(kuò)展他們的系統(tǒng),而不用經(jīng)歷昂貴的編譯-鏈接-運(yùn)行-測(cè)試環(huán)節(jié)。

          • javax.management java.lang.management
            該管理包也稱為 Java 管理擴(kuò)展(Java Management Extensions,JMX),是一種監(jiān)視 Java 應(yīng)用程序運(yùn)行的強(qiáng)大工具;因此,開(kāi)發(fā)人員應(yīng)該熟悉和習(xí)慣使用 JMX,以便構(gòu)建實(shí)際上可以被系統(tǒng)管理員使用的軟件。不要忘記查看隨 JDK 一起發(fā)布的 jconsole 工具,它演示了一種應(yīng)用程序健康狀況指示板,同時(shí)演示了可以構(gòu)建的內(nèi)容,它本身就是一個(gè)很有用的工具(密切關(guān)注構(gòu)建 jconsole 插件來(lái)在 jconsole 內(nèi)啟用腳本支持的腳本 demo,它是任何合格的系統(tǒng)管理員都應(yīng)該掌握的一個(gè)強(qiáng)大工具)。

          • java.util.concurrent.*
            并發(fā)性是開(kāi)發(fā)人員在未來(lái)十年內(nèi)將要面臨的最大問(wèn)題,Java 開(kāi)發(fā)人員用來(lái)修復(fù)并發(fā)性 bug 的主要武器就是此包及其子包中的類( .atomic .locks )。學(xué)習(xí)使用它將與學(xué)習(xí)編寫(xiě)類一樣(甚至更)重要。了解它,使用它,并喜歡上它。

          • java.util
            java.util 中的類同樣重要。它們被頻繁引用,特別是 Collections 類,所以 java.util.* 應(yīng)該像 java.lang 那樣自動(dòng)導(dǎo)入。

          • java.beans
            JavaBeans 無(wú)疑是整個(gè) Java 生態(tài)系統(tǒng)中都要使用的核心元素之一,使用商業(yè)含義不是很明顯的名稱“POJO”(普通的舊 Java 對(duì)象)。POJO 仍然基于 JavaBeans 代碼、API 和規(guī)范,因此花一點(diǎn)時(shí)間了解 java.beans 中的類可以幫助編寫(xiě)更好的 POJO。

          • java.util.logging
            診斷和審計(jì)日志迅速成為跟蹤運(yùn)行程序執(zhí)行的強(qiáng)大工具,不管是出于調(diào)試目的,還是出于管理和監(jiān)視目的。我的忠告是:學(xué)習(xí)使用這個(gè)包和其開(kāi)源的姊妹包 log4j

          • java.security.*
            Java 安全 API、策略機(jī)制和權(quán)限類是使 Java 環(huán)境成為安全計(jì)算平臺(tái)的核心部分,但只有開(kāi)發(fā)人員知道如何利用這個(gè)包。避開(kāi)加密 API — 在詳細(xì)了解每個(gè)對(duì)您有用的選項(xiàng)后再使用它們。它們不難使用,但要獲取加密權(quán)限(意味著沒(méi)有大的缺陷)需要花費(fèi)幾年的時(shí)間,有大量來(lái)自其他加密專家的相關(guān)評(píng)論。首先使用其他機(jī)制,如 SSL/TLS 和 GuardedObject/SignedObject/SecureObject 類。

          • javax.xml.parsers.* javax.xml.bind javax.xml.transform.*
            XML 逐漸出現(xiàn)在 Java 開(kāi)發(fā)人員的視野中,能夠解析(直接解析或通過(guò)對(duì)象-XML 庫(kù))和轉(zhuǎn)換它(使用 XSLT)是開(kāi)發(fā)人員必須擁有的一項(xiàng)重要技能。

          • javax.sound.*
            這不是一項(xiàng)必需的技能,但知道如何偶爾彈出聲音效果可以使原本乏味的代碼充滿生氣。此外,在沒(méi)有直接可用的顯示時(shí),還可以用聲音來(lái)向系統(tǒng)提供信號(hào)和反饋。除此之外,讓拋出棧跟蹤的機(jī)器發(fā)出恐怖電影里的尖叫,這樣用戶可以知道剛剛發(fā)生了不好的事情,從而增加了一些刺激的樂(lè)趣。

          當(dāng)然,還有許多其他(位于 JDK 內(nèi)部和外部)的包值得學(xué)習(xí),但掌握以上這些就足以使您很好地處理大多數(shù)項(xiàng)目,更不用說(shuō)應(yīng)付大多數(shù)工作面試。

          研討會(huì)

          研討會(huì)繼續(xù)在 Java 開(kāi)發(fā)人員的培訓(xùn)中扮演著主要角色,特別是那些還沒(méi)有獲得足夠的認(rèn)可,尚未成為大型培訓(xùn)公司培訓(xùn)課程的主題。研討會(huì)也是開(kāi)發(fā)人員結(jié)識(shí)其他具備各種技能和職責(zé)的開(kāi)發(fā)人員的絕好機(jī)會(huì),使與會(huì)者有機(jī)會(huì)做一些非常過(guò)癮的(并且是完全必要的)事情:發(fā)泄對(duì)工作環(huán)境的不滿。

          參加研討會(huì)也會(huì)產(chǎn)生一種有用的副作用(如果積極管理,可以為研討會(huì)錦上添花):與會(huì)者可以建立開(kāi)發(fā)人員小組。通過(guò)可在世界范圍內(nèi)使用的電子郵件、郵件列表(如 GoogleGroups 或 Yahoo Groups)和許多其他輕量級(jí) groupware 通信工具,了解參加研討會(huì)的人員的信息比以前更加容易。這些通過(guò)午餐和晚宴建立起來(lái)的友誼可以持續(xù)一生,并且隨著時(shí)間流逝愈加有益,特別是在評(píng)估新技術(shù)時(shí)更是如此。

          讓一位有著 30 年經(jīng)驗(yàn)的與會(huì)者、演講者、組織者(不是我,是我的一位朋友)的話為您提供指引:“技術(shù)新手參加研討會(huì)是為了通過(guò)期間舉辦的各種會(huì)議獲取知識(shí),資深人士參加研討會(huì)是為了宴會(huì)和結(jié)識(shí)朋友。宴會(huì)幫助您結(jié)識(shí)朋友,他們可以幫助您提升自己的職業(yè)”。

          研討會(huì)包括:

          • No Fluff, Just Stuff
            這是一個(gè)我特別熱衷的研討會(huì),不僅僅因?yàn)槲沂悄抢锏亩ㄆ谘葜v者,而且還因?yàn)槭?JavaOne 2007 演講者中有 7 個(gè)人都是 NoFluffJustStuff(目前的或以前的)演講者。Java 開(kāi)發(fā)人員不會(huì)發(fā)現(xiàn)比這里更加關(guān)注技術(shù)主題的討論,而且也不會(huì)找到比它價(jià)格更合理、召開(kāi)位置更便利的會(huì)議:您的家鄉(xiāng)(北美大陸每年有 30 多場(chǎng)會(huì)議 — 范圍跨越歐洲和亞洲,這樣,您便有機(jī)會(huì)驅(qū)車去參加 NFJS 大會(huì),而不用花幾千美元飛到一個(gè)遙遠(yuǎn)的城市并且住在旅館中)。同樣,本文中推薦的許多書(shū)籍都是由出席 NoFluff 研討會(huì)的專家編寫(xiě)的,這一點(diǎn)也就不足為奇了,而且 NFJS 的組織者們一直在不遺余力地查找有關(guān)各種 Java 和 Agile Development 主題的“重要資源”。

          • JavaOne
            這是一個(gè)規(guī)模宏大且非常客觀的會(huì)議,并且一直在舊金山(在這個(gè)地方舉行有利也有弊,具體取決于您公司的出差預(yù)算情況)舉行,不過(guò)世界上還沒(méi)有哪一個(gè)會(huì)議能像 JavaOne 這樣把這么多關(guān)鍵 Java 推動(dòng)者聚集到一個(gè)地方。

          • JAOO
            為了不冷落我們的歐洲 Java 同胞,每年在丹麥奧爾胡斯舉行一次 JAOO 會(huì)議,該研討會(huì)已經(jīng)舉辦了將近二十年,并且沒(méi)有任何衰落的跡象。JAOO 不僅吸引了一些頂尖的演講者和作家,而且作為一個(gè)跨技術(shù)的研討會(huì),在技術(shù)方面具有很好的包容性,也就是說(shuō),與會(huì)者早上可以出席 Java 研討會(huì),午餐時(shí)與一些 C++ 開(kāi)發(fā)人員交談,下午了解 Microsoft 的 ® Silverlight 的最新發(fā)展成果(或任何別的新事物),晚上則與 Smalltalker 喝喝啤酒。如果您想增長(zhǎng)見(jiàn)識(shí),JAOO 或它的姊妹會(huì)議 QCon(在 InfoQ 工作人員的協(xié)力支持下召開(kāi))將是一個(gè)不錯(cuò)的起點(diǎn)。對(duì)那些居住在“澳大利亞或新西蘭” 的 Java 同胞,今年(2008)在布里斯班和悉尼首次召開(kāi)了 JAOO;所有跡象表明,在未來(lái)幾年來(lái)內(nèi),將會(huì)在這里再次舉行 JAOO。

          • Devoxx
            該研討會(huì)是以前的 JavaPolis,在比利時(shí)安特衛(wèi)普這一飛速發(fā)展的城市舉行,參加這一研討會(huì)是遇見(jiàn)歐洲同行的絕好途徑(而且還可以品嘗到上等的比利時(shí)啤酒)。演講者都是該領(lǐng)域的首席專家,他們將集中討論一些尖端技術(shù)。該研討會(huì)也提供了優(yōu)秀的平臺(tái)和許多機(jī)會(huì)讓您與開(kāi)發(fā)人員同行進(jìn)行交流。

          • Jazoon
            Jazoon 是一個(gè)相對(duì)較新的研討會(huì),2007 年在蘇黎世(瑞士)召開(kāi)。因?yàn)閰⑴c者名單上有 Martin Odersky(Scala 的創(chuàng)建者)、Neal Gafter 和 Simon Phipps(Sun 的首席開(kāi)放源碼執(zhí)行官)之類的名字,所以 Jazoon 有望吸引大量演講者。Jazoon 完全側(cè)重于 Java 主題并在歐洲的中心召開(kāi),它有望成為歐洲 Java 同胞們的一項(xiàng)重要日程。

          還有其他一些研討會(huì),目標(biāo)受眾也各不相同,但以上列舉的研討會(huì)是直接針對(duì) Java 開(kāi)發(fā)人員的。那些希望擴(kuò)大自己視野的開(kāi)發(fā)人員應(yīng)該考慮參加“其他” 技術(shù)研討會(huì),如在世界各地舉辦的各種 Perl、Python、Ruby 甚至 .NET 會(huì)議;接受新的觀念有時(shí)需要研究一組全新的問(wèn)題。

          書(shū)籍

          對(duì)開(kāi)發(fā)人員而言,沒(méi)有哪一種資源能比價(jià)格便宜的傳統(tǒng)書(shū)籍更容易獲取。只需要去當(dāng)?shù)氐臅?shū)店(如果您住在邊遠(yuǎn)地區(qū),可通過(guò) Web 瀏覽器查找 Amazon 來(lái)購(gòu)買書(shū)籍),就可以找到大量珍貴的技術(shù)知識(shí)和經(jīng)驗(yàn)……只要您肯在大量資源中仔細(xì)尋找。

          這些書(shū)籍假設(shè)讀者已經(jīng)有了 Java 語(yǔ)言和工具集的應(yīng)用知識(shí);Java 入門書(shū)籍非常普遍,而且大多數(shù)討論的是相同的基本內(nèi)容。選擇書(shū)籍需要一定的技巧,要考慮作者的寫(xiě)作風(fēng)格,有時(shí)甚至要考慮隨書(shū)光盤中是否包含了練習(xí)的參考答案(如果包含了練習(xí)的話)。

          掌握了基本知識(shí)后,考慮閱讀以下書(shū)籍:

          • Effective Java(第 2 版),Joshua Bloch
            每位 Java 開(kāi)發(fā)人員的書(shū)架上必備的第一本書(shū),必須定期翻閱、隨時(shí)查看。

          • Java Concurrency in Practice ,Brian Goetz
            每位 Java 開(kāi)發(fā)人員書(shū)架上必備的第二本書(shū),因?yàn)槊课?Java 人員(不管他們?cè)敢馀c否)都會(huì)操縱多線程環(huán)境的內(nèi)部。

          • Better, Faster, Lighter Java ,Justin Gehtland 和 Bruce Tate
            這一小巧的冊(cè)子被許多 Java 開(kāi)發(fā)人員當(dāng)作攻下以 Spring 為首的“輕量級(jí)容器” 環(huán)境的“利器”,填補(bǔ)了大多數(shù)大型 EJB 服務(wù)器(如 WebSphere 或其他事務(wù)處理中間件)留下的空白。作者還介紹了基于 POJO 的開(kāi)發(fā)周期,指出了該理念的優(yōu)點(diǎn)和缺點(diǎn),以及如何采取更輕量級(jí)的方法構(gòu)建企業(yè)應(yīng)用程序,使用了 Spring 和 Hibernate 這類不會(huì)降低生成系統(tǒng)的功能和能力的工具。

          • Effective Enterprise Java ,Ted Neward(我)
            提供 75 種方法來(lái)確保企業(yè) Java 應(yīng)用程序(不管它們是用 Spring、EJB、Web 服務(wù),還是其他技術(shù)實(shí)現(xiàn))不會(huì)出現(xiàn)問(wèn)題。就像 Effective Java 不是針對(duì)初級(jí) Java 程序員一樣,Effective Enterprise Java 同樣也不是針對(duì)剛開(kāi)始學(xué)習(xí)“企業(yè) Java” 基礎(chǔ)知識(shí)的開(kāi)發(fā)人員。

          • Release It! ,Michael Nygard
            任何打算編寫(xiě)針對(duì)生產(chǎn)服務(wù)器的軟件的人都應(yīng)該閱讀本書(shū) — 它深入探討了生產(chǎn)環(huán)境中可能出現(xiàn)的錯(cuò)誤,以及如何處理潛在的故障,要么恢復(fù)故障,要么完全避免故障。

          • Inside the Java 2 Virtual Machine ,Bill Venners 或 Component Development for the Java Platform ,Stuart Halloway
            Java 開(kāi)發(fā)人員一旦學(xué)習(xí) Java 這門語(yǔ)言后,遲早要了解底層平臺(tái) — Java 虛擬機(jī)本身,這意味著垃圾收集以及 Reference 對(duì)象、ClassLoader、線程和監(jiān)視器等主題將成為接下來(lái)探討的重點(diǎn)領(lǐng)域。兩本書(shū)中的任何一本(或兩本)都是非常有用的指南。但是這兩本書(shū)都有一個(gè)很大的缺陷:它們的出版時(shí)間比較早。Inside 是 Java 1.2 期間出版的,此后不久便出版了 Component-Based。幸運(yùn)的是,大多數(shù) Java 虛擬機(jī)自那時(shí)起一直沒(méi)有發(fā)生什么變化,所以如果讀者遇到除 JDK 1.2 以外的問(wèn)題時(shí),可以暫時(shí)放下本書(shū)并繼續(xù)研究下一主題。

          • Martin Fowler 撰寫(xiě)的 Patterns of Enterprise Application Architecture 、Gregor Hohpe 和 Bobby Woolf 撰寫(xiě)的 Enterprise Integration Patterns
            說(shuō)到設(shè)計(jì)方法和理念,這兩本書(shū)都是典范,同樣假定大部分讀者都閱讀過(guò)由 Gamma、Helm、Johnson 和 VlissidesBoth 合著的經(jīng)典書(shū)籍 Design Patterns。模式書(shū)籍通常為開(kāi)發(fā)人員提供了一些基本的概念構(gòu)建塊進(jìn)行調(diào)整和組合,從而創(chuàng)建更健壯的設(shè)計(jì),這些構(gòu)建塊在單獨(dú)使用時(shí)就不怎么有效。

          • Java Power Tools ,John Smart
            很多人推薦這本書(shū),它詳細(xì)介紹了 Java 生態(tài)系統(tǒng)中各種可用的工具。Smart 還提供了關(guān)于本書(shū)的培訓(xùn)課程(Java Power Tools Bootcamp),但大多數(shù)開(kāi)發(fā)人員獲取信息的最簡(jiǎn)單方式還是通過(guò) dead-tree 版本。

          • The Pragmatic Programmer ,Andy Hunt 和 Dave Thomas
            每個(gè)程序員應(yīng)該人手一冊(cè),不管他實(shí)際使用的語(yǔ)言或平臺(tái)是什么。本書(shū)適合有經(jīng)驗(yàn)的讀者和從事多年編程工作的程序員。本書(shū)可與 Fred Brooks 的經(jīng)典著作 The Mythical Man-Month 媲美。

          • The Productive Programmer ,Neal Ford
            這本最近出版的書(shū)籍與 Pragmatic Programmer 一樣經(jīng)典,它主要討論各種技巧和技能,程序員可以借助這些技巧和技能提高他們的效率,獲得比 IDE 更高的生產(chǎn)力。

          • The Pragmatic Starter Kit
            本套件由 Pragmatic Unit Testing (with JUnit)Pragmatic Project AutomationPragmatic Source Control (with Subversion) 組成。每本書(shū)都清晰、針對(duì)性地討論了各個(gè)主題的核心內(nèi)容,它們直接深入主題,沒(méi)有涉及其他無(wú)關(guān)內(nèi)容。例如,Project Automation 是閱讀 Ant in Action 的“開(kāi)胃書(shū)”,但同時(shí)也討論了什么是優(yōu)秀的構(gòu)建流程以及構(gòu)建它們的原因。

          • Ant in Action(第 2 版),Erik Hatcher 和 Steve Loughran
            Ant 是面向 Java 平臺(tái)的優(yōu)秀構(gòu)建實(shí)用程序(參閱后面的工具內(nèi)容了解更多詳細(xì)信息),本書(shū)是目前為止介紹強(qiáng)大 Ant 功能的最佳讀物。在學(xué)習(xí)如何使用 Ant 時(shí),Ant in Action 還演示了單元測(cè)試、持續(xù)集成和生產(chǎn)部署實(shí)踐,這一切都是從實(shí)際 Java 開(kāi)發(fā)人員的日常實(shí)踐的角度出發(fā)的。

          工具

          正如蓋房子不僅僅是“掄起錘子在板上釘釘子” 一樣,Java 開(kāi)發(fā)也不僅僅是“掌握 IDE 并開(kāi)始編寫(xiě)代碼”。好的 IDE 當(dāng)然能為編寫(xiě) Java 代碼出力不少,但其他的工具也可以提供與 IDE 相等的(也許更好的)價(jià)值。

          排名不分先后……

          • IDE
            當(dāng)然,工具討論首先從 IDE 開(kāi)始。在避開(kāi)商業(yè)限制方面,Eclipse 和 NetBeans 都是開(kāi)源且免費(fèi)的,因而提供了吸引人的“第一步”。

          • 單元測(cè)試
            掀起單元測(cè)試革命的工具是 JUnit,但其他幾個(gè)工具也得到普及,包括 TestNG,自然還有 JUnitPerf 等等。

          • 持續(xù)集成
            持續(xù)集成服務(wù)器不斷檢查不受源控制的代碼,執(zhí)行構(gòu)建,對(duì)它運(yùn)行單元測(cè)試,并通常通過(guò)電子郵件向開(kāi)發(fā)人員報(bào)告所有構(gòu)建故障。有幾個(gè)開(kāi)源版本可用,但有一個(gè)已經(jīng)得到了廣泛關(guān)注,即 Hudson,它是一個(gè)擁有大量插件和具有高可擴(kuò)展性的持續(xù)集成服務(wù)器,它源自 CruiseControl ,它正是因?yàn)檫@一點(diǎn)而聲名斐赫。

          • 靜態(tài)分析
            FindBugs 是一個(gè)運(yùn)行 Java 代碼的開(kāi)放源碼靜態(tài)分析工具,執(zhí)行 n 向深度分析來(lái)找出所有可能的代碼路徑,并基于一組可擴(kuò)展規(guī)則報(bào)告找到的各種錯(cuò)誤和警告。FindBugs 由 William Pugh 開(kāi)發(fā)(這位 William Pugh 還發(fā)現(xiàn)了 Java 內(nèi)存模型中的 bug),其最值得炫耀的地方是它能夠分析 Java 代碼來(lái)查找并發(fā) bug,每位程序員都會(huì)為之歡呼。

          • 網(wǎng)絡(luò)包跟蹤
            WireShark (以前一般稱為 Ethereal)使程序員可以查看網(wǎng)絡(luò)上傳播的內(nèi)容,讓他們有機(jī)會(huì)檢查正在網(wǎng)絡(luò)上傳播的內(nèi)容是否合適,而那些 合適的內(nèi)容(比如敏感信息和明文密碼)沒(méi)有出現(xiàn)在網(wǎng)路上。

          • 虛擬化
            類似 VMWare、Xen、VirtualBox 或 VirtualPC 之類的虛擬化工具(或者更準(zhǔn)確地稱之為平臺(tái))使程序員能夠創(chuàng)建與生產(chǎn)機(jī)器將運(yùn)行的環(huán)境相同的環(huán)境,而不失去主機(jī) PC 環(huán)境的生產(chǎn)力。它還提供了一種便利方法來(lái)在本地嘗試“處于試驗(yàn)階段的” 軟件,而不必讓處于生產(chǎn)狀態(tài)的機(jī)器冒險(xiǎn)。如果不是完全的開(kāi)源項(xiàng)目,大多數(shù)虛擬化工具都提供有某種免費(fèi)選項(xiàng)。

          您不必感到驚訝,這些工具中的其中一些是商業(yè)工具;如果一個(gè)工具一個(gè)星期平均能幫您節(jié)約一個(gè)小時(shí)的時(shí)間,您需要多長(zhǎng)時(shí)間就可以收回購(gòu)買該工具的資金呢?如果管理人員不認(rèn)同這個(gè)觀點(diǎn)的話,那么仔細(xì)計(jì)算使用某一工具節(jié)省的時(shí)間(假設(shè)是開(kāi)發(fā)人員的時(shí)間,或者是產(chǎn)品診斷或執(zhí)行時(shí)間)后,管理員終會(huì)發(fā)現(xiàn),他們?cè)谶@些工具上的吝嗇是一件得不償失的愚蠢事。

          未來(lái)趨勢(shì)展望

          當(dāng)然,Java 開(kāi)發(fā)人員花所有時(shí)間來(lái)學(xué)習(xí)當(dāng)前的技術(shù)并不是一件好事,學(xué)習(xí)完后,新的技術(shù)又接踵而至,使學(xué)過(guò)的所有內(nèi)容一下子都變得過(guò)時(shí)了。隨時(shí)關(guān)注“未來(lái)發(fā)展趨勢(shì)” 同樣重要,惟有這樣,當(dāng)公司 CTO 突然在電梯里問(wèn)您“我最近聽(tīng)到的函數(shù)式語(yǔ)言是怎么一回事,我們需要對(duì)此進(jìn)行研究嗎?” 時(shí),您才會(huì)給出連貫合理的答復(fù)。

          排名不分先后,一些圍繞 Java 平臺(tái)的“未來(lái)趨勢(shì)” 包括:

          • 動(dòng)態(tài)語(yǔ)言
            Groovy 和 JRuby 之類的語(yǔ)言衍生出了其他一些值得研究的項(xiàng)目,如 Clojure 和 Fan,試驗(yàn)表明,低強(qiáng)度類型的環(huán)境能提供更好的生產(chǎn)力和更多的選項(xiàng)。這并非鼓勵(lì)您放棄 Java 語(yǔ)言,不過(guò),最好的效果總是來(lái)自強(qiáng)強(qiáng)聯(lián)合。

          • 函數(shù)式語(yǔ)言
            其興起源于 Scala,由于函數(shù)語(yǔ)言一般支持復(fù)合函數(shù)并缺少共享狀態(tài),因此提供了隱式并發(fā)性的優(yōu)點(diǎn)(盡管有時(shí)它的語(yǔ)法很難讓人接受)。Jaskell 是一個(gè) Haskell-on-JVM 實(shí)現(xiàn),同樣,Clojure 也適合在這里使用,您可以想象生產(chǎn)環(huán)境中的軟件事務(wù)內(nèi)存是什么樣子。

          • Java 中的閉包
            添加閉包支持(也稱為 lambda 或匿名方法)將簡(jiǎn)化部分 Java 編碼工作,對(duì)是否在 Java 7 發(fā)行版中包含此支持進(jìn)行過(guò)熱烈的討論。社區(qū)對(duì)此問(wèn)題的討論深度不一,因此 Java 程序員有必要花點(diǎn)時(shí)間研究這個(gè)問(wèn)題,并看看討論的所有內(nèi)容。

          • DaVinci 機(jī)器
            JVM 的一個(gè)新版本對(duì)其他語(yǔ)言(比如上面提到的動(dòng)態(tài)語(yǔ)言和函數(shù)式語(yǔ)言)更友好,這最終可能會(huì)也可能不會(huì)使它進(jìn)入主流 JVM 發(fā)行版。隨時(shí)關(guān)注這一點(diǎn)有助于理解在當(dāng)前 JVM 上運(yùn)行動(dòng)態(tài)/腳本語(yǔ)言的利弊。

          • 用戶界面開(kāi)發(fā)
            在 Flash/Flex、Silverlight 和 JavaFX 的支持下,Web 瀏覽器得到了顯著的(并且?guī)缀跏求@人的)改變。這還不考慮 Java 領(lǐng)域中的新服務(wù)器端 Web 框架和 Google Web 工具包(Google Web Toolkit,GWT)之類的特例。用戶界面一直是、而且以后將繼續(xù)是一個(gè)吸引人的亮點(diǎn)。了解一到兩個(gè)(更不必說(shuō) Swing 或 SWT 之類的“富客戶端” 庫(kù))庫(kù)將對(duì)構(gòu)建比 HTML 頁(yè)面更具交互性的內(nèi)容大有裨益。

          記住,與任何和“未來(lái)” 相關(guān)的事物一樣,現(xiàn)在討論的內(nèi)容可能最終證明是錯(cuò)誤的方向、曇花一現(xiàn)的事物、對(duì)行業(yè)的一種影響,也可能是下一個(gè)重大事件;保持開(kāi)放的思維,同時(shí)也要保持適當(dāng)?shù)膽岩伞?/p>

          結(jié)束語(yǔ)

          請(qǐng)隨意補(bǔ)充此列表 — 最終會(huì)得到一份更完善的參考資源列表。因?yàn)?Java 世界在不斷發(fā)展,不斷變化和成長(zhǎng),所以列表的內(nèi)容會(huì)隨時(shí)間而改變。這是一件好事;如果我們必須使用 1995 年時(shí)期的 Java 環(huán)境,我們?cè)缇娃D(zhuǎn)向其他技術(shù)了。

          積極參與到 Java 世界中來(lái):貢獻(xiàn)補(bǔ)丁、增強(qiáng),如果沒(méi)有合適的貢獻(xiàn),就構(gòu)建自己的工具。也許您的項(xiàng)目 5 年以內(nèi)會(huì)一直出現(xiàn)在這個(gè)列表中。


          posted on 2009-03-04 08:28 Werther 閱讀(430) 評(píng)論(2)  編輯  收藏 所屬分類: 10.Java

          評(píng)論:
          # re: 必備的 Java 參考資源列表[未登錄](méi) 2009-03-06 11:47 | 小李
          # re: 必備的 Java 參考資源列表[未登錄](méi) 2009-03-11 16:04 | hunter
          打開(kāi)眼界、  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 新野县| 绥阳县| 屏东县| 青田县| 铅山县| 潼南县| 邳州市| 通海县| 邯郸县| 秭归县| 宜川县| 屯门区| 五河县| 博罗县| 常德市| 邯郸市| 苗栗县| 特克斯县| 额济纳旗| 南平市| 贡山| 乐至县| 翁源县| 永丰县| 高雄市| 濮阳市| 太谷县| 长沙县| 通道| 湖南省| 庆城县| 上杭县| 三亚市| 海兴县| 来凤县| 尼玛县| 宣武区| 屯留县| 讷河市| 永泰县| 东山县|