學(xué)Java,需要多長時間
2008-05-30 12:40
1、我覺得先學(xué)學(xué)JSP,用純JSP做個日記本簡單的小系統(tǒng),純粹從語言層面上了解一些基礎(chǔ)知識,把tomcat玩熟了,就用記事本編就行,主要是熟悉,能夠理解jsp運行機(jī)制。然后學(xué)學(xué)java,看本基礎(chǔ)的書,都是那種講講語法的,變量怎么定義,流程控制語句怎么寫,怎么編寫函數(shù),怎么處理表單元素,處理字符串,連接數(shù)據(jù)庫,會一種就行。這些都是浮在語言表面,你編寫的程序還是結(jié)構(gòu)化的,跟你以前用asp編的程序沒什么區(qū)別,但是這很重要。你可以直接選擇目前公司里都在使用的Eclips來開發(fā),但是你要區(qū)分IDE和Java的區(qū)別,不要被IDE邦死了。這些都熟了之后看《thinking in java》,看完之后,看core java兩卷,深入了解到j(luò)ava本身??催@些書的時候你可能就懵懂的進(jìn)入oo世界了,估計還不太明白。可以配合一些oo的理論方面的書,oo不過就是那幾個特點,封裝分配,多態(tài)性,繼承,第一個要理解的當(dāng)然是對象。看完這些后就可以學(xué)習(xí)UML建模了,主要會畫三種圖,用例圖,類圖,序列圖,三種圖就足夠了。不要期望自己一下就學(xué)會UML,就會建模,得跟java學(xué)習(xí)聯(lián)系起來,編個幾萬行代碼,慢慢就會設(shè)計對象了。然后看GOF《設(shè)計模式》,對你的面向?qū)ο笏枷胍粋€巨大的提升,這時你一定會去重讀繼承,接口,抽象類的相關(guān)的細(xì)節(jié)了,并且你會發(fā)現(xiàn)你的理解能力上了一個臺階。然后看看三層結(jié)構(gòu)的知識,這時候編程考慮使用jsp+servlet+javabean,分出表示層,業(yè)務(wù)層和數(shù)據(jù)訪問層,這是基礎(chǔ)。
2、 以上都是J2SE,然后看thinking in enterprise java,學(xué)習(xí)j2ee基礎(chǔ)知識,你慢慢就會明白持久層的一些機(jī)制了,后面的什么各種新鮮的東西,CMP的東西本質(zhì)是什么,你都很好理解了。當(dāng)然你要不斷編碼,把書里的概念都變成實踐,只有自己動手做,才能理解,看會不等于學(xué)會,學(xué)會不等于學(xué)精,學(xué)好技術(shù)不等于會設(shè)計,層次會越來越高。實踐是認(rèn)識的唯一來源?。?!一定要實踐。 3、編碼時你可以考慮看看《重構(gòu)》這本書,覺得很好,同時還可以看看Thinking in Design Pattern with java,會使你的代碼越來越漂亮。 4、 現(xiàn)在你的代碼已經(jīng)很專業(yè)了,而且可以分出不同的層次,因為你知道了最基本的原則,那就是要高內(nèi)聚,低耦合,要不斷地解耦,但是怎么更好的解耦,什么是最佳實踐,你可能并不知道,雖然你看了下面這本書,你會發(fā)現(xiàn)你有些做法已經(jīng)是最佳實踐了,但是依然會存在這種情況,有些你并不確定,那就看看core java pattern吧,都是14年以上開發(fā)經(jīng)驗的架構(gòu)師和眾多java大師的經(jīng)驗總結(jié),書中序言所寫,看完這本書,你將成為Java架構(gòu)師。 5、這些知道之后,你已經(jīng)對分層的本質(zhì)很理解了,你可以知道Struts不過是框架而已,只是運用了頁面助手,前端控制器,應(yīng)用控制器等這些表示層或者表示層和業(yè)務(wù)層(Tier)中間連接層(Layer)的模式,對于標(biāo)簽的理解你也是深刻的。而到集成層,采取不同的策略和模式,數(shù)據(jù)持久化的理論和經(jīng)驗,框架不過是把大家都用得著的東西做好了給你用,沒有框架的話很多事需要你自己做,僅此而已,跟那些偉大的思想相比,它們太簡單了。至于到具體的容器,DAO策略還是CMP,BMP,在具體使用怎樣的ORM工具,都是更簡單的事情了。但是看spring,struts這些框架時你會重新閱讀前面的java教程的,因為spring用到了java的反射機(jī)制等。 6、到此為止,你會發(fā)現(xiàn)你OOP時,想到的就會是性能,到底用數(shù)組還是ArryList,還是用HashMap,OOD時,你會考慮并發(fā)性,擴(kuò)展性,復(fù)用性,現(xiàn)有框架,池,事務(wù)等方面,你會發(fā)現(xiàn)每一個問題,你都有好幾種選擇方案,你會不斷重構(gòu)你的代碼,改良你的設(shè)計。 7、下一步是OOA,那就看一本《分析模式》吧,會教你很多分析的現(xiàn)成方法。 此時,你已經(jīng)是OO方面的專家了,構(gòu)架一個大型系統(tǒng)應(yīng)該沒有問題了,而且你的能力可以很輕易的學(xué)會Web Service,AJAX等這些時髦的東西,你編程的時候可能最常翻的書是JDK API,但是你會遇到新的問題,就是讓你設(shè)計一套股票系統(tǒng),可是你對股票一無所知,現(xiàn)學(xué),這是必須的,但是這時你會發(fā)現(xiàn)你基礎(chǔ)好差,所以在學(xué)技術(shù)的同時,多看看各個領(lǐng)域的書吧,其實都是有模式的,比如ERP選型,CRM的幾種樣子,電子商務(wù)的幾種模式,看多了你也就會了,所以要學(xué)會域建模,因為你是要為商務(wù),政務(wù)服務(wù)的,是為人服務(wù)的。 我覺得這在技術(shù)方面就算到頭了,如果你想學(xué)管理,當(dāng)然前提是技術(shù),要不你不知道完成一個項目到底要多久花多少錢。你必須了解開發(fā)方法,迭代開發(fā),XP等,當(dāng)你有了技術(shù),再看這些很容易,因為你會明白為什么要測試先行,在技術(shù)上怎么實現(xiàn)技術(shù)先行;你也會知道結(jié)對編碼的意義。學(xué)習(xí)了這些你會是項目經(jīng)理。 但是你可能還需要多看看經(jīng)濟(jì)領(lǐng)域的書和法律書,還包括中國政府的報告等等,要政治敏感,這樣你才能成為比爾蓋茨。這離主題有點遠(yuǎn)了。 總的原則是: 1、先從語言層面掌握J(rèn)ava(很多說Java容易的人都是只掌握了語言層面的人,當(dāng)你面對如何解耦,怎樣利用線程,如何更好復(fù)用,面向?qū)ο髸r,你就會覺得它好復(fù)雜好難)然后再到深入理解Java,先學(xué)J2SE再學(xué)J2EE。 2、理論和實踐相結(jié)合,先看操作,理解本質(zhì)和原理,然后做,然后翻過來看理論,你會覺得這件事做起來就是順理成章的了,因為當(dāng)初理論就是這么被推出來的。 3、高處著眼,有了基礎(chǔ)后,你可以從本質(zhì)上去跟上時髦的東西,比如ORM,更細(xì)點說就是Hibernate等,比如各層框架,Spring,Struts等,都很簡單。 4、學(xué)好理論,你用到多線程時可能會覺得自己對于線程機(jī)制不慎了解,對對象在內(nèi)存中的生命周期不清楚,對于JUnit斷言的不理解,對調(diào)試程序的原理不明白,去看計算機(jī)組成原理吧;可能搞不清楚數(shù)組的本質(zhì),去看數(shù)據(jù)結(jié)構(gòu),這時你會發(fā)現(xiàn)自己線性代數(shù)太差;去討論Java自帶的排序算法和你自己編寫的算法,可能覺得自己對一個簡單的函數(shù)都看不懂,設(shè)計復(fù)雜的函數(shù)就更不會了,去看計算方法吧,這時你可能會感到你的高等數(shù)學(xué)太差了;不理解HTTP的接收應(yīng)答機(jī)制,不知道AJAX原理,那么多語言都有request,response,到底原理是什么,XML的作用是什么,SOAP協(xié)議,怎么在網(wǎng)絡(luò)上傳輸這些數(shù)據(jù),看看基礎(chǔ)知識,這些都很簡單。掌握基礎(chǔ),只有到這時你才會覺得它重要,那就等你知道了再去看吧,也不會太晚,而且你會學(xué)的更好。不要羨慕那些碩士博士,他們沒編過程序,照樣不如你,有些都是真的是你不做就永遠(yuǎn)不理解,不做底層,理解不了上層。 5、學(xué)好外語,因為你會發(fā)現(xiàn)很多資料很多問題的答案很多調(diào)試錯誤的解釋都是外文的,這時google是最好的工具,但是你的英文要起碼可以讀懂人家說什么;還有研究Web service,SOA之類的東西,往往都是英文的。 學(xué)好我說的這些,大約需要3年,但是學(xué)好JAVA,達(dá)到語言層面,只需要1周,達(dá)到內(nèi)部,需要半年,達(dá)到會設(shè)計,需要做3個以前項目,達(dá)到架構(gòu)師,估計得2到3年,同時那些基礎(chǔ)中的基礎(chǔ),你更需要好好學(xué),那些是最慢的。 學(xué)到語言層面只需要兩樣?xùn)|西:玩會IDE+拿一本包含我所說的那些基本語法的書。玩會IDE你要做到會簡單配置,能運行出東西,會調(diào)試(不會調(diào)試就沒法編程),然后拿本JDK API,打開google和百度,有了錯誤就去搜索,這樣學(xué)習(xí)Java真的很簡單。 Linux也是要先會玩,要能上網(wǎng),會下載東西,安裝軟件,寫文檔,然后就是能聽歌看電影,就夠了。接下來在編程,關(guān)鍵要會shell那些命令??纯炊嘤脩舨僮飨到y(tǒng)的書,建立一個理論高度,就OK了 最后說一句,中國大多數(shù)程序都停留在語言層面,很多人都是在懵懂中編程,可能調(diào)不通程序,突然改了個東西就通了,但是深層原因并不知道,很多都是東試西試試驗出來的,都是黑箱編程,總感覺隔著霧看程序,我身邊很多人寫了一萬行代碼,還不理解equals和==的區(qū)別呢,還不知道Class object=new Class()等號左右兩邊各代表什么呢。但是他們一樣能編程,一樣能開發(fā)出系統(tǒng),很多人都以為這樣就算Java高手了,什么都能編并不等于編的好,當(dāng)然什么都能編是個前提。所以要學(xué),就學(xué)深入,起碼一種語言要學(xué)深,在web開發(fā)方面,我推薦java學(xué)深,或者說沿著java路學(xué)深,這樣去研究C#,.Net平臺就很容易,再看ASP和PHP就覺得大家都一樣了,上升到高度不過也就是設(shè)計模式的問題了,殊途同歸。 |
|
來自: 風(fēng)逝無痕 > 《編程》