java 學習歷程

最近論壇上看到好幾個朋友都在問,如何學習 Java的問題,”我已經學習了J2SE,
怎麼樣才能轉向J2EE?”, “我看完了 Thinking in Java, 可以學習J2EE了麼?”.
於是就有了寫這篇文章的想法,希望能幫助初學者少走一些彎路。也算是對自己幾
年來學習 Java的一個總結吧.

  在開始之前有必要再討論一下J2ME, J2SE, J2EE這些概念。J2SE, The Micro Ed
ition of the Java 2 Platform. 主要用於嵌入式Java,如手機,PDA等等。J2SE,
Java 2 Platform, Standard Edition, 我們通常所說的JDK(Java Development Ki
t)包含在此,是J2EE的基礎。J2EE, Java 2 Platform,  Enterprise Edition , 就
是所謂的企業級Java. 這些只是從API級別上的劃分,實際上Sun給J2EE的定義是:
開發基於組件的多層的企業級應用的規範。也就是爲各種不同的技術定義一個Java
的規範,使這些不同的技術結合起來,在Java平臺上構建強壯的企業級應用。從這
一點來看,J2EE這個概念應該是涵蓋J2ME, J2SE的。比如一個典型的J2EE應用,網
上商店, 它支持web 方式下訂單,也支持手機下訂單。顯然必須用到J2SE,J2ME.
所以也就不存在所謂的從J2SE轉向J2EE的問題了,只是後者包含的範圍更廣而已。


來看看Sun給出的J2EE 相關技術主要分復罌欏?

1. Web Service技術

-  Java API for XML Processing (JAXP)

-  Java API for XML Registries (JAXR)

-  Java API for XML-based RPC (JAX-RPC)

-    SOAP with Attachments API for Java (SAAJ)

2. 組件模型技術(Component Model Technologies)

-  Java Servlet

-  JavaServer Pages

-  JavaServer Faces

-  Enterprise JavaBeans

-  Java Message Service

-    J2EE Connector Architecture

3 .管理技術(Management Technologies)

-  J2EE Deployment Specification

-  J2EE Management Specification

-  J2EE Client Provisioning

-    Java Authorization Contract for Containers

4.其他相關技術(Other J2EE Technologies)

-  JDBC

-  Java Data Objects (JDO)

-  CORBA (Java IDL and Java RMI-IIOP)

-  JavaMail

-  Transactions

    如此之多的技術難免使初學者無所適從,望而卻步。即使是一位經驗豐富的J2
EE 開發者,又有幾個人敢說J2EE相關的技術我都熟練掌握了。不過作爲一名普通J
2EE應用程序的開發者來說,我們只需要重點學習其中的一部分技術就可以了,對於
其他部分只要做到心中有數,哪天需要用到了知道跑哪裏去找到資料就行了。以我
個人的觀點,下面這些技術是一般J2EE應用開發人員所必須熟練掌握的。Java Ser
ver Page, Java Servlet,  Enterprise JavaBean, JDBC, Transactions.  還有J
AXP等XML相關技術, Java Message Service, Java Mail, JDO等等是最好應該掌握
的。其他 Management Technologies,Connector Architecture等等主要是給容器
提供商中間件提供商參考的,應用開發者不需要怎麼關心,等用到了再去學習也不遲
.

語言學習篇

  首先是J2SE基礎.學習一門新技術,無外乎閱讀和實踐了. 而一本好的參考書對於
初學者來說顯得格外重要. 現在市面上的 Java書籍可以說是鋪天蓋地, 質量也是良
莠不齊, 令初學者無所適從. 所以還是先推薦幾本書籍吧. 目前對於 Java基礎知識
,大家一般都比較推薦兩本書, <<Thinking In Java>> 和 < < Core Java(TM) 2,
Volume I?Fundamentals >>.  第一本書不必多說了,  Bruce Eckel 的大作, Jolt
獲獎書籍. 內容比較全面, 基本涵蓋了java語言的方方面面. 這本書提供了相當豐
富的例子, 非常有利於對學習內容的瞭解. 另外書中第一部分對於OO基本書籍的介
紹, 我覺得對於剛接觸OO的人來說幫助會很大. 而且此書是Open Source的,  可
以從作者網上下載http://www.mindview.net/Books/TIJ/而對於習慣於讀中文版的
學習者來說, 侯捷翻譯的中文版是不錯的選擇.  要說這本說的缺點可能就是對於初
學者來說厚了一點, 這也是一些人並不推薦此書作爲初學者學習用書的原因吧. 後
面一本<<Core Java(TM) 2, Volume I?Fundamentals> >, 目前已經是第七版了, 單
從它出版的次數來看也可以看出此書受歡迎的程度, 這本書特點也是講述比較全面
系統, 基本上一路啃下來的話 Java語言基礎應該算過關了. 缺點也是太厚了, 有點
像參考手冊, 前面部分花了不少篇幅講  Swing和Applet,可能對初學者不是很有用
.   還有一些像<< Java in a nutshell>>也是比較不錯的基礎書籍.

學習了基本的語言基礎,別忘了最重要也是最有用的資料還是JDK文檔. 從你學習ja
va的第一天開始JDK文檔應該是常備手頭了. 如果你碰到問題首先想到的是到論壇上
去提問而不是查閱Jdk文檔, 那先別繼續往下學習了,學會查JDK文檔先. 不誇張的說
在我們的初學者論壇中60%的問題是光查一下JDK文檔就能解決問題的. 最新JDK Do
cumentation下載地址http://java.sun.com/j2se/1.4.2/download.html(目前最新
版是J2SE5 http://java.sun.com/j2se/1.5.0/download.jsp) 不能光說不練, 同一
下載頁面把JDK給下載回來. 安裝完後有一點我想提一下, 安裝路徑下有一個src.z
ip(有些jdk版本是src.jar),  好東西啊---JDK源代碼, 老是有人在論壇上問哪裏有
JDK源代碼下載, 你說東西就放在你家裏還到處找. 有了這個有些問題就需要在論壇
上跟人家爭來爭去了,翻開源代碼瞧一下什麼疑問都沒有了. 幾個最重要的命令行工
具是

javac  : 編譯源文件到class文件

java:     運行class

jar : 打包工具.

Javadoc :  生成java doc的工具.

對於初學java的人來說, 我不推薦使用IDE而 直接用文本編輯器, 然後用命令行編
譯運行. 這樣有利於理解CLASSPATH, PATH這些最基本概念. CLASSPATH是初學者比
較容易感覺迷惑的地方.現在的 IDE太聰明瞭, 給個名字就給你自動生成java sour
ce code,  自動編譯. 可能你運行完了你的第一個Hello World 程序, 還不知道ja
va 和 javac是用來做什麼的. 至於實際的項目開發, 一款合適的IDE還是十分重要
的, 我們稍後再對java 開發工具做一些介紹.

J2EE 基礎和Java語言進階

    學習完語言基礎, 就可以比較自然地轉入J2EE實際技術的學習了. J2EE實在是
比較龐雜, 而EJB, Servlet , 這些核心技術是作爲每一個J2EE開發人員所需要掌握
的. 關於servlet,  我比較推薦<< Core Servlet and JSP 2Edition>>和<< More
Servlets and Java Server Pages>>, 第一本是Sun推薦的Servlet教材. 第二本是
當年 Amazon最暢銷Java書籍, 五星級書籍. 這本書機械工業出版社有中文版叫<<S
ervlet 與JSP權威指南>>, 感覺翻譯得還可以, 第二版好像還沒有看到有中文版.
兩本書都全面系統地介紹了JSP和Sevlet知識, 從web服務器配置, JSP,  Servlet基
本編程, 標記庫(Tag Lib), 過濾器, 事件框架都有很好地描述. 提供地例子也比較
實用. 對於EJB學習, 比較著名有兩本書, << Enterprise JavaBeans, 3nd Editio
n>> 和<<  Mastering Enterprise Java Beans Third Edition>>, 兩位作者 Rich
ard Monson, Ed Roman都是屬於業界重量級人物.而Richard Monson本身就是EJB規
範專家組成員.對我來說,  兩本書難分優劣, 第二本書有個好處就是可以免費下載
http://www.theserverside.com/books/wiley/masteringEJB/index.tss.

還是那句話,不能光說不練, 不過J2EE 的練習做起來有一點麻煩, 應用服務器是不
可少的, 最好還得準備個輕量級的數據庫. 下面簡單介紹一下這些工具.

web服務器(Servlet Container)方面有.

Tomcat.   http://jakarta.apache.org/tomcat/

Jetty:      http://jetty.mortbay.org/jetty/

應用服務器常用的有,

Jboss:        http://www.jboss.org/products/index

Weblogic:   http://www.bea.com/framework.jsp?CNT=index.htm&FP=/content/p
roducts/server

WebSphere: http://www-128.ibm.com/developerworks/downloads/ws/was/?S_TAC
T=105AGX28&S_CMP=DLMAIN.

Tomcat, Jetty, Jboss都是Open Source. Weblogic 和 WebSphere是J2EE服務器中
的老大級人物, 價格也不菲. 不過對於開發者有免費的試用版下載.

如果單單只是學習Servlet, 推薦使用Tomcat, 它是Sun官方指定的Servlet, JSP規
範的參考實現.. 對初學者最重要的是它使用比較簡單, 自帶文檔比較齊全, 使用者
衆多, 有什麼問題容易在論壇上面得到幫助. 如果學習EJB的話, 推薦使用Jboss,
不僅僅是因爲它是 Open Source的,主要是配置比較簡單, 使用方便. 比如說對於連
接數據庫, 對於常用的MySQL, Oracle , MS SQL等等都提供了Sample Config文件,
 直接拿過來做些小改動扔到Deploy目錄下就可以用 DataSource了, 部署J2EE應用
也簡單,  把整個 .ear或者.war扔到deploy下就可以了. 唯一不方便的地方是從 J
boss3.0開始, 它的文檔開始收費了. 但是對於一些基本的配置, 在網上還是非常容
易找到的, 畢竟它太流行了. 至於 Weblogic, 也比較容易使用, 不過比起Jboss來
個頭大了很多, 通過強大的管理界面使得一些常用的配置工作變得十分簡單.  和J
boss比起來它的文檔就太多了, 簡直是有點羅裏八嗦, 比如要部署一個.ear文件,
一般我們也就是直接扔到domain下的applications目錄下就會自動deploy了, 但是
要看它的文檔可是長篇大論, 容易嚇着初學者, 以爲這又是什麼高深的學問. 至於
WebSphere, 個人不推薦初學者使用, 相比前倆個Server比較難使, 而且狂吃內存.
不過在企業級市場這個傢伙表現不俗, 畢竟是出生於IBM這樣的豪門.

數據庫方面, 目前常見的主要有PostgreSQL, MySQL, Oracle,  MS SQL, DB2等等.
前面兩個是開源數據庫, 後面幾個基本上壟斷着大部分的數據庫市場. 對於初學者
用來做做EJB, JDBC的練習, 我推薦MySQL, 理由還是很簡單, 開源軟件不要錢, 個
頭小使用方面, 用戶衆多文檔齊全. 下載地址http://www.mysql.com/products/my
sql/.  PostgreSQL也可以考慮, 不過國內使用者遠不如MySQL多, 所以要在論壇上
問起問題來就少方便一些了, 下載地址http://www.pervasive-postgres.com/down
loads/. 至於後面那些比較重量級的數據庫, 爲了做做練習而言就不用考慮了, 咱
也花不起這個錢啊.

學習完J2EE 的這些具體技術, 這個時候進行基本的 J2EE 開發應該是不成問題了.
 此時應該考慮提高自己的代碼質量了. 這裏我強烈推薦 Martin Fowler的<<Refac
toring:  Improving the Design of Existing Code >>, 這本書不是一本非常實際
的書, 作者完全是手把手地教你如何提高代碼質量, 從具體地代碼中告訴你什麼是
代碼的Bad Smell, 如何去掉這些Bad Smell. 不少書評是這麼說的, 這本書對於初
級,中級的讀者幫助是立杆見影的.至少 就我接觸到的幾個學習編程不久的程序員,
 編碼質量在短期內都有很大提高. 當然重構 (Refactoring)這一概念並不只針對J
ava語言的, 它對所有OO語言都是適用的. 重構的概念是如此深入人心,以至於今天
幾乎所有流行的  IDE工具都有對重構的支持. 這裏我還想再推薦一本<<Effective
 Java>> . 從C++ 過來的程序員都知道<<Effective C++>>在C++領域的地位, 至今
還流傳着這樣的趣話, C++程序員分爲兩種, 一種是讀過 <<Effective C++>>的, 另
一種是沒有讀過C++的. 雖然這本<< Effective Java>>在Java領域的影響也許沒有
那麼大, 但對於Java程序員絕對有相當的指導價值. 作者是Sun公司的 Joshua Blo
ch,  java Collection framework 的設計者. 作者站在JDK設計者的角度向你介紹
他的 Best Practice, 應該這樣做而不應該那樣做, 對於JDK中某些API設計的缺陷
他也毫不袒護的指出. Java語言之父 James Gosling爲此書寫的前言是這麼說的”
  I sure wish I had had this book ten years ago. Some might think that I
 don't need any Java books,  but I need this one”. 這本書會讓你覺得原來
你對Java還是有很多東西不瞭解的. 舉個例子來說, 對象的equals方法,  我們認爲
它很簡單, 也許你每天都在爲你新寫的Class重載這個方法, 但是你在重載的時候注
意過“自反”, “對稱”, “傳遞”這些必須要考慮的因素, 你是否同時還小心謹
慎的重載了hashcode這個方法? 如果沒有, 建議你要讀一下這本書. 讀完這本書,你
會覺得離Java的距離更近了.  上面兩本書都出過中文版, 後面一本<<Effective J
ava>>還有兩個版本的中文版, 第一次翻譯的比較差一點,  後來機械工業出版社 又
委託潘愛民先生重新翻譯了一遍.同一本書在同一個出版社連續被翻譯了兩次也說明
國內出版界對這本書還是比較重視的.  

這個階段, 在看書的同時, 可以結合着學習一些優秀的開源項目的源代碼. 這些開
源項目的代碼風格, 註釋都是值得借鑑的. 實在太懶也別忘了手頭上還有個Jdk的源
代碼. 其實也不用刻意去找源代碼, 在實際的J2EE項目開發中, 基本上都會用到一
些優秀的開源項目.  Framework可能會用到 Spring, Struts, Log機制基本上都會
JarkartaCommons Log或者Log4j,  單元測試會大多會用Junit, 結合項目閱讀一下
其中的一些源代碼, 既可以提高自己又對項目會有所幫助, 說不定因此而得到PM的
賞識呢. 一舉兩得, 何樂而不爲呢. 呵呵, 有點扯遠了. 過了初學者階段,該學會如
何找到適合自己的Java書籍了. 歷經數十載, 今天的Java技術已經變的如此之龐雜
, 我相信即使窮淨一個人畢生之精力也不可能把Java所有的相關技術都學通, 何況
新技術還在層出不窮地推出, 3年之前誰會知道Struts會成爲Web框架事實上的工業
標準.  2年之前誰會知道Hibernate會在今天獨領風騷.  既然已經不能指望一次性
把java技術的方方面面都學個通, 在實際中也只能是需要什麼技術再學習什麼技術
了. 而能否選擇一本好的參考書籍帶來的就是事半功倍和事倍工半 的效果. 所以我
覺得花點時間放在選擇書籍上面還是很值得的, 否則你在後面只會花更多的時間.
下面我談談自己選擇書籍的一些經驗, 不一定正確. 首先看作者, 像上面提到的那
些書的作者, 都是業界鼎鼎大名的, 選擇他們的書一般錯不了. 大家看的書多了,
自己胸中自然也會有一個list, 哪些作者是信得過的.二看出版社, 計算機書籍方面
,  Oreilly,  Addison-Wesley都是公認比較好的出版社. 對於目前比較流行的Jav
a技術, Oreilly的<< XXXX  in  Action>>系列是不錯的選擇. 另外我還會去看看A
mazon網站(http://www.amazon.com/)的書評, 一般小於3星級的書我都不會考慮.
還有一個好去處theserverside,http://www.theserverside.com/的書評, 這裏的書
評比較有趣,往往都有很激烈的爭論, 裏面經常會看到一些名人在發言.我要向所有
Java 學習者推薦, 如果我的收藏夾裏面只能存放兩個網站,我會選擇java.sun 和t
heserverside. 在這裏你可以瞭解最新的Java動態, 可以學習第一手的Java資料,
可以看到 Java高手們(裏面不乏業界大腕)激烈辯論.

到此階段, Java Developer的基本功底應該算是打好了吧,往後就是不斷學習嘍.  
結束這一段之前,最後再介紹一本書Oreilly 的<<Java Threads, Second Edition
>>,  因爲我覺得多線程編程屬於 Java基本功, 每一個想學好Java的人都應該好好
掌握.

提高篇

在這個階段應該從軟件架構, Framework層次上來學習了. 作爲面向對象的聖經<<D
esign Patterns>>, 這本書是不得不推薦的. 不用再多說了, 這本在面向對象領域
地位完全是屬於教父級別的.  不管你學習的是什麼OO語言, 不管你現在是用.Net還
是J2EE 開發, 這本書都是你進階之路上的必讀之書. 而<<Core J2EE Patterns>>則
專門針對於J2EE來討論設計模式, 書中Sun Java Center的資深設計師描述了J2EE關
鍵技術的模式. 最佳實踐,設計策略和經過驗證的解決方案. 對於每一個希望成爲J
2EE 架構師或者設計師, 這本書值得一讀. 學習設計模式的時候,建議是結合實際的
源代碼來看, 比如看看Junit源代碼, 你可以看到很多設計模式優雅的實現, 作者之
一Erich Gamma本身 就是<<Design Patterns>>的作者. 至於J2EE 的設計模式, Su
n還開闢了專門的空間http://java.sun.com/blueprints/patterns/,   裏面有對常
用模式的討論又提供了詳細的源代碼樣例. 正如Grady Booch所說, 模式對於普遍問
題提供了通用的解決方案, 利用模式就等於擁有一個強大的專家隊伍.  如果你還沒
有學習, 現在就開始吧. 此外對於面向對象方法論, 極限編程的思想也應該有所了
http://www.extremeprogramming.org/ .  對於J2EE項目的具體實施, Rod John
son的<<Expert One-on- One J2EE Design and Development (Programmer to Pro
grammer)>>也很有價值,  該書以作者豐富的實戰經驗向我們展示如何用儘可能簡單
的解決方案構建J2EE 應用, 書中作者第一次提出這樣的觀點, 很多時候, J2EE應用
完全沒有必要用到EJB, 對於言必稱EJB的廣大J2EE開發者來說, 怎麼說也有點驚世
咳俗的味道. 當然, 作爲Servlet和JDO兩個專家組的成員, 這可不是作者信口胡騶
的. 今天風靡Java世界的Spring 框架最初便是源於此書, 而IOC, AOP等概念更是被
時下的java開發者掛在嘴邊. 最後, 作爲對Java的深入學習, Java技術的各個Spec
ification也有必要一讀. 暫時就寫到這裏吧.

   歡迎大家都來討論一下自己學習經驗, 曹偉 [email protected]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章