經常看到有些學生、求職者捧著一本類似JBuilder入門、Eclipse指南之類的圖書學習Java,當他們學會了在這些工具中拖出窗體、安裝按鈕之后,就覺得自己掌握、甚至精通了Java;又或是找來一本類似JSP動態網站編程之類的圖書,學會使用JSP腳本編寫一些頁面后,就自我感覺掌握了Java開發。
還有一些學生、求職者聽說J2EE、Spring或EJB很有前途,于是立即跑到書店、或圖書館找來一本相關圖書。希望立即學會它們,然后進入軟件開發業、大顯身手。
還有一些學生、求職者非常希望找到一本既速成、又大而全的圖書,比如突擊J2EE開發、一本書精通J2EE之類的圖書(包括筆者曾出版的《輕量級J2EE企業應用實戰》一書,據說銷量不錯),希望這樣一本圖書就可以打通自己的“任督二脈”,一躍成為J2EE開發高手。
也有些學生、求職者非常喜歡J2EE項目實戰、項目大全之類的圖書,他們的想法很單純:我按照書上介紹,按圖索驥、依葫蘆畫瓢,應該很快就可學會J2EE,很快就能成為一個受人羨慕的J2EE程序員了。
……
凡此種種,不一而足。但最后的結果往往是失敗,因為這種學習沒有積累、沒有根基,學習過程中困難重重,每天都被一些相同、類似的問題所困擾,起初熱情十足,經常上論壇詢問,按別人的說法解決問題之后和高興,既不知道為什么錯?也不知道為什么對?只是盲目地抄襲別人的說法。最后的結果有兩種:
1.久而久之,熱情喪失,最后放棄學習。
2.大部分常見問題都問遍了,最后也可以從事一些重復性開發,但一旦遇到新問題,又將束手無策。
第二種情形在普通程序員中占了極大的比例,筆者多次聽到、看到(在網絡上)有些程序員抱怨:我做了2年多Java程序員了,工資還是3000多點。偶爾筆者會與他們聊聊工作相關內容,他們會告訴筆者:我也用Spring了啊,我也用EJB了啊……他們感到非常不平衡,為什么我的工資這么低?其實筆者很想告訴他們:你們太浮躁了!你們確實是用了Spring、Hibernate又或是EJB,但你們未想過為什么要用這些技術?用這些技術有什么好處?如果不用這些技術行不行?
很多時候,我們的程序員把Java當成一種腳本,而不是一門面向對象的語言。他們習慣了在JSP腳本中使用Java,但從不去想JSP如何運行,Web服務器里的網絡通信、多線層機制,為何一個JSP頁面能同時向多個請求者提供服務?更不會想如何開發Web服務器;他們像代碼機器一樣編寫Spring Bean代碼,但從不去理解Spring容器的作用,更不會想如何開發Spring容器。
有時候,筆者的學生在編寫五子棋、梭哈等作業感到困難時,會向他們的程序員師兄、朋友求救,這些程序員告訴他:不用寫了,網上有下載的!聽到這樣回答,筆者不禁感到啞然:網上還有Windows下載呢!網上下載和自己編寫是兩碼事。偶爾,筆者會懷念以前黑色屏幕、綠熒熒字符時代,那時候程序員很單純:當我們想偷懶時,習慣思維是寫一個小工具;現在程序員很聰明:當他們想偷懶時,習慣思維是從網上下一個小工具。但是,誰更幸福?
當筆者的學生把他們完成的小作業放上互聯網之后,然后就有許多人稱他們為“高手”!這個稱呼卻讓他們萬分慚愧;慚愧之余,他們也感到萬分欣喜,非常有成就感,這就是編程的快樂。編程的過程,與尋寶的過程完全一樣:歷經辛苦,終于找到心中的夢想,這是何等的快樂?
如果真的打算將編程當成職業,那就不應該如此浮躁,而是應該扎扎實實先學好Java語言,然后按Java本身的學習規律,踏踏實實一步一個腳印地學習,把基本功練扎實了才可獲得更大膽成功。
實際情況是,有多少程序員真正掌握了Java的面向對象?真正掌握了Java的多線程、網絡通信、反射等內容?有多少Java程序員真正理解了類初始化時內存運行過程?又有多少程序員理解Java對象從創建到消失的全部細節?有幾個程序員真正獨立地編寫過五子棋、梭哈、桌面彈球這種小游戲?又有幾個Java程序員敢說:我可以開發Struts?我可以開發Spring?我可以開發Tomcat?很多人又會說:這些都是許多人開發出來的!實際情況是:許多開源框架的核心最初完全是由一個人開發的。現在這些優秀程序已經出來了!你,是否深入研究過它們,是否深度掌握了它們?
如果要真正掌握Java,包括后期的Java EE相關技術(例如Struts、Spring、Hiberate和EJB等),一定要記住筆者的話:絕不要從IDE(如JBuilder、Eclipse和NetBeans)工具開始學習!IDE工具的功能很強大,初學者學起來也很容易上手,但也非常危險:因為IDE工具已經為我們做了許多事情,而軟件開發者要全部了解軟件開發的全部步驟。
筆者就自己對Java EE體系的理解,對Java EE學習者給出一個粗略線路圖,如下圖所示:

(轉自:http://www.crazyjava.org/thread-211-1-1.html)