<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java Votary

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      48 隨筆 :: 1 文章 :: 80 評(píng)論 :: 0 Trackbacks

    這里說說我的經(jīng)歷吧。大學(xué)前以及大學(xué)前面三年的經(jīng)歷就不說了,因?yàn)榇髮W(xué)前的高中就是好好學(xué)習(xí),大學(xué)前三年就是混過來的。

        我上的學(xué)校還算可以,雖然不是北大清華這樣第一流名牌大學(xué),但至少也算中國的第二流名牌大學(xué)了。大學(xué)中前面三年都陪伴著游戲過去,所學(xué)到的只是些計(jì)算機(jī)基 礎(chǔ)知識(shí)。到大四后我突然發(fā)現(xiàn)就業(yè)的問題就在眼前,而自己似乎什么也不會(huì),于是開始看書。最一開始重點(diǎn)看的是C++,可是后來自從看了一本J2ME的書以后 被Java所吸引。當(dāng)時(shí)雖然學(xué)校上過Java課程,但是自己也只是學(xué)了很少的皮毛,也就只會(huì)寫寫Hello World和什么加減法之類很簡單的程序,連API都知道沒有幾個(gè),比如說字符串長度的API我都不知道。所以剛開始自己學(xué)J2ME的時(shí)候?qū)覍沂艽欤约? 也明白自己的缺點(diǎn),決定從J2SE開始好好補(bǔ)上。

        剛開始為了熟悉Java開發(fā)環(huán)境,買了本JBuilder開發(fā)的教程,并且在自己的本本上安裝了JBuilder進(jìn)行演練。當(dāng)時(shí)的我連JavaDoc都不 知道,每次究竟什么API能做什么事情一點(diǎn)頭緒都沒有,還不知道哪里去查,后來同學(xué)告訴我有個(gè)JavaDoc這個(gè)東西,我還興奮不已,覺得自己被從黑暗中 拉回來了。一開始使用JBuilder的時(shí)候,馬上為之所吸引,有兩個(gè)原因,第一是因?yàn)樗詣?dòng)標(biāo)出語法錯(cuò)誤,邊寫代碼邊提示你什么地方語法出錯(cuò),記得以前 使用VC++的時(shí)候,每次程序?qū)懞煤笙染幾g,然后再Build,再運(yùn)行,這其中每個(gè)步驟都會(huì)出不少錯(cuò)誤。特別是在編譯的時(shí)候,寫個(gè)200多行的程序一次編 譯下來就有100多個(gè)錯(cuò)誤,結(jié)果每次花在這上面的工夫都要好長時(shí)間。而JBuilder使用了即時(shí)語法分析,所以基本上程序?qū)懲辏涂梢允÷哉{(diào)試語法錯(cuò)誤 的步驟了。第二個(gè)原因是可以自動(dòng)提示代碼,這個(gè)功能可以讓你迅速熟悉API,免得每次去查幫助文檔那么麻煩,我就是這么很快掌握了許多API的。

    可能大家會(huì)問我為什么一開始不學(xué)習(xí)《Java編程思想》,的確這本書我們宿舍就有好幾本,不過大家普遍反映效果不好,到最后都不知道說的是什么,所以我也沒敢看。

        經(jīng)過20天左右的學(xué)習(xí),對Java有了更進(jìn)一步的了解,熟悉了不少API函數(shù),由于在那本書上寫開發(fā)SWING占了不少篇幅,所以也對Swing的開發(fā)了 解了不少。看完以后因?yàn)橥瑢W(xué)說Java的靈魂就是多線程編程,所以開始看Oreilly的《Java線程》。記得在大學(xué)中操作系統(tǒng)這門課我們就提到過線程 的知識(shí)。并且課本上就是用Java實(shí)現(xiàn)的,當(dāng)時(shí)有了一點(diǎn)點(diǎn)概念,但這次看這本專門說線程的書后才發(fā)現(xiàn)我原來了解的那些根本是什么都不算(當(dāng)然,現(xiàn)在回想起 來,我那時(shí)看書學(xué)到的也只是很簡單的皮毛而已)。看完這本書后我自己學(xué)會(huì)在我的JBuilder下開發(fā)很簡單的多線程程序,并且模擬線程沖突,等待等情 況。當(dāng)時(shí)看著自己寫的一兩百行程序可以順利執(zhí)行,那種興奮勁就別提了。這本書我看得也很快,大概就花了3個(gè)星期看完。

        經(jīng)過上面的學(xué)習(xí),自己相比以前來說提升了不少,這時(shí)候自己也找到了工作,是做J2EE對日外包的,所以更加堅(jiān)定了努力學(xué)習(xí)Java的信心。

        在上面寫的程序中,我自己寫程序沒有規(guī)范性,在代碼編寫的時(shí)候自己的盲點(diǎn)特別多,還容易犯低級(jí)失誤。同學(xué)有一個(gè)《Effective Java》中文版,可是我看了幾頁發(fā)現(xiàn)自己根本看不懂,里面什么靜態(tài)工廠啊,什么單例模式什么的根本不知道什么東東。我知道自己目前的水平還不夠,所以決 定放下這本書,去尋找別的適合我的書看。這個(gè)時(shí)候我看到了候捷先生翻譯的《Practical Java》一書,當(dāng)時(shí)是剛剛上的書架。這本書我在書店翻了下目錄后就感覺如獲至寶,馬上買回家,在回家的公車上就貪婪地讀起來。這本書不算很厚,但是自己 看得卻很認(rèn)真很仔細(xì),也明白了不少東西,比如Java中等號(hào)和equals()方法的區(qū)別,究竟什么時(shí)候用什么。還有Exception處理機(jī)制,以前不 知道什么叫Exception,只是JBuilder提示我要我拋出Exception我再拋出Exception,自己覺得這東西基本沒什么用呢。但是 看了這本書后我改變了看法,我發(fā)現(xiàn)Exception是個(gè)很好的東西,可以迅速把程序從正常狀態(tài)和異常狀態(tài)區(qū)分開來,即使而準(zhǔn)確地在指定位置得到處理。那 時(shí)自己也有了以后寫程序的時(shí)候注意編寫異常處理部分的想法。《Practical Java》這本書雖然不厚,但是我卻非常仔細(xì)地去看了,大概花了1個(gè)月時(shí)間,我把這本書完全消化了下去。

        當(dāng)時(shí)聽說Java在網(wǎng)絡(luò)上的應(yīng)用非常廣,我也不知道究竟是什么應(yīng)用,我于是買了Oreilly的《Java網(wǎng)絡(luò)編程》這本書。這本書雖然很厚,其實(shí)前半部 分內(nèi)容不是很復(fù)雜,后半部分寫什么RMI的東西我也看不大懂,只能理解個(gè)概念。通過這本書,我了解了HTTP協(xié)議究竟是什么一個(gè)東西,在它上面利用 Java傳輸數(shù)據(jù)該如何做,知道了什么是Request,什么是Response。這也為以后開始我的J2EE之旅打下了很好的基礎(chǔ)。當(dāng)時(shí)自己依然是邊看 書邊自己寫代碼來驗(yàn)證,自己寫了個(gè)服務(wù)器端Socket和客戶端Socket,成功進(jìn)行了通信,又在上面加上了安全Socket內(nèi)容,實(shí)現(xiàn)了SSL通信。 當(dāng)時(shí)我把寫的這個(gè)又套上了Swing的外殼,還和同學(xué)拿這個(gè)傳文件呢。不過當(dāng)時(shí)也沒有考慮過什么校驗(yàn)碼之類的東西,所以傳傳小文件還是可以的,文件稍微一 大一點(diǎn),傳過去的文件總是不對頭,和我原來的文件經(jīng)常會(huì)出一些差異,導(dǎo)致文件打不開。

        《Java網(wǎng)絡(luò)編程》這本書看了不少時(shí)間,因?yàn)闀容^厚,東西也比較多,不過除了后面的一些知識(shí)以外,其他的還是容易理解的。大概花了2個(gè)月左右的時(shí)間看 完。看完后,時(shí)間也到了2004年的3月。我也輪到開始我畢業(yè)設(shè)計(jì)的時(shí)候了。我們的畢業(yè)設(shè)計(jì)導(dǎo)師都還不錯(cuò),給你自己選個(gè)課題,我選的是一個(gè)B/S結(jié)構(gòu)的在 線簡歷處理系統(tǒng),正好和我所學(xué)和下面所工作的東西是一條路上的了。這時(shí)我覺得我應(yīng)該往B/S結(jié)構(gòu)上轉(zhuǎn)了,當(dāng)時(shí)在選擇先看Servlet還是先看JSP上猶 豫不決。最終決定先看Servlet,后來也證明了我的決定是對的,我在熟悉了Servlet后再學(xué)JSP是非常容易的,基本上根本沒有遇到什么難點(diǎn)。

    可 能有人會(huì)覺得我看了好多Oreilly的書,雖然我不能說Oreilly本本都是好書,不過相對來說,好書的概率總超過許多其他的出版社,而且體系比較齊 全。我看得幾本書我都覺得還不錯(cuò)。現(xiàn)說說下面這本我學(xué)Servlet時(shí)候看的《Java Servlet編程》來說吧,很不錯(cuò)的一本書,讓我迅速知道了什么是Servlet,然后通過最簡單的實(shí)例,讓你知道了Servlet如何運(yùn)行的,跟 HTTP協(xié)議是如何配合的,如何返回HTML形式的文本,XML配置符該如何寫,究竟每個(gè)元素是什么意思等等。由于我原來有一定的XML基礎(chǔ)(知道XML 語法各種格式的含義而已),所以掌握起來還算比較快。通過這本書,我知道了如何動(dòng)態(tài)生成HTML文檔,知道如何把一個(gè)Servlet映射到一個(gè)虛擬的地 址。在后半部分寫到了數(shù)據(jù)庫操作部分,我對數(shù)據(jù)庫的了解其實(shí)也僅限于原來大學(xué)課本上的《數(shù)據(jù)庫系統(tǒng)原理》,如何從程序和數(shù)據(jù)庫交互是一竅不通。通過數(shù)據(jù)庫 操作這章,我知道了如何使用JDBC語句如何編寫,大家不要笑,對于當(dāng)初一個(gè)新手來說,這個(gè)真是一個(gè)全新的領(lǐng)域,做什么事情都需要Sample來對照,跟 著依葫蘆畫瓢吧,其實(shí)現(xiàn)在的軟件開發(fā)也是這樣,我想現(xiàn)在大家誰能直接手寫Struts或者Hibernate的配置文件都很難吧。閑話少說,大概這個(gè)時(shí) 候,我對畢業(yè)設(shè)計(jì)的雛形有了點(diǎn)思想上的概念。看完了《Java Servlet編程》后緊接著就又看Oreilly的《JSP設(shè)計(jì)》,由于有了Servlet的基礎(chǔ),學(xué)起JSP特別快。當(dāng)時(shí)沒有著重看Tag的自定義設(shè) 計(jì),光看了JSP的其他東西,終于在五一節(jié)后把畢業(yè)設(shè)計(jì)都寫完了,當(dāng)時(shí)總代碼量是2000多行,第一次寫這么多代碼的程序覺得很有成就感。現(xiàn)在看起來那時(shí) 做的是標(biāo)準(zhǔn)垃圾,但是當(dāng)時(shí)覺得還是很不錯(cuò)。用了Servlet + JSP。其實(shí)Servlet也不是用來當(dāng)控制器的,而是和JSP做的差不多功能,都是作view的功能的。很快,畢業(yè)設(shè)計(jì)交差過去了,寫寫畢業(yè)論文,準(zhǔn)備 答辯。在這個(gè)過程中,我又一次考慮自己下面該看什么書。

    這次我又看中了侯捷翻譯的一本巨著,也就是鼎鼎大名的Martin Fowler寫的《重構(gòu)——改善既有代碼的設(shè)計(jì)》這本書。剛開始聽見重構(gòu)這個(gè)名字,總覺得非常高深,加上都評(píng)論說重構(gòu)是和設(shè)計(jì)模式齊名的東東,感覺更加高 深恐怖了。大概在6月初我開始看了重構(gòu),剛開始看的時(shí)候雖然抱著試試看的心態(tài),不過還是非常認(rèn)真的。但是,讓我頗感意外的是重構(gòu)并不是很難,至少這本書中 說的非常通俗易懂,通過大量的實(shí)例讓你覺得重構(gòu)是種很簡單很基本的技術(shù)。雖然我看完了重構(gòu)以后在真實(shí)的代碼編寫中很少直接按照上面代碼所說的方法進(jìn)行重構(gòu) 代碼,基本上都是通過IDE來重構(gòu)代碼,但是卻大大提升了自己編程思維,從此以后寫代碼就很少瞻前顧后了,因?yàn)槲覔碛辛酥貥?gòu)這個(gè)工具。這本書有點(diǎn)厚,再加 上中間有答辯,拍畢業(yè)照,以及畢業(yè)手續(xù)等等,這本書我花了一個(gè)半月看完。我看書的速度也不算快,不過我看書比較有恒心,不像有部分人看幾天就不想看了,我 能堅(jiān)持天天看,所以總的來說還是不慢的。我計(jì)算過,如果我每天看10頁書,堅(jiān)持下去,那一年就是3650頁書,平均一本書365頁來算,1年就是10本。 如果這10本書中有8本不屬于垃圾書籍,那么你這年就能有非常大的提高了。

    看重構(gòu)這本書中間我也抽了一段時(shí)間看了兩本其他的書,第一本是 《Java夜未眠》,挺不錯(cuò)的一本書,雖然是散文,但是還是能讓你明白不少道理,受益匪淺。另外一本就是李維的《Borland傳奇》,由于自己當(dāng)時(shí)最喜 歡用的工具就是JBuilder,所以也對Borland公司非常敬仰,特別對安德森,簡直就頂禮膜拜啊,哈哈。這本書寫得很精彩,寫了Borland公 司二十年來的血淚史,寫了如何跟微軟斗爭,如何在微軟和IBM的夾縫中生存。當(dāng)然,也有很多的對于技術(shù)方面作者李維自己的見解,看了會(huì)有不少同感的。就這 樣,磨磨蹭蹭地把重構(gòu)看完了。

        當(dāng)看完了《重構(gòu)》這本書之后,我也開始去公司報(bào)到上班了。可以看出來,我當(dāng)時(shí)工作的時(shí)候水平也很有限,但總比一年前要好不少,至少很多東西都已經(jīng)知道了。 那時(shí)外面極限編程聽的比較多,自己也去書店買了本《Java極限編程》回來看,現(xiàn)在想想算是我看得第一本垃圾書籍了。不過也是有收獲的,這本書極限編程也 就說了點(diǎn)概念,然后就寫了不少工具的使用方法。在看《重構(gòu)》中對JUnit有了點(diǎn)認(rèn)識(shí),不過只是皮毛中的皮毛。看了這本《Java極限編程》后對 JUnit的使用又了解了不少皮毛,對于Cactus有了點(diǎn)了解,對Ant了解了不少,至少可以自己寫出自己需要的配置文件了,并且可以結(jié)合JUnit生 成測試Report。由于我去的是日企,做對日外包的,所以公司開始培訓(xùn)日本語,用的是《標(biāo)準(zhǔn)日本語》這套教材。我于是邊學(xué)日語邊看技術(shù),大概2個(gè)星期左 右我把那本《Java極限編程》初步看完后就扔在了家里。這時(shí)的我已經(jīng)開始會(huì)用Ant了,覺得是步入J2EE的重要一步。

        很快啃掉那本垃圾書以后又看了本和Java不是非常有關(guān)的書:《程序員修煉之道——從小工到專家》,原因其實(shí)很簡單,大學(xué)同學(xué)都說這本書是經(jīng)典書,看書這 東西,別人的評(píng)價(jià)還是能起不少作用的。這本書字?jǐn)?shù)不是很多,不過排版的時(shí)候比較分散,導(dǎo)致書本有點(diǎn)厚,呵呵,可能也算出版社賺錢的一種方法吧。不過總的來 說,我覺得出版社紙張質(zhì)量最好的是電子工業(yè)出版社,其次是中國電力出版社,最爛的恐怕就是機(jī)械工業(yè)出版社了,機(jī)械工業(yè)出版社有少量書紙張還能說過去,但有 不少簡直讓人不得不有脾氣啊,紙張薄得感覺和寫毛筆字的宣紙都差不多了。這本電子工業(yè)出版社的書紙張質(zhì)量的確不錯(cuò),不過也許是因?yàn)槲夜αι袦\,所以這本書 雖然都看懂了,但是深有感觸并且銘記于心的沒有幾個(gè),現(xiàn)在再回想,也只記得軟件模塊設(shè)計(jì)時(shí)要正交等等少數(shù)幾點(diǎn)了。這本書由于內(nèi)容不是非常多,所以我就看了 半個(gè)月不到搞定。這時(shí)的我開發(fā)IDE已經(jīng)轉(zhuǎn)移到了Eclipse上,畢竟商業(yè)開發(fā)用D版有點(diǎn)說不過去,而且公司也怕查,所以不允許用JBuilder,鼓 勵(lì)大家用Eclipse。我用了一段時(shí)間的Eclipse后,從一開始的不適應(yīng)到后來覺得Eclipse很方便使用,JBuilder比Eclipse多 的就是一些根據(jù)不同類型開發(fā)的模版而已,而這些可以由Eclipse的插件來彌補(bǔ)。到了這時(shí),我覺得我的Java基礎(chǔ)應(yīng)該算還可以的了,API也熟悉了非 常多。我覺得看《Effective Java》的時(shí)機(jī)成熟了。

        由于大學(xué)已經(jīng)畢業(yè)了,所以也不會(huì)有同學(xué)的《Effective Java》放在邊上讓我看這樣的好事出現(xiàn),老老實(shí)實(shí)地去了書店買了本《Effective Java》中文版回來研讀。呵呵,大家也許會(huì)問我為什么不買本E文的看,雖然我大學(xué)早早也把英語4級(jí)過了,而且大學(xué)中不少計(jì)算機(jī)專業(yè)課程教材也是E文的, 當(dāng)時(shí)為了考試也認(rèn)真讀了。但是畢竟英語不是我們的母語,看起來速度上明顯比中文版的慢一截。當(dāng)然,如果是那種垃圾翻譯者用機(jī)器翻譯出來的中文版,看那些垃 圾中文版速度肯定比不上直接看英文原版的。這時(shí)的我看《Effective Java》已經(jīng)不再是當(dāng)初的那么感覺很陌生了,覺得上面說的那些要點(diǎn)自己想想還都是可以理解的。我個(gè)人覺得提高自身編程習(xí)慣以及水平最多的還是看類似于 《Practical Java》和《Effective Java》的這種按照條目來進(jìn)行說明的書,能把你自己平時(shí)容易忽略的地方按照重點(diǎn)一個(gè)個(gè)揪出來進(jìn)行修正。比如《Effective Java》中的第一條,使用靜態(tài)工廠來代替構(gòu)造函數(shù),自己原來在進(jìn)行開發(fā)的時(shí)候,從來不怎么會(huì)主動(dòng)想到建立一個(gè)靜態(tài)工廠,總覺得使用構(gòu)造函數(shù)來新建一個(gè)對 象是天經(jīng)地義的事情。但看完這個(gè)條目后,我的看法也隨之改變,發(fā)現(xiàn)靜態(tài)工廠還是非常好的,當(dāng)然,也不是什么地方用靜態(tài)工廠都很好。上面也寫到了靜態(tài)工廠的 優(yōu)缺點(diǎn),比如在什么地方適合使用,什么場合最好不要使用等等。這本書我覺得翻譯的也不錯(cuò),絕對值,強(qiáng)烈向有一定開發(fā)經(jīng)驗(yàn)的人推薦。我大概看了3周半的樣子 把這本書看完,這時(shí)的時(shí)間也到了2004年的9月初,新員工入司培訓(xùn)也不再是第一個(gè)月純粹的日語培訓(xùn),而是技術(shù)培訓(xùn)和日語培訓(xùn)一起開展,技術(shù)上培訓(xùn) Java,Web開發(fā),數(shù)據(jù)庫開發(fā)這三門課程,日語則開始進(jìn)行日本語國際三級(jí)的培訓(xùn)。公司的日語培訓(xùn)和技術(shù)培訓(xùn)都還不錯(cuò),技術(shù)培訓(xùn)純粹把大家當(dāng)作什么都不 懂的人,在Java上從最原始的Hello World開始培訓(xùn),Web開發(fā)上從HTML頁面開始培訓(xùn),數(shù)據(jù)庫開發(fā)則從Oracle的安裝,SQL語句的編寫開始培訓(xùn)。當(dāng)然,在培訓(xùn)的過程中我也不會(huì) 閑著,而是又開始尋找自己要啃的書本,這次,我選中了Oreilly新出版不久的《Java與XML》第二版。

        由于XML表達(dá)數(shù)據(jù)的自由性以及強(qiáng)大型,所以XML特別適合于做配置文件以及數(shù)據(jù)信息文件,在Java中XML的使用可謂是多如牛毛。在J2EE中,從 Web Application的web.xml開始就是XML文件,到下面的Framework配置等等,沒有一個(gè)沒有XML的身影,而且XML都起到了舉足輕 重的作用。雖然我原來也懂一點(diǎn)XML,不過也僅限于XML的語法以及結(jié)構(gòu)等等,那些深入下去的東西基本還是盲點(diǎn),關(guān)于Java中如何處理XML更是一竅不 通。為了更好的學(xué)習(xí)J2EE,XML是必須征服得一座山峰。這次,我依然又再一次信任了Oreilly出版社,買了本當(dāng)時(shí)出版不久的《Java與XML》 中文第二版。這本書剛開始并沒有過多介紹XML本身過多的東西,只是為了怕某些讀者并不了解XML而對XML語法結(jié)構(gòu)等做了非常簡要的介紹,不過也非常到 位的介紹。介紹完了這些XML基礎(chǔ)知識(shí)后就開始了SAX——〉DOM——〉JDOM——〉JAXP——〉Web Service的歷程。不過我現(xiàn)在覺得如果能介紹DOM4J就更好了,因?yàn)槲椰F(xiàn)在覺得DOM4J是Java中最好用而且性能也不錯(cuò)的XML處理工具。剛開 始的我其實(shí)什么是SAX,什么是DOM都不知道,對JAXP更是一無所知。這本書英文版據(jù)說很受好評(píng),中文版我只能說一般,因?yàn)橛行┑胤焦烙?jì)譯者并不擅長 這一塊,所以翻譯得很生硬,以至于部分段落難于理解。總體來說,書的絕大多數(shù)內(nèi)容還是可以看懂,由于沒有具體實(shí)際操作的經(jīng)驗(yàn),所以很多也就是把概念理解 了,直到幾個(gè)月后做正式項(xiàng)目開始應(yīng)用這些XML處理工具進(jìn)行開發(fā)的時(shí)候才達(dá)到了熟練運(yùn)用的能力。在這本書中學(xué)會(huì)了JDOM的使用方法,JDOM也還是比較 好用的,學(xué)會(huì)了JDOM,以后操縱XML也方便了許多。這本書我的建議就是,可以一口氣讀到第十章JAXP部分,后面的Cocoon以及SOAP等等部分 那本書介紹的并不是很好。Cocoon我是看了官方專門的幫助文檔以后才感覺入了門。而SOAP是經(jīng)過別的書籍加上項(xiàng)目中的實(shí)際運(yùn)用才真正學(xué)會(huì)的。

    這 時(shí)到我剛進(jìn)公司已經(jīng)兩個(gè)月過去了,時(shí)間已經(jīng)到了9月中旬的樣子,還有一個(gè)月我們公司新員工入司培訓(xùn)就要結(jié)束,也意味著還有一個(gè)多月我們就要開始接觸正式項(xiàng) 目。這時(shí)的我寫B(tài)/S程序僅僅是JSP + JavaBean的水平,連JSP中的TAG都不會(huì)自定義,看見別人網(wǎng)上的程序自己還自己定義Tag很是羨慕,于是決定把那本《JSP設(shè)計(jì)》認(rèn)真看完,把 自定義Tag的功能實(shí)現(xiàn)。后來看了以后發(fā)現(xiàn)原來那本《JSP設(shè)計(jì)》的精華都在最后的150頁內(nèi),最后那部分先是介紹了自定義Tag的定義方法以及Tag定 義所帶來的一些好處。自從學(xué)會(huì)了如何自定義Tag,在后來公司的項(xiàng)目中自己也根據(jù)項(xiàng)目的特點(diǎn)定義了一些共通的Tag,大大方便了不少項(xiàng)目中的開發(fā)人員,提 高了生產(chǎn)力。這本書而且也說了一下B/S開發(fā)的兩種Web Module。在這里,我第一次知道了Web開發(fā)可以用一個(gè)Servlet作為控制器,用JSP僅僅作用于表現(xiàn)層,這也為以后掌握MVC打下了很好的基 礎(chǔ)。

    9月中下旬掃完了《JSP設(shè)計(jì)》的尾巴后,有一次跟公司給我們培訓(xùn)的老師在閑聊時(shí)談到了項(xiàng)目開發(fā),我詢問他項(xiàng)目是不是用JSP和 JavaBean來開發(fā),他笑著和我說不是這樣的,而是基于Framework來進(jìn)行開發(fā)。比如Struts就是公司的常用Framework。 Struts這東西以前也好像聽說過,不過從來也只是聽說而已,并沒有看過。得到這個(gè)信息的我,為了能盡快熟悉實(shí)際項(xiàng)目的開發(fā)環(huán)境,便決心盡快學(xué)會(huì) Struts。當(dāng)時(shí)的市場上講解Struts的書只有一本,也就是Oreilly的《Jakarta Struts編程》,不像現(xiàn)在連《Struts in Action》的中文版也有了。我去了書店買來開始回家看,剛開始看的時(shí)候覺得如同云里霧里一般,因?yàn)檫@本書歸納總結(jié)性的東西很多,比較適合當(dāng)參考手冊, 而真正帶領(lǐng)新手入門這一塊做的并不好。所以當(dāng)我把這本書都看完了以后,還是不會(huì)用Struts編寫一個(gè)程序,只是感覺自己朦朦朧朧懂了一些概念,比如 MVC什么的。在公司我們的培訓(xùn)也結(jié)束了,通知在國慶節(jié)過來以后的第一個(gè)星期——大概是10月10日左右進(jìn)行考試,最后根據(jù)培訓(xùn)考核情況來調(diào)整薪水。當(dāng)時(shí) 跟我一起培訓(xùn)的新員工基本上沒有人會(huì)Struts,其實(shí)這個(gè)時(shí)候連會(huì)用JSP + JavaBean寫一個(gè)最簡單的登錄畫面的人也沒有多少個(gè),大部分人還是模模糊糊懂一點(diǎn),但是具體做東西還是做不來的那種水平。國慶節(jié)大概10月5號(hào)的我 去了趟書店,突然發(fā)現(xiàn)書架上新上了一本書,就是孫衛(wèi)琴編寫的《精通Struts》這本書。孫衛(wèi)琴的書我倒是聽說過,就是在這之前出的一本關(guān)于Tomcat 以及Web App開發(fā)的書,據(jù)說挺容易上手的。我翻看了這本書的目錄結(jié)構(gòu),覺得可以值得一讀,于是雖然價(jià)格不菲,仍然買回家當(dāng)天就研讀起來。憑我的讀后感覺來說,這 本書也許學(xué)術(shù)價(jià)值并不高,說得深入的東西基本沒有,但是特別適合初學(xué)者,通過Hello World這種例子迅速讓你手把手編寫出第一個(gè)Struts程序。就這樣,在這本書買回來的第二天,我自己就用Struts寫了一個(gè)很簡單的登錄畫面程 序,當(dāng)時(shí)的感覺別提多興奮了,就感覺自己入了門,以后的道路一片光明。在這里,我要由衷地感謝孫衛(wèi)琴女士,寫了這么一本適合初學(xué)者的書,同時(shí)也建議沒有學(xué) 過Struts但又想掌握Struts的Java程序員們買這本書回來看(不知道我是不是有書托之嫌,我只是說我自己的心里想法)。

        國慶的假期放完了,我也回到了公司準(zhǔn)備考核,上午是筆試,下午是上機(jī)考試。筆試分為了4塊,分別是Java,Web開發(fā),Oracle數(shù)據(jù)庫,以及 CMMI規(guī)約。這四門除了Oracle數(shù)據(jù)庫我一向不是很擅長,只考了個(gè)中等分?jǐn)?shù)以外,其他三門分?jǐn)?shù)都名列前茅。不過CMMI規(guī)約老實(shí)說我也不怎么會(huì),不 過碰巧考的很多都是我知道的東西。下午是上機(jī)考試,題目給出來了,我一看題目,原來是一個(gè)最簡易的成績查詢系統(tǒng),也就是數(shù)據(jù)庫里面已經(jīng)有一些學(xué)生成績,我 們寫一個(gè)檢索頁面,可以輸入或者選擇檢索條件,把符合我們檢索條件的數(shù)據(jù)輸出并顯示在畫面中。我于是拿剛學(xué)會(huì)不久的Struts進(jìn)行編寫,在3個(gè)小時(shí)內(nèi)把 整個(gè)頁面都寫好了,并且還自定義了一個(gè)Tag來顯示數(shù)據(jù)信息。考完以后我才知道總共也就五六個(gè)人程序可以運(yùn)行,而且只有我一個(gè)人用的是Struts,其他 人基本都是最簡單的JSP + JavaBean,有的人連JavaBean都沒有,數(shù)據(jù)庫操作全部寫在了JSP頁面中。毫無疑問,這次上機(jī)考試我得到了好評(píng),給了最高分。在全部的培訓(xùn) 成績中我也居前兩名,我們部門新員工我排第一名。帶著這個(gè)成績,我們的入司培訓(xùn)基本結(jié)束,開始進(jìn)入部門做實(shí)習(xí)項(xiàng)目。

        雖然說我們正式進(jìn)了部門,不過試用期還沒有結(jié)束,我們試用期最后一個(gè)月的任務(wù)就是做一個(gè)實(shí)習(xí)項(xiàng)目,當(dāng)然,每天還是要進(jìn)行日語培訓(xùn),因?yàn)橐獏⒓?2月份的國 際日語三級(jí)考試。公司也象征性得給大家培訓(xùn)了三節(jié)課的技術(shù),第一節(jié)是Struts培訓(xùn),第二節(jié)是Web App的MVC結(jié)構(gòu)的培訓(xùn),第三節(jié)是Log4j培訓(xùn),這幾次培訓(xùn)下來,大部分人感覺好象云里霧里一樣,基本什么都沒聽懂,不過我由于有了點(diǎn)Struts的 基本知識(shí),所以感覺收獲比較大,特別是MVC的培訓(xùn)中我真正明白了視圖——控制器——模型這三層每層應(yīng)該怎么處理,知道了一個(gè)Web App中如何分Java Package比較好,明白了專門有一個(gè)DAO層來處理數(shù)據(jù)庫所帶來的便捷,明白了Log在Web開發(fā)中的重要地位,這為以后的開發(fā)帶來了很大的好處。實(shí) 習(xí)項(xiàng)目的課題很快就下來了,要我們做一個(gè)電子相冊的B/S系統(tǒng),要求有圖片上傳,圖片檢索,圖片顯示以及要用Struts來構(gòu)建,這些是基本的要求,其他 功能可以自由擴(kuò)張。我們部門的新員工分為兩個(gè)小Group,都是一樣的課題,互相促進(jìn)和學(xué)習(xí),每個(gè)Group還配備了一個(gè)老員工,作為督促我們的進(jìn)度,防 止我們有過大的偏差等等,不過具體做東西上原則上要求是不會(huì)給我們什么幫助。首先每個(gè)小Group要選出一個(gè)Leader,結(jié)果我被大家一致選為我們 Group的Leader。在小組討論中我們先進(jìn)行需求分析,大家的討論很是熱烈,主意也很多,不過基本上組員們也都是點(diǎn)子多,具體實(shí)現(xiàn)上面還都沒有想 過。對于他們的那些建議,絕大多數(shù)我決定都作為我們要實(shí)現(xiàn)的目標(biāo),但也有少部分我覺得目前以我們的水平還無法實(shí)現(xiàn)的,就先否決了。會(huì)議開完后,當(dāng)天回家以 后我就開始排開發(fā)計(jì)劃和個(gè)人的進(jìn)度,第二天寫畫面的基本設(shè)計(jì),第三天把組員拉過來開始Review基本設(shè)計(jì),我們組的速度還算比較快。從星期二公布課題, 到星期五就和幾個(gè)組員一起把DEMO畫面設(shè)計(jì)出來了。原來的計(jì)劃是第二個(gè)星期一開始Coding,大概花一個(gè)星期完成。不過其余組員似乎還是不怎么會(huì) Struts,于是我回家星期六星期天基本全天都在看書寫代碼學(xué)習(xí),花了兩天把項(xiàng)目基本Coding完畢。其中Web頁面部分也不再使用一開始使用 Frame的做法,而是采用了Tiles框架。Tiles的使用過后我感覺是非常好的東西,經(jīng)過簡單的配置可以完成大批網(wǎng)頁中類似部分的構(gòu)建,而且生成的 屬于一個(gè)頁面,這樣就省去了以前寫Frame時(shí)提交頁面總是要考慮設(shè)置Target以及在引用對象的時(shí)候大批Parent或者top對象使用的麻煩事了。 在開發(fā)過程中我使用了Log4j,這為我的調(diào)試程序帶來了極大的方便,呵呵,可以想象,沒有Log來調(diào)試一個(gè)Web程序真是不可想象的。

    這 段時(shí)間我是邊開發(fā)邊翻查那本《精通Struts》的,這樣,迅速把Struts中提供的許多Tag弄熟練了,為以后具體的項(xiàng)目開發(fā)帶來了便捷。也許是一向 以來公司的實(shí)習(xí)項(xiàng)目完成效果都不是很理想吧,這次我們的迅速完成比較出乎Leader的意料,綜合三個(gè)月的試用培訓(xùn),由于我在日語和技術(shù)以及實(shí)習(xí)項(xiàng)目中表 現(xiàn)都還不錯(cuò),所以定工資級(jí)別時(shí)也是同一批進(jìn)公司的新員工中最高的,隨著轉(zhuǎn)正會(huì)議的結(jié)束,我也在10月底成為了公司的正式員工。大概剛剛進(jìn)入11月份,我們 Group便開動(dòng)一個(gè)項(xiàng)目,項(xiàng)目不是很大。當(dāng)時(shí)老員工們許多都在做項(xiàng)目的詳細(xì)設(shè)計(jì),我便跟著公司一位技術(shù)專家(也是當(dāng)初給我們?nèi)胨九嘤?xùn)的其中一位老師)做 起項(xiàng)目的Framework構(gòu)建工作。當(dāng)時(shí)的我才進(jìn)公司,第一資歷尚淺,第二我的確也并不是很會(huì)什么東西,所以給我的任務(wù)很多都是一些模塊的 Utility的設(shè)計(jì)。比如通用的Check方法啊,CSV以及定長文件的讀取解析什么的啊,還有某些在IE中可以實(shí)現(xiàn)的效果如何在Netscape中也 能實(shí)現(xiàn)同樣的效果等等。雖然這些東西在現(xiàn)在看來并不是很復(fù)雜,但是當(dāng)時(shí)自己的確隨著做這些東西而學(xué)到了很多很多。比如使用JDOM對XML文件的解析啊, 很多Check方法的小技巧啊,IE和Netscape究竟有什么地方不一致,該如何解決等等,這些都在這幾天內(nèi)了解了很多。在這幾天中,我通過網(wǎng)上查找 資料,臨場迅速學(xué)習(xí)了Java反射的使用方法,并且自己邊學(xué)邊寫實(shí)例,實(shí)現(xiàn)了各種情況下的反射案例。我個(gè)人覺得掌握J(rèn)ava反射技術(shù)是非常重要的,這讓你 可以寫一些通用的工具。如果不會(huì)反射技術(shù)的話,也許你永遠(yuǎn)只能寫一些針對特定情況下的解決方法。而會(huì)使用反射以后,你可以寫一些代碼,這些代碼可以用在許 多地方,達(dá)到自己擴(kuò)展甚至構(gòu)建Framework的效果。在這個(gè)項(xiàng)目中,我使用了自定義Tag和Java反射技術(shù),定義了些項(xiàng)目中比較需要的通用的 Tag,方便了大家。

        后來聽老員工說新員工進(jìn)公司就開始做Framework是以前從來都沒有過的事情,因?yàn)槲覀僉eader對我希望比較大,所以想盡可能培養(yǎng)我,讓我早點(diǎn)挑 起項(xiàng)目大梁,所以給我的成長提供了一次又一次的機(jī)遇。11月中旬以后,項(xiàng)目開始進(jìn)入編碼階段,我也第一次看到了正式的項(xiàng)目設(shè)計(jì)書。第一次看到設(shè)計(jì)書的時(shí)候 我都覺得自己腦子有點(diǎn)懵,一大堆日語什么含義自己不是很清楚,而且感覺根本無從下手,不知道從哪里開始看比較好。項(xiàng)目擔(dān)當(dāng)耐心得和我說了設(shè)計(jì)書的格式以及 究竟什么地方是什么一個(gè)含義,以及Coding的時(shí)候按照什么個(gè)思路來看設(shè)計(jì)書。再加上項(xiàng)目中有老員工先寫了個(gè)Sample,讓大家看了標(biāo)準(zhǔn)的一個(gè)流程, 所以我們就依葫蘆畫瓢,慢慢得把一個(gè)畫面一個(gè)畫面Coding完畢。當(dāng)然了,后來也有測試員來測試我們的畫面,發(fā)現(xiàn)bug后就發(fā)Bug Report給我,那一個(gè)月就是在Coding,修正Bug中渡過的,這個(gè)項(xiàng)目是用Struts做的,因?yàn)椴淮蟆K砸矝]有再用其他的 Framework,數(shù)據(jù)庫操作那里只有個(gè)非常簡單的單表操作DAO層,其余的DB操作都是自己通過JDBC操作語句來完成的。在這第一個(gè)自己接觸的真正 項(xiàng)目中,我自己學(xué)到了很多B/S設(shè)計(jì)的技巧,感覺很充實(shí)。不過書本學(xué)習(xí)方面我也沒有閑著,我為了能夠深入了解Java,大概在11月中旬左右開始看《深入 Java虛擬機(jī)》這本書,由于內(nèi)容比較深入,所以看得也有點(diǎn)吃力。書翻譯得和寫得都還不錯(cuò),值得一看,我一直看了前八章,看到Java程序運(yùn)行細(xì)節(jié)后就沒 再看了,大概看到了12月底的樣子吧,呵呵,有時(shí)間的話決定把后面的部分也看完。這本書看完后收獲就是了解了Class文件的實(shí)質(zhì),Java的安全模型, 虛擬機(jī)是如何工作的。這些知識(shí)對后來調(diào)試程序Bug或者Exception的時(shí)候非常有好處,可以把以前自己覺得莫名其妙的錯(cuò)誤的原因找出來,不像以前遇 到很古怪的Exception的時(shí)候怎么死的都不知道,從讀完這本書以后,在以后的調(diào)試異常中很少再有不知所以然的感覺了。

        2004年12月底的時(shí)候,我的第一個(gè)項(xiàng)目也做完了,由于我空閑著,Leader便在星期三的時(shí)候把一個(gè)公司內(nèi)部開發(fā)的Source統(tǒng)計(jì)的小工具讓我進(jìn)行 修改,使得添加一個(gè)比較有用的功能。東西給我的時(shí)候基本沒有任何文檔,在我手上的就是一堆源代碼而已,界面是用Swing制作的,因?yàn)闆]有專門在UI上進(jìn) 行精心設(shè)計(jì),所以說不上好看,典型的Java編寫的圖形界面的程序的樣子。軟件不是非常大,估計(jì)在1萬行源代碼以內(nèi),不過對于只有一個(gè)人修改來說,也比較 夠嗆了。還好我在剛學(xué)Java的時(shí)候用JBuilder寫了一些Swing的程序,現(xiàn)在還是對Swing有概念的,所以拿到手上以后經(jīng)過仔細(xì)分析,逐漸理 清了頭緒。經(jīng)過修改和自己測試完畢后,覺得還比較滿意,達(dá)到了預(yù)期的目標(biāo),于是在星期五的時(shí)候提交給了Leader。通過這次,對Swing的開發(fā)又加深 了印象,自然,在有的細(xì)節(jié)技巧方面受益匪淺。

    元旦很快來臨了,在年底以前,公司覺得有必要學(xué)習(xí)下Hibernate,雖然我們目前的項(xiàng)目中 還沒有用過Hibernate,而是用另外一個(gè)公司內(nèi)部開發(fā)的ORM工具,不過幾名技術(shù)專家初步對Hibernate感覺后覺得Hibernate的功能 要強(qiáng)大的多,而且是開源的,不斷有人在推動(dòng),升級(jí),所以有必要我們要學(xué)Hibernate。這次的學(xué)習(xí)采用學(xué)習(xí)小組的形式,也就是公司內(nèi)部先抽幾名員工 (主要是技術(shù)部門的,當(dāng)然,開發(fā)部門如果有興趣的話也可以考慮)來進(jìn)行深入學(xué)習(xí),然后定期開會(huì)交流互相學(xué)習(xí),達(dá)到短時(shí)間內(nèi)先行的幾名成員迅速深入掌握 Hibernate的形式。由于我第一處于空閑狀態(tài),第二也比較有興趣,而且跟技術(shù)部門的專家們也比較談得來,所以我也加入了其中,成為幾名學(xué)習(xí)小組中成 員的一部分。我們學(xué)習(xí)資料主要就是《Hibernate in Action》英文版一書以及官方的幫助手冊。我負(fù)責(zé)其中對象操作,Transaction和Cache,還有高級(jí)Mapping關(guān)系的設(shè)置幾個(gè)部分的學(xué) 習(xí)。由于資料都是全英文的,所以看書速度并不是很快,不過還是初步得到掌握了。大概學(xué)習(xí)了半個(gè)多月的樣子,我們各自基本學(xué)習(xí)完畢,互相交流后并且寫下了讀 書筆記,用來后面具體項(xiàng)目開發(fā)時(shí)候參考用。通過這大半個(gè)月的學(xué)習(xí),我個(gè)人覺得提高了非常多,在這之前,我只知道有ORM這種東西,但是從來沒有使用過,也 從來沒有看過。自從學(xué)過了以后,我不僅對Hibernate在代碼編寫時(shí)的使用比較熟悉了,而且對Hibernate的配置以及許多底層的知識(shí)有了很清楚 的認(rèn)識(shí),讓自己在數(shù)據(jù)持久化方面的認(rèn)識(shí)提高了大大的一步。

        元旦過后,雖然一邊在學(xué)習(xí)Hibernate,不過由于下面項(xiàng)目的需要,Leader跟我說要我學(xué)一下Unix下的Shell編程,因?yàn)? 項(xiàng)目中許多批處理會(huì)用Shell來啟動(dòng)。UNIX命令在學(xué)校時(shí)候?qū)W過的,不過這個(gè)時(shí)候已經(jīng)忘記了很多,只是翻閱資料的時(shí)候還能回想起來不少命令。 Shell并不難,如果有了編程基礎(chǔ),學(xué)習(xí)Shell編程也很快的,總體感覺就是編程語言大同小異,從基本語法來說,不外乎賦值、條件、循環(huán)這幾種類型。 只要迅速掌握這幾種類型在這種編程語言中的編碼格式,那么你就可以迅速掌握這門語言最基本的編程能力。Shell經(jīng)過一周的學(xué)習(xí)后覺得感覺不錯(cuò),不僅可以 順利看懂別人寫的Shell程序,而且自己可以在Linux下順利寫出符合自己需求的Shell程序并能順利執(zhí)行。但是突發(fā)事件總是有的,那個(gè)項(xiàng)目突然決 定延后兩個(gè)月,所以前一個(gè)星期的學(xué)得Shell等于暫時(shí)派不上用場了。不過嘛,多學(xué)一樣技能總是沒有害處的,而且又復(fù)習(xí)了那么多Unix命令啦,感覺還是 很不錯(cuò)的。于是我又進(jìn)入了不在項(xiàng)目中的真空期了。

        但是好景不長啊,好日子還沒有過上兩個(gè)星期,公司去年做的一個(gè)比較大的項(xiàng)目開始了2期開發(fā),我也被一下拖入了項(xiàng)目中。說起那個(gè)項(xiàng)目,公司好多人還心有余 悸,據(jù)說去年那個(gè)項(xiàng)目開發(fā)的時(shí)候,大概50多號(hào)人干了好幾個(gè)月,每天都是11點(diǎn)以后才有可能回家,周六是鐵定加班,周日是看情況,晚上就算加班加到凌晨3 點(diǎn)也不是什么奇怪的事情。當(dāng)時(shí)大家都說多來幾個(gè)這種項(xiàng)目大家就要死了,這次這個(gè)項(xiàng)目的2期過來了,大家精神又一次緊張起來咯。一開始照例是項(xiàng)目會(huì)議,聽完 項(xiàng)目經(jīng)理描述以后,大家也放心了不少,這次雖然說是二期,不過規(guī)模不大,只需要15個(gè)人左右干一個(gè)月就能搞定。主要是把項(xiàng)目一期里面一些地方進(jìn)行改修,當(dāng) 然也有需要新的畫面的開發(fā),不過相對于去年的那塊不是很多而已。對我來說這次是個(gè)很大的考驗(yàn),因?yàn)轫?xiàng)目是二期,項(xiàng)目組內(nèi)除了我,其他的人都做過1期開發(fā), 所以對項(xiàng)目結(jié)構(gòu)都很清楚。這次項(xiàng)目開始并沒有什么培訓(xùn),所以我只能單獨(dú)看1期的源代碼來熟悉項(xiàng)目結(jié)構(gòu)什么的。這個(gè)時(shí)候項(xiàng)目經(jīng)理把我叫去要我辦理護(hù)照,準(zhǔn)備 這個(gè)項(xiàng)目派遣我去東京現(xiàn)場維護(hù)。

    這個(gè)項(xiàng)目是個(gè)比較全面比較大的項(xiàng)目,服務(wù)器采取了集群的方式,數(shù)據(jù)量也是千萬乃至上億級(jí)別的,所以性能要求 特別高。在技術(shù)方面用到了很多,使用EJB來控制Transaction,使用了ORM工具來操縱DB數(shù)據(jù)等等等等。而且由于比較龐大,所以服務(wù)器初始化 的那塊為了Load上去大批配置信息,代碼量極其龐大,在權(quán)限控制的那塊地方,代碼非常難以讀懂。這也給我一開始的學(xué)習(xí)代碼帶來了很大的一塊麻煩。不過總 算靜下心來后把整個(gè)項(xiàng)目框架以及實(shí)現(xiàn)手法基本摸清楚了,這個(gè)時(shí)候覺得非常開心,而且對Web應(yīng)用程序的構(gòu)造心里面也非常充實(shí),覺得自己已經(jīng)具備寫 Framework的初步能力了。

    項(xiàng)目是緊張的,基本上每天晚上都要加班到11點(diǎn),然后打車回家,哈哈,公司報(bào)銷。而且臨近過年,這么加班 也一點(diǎn)都感覺不到過年的氣息。不過我也不能因此放松了自己的學(xué)習(xí)。我覺得自己的基礎(chǔ)應(yīng)該算比較好了,便開始啃起另外一本大部頭——《Java與模式》。一 直以來我對設(shè)計(jì)模式的感覺就是一些已經(jīng)成型的,久經(jīng)考驗(yàn)的代碼框架,具有非常好的可擴(kuò)展能力以及非常好的代碼健壯性。不過初學(xué)者最好不要看設(shè)計(jì)模式,因?yàn)? 你接觸的代碼不多,如果貿(mào)然看設(shè)計(jì)模式的話,會(huì)造成不明白為什么這種設(shè)計(jì)模式好,究竟好在什么地方的情況下就在代碼中亂套設(shè)計(jì)模式,對自己的以后編碼發(fā)展 帶來不利的影響。每一種設(shè)計(jì)模式都有每一種設(shè)計(jì)模式的特點(diǎn),自然也有他們自身的適用范圍,比如拿最基本的單例模式(Singleton)來說,適合于做配 置信息讀取器,主鍵產(chǎn)生器等全局唯一的東西。如果初學(xué)者不明白這些,拿單例模式亂套,什么都用單例模式,比如把普通傳遞數(shù)據(jù)用的JavaBean也做成了 單例模式,帶來的惡果就嚴(yán)重了。這本《Java與模式》我是從頭到尾認(rèn)認(rèn)真真看了,每看完一個(gè)模式都會(huì)仔細(xì)回想以前看的代碼哪里用到過這個(gè)模式,總會(huì)自己 想想這些模式適用于哪些地方。因?yàn)檫@個(gè)時(shí)候我自己編寫的代碼行數(shù)也已經(jīng)很多了,所以看見這些模式就會(huì)特別有感覺。經(jīng)過50多天的認(rèn)真研讀,所有模式都被我 消化了下去,并且使得我的對程序開發(fā)上面的認(rèn)識(shí)提升了非常大的一步。順路說一句,這本書寫得非常好,例子很多,但是不復(fù)雜,有一定代碼編寫經(jīng)驗(yàn)的人就可以 看懂了。不過看懂并不是最重要的,重要的是消化下去,用來理解以前看過的代碼的精華,這樣自己才能得到提高。

        這個(gè)項(xiàng)目雖然很緊張很忙,不過我還是適應(yīng)了下來,而且對整個(gè)項(xiàng)目結(jié)構(gòu)什么的都有了比較好的整體的把握。項(xiàng)目橫跨了整個(gè)過年期間,所以在過年的那幾天都必須 開著手機(jī),怕有什么突發(fā)事件要求去加班。簽證在2月4日左右送過去簽,Leader跟我說因?yàn)樵谶^年期間,所以簽證可能會(huì)比較緩慢,比較難簽,不過一般情 況下1個(gè)月應(yīng)該足夠了。原計(jì)劃我是跟另外兩個(gè)同事3月6日去東京,這樣算算也差不多。不過中國有句話叫好事多磨,呵呵,用在我身上的確不過分,我的簽證3 月3日日本領(lǐng)事館才簽,三月四日送到南京。3月5日和3月6日是雙休日,所以3月7日簽證才送到我手上。由于計(jì)劃是3月6日派人去東京,所以只好派另外一 個(gè)身上有簽證還沒有過期的人代替我過去,這次的機(jī)會(huì)就算泡湯咯。不過我并不是很在意,因?yàn)楣具@里去東京出差的機(jī)會(huì)狠多,特別對于開發(fā)人員,據(jù)說工作幾年 后一聽到去日本出差就不樂意,畢竟也背井離鄉(xiāng)么。

        在這個(gè)項(xiàng)目的途中,大概在2005年1月底2月初的時(shí)候公司也開始進(jìn)行了制作詳細(xì)設(shè)計(jì)的培訓(xùn),我雖然在項(xiàng)目中,不過也成為了其中一員。這次培訓(xùn)總共大概6 次課,每次2個(gè)多小時(shí),雖然時(shí)間不長,不過把詳細(xì)設(shè)計(jì)的要點(diǎn)以及思路和容易出錯(cuò)的地方都說了出來,感覺很是不錯(cuò),這幾次課的培訓(xùn)后,雖然可能要我立即進(jìn)行 詳細(xì)設(shè)計(jì)編寫還有點(diǎn)困難,不過心里面已經(jīng)有了不少底,我覺得經(jīng)過一段時(shí)間后的鍛煉,我應(yīng)該可以有進(jìn)行詳細(xì)設(shè)計(jì)的能力了。

        3月初這個(gè)大項(xiàng)目結(jié)束后,本以為可以休整下,不過很快通知我3月7日加入另外一個(gè)項(xiàng)目,其實(shí)也不算一個(gè)正式的項(xiàng)目,屬于公司知識(shí)庫的一個(gè)信息查詢模塊。由 公司的一個(gè)技術(shù)專家負(fù)責(zé),那人也就是我進(jìn)公司時(shí)候第一個(gè)項(xiàng)目中帶著我的那個(gè)技術(shù)專家,說起來我和他還真有緣,現(xiàn)在我這個(gè)項(xiàng)目還是跟著他,而且公司里面唯一 一個(gè)和我同月同日生的人,真是很巧的巧合呢。他人挺好,很熱心,所以我也從他那學(xué)到了很多東西。這次由于不是正式項(xiàng)目,所以并沒有什么基本設(shè)計(jì)書,而是他 給我們開會(huì)議的時(shí)候大致說了下項(xiàng)目的內(nèi)容,每個(gè)畫面的具體功能以及數(shù)據(jù)庫表格的設(shè)計(jì)。由于這次項(xiàng)目規(guī)模很小,總共就12個(gè)畫面的量,所以不采取 Struts等Framework,而是采用比較原始的JSP + JavaBeans的構(gòu)造。我們每個(gè)人根據(jù)他所跟我們講解得功能寫每個(gè)人自己分配到的畫面的詳細(xì)設(shè)計(jì),其實(shí)也不算真正的詳細(xì)設(shè)計(jì),就是每個(gè)人把自己操作的 那塊的具體邏輯設(shè)計(jì)寫出來,然后和他一起review一次,再開始編寫代碼。詳細(xì)設(shè)計(jì)這里我做的很快,當(dāng)天下午就把自己分配到的兩個(gè)畫面業(yè)務(wù)邏輯什么的都 寫好了,星期一布置得任務(wù),我星期三的時(shí)候全部編碼自測完畢提交,所以我的感覺就好像這個(gè)小項(xiàng)目一瞬間就結(jié)束了。

    日本每年財(cái)務(wù)結(jié)算是在3月 份,所以我們歷來的習(xí)慣就是每年1月和2月很忙,3月開始清閑,一直可以到5月左右會(huì)接到個(gè)大項(xiàng)目昨。所以接下來就真正到了我的空閑時(shí)期,沒有項(xiàng)目的壓 力,我可以自由學(xué)我自己喜歡的東西。很久以前買了本《精通EJB》第二版,可是一直以來我覺得自己功力尚淺,所以沒有看,這次我想認(rèn)真學(xué)學(xué)EJB。雖然大 家公認(rèn)EJB并不是很好,不過歷來受到批評(píng)的都是EJB中的Entity Bean部分,這部分我覺得可以借助Hibernate來彌補(bǔ),而會(huì)話Bean和消息驅(qū)動(dòng)Bean則還是挺不錯(cuò)的。這次也當(dāng)學(xué)一門技術(shù),學(xué)習(xí)其好的東西, 不是很好的東西就當(dāng)作以后開發(fā)時(shí)候的借鑒。《精通EJB》這本書我的感覺是書質(zhì)量比較好,不過翻譯的水平稍微差了點(diǎn),特別是有不少錯(cuò)誤,而且很低級(jí)的錯(cuò)誤 居然校對的時(shí)候都沒有發(fā)現(xiàn),不能不說是個(gè)比較大的瑕疵。但是它不失為一本EJB的好教材。從一開始的JNDI開始,然后講解了對象序列化,RMI- IIOP等等。這些以前都模模糊糊,或者是看過了但是還不知道究竟有什么用。但是經(jīng)過這次的學(xué)習(xí)以后,對這些分布式系統(tǒng)比較需要的東西有了進(jìn)一步的了解, 感覺頭腦中比較清晰,究竟RMI是什么樣的工作原理,怎樣實(shí)現(xiàn)一個(gè)遠(yuǎn)程方法調(diào)用等等。接下來的EJB學(xué)習(xí),自己用Eclipse + Weblogic邊看書邊動(dòng)手,寫了一個(gè)個(gè)自己的學(xué)習(xí)小程序。我個(gè)人感覺看書最好就是邊看邊自己動(dòng)手寫小學(xué)習(xí)程序,這樣比光看不練能學(xué)到多得多的東西。學(xué) 了EJB后覺得腦子又清晰了很多,看見一個(gè)案例后頭腦中就會(huì)有好幾種如何解決的方法,幾種方法互相在頭腦中自己比較,經(jīng)過這樣,大大提高了自己的思維活躍 性。

        3月中旬開始由于公司比較清閑,大部分人處于沒有項(xiàng)目的狀態(tài),所以公司舉辦了第一屆全公司范圍的編程競賽。公司只指定了題目為一個(gè)日歷系統(tǒng),要求具有日程 記事等功能,其余功能自由發(fā)揮。這次不再采用團(tuán)隊(duì)形式了,而是采取各自為戰(zhàn)的策略。自從培訓(xùn)過詳細(xì)設(shè)計(jì)以后,我頭腦一直有如何寫詳細(xì)設(shè)計(jì)的思路,這次我自 己首先指定了開發(fā)計(jì)劃,保證自己控制自己的進(jìn)度。接著進(jìn)行了需求分析,確定了我有哪些功能。然后在自己的基本設(shè)計(jì)中開始進(jìn)行數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)。這次我決定采 用Hibernate+Struts的結(jié)構(gòu)進(jìn)行編寫,這樣我的數(shù)據(jù)持久層操作大大簡化,而且功能上也增強(qiáng)了許多。DB設(shè)計(jì)好以后我開始DEMO畫面的制 作。說實(shí)話,我美工水平實(shí)在不怎么樣,可以說雖然一般網(wǎng)頁的效果我都會(huì)自己做出來,不過具體網(wǎng)頁設(shè)計(jì)成什么樣我還真是一竅不通。還好 Dreamweaver我還算算是比較熟練,自己搗鼓搗鼓也想摸象樣把DEMO畫面給設(shè)計(jì)出來了,不過美觀不美觀我就覺得不怎么樣了,只是我能力有限,也 沒辦法設(shè)計(jì)的更好看,這個(gè)時(shí)候我感受到了一個(gè)項(xiàng)目中美工是多么重要啊。下面的詳細(xì)設(shè)計(jì)自己寫得很開心,把需要的功能都用文字反映了出來,這也算我寫成詳細(xì) 設(shè)計(jì)樣子的第一份詳細(xì)設(shè)計(jì)了,做完挺有成就感的。接下來首先構(gòu)筑自己這個(gè)小項(xiàng)目的Framework,經(jīng)過公司兩個(gè)正式項(xiàng)目的洗禮后,那兩個(gè)項(xiàng)目的 Framework我都認(rèn)真研讀過源代碼的,所以我自己有了自己心里一套Framework的構(gòu)造方法,特別是如何把Struts和Hibernate結(jié) 合起來的結(jié)構(gòu),自己有自己的一些想法。在這次Framework構(gòu)造中,我沒有復(fù)制任何公司以前的代碼段,都是憑著自己對以前看的代碼理解后寫出來的。這 次項(xiàng)目我覺得對自己的提高也很大,首先鍛煉了自己詳細(xì)設(shè)計(jì)的能力。其次,自己雖然學(xué)習(xí)過Hibernate,不過從來沒有這么樣應(yīng)用過 Hibernate,這次讓自己大大提升了實(shí)踐運(yùn)用的經(jīng)驗(yàn)。公司由于知道這時(shí)也沒有一個(gè)真正的項(xiàng)目使用Hibernate,所以這時(shí)的我也算公司內(nèi)部 Hibernate使用經(jīng)驗(yàn)最豐富的人了,這也為了后來我協(xié)助別的使用了Hibernate的項(xiàng)目解決問題的原因。再次,我這次自己寫了 Framework,特別在批處理方面,運(yùn)用了許多剛學(xué)會(huì)理解掉的設(shè)計(jì)模式,這些模式讓我的程序更具有健壯性和可擴(kuò)展性,讓我在設(shè)計(jì)方面的能力大大提升 了。

    這次的編程競賽我寫得比較認(rèn)真,代碼量的確也很大,總代碼行數(shù)超過了3萬行,有效代碼行數(shù)也在1萬行以上。經(jīng)過公司專家們的評(píng)定后,我 得到了第一名,雖然沒有什么獎(jiǎng)品,不過肯定了我這段時(shí)間以來的努力,我還是很開心的。而且這次的編程競賽讓我大大增加了編碼的熟練度,而且也在其中演練了 許多自己想出來的編程技巧,為以后的發(fā)展帶來很大的好處。

        從4月份開始,公司由于比較清閑,所以部門內(nèi)部開始進(jìn)行各種培訓(xùn)。我們部門開展了3項(xiàng)培訓(xùn),第一項(xiàng)就是編程能力培訓(xùn),第二項(xiàng)是Oracle數(shù)據(jù)庫技術(shù)培 訓(xùn),第三項(xiàng)是測試技巧培訓(xùn)。在編程能力培訓(xùn)中,主要就是把原來沒有注意的細(xì)節(jié)采取大家討論,輪流講課的方式進(jìn)行的,雖然其中很多東西我原來都是知道的,不 過也有原來不清楚的地方。而且經(jīng)過了這次互相討論,更加加深了印象。在Oracle培訓(xùn)中我覺得收獲很大,這個(gè)Oracle培訓(xùn)采取了傳統(tǒng)的上課的模式, 由我們開發(fā)小組中一個(gè)取得OCM的老員工給我們講解。對于Oracle,我原來基本上就只會(huì)寫寫SQL語句,具體Oracle有什么特別的功能,可以做什 么我也不是很清楚。但是這次上課從Oracle的啟動(dòng)原理開始,讓我知道Oracle中究竟有什么,Oracle數(shù)據(jù)庫各部分在磁盤上是如何存放的, Control File,Redo File究竟是什么意思,在數(shù)據(jù)庫中起什么作用,數(shù)據(jù)庫是怎么依賴他們運(yùn)行的,還有如何對Oracle進(jìn)行系統(tǒng)管理員級(jí)別的管理,如何在不停止數(shù)據(jù)庫運(yùn)行 的情況下進(jìn)行數(shù)據(jù)庫的更新、升級(jí)、備份等等。這些東西雖然非常有用,但在平時(shí)的開發(fā)是學(xué)不到的,這次趁著這個(gè)機(jī)會(huì)大大提升了自己Oracle的水平,感覺 非常開心。數(shù)據(jù)庫一向是我的弱項(xiàng),在上大學(xué)的時(shí)候我SQL語句能力只是一般,數(shù)據(jù)庫管理配置什么基本一點(diǎn)都不懂,通過這次集中的培訓(xùn),我覺得自己的能力又 進(jìn)一步增強(qiáng)了,弱項(xiàng)也在慢慢退卻。在三項(xiàng)培訓(xùn)中最后進(jìn)行的測試培訓(xùn)我承認(rèn)我沒有怎么認(rèn)真去學(xué),所以學(xué)會(huì)的也就是些測試概念,具體的測試技巧什么的還是不怎 么會(huì)。現(xiàn)在開發(fā)和測試的結(jié)合性越來越高,看來要下下功夫,以免給淘汰咯。

        提了這段時(shí)間在公司的進(jìn)展,還沒說自己的學(xué)習(xí)呢,這段時(shí)間正好看見中文版的《JUnit in Action》出版了,在書的背后寫著“如果沒有看過這本書,就不要對J2EE進(jìn)行單元測試”這句話。我早在去年就了解了JUnit的強(qiáng)大功能,再加上 Ant的話對于回歸測試是非常便利的。趁有時(shí)間,我便于3月底4月初的時(shí)候開始看這本書。當(dāng)時(shí)的我看《精通EJB》第二版看了一半,發(fā)現(xiàn)其中錯(cuò)誤越來越 多,而且文字也有些地方不知所云了,所以扔下不再浪費(fèi)時(shí)間看那本書,專心攻讀《JUnit In Action》。憑良心說,Manning的這套In Action叢書的確很不錯(cuò),從我先前看的《Hibernate In Action》英文版就能看出來,其中對代碼的編排非常方便讀者,感覺可以很順利的看到你所想看到的代碼片斷。這套《JUnit In Action》也是一樣,博文視點(diǎn)的紙張還是很好的,排版使用了Manning的風(fēng)格,閱讀起來很舒服,所以我讀得很快,大概就兩個(gè)多星期就讀完了這本 400多頁的書。感覺的確收獲不淺,首先,原來的自動(dòng)化配置工具中只會(huì)使用一個(gè)Ant,其他的基本沒聽說過,在這本書上詳細(xì)介紹了Maven。聽過書中的 講解以及自己的試驗(yàn),的確覺得Maven功能很強(qiáng)大,不過感覺起來配置比Ant要麻煩,所以我自己的感覺是Ant在項(xiàng)目中還是會(huì)廣泛應(yīng)用,不過Maven 在大型項(xiàng)目,特別是整個(gè)Site中有很大的用武之地,對于我們來說,使用的方法都是很簡單的,掌握如何編寫配置文件才是我們的關(guān)鍵。

    書對 JUnit與Cactus在J2EE的測試手法上給了大量的事例,給人的感覺非常好,In Action這套叢書最大的優(yōu)點(diǎn)就在這里,用實(shí)例代碼片斷讓你迅速了解一樣?xùn)|西。在實(shí)際工作中其實(shí)JUnit應(yīng)用也是比較廣泛的,特別如果采取測試驅(qū)動(dòng)開 發(fā)的話,JUnit是必不可少的一部分。在TagLib測試,JSP單體測試,數(shù)據(jù)庫測試和EJB測試都是我以前根本沒有看過的東西。其實(shí)這次雖然學(xué)是學(xué) 會(huì)了,不過真正做的時(shí)候還是要有個(gè)代碼例子依葫蘆畫瓢。我想大家肯定也都有這種感覺,寫程序的時(shí)候先找一段有點(diǎn)相似的代碼片斷Copy過來,然后看看要修 改什么地方,真正從頭到尾自己用手寫的代碼片斷是不多的,除非你已經(jīng)爛熟于心。不過這本書快看完的時(shí)候,項(xiàng)目又來了。

        這次做一個(gè)企業(yè)的MIS系統(tǒng),與以往不同的是,這次客戶給了一個(gè)比較龐大的基盤,封裝了近100個(gè)Tag,基本上把各種各樣有可能遇到的操作都封裝到 Tag里面了。而且所有的畫面顯示等信息都是放在數(shù)據(jù)庫的Table中,所以這次要求不寫任何程序代碼,只是學(xué)會(huì)使用好這些Tag,然后利用這些Tag寫 出Jsp頁面。一開始的時(shí)候還真是頭疼,這些Tag一個(gè)都不明白,而且文檔不是非常齊全,Tag的Source中注釋也比較少,學(xué)習(xí)起來不是很方便。我們 一共3個(gè)人投入到這個(gè)項(xiàng)目的前期準(zhǔn)備中,在第一個(gè)星期的學(xué)習(xí)中大家互相分配好個(gè)人學(xué)習(xí)的模塊,隨時(shí)互相交流。在后來的深入中發(fā)現(xiàn)這個(gè)項(xiàng)目的業(yè)務(wù)邏輯操作會(huì) 使用PL/SQL以及存儲(chǔ)過程來進(jìn)行,對于我來說,PL/SQL是從來沒有做過的東西,就叫做一竅不通,于是我需要從頭開始學(xué)習(xí)PL/SQL,以及如何編 寫存儲(chǔ)過程。我從網(wǎng)上下了一個(gè)PL/SQL的電子書籍,然后在公司花了一天時(shí)間進(jìn)行學(xué)習(xí),個(gè)人用的是Toad來調(diào)試PL/SQL的,雖然別人喜歡用 PL/SQL Developer來進(jìn)行開發(fā),不過我還是比較鐘愛Toad,而且Toad的確功能也很強(qiáng)大,使用起來也很方便就是了。經(jīng)過第一天的PL/SQL的學(xué)習(xí), 基本掌握了全部語法以及存儲(chǔ)過程的書寫格式等等,開始能夠?qū)憣懛浅:唵蔚腜L/SQL。接下來的兩三天不斷鞏固熟練,客戶那里也發(fā)過來幾本詳細(xì)設(shè)計(jì)讓我們 練習(xí)著做一下。有了實(shí)際的詳細(xì)設(shè)計(jì),再加上我們之間互相交流,我們提高的都很快,大概過了三四天,大家就把基本詳細(xì)設(shè)計(jì)代碼編寫完畢了,而且經(jīng)過實(shí)際鍛 煉,我的PL/SQL編寫存儲(chǔ)過程的水平也大大提升,已經(jīng)可以滿足開發(fā)中的需要了。

    這個(gè)項(xiàng)目因?yàn)槿绻覀円婚_始做的能讓客戶滿意的話,后續(xù) 的項(xiàng)目將會(huì)比較龐大,所以Leader決定把我們Group比較空閑的其他人也先培訓(xùn)一下,讓他們有點(diǎn)感覺,到以后正式開發(fā)的時(shí)候也能迅速進(jìn)入狀態(tài),負(fù)責(zé) 給他們培訓(xùn)的任務(wù)也就交給了我。說起來是培訓(xùn),其實(shí)也就是把大概流程以及方法通過一次會(huì)議的形式告訴他們,然后把我前面已經(jīng)作好的那個(gè)畫面作為他們的作 業(yè),要他們看著設(shè)計(jì)書自己把畫面制作出來。這個(gè)時(shí)候也要放勞動(dòng)節(jié)了,黃金周可以休息一個(gè)星期,想想就覺得很Happy。勞動(dòng)節(jié)的時(shí)候基本沒有怎么學(xué)習(xí),只 是先把XML-RPC仔細(xì)看了下,學(xué)會(huì)了如何去寫一個(gè)XML-RPC的應(yīng)用,接著稍微看了點(diǎn)SOAP,看得也不錯(cuò),只是些簡單的SOAP的例子而已,那些 SOAP的復(fù)雜東西都沒有看。

        很快就五一黃金周七天放假放完,八號(hào)開始上班,上班后就開始正式做節(jié)前就定好的那個(gè)項(xiàng)目,這次性質(zhì)屬于試做,也就是人家先發(fā)一批設(shè)計(jì)書過來,我們?nèi)缓箝_始 Coding,大概做了一周后,我自己害了急性結(jié)膜炎,只能回家休息,這次可真的是只能休息了,眼睛覺得特別漲,不要說電腦了,連書都不能看,看了眼睛就 疼。所以在家就只能睡大覺,過了一周眼睛大概才復(fù)原,可以去公司上班了。回到公司以后,Leader通知我說我不用去做上次那個(gè)項(xiàng)目了,要我加入我們 Group的一個(gè)新的項(xiàng)目,這個(gè)項(xiàng)目比較大,當(dāng)時(shí)還處于東京剛剛做好基本設(shè)計(jì),我們從東京把任務(wù)接下來,準(zhǔn)備發(fā)回來做詳細(xì)設(shè)計(jì)。我進(jìn)去的時(shí)候項(xiàng)目才開始三 四天,基本上還沒有做什么,這次我進(jìn)入了詳細(xì)設(shè)計(jì)制作小組,開始進(jìn)行這個(gè)項(xiàng)目的詳細(xì)設(shè)計(jì)的制作。

        由于我屬于第一次在正式的項(xiàng)目中參與詳細(xì)設(shè)計(jì),所以很多東西都不明白,特別是業(yè)務(wù)上面的東西,許多日語中的業(yè)務(wù)術(shù)語我根本不明白,比如什么賣切,切替,仕 入什么的。看著基本設(shè)計(jì)書,感覺跟以前看詳細(xì)設(shè)計(jì)書有很大的不同。具體的東西寫的少了,業(yè)務(wù)流程邏輯框架什么的比較多,所以需要首先把業(yè)務(wù)內(nèi)容都熟悉了, 才可能寫出詳細(xì)設(shè)計(jì)來。這次的詳細(xì)設(shè)計(jì)我也不是孤軍奮戰(zhàn),而是有一個(gè)進(jìn)公司4年的老員工帶著我一起做,我的任務(wù)很輕,不過重點(diǎn)是學(xué)會(huì)如何去寫詳細(xì)設(shè)計(jì),也 許下次再有一個(gè)比較大的項(xiàng)目,就沒有別人再帶著我,而是我自己一個(gè)人去完成詳細(xì)設(shè)計(jì)了。大概詳細(xì)設(shè)計(jì)寫了20天左右,我被通知當(dāng)天把手上的一份詳細(xì)設(shè)計(jì)寫 完,第二天進(jìn)入方式設(shè)計(jì)小組進(jìn)行方式的設(shè)計(jì)。

    進(jìn)入方式小組以后,接到的任務(wù)就是好幾個(gè)編寫DB操作方面的代碼自動(dòng)化生成工具。由于這次DB 方面并沒有非常強(qiáng)制性的那種規(guī)約,所以SQL語句的編寫可以說比較隨意,這就給我工具的編寫帶來了很大的難度和挑戰(zhàn)。這次負(fù)責(zé)管理方式小組的人仍然是進(jìn)公 司以后經(jīng)常帶著我的那位技術(shù)專家,所以也真算很巧呢。寫工具其實(shí)很對自身代碼編寫的提高也很有好處,因?yàn)槭紫瓤蛻裟抢镔Y料會(huì)不斷修改,這些工具你為了以后 客戶更新資料后你能順利更新工具,你需要設(shè)計(jì)一個(gè)優(yōu)良的Framework,不一定需要多么復(fù)雜的Framework,不過一定要盡量把程序各方面的耦合 度盡量降低,這樣才有利于自己對工具進(jìn)行擴(kuò)展。緊接著很快,項(xiàng)目代碼編寫開始了,我的任務(wù)算中等偏上,有2個(gè)畫面和一個(gè)批處理需要編寫,復(fù)雜度還算比較繁 一點(diǎn)。這次項(xiàng)目需要編寫JUnit程序,每天都要進(jìn)行回歸測試,保證代碼Method的正確性。JUnit雖然自己會(huì)用,但是從來沒有在真正的項(xiàng)目中使 用,所以在真正用的時(shí)候感覺有點(diǎn)手足無措。以前做JUnit從來都是覺得給個(gè)參數(shù),檢測一個(gè)返回值就好了,其實(shí)不是那么回事,業(yè)務(wù)邏輯復(fù)雜了,自己需要做 大量的Stub來模擬真實(shí)的Class的返回值。設(shè)計(jì)一個(gè)好的Stub是比較困難的,特別在數(shù)據(jù)庫內(nèi)容比較豐富的時(shí)候,一張數(shù)據(jù)庫Table就有上百個(gè) 域,工作量可見一斑了。項(xiàng)目要到05年9月中旬才會(huì)結(jié)束,所以現(xiàn)在還在緊張的開發(fā)階段。我寫了JUnit的感覺就是難點(diǎn)不在如何去寫JUnit程序,而是 如何去設(shè)計(jì)測試用例。對于我們這樣不是以測試出身的程序員來說,設(shè)計(jì)測試用例是很痛苦而且很艱難的事情,估計(jì)有過相似經(jīng)驗(yàn)的人肯定會(huì)表示贊同。

        當(dāng)然我一邊在緊張的做項(xiàng)目,對于書本的學(xué)習(xí)也沒有閑著。這段時(shí)間抓緊把侯捷的Word排版藝術(shù)掃了一遍,看完覺得收獲頗豐。雖然我以前覺得我在Word上 用得挺不錯(cuò),日常的一些操作什么的我都會(huì),不過看這本書的中間我發(fā)現(xiàn)我還是有很多地方不會(huì)的,也學(xué)到了不少東西,在以后的Word排版中會(huì)很受到好處。由 于項(xiàng)目用到了Spring知識(shí),所以我也看了網(wǎng)絡(luò)上那個(gè)流傳廣泛的Spring開發(fā)指南的PDF看了一遍,感覺長了見識(shí),對IOC以及DI有了進(jìn)一步的了 解,也理解了為什么需要采用IOC以及DI。不過這個(gè)也沒有深入下去仔細(xì)看,以后等項(xiàng)目稍微空閑一點(diǎn)的時(shí)候一定再把Hibernate和Spring好好 看一下,學(xué)習(xí)人家的設(shè)計(jì)理念,提高自己能力。對了,也許最重要的是我最近在看一本書,就是《J2EE核心模式》的第二版,我當(dāng)時(shí)原來準(zhǔn)備看電子版的這本 《Core J2EE Patterns》的,不過突然在書店發(fā)現(xiàn)這本書的中文版出來了,而且譯者有熊節(jié)的名字,也就是跟侯捷一起翻譯《重構(gòu)——改善既有代碼的設(shè)計(jì)》的那個(gè)譯 者,我比較相信他翻譯的水平,于是買回來看,雖然項(xiàng)目非常緊張,我一個(gè)月算上周末需要加班在100個(gè)小時(shí)左右的樣子,但是我相信時(shí)間是海綿里的水,只要去 擠,肯定會(huì)有的。所以我到現(xiàn)在大概看了2周的樣子,已經(jīng)看了300多頁,而且感覺自己的設(shè)計(jì)視野也開闊了許多,這本書的確很好,把J2EE中常用的一些模 塊原理都說了出來,說明了為什么這么做好,這么做如何減少了耦合性,提高了可維護(hù)性等等,總之,有1年以上J2EE開發(fā)經(jīng)驗(yàn)而且覺得自己對J2EE有了比 較好的了解的開發(fā)人員我強(qiáng)烈推薦看這本書。看了這本書以后我都在回想以前設(shè)計(jì)的一些框架,一些模塊,覺得自己有很多地方當(dāng)時(shí)設(shè)計(jì)的時(shí)候覺得很精巧,不過卻 屬于弄巧成拙,加大了模塊的耦合性,所以在修改的時(shí)候比較難于下手。

    posted on 2005-12-26 21:43 Dion 閱讀(2592) 評(píng)論(8)  編輯  收藏 所屬分類: Java

    評(píng)論

    # re: [轉(zhuǎn)]我的Java學(xué)習(xí)之路 2006-08-08 16:35 阿菜
    大哥,你太生猛了。從不了解到精通,能聯(lián)系你么?
    指導(dǎo)指導(dǎo)我
    我郵箱wc1984624525@sina.com
    QQ:66325721
    希望你能幫幫我!因?yàn)槲蚁胱儚?qiáng)!  回復(fù)  更多評(píng)論
      

    # re: [轉(zhuǎn)]我的Java學(xué)習(xí)之路 2006-08-08 18:46 francislee
    我看你的文章之后 我發(fā)現(xiàn)我還是不要當(dāng)java程序員好了 現(xiàn)在struts把我弄得夠嗆  回復(fù)  更多評(píng)論
      

    # re: [轉(zhuǎn)]我的Java學(xué)習(xí)之路 2006-08-27 20:31 ll
    程序員成功之路。。我的夢想啊
    我大學(xué)2年瞎混1年網(wǎng)頁1年游戲,畢業(yè)時(shí)學(xué)JSP方面,剛學(xué)了JSP SERVLET皮毛做了個(gè)網(wǎng)站就開始了游戲歷程,2年后回頭又看,唉,已經(jīng)被時(shí)代落下老遠(yuǎn)了,現(xiàn)在學(xué)了STRUCTS,查了好些技術(shù)帖,都是2002-2003年的,心里那個(gè)痛苦啊。。
    老兄成功之路
    1、得力于對編程鉆研的韌勁和興趣
    2、得力于會(huì)學(xué)習(xí)的天賦,明白哪些可以先放棄,那些需要先掌握。。。
    3、得力于機(jī)遇和環(huán)境,不可否認(rèn)這是多么重要的,象我留了校,生活如此散漫,工作對學(xué)習(xí)技術(shù)方面沒壓力,不會(huì)要求你學(xué)這個(gè)學(xué)那個(gè),哪有動(dòng)力去學(xué),而且縱然自己再有興趣學(xué)也沒那個(gè)環(huán)境。。

    唉,這輩子是毀了我,高中被班主任強(qiáng)留在文科班,結(jié)果被歷史政治害我2年還是考了個(gè)3流學(xué)校,大學(xué)更是放縱沒人管,浪費(fèi)了4年的大好時(shí)光,從小來的遠(yuǎn)大志向,嘛都沒了。。苦啊  回復(fù)  更多評(píng)論
      

    # re: [轉(zhuǎn)]我的Java學(xué)習(xí)之路 2006-09-07 17:26 skypirate
    豈止是生猛,簡直是太生猛了……  回復(fù)  更多評(píng)論
      

    # re: [轉(zhuǎn)]我的Java學(xué)習(xí)之路 2006-10-10 15:43 法@
    太歷害了!  回復(fù)  更多評(píng)論
      

    # re: [轉(zhuǎn)]我的Java學(xué)習(xí)之路 2007-03-15 18:59 外包研發(fā)工程師
    感覺是在寫小說啊,工作比較輕松,可以不斷的學(xué)習(xí),不用做重復(fù)的工作,不用和朋友去玩,不用陪女朋友,一直都在學(xué)習(xí)。難道你是一個(gè)學(xué)習(xí)的工具??  回復(fù)  更多評(píng)論
      

    # re: [轉(zhuǎn)]我的Java學(xué)習(xí)之路 2008-03-03 12:35 KE
    學(xué)習(xí)JAVA就是這樣.  回復(fù)  更多評(píng)論
      

    # re: [轉(zhuǎn)]我的Java學(xué)習(xí)之路 2008-04-19 09:36 geekwang
    大家也都是這么走過來的.  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 美腿丝袜亚洲综合| 亚洲精品国产福利一二区| 亚洲视频在线观看| 外国成人网在线观看免费视频| 亚洲乱码国产一区三区| 两个人看的www高清免费观看| 亚洲成av人在线视| 一级毛片免费观看| 中文字幕亚洲精品| 在线观看av永久免费| 亚洲熟女乱色一区二区三区| 免费看AV毛片一区二区三区| 国内成人精品亚洲日本语音 | 99久久国产免费-99久久国产免费| 亚洲va久久久噜噜噜久久| 99精品视频在线观看免费专区 | 亚洲av无码偷拍在线观看| 国产免费一区二区三区VR| 免费观看四虎精品成人| 亚洲色无码一区二区三区| 91香蕉国产线在线观看免费| 日本亚洲色大成网站www久久| 国产真实伦在线视频免费观看| 一级毛片不卡免费看老司机| 亚洲精品高清国产一线久久| 18女人水真多免费高清毛片| 国产精品亚洲一区二区麻豆| 亚洲AV无码成H人在线观看| 国产精品区免费视频| 亚洲人成网站色在线观看| 亚洲JIZZJIZZ中国少妇中文| 国产好大好硬好爽免费不卡| 亚洲精品无码久久久久久| 亚洲中文字幕无码中文字在线| 免费专区丝袜脚调教视频| 羞羞视频免费观看| 久久狠狠高潮亚洲精品 | 亚洲AV午夜成人影院老师机影院| 无码乱肉视频免费大全合集| 青娱乐在线视频免费观看| 久久久久亚洲精品成人网小说 |