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

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