這里說說我的經歷吧。大學前以及大學前面三年的經歷就不說了,因為大學前的高中就是好好學習,大學前三年就是混過來的。
我上的學校還算可以,雖然不是北大清華這樣第一流名牌大學,但至少也算中國的第二流名牌大學了。大學中前面三年都陪伴著游戲過去,所學到的只是些計算機基
礎知識。到大四后我突然發現就業的問題就在眼前,而自己似乎什么也不會,于是開始看書。最一開始重點看的是C++,可是后來自從看了一本J2ME的書以后
被Java所吸引。當時雖然學校上過Java課程,但是自己也只是學了很少的皮毛,也就只會寫寫Hello
World和什么加減法之類很簡單的程序,連API都知道沒有幾個,比如說字符串長度的API我都不知道。所以剛開始自己學J2ME的時候屢屢受挫,自己
也明白自己的缺點,決定從J2SE開始好好補上。
剛開始為了熟悉Java開發環境,買了本JBuilder開發的教程,并且在自己的本本上安裝了JBuilder進行演練。當時的我連JavaDoc都不
知道,每次究竟什么API能做什么事情一點頭緒都沒有,還不知道哪里去查,后來同學告訴我有個JavaDoc這個東西,我還興奮不已,覺得自己被從黑暗中
拉回來了。一開始使用JBuilder的時候,馬上為之所吸引,有兩個原因,第一是因為它自動標出語法錯誤,邊寫代碼邊提示你什么地方語法出錯,記得以前
使用VC++的時候,每次程序寫好后先編譯,然后再Build,再運行,這其中每個步驟都會出不少錯誤。特別是在編譯的時候,寫個200多行的程序一次編
譯下來就有100多個錯誤,結果每次花在這上面的工夫都要好長時間。而JBuilder使用了即時語法分析,所以基本上程序寫完,就可以省略調試語法錯誤
的步驟了。第二個原因是可以自動提示代碼,這個功能可以讓你迅速熟悉API,免得每次去查幫助文檔那么麻煩,我就是這么很快掌握了許多API的。
可能大家會問我為什么一開始不學習《Java編程思想》,的確這本書我們宿舍就有好幾本,不過大家普遍反映效果不好,到最后都不知道說的是什么,所以我也沒敢看。
經過20天左右的學習,對Java有了更進一步的了解,熟悉了不少API函數,由于在那本書上寫開發SWING占了不少篇幅,所以也對Swing的開發了
解了不少。看完以后因為同學說Java的靈魂就是多線程編程,所以開始看Oreilly的《Java線程》。記得在大學中操作系統這門課我們就提到過線程
的知識。并且課本上就是用Java實現的,當時有了一點點概念,但這次看這本專門說線程的書后才發現我原來了解的那些根本是什么都不算(當然,現在回想起
來,我那時看書學到的也只是很簡單的皮毛而已)。看完這本書后我自己學會在我的JBuilder下開發很簡單的多線程程序,并且模擬線程沖突,等待等情
況。當時看著自己寫的一兩百行程序可以順利執行,那種興奮勁就別提了。這本書我看得也很快,大概就花了3個星期看完。
經過上面的學習,自己相比以前來說提升了不少,這時候自己也找到了工作,是做J2EE對日外包的,所以更加堅定了努力學習Java的信心。
在上面寫的程序中,我自己寫程序沒有規范性,在代碼編寫的時候自己的盲點特別多,還容易犯低級失誤。同學有一個《Effective
Java》中文版,可是我看了幾頁發現自己根本看不懂,里面什么靜態工廠啊,什么單例模式什么的根本不知道什么東東。我知道自己目前的水平還不夠,所以決
定放下這本書,去尋找別的適合我的書看。這個時候我看到了候捷先生翻譯的《Practical
Java》一書,當時是剛剛上的書架。這本書我在書店翻了下目錄后就感覺如獲至寶,馬上買回家,在回家的公車上就貪婪地讀起來。這本書不算很厚,但是自己
看得卻很認真很仔細,也明白了不少東西,比如Java中等號和equals()方法的區別,究竟什么時候用什么。還有Exception處理機制,以前不
知道什么叫Exception,只是JBuilder提示我要我拋出Exception我再拋出Exception,自己覺得這東西基本沒什么用呢。但是
看了這本書后我改變了看法,我發現Exception是個很好的東西,可以迅速把程序從正常狀態和異常狀態區分開來,即使而準確地在指定位置得到處理。那
時自己也有了以后寫程序的時候注意編寫異常處理部分的想法。《Practical
Java》這本書雖然不厚,但是我卻非常仔細地去看了,大概花了1個月時間,我把這本書完全消化了下去。
當時聽說Java在網絡上的應用非常廣,我也不知道究竟是什么應用,我于是買了Oreilly的《Java網絡編程》這本書。這本書雖然很厚,其實前半部
分內容不是很復雜,后半部分寫什么RMI的東西我也看不大懂,只能理解個概念。通過這本書,我了解了HTTP協議究竟是什么一個東西,在它上面利用
Java傳輸數據該如何做,知道了什么是Request,什么是Response。這也為以后開始我的J2EE之旅打下了很好的基礎。當時自己依然是邊看
書邊自己寫代碼來驗證,自己寫了個服務器端Socket和客戶端Socket,成功進行了通信,又在上面加上了安全Socket內容,實現了SSL通信。
當時我把寫的這個又套上了Swing的外殼,還和同學拿這個傳文件呢。不過當時也沒有考慮過什么校驗碼之類的東西,所以傳傳小文件還是可以的,文件稍微一
大一點,傳過去的文件總是不對頭,和我原來的文件經常會出一些差異,導致文件打不開。
《Java網絡編程》這本書看了不少時間,因為書比較厚,東西也比較多,不過除了后面的一些知識以外,其他的還是容易理解的。大概花了2個月左右的時間看
完。看完后,時間也到了2004年的3月。我也輪到開始我畢業設計的時候了。我們的畢業設計導師都還不錯,給你自己選個課題,我選的是一個B/S結構的在
線簡歷處理系統,正好和我所學和下面所工作的東西是一條路上的了。這時我覺得我應該往B/S結構上轉了,當時在選擇先看Servlet還是先看JSP上猶
豫不決。最終決定先看Servlet,后來也證明了我的決定是對的,我在熟悉了Servlet后再學JSP是非常容易的,基本上根本沒有遇到什么難點。
可
能有人會覺得我看了好多Oreilly的書,雖然我不能說Oreilly本本都是好書,不過相對來說,好書的概率總超過許多其他的出版社,而且體系比較齊
全。我看得幾本書我都覺得還不錯。現說說下面這本我學Servlet時候看的《Java
Servlet編程》來說吧,很不錯的一本書,讓我迅速知道了什么是Servlet,然后通過最簡單的實例,讓你知道了Servlet如何運行的,跟
HTTP協議是如何配合的,如何返回HTML形式的文本,XML配置符該如何寫,究竟每個元素是什么意思等等。由于我原來有一定的XML基礎(知道XML
語法各種格式的含義而已),所以掌握起來還算比較快。通過這本書,我知道了如何動態生成HTML文檔,知道如何把一個Servlet映射到一個虛擬的地
址。在后半部分寫到了數據庫操作部分,我對數據庫的了解其實也僅限于原來大學課本上的《數據庫系統原理》,如何從程序和數據庫交互是一竅不通。通過數據庫
操作這章,我知道了如何使用JDBC語句如何編寫,大家不要笑,對于當初一個新手來說,這個真是一個全新的領域,做什么事情都需要Sample來對照,跟
著依葫蘆畫瓢吧,其實現在的軟件開發也是這樣,我想現在大家誰能直接手寫Struts或者Hibernate的配置文件都很難吧。閑話少說,大概這個時
候,我對畢業設計的雛形有了點思想上的概念。看完了《Java
Servlet編程》后緊接著就又看Oreilly的《JSP設計》,由于有了Servlet的基礎,學起JSP特別快。當時沒有著重看Tag的自定義設
計,光看了JSP的其他東西,終于在五一節后把畢業設計都寫完了,當時總代碼量是2000多行,第一次寫這么多代碼的程序覺得很有成就感。現在看起來那時
做的是標準垃圾,但是當時覺得還是很不錯。用了Servlet +
JSP。其實Servlet也不是用來當控制器的,而是和JSP做的差不多功能,都是作view的功能的。很快,畢業設計交差過去了,寫寫畢業論文,準備
答辯。在這個過程中,我又一次考慮自己下面該看什么書。
這次我又看中了侯捷翻譯的一本巨著,也就是鼎鼎大名的Martin
Fowler寫的《重構——改善既有代碼的設計》這本書。剛開始聽見重構這個名字,總覺得非常高深,加上都評論說重構是和設計模式齊名的東東,感覺更加高
深恐怖了。大概在6月初我開始看了重構,剛開始看的時候雖然抱著試試看的心態,不過還是非常認真的。但是,讓我頗感意外的是重構并不是很難,至少這本書中
說的非常通俗易懂,通過大量的實例讓你覺得重構是種很簡單很基本的技術。雖然我看完了重構以后在真實的代碼編寫中很少直接按照上面代碼所說的方法進行重構
代碼,基本上都是通過IDE來重構代碼,但是卻大大提升了自己編程思維,從此以后寫代碼就很少瞻前顧后了,因為我擁有了重構這個工具。這本書有點厚,再加
上中間有答辯,拍畢業照,以及畢業手續等等,這本書我花了一個半月看完。我看書的速度也不算快,不過我看書比較有恒心,不像有部分人看幾天就不想看了,我
能堅持天天看,所以總的來說還是不慢的。我計算過,如果我每天看10頁書,堅持下去,那一年就是3650頁書,平均一本書365頁來算,1年就是10本。
如果這10本書中有8本不屬于垃圾書籍,那么你這年就能有非常大的提高了。
看重構這本書中間我也抽了一段時間看了兩本其他的書,第一本是
《Java夜未眠》,挺不錯的一本書,雖然是散文,但是還是能讓你明白不少道理,受益匪淺。另外一本就是李維的《Borland傳奇》,由于自己當時最喜
歡用的工具就是JBuilder,所以也對Borland公司非常敬仰,特別對安德森,簡直就頂禮膜拜啊,哈哈。這本書寫得很精彩,寫了Borland公
司二十年來的血淚史,寫了如何跟微軟斗爭,如何在微軟和IBM的夾縫中生存。當然,也有很多的對于技術方面作者李維自己的見解,看了會有不少同感的。就這
樣,磨磨蹭蹭地把重構看完了。
當看完了《重構》這本書之后,我也開始去公司報到上班了。可以看出來,我當時工作的時候水平也很有限,但總比一年前要好不少,至少很多東西都已經知道了。
那時外面極限編程聽的比較多,自己也去書店買了本《Java極限編程》回來看,現在想想算是我看得第一本垃圾書籍了。不過也是有收獲的,這本書極限編程也
就說了點概念,然后就寫了不少工具的使用方法。在看《重構》中對JUnit有了點認識,不過只是皮毛中的皮毛。看了這本《Java極限編程》后對
JUnit的使用又了解了不少皮毛,對于Cactus有了點了解,對Ant了解了不少,至少可以自己寫出自己需要的配置文件了,并且可以結合JUnit生
成測試Report。由于我去的是日企,做對日外包的,所以公司開始培訓日本語,用的是《標準日本語》這套教材。我于是邊學日語邊看技術,大概2個星期左
右我把那本《Java極限編程》初步看完后就扔在了家里。這時的我已經開始會用Ant了,覺得是步入J2EE的重要一步。
很快啃掉那本垃圾書以后又看了本和Java不是非常有關的書:《程序員修煉之道——從小工到專家》,原因其實很簡單,大學同學都說這本書是經典書,看書這
東西,別人的評價還是能起不少作用的。這本書字數不是很多,不過排版的時候比較分散,導致書本有點厚,呵呵,可能也算出版社賺錢的一種方法吧。不過總的來
說,我覺得出版社紙張質量最好的是電子工業出版社,其次是中國電力出版社,最爛的恐怕就是機械工業出版社了,機械工業出版社有少量書紙張還能說過去,但有
不少簡直讓人不得不有脾氣啊,紙張薄得感覺和寫毛筆字的宣紙都差不多了。這本電子工業出版社的書紙張質量的確不錯,不過也許是因為我功力尚淺,所以這本書
雖然都看懂了,但是深有感觸并且銘記于心的沒有幾個,現在再回想,也只記得軟件模塊設計時要正交等等少數幾點了。這本書由于內容不是非常多,所以我就看了
半個月不到搞定。這時的我開發IDE已經轉移到了Eclipse上,畢竟商業開發用D版有點說不過去,而且公司也怕查,所以不允許用JBuilder,鼓
勵大家用Eclipse。我用了一段時間的Eclipse后,從一開始的不適應到后來覺得Eclipse很方便使用,JBuilder比Eclipse多
的就是一些根據不同類型開發的模版而已,而這些可以由Eclipse的插件來彌補。到了這時,我覺得我的Java基礎應該算還可以的了,API也熟悉了非
常多。我覺得看《Effective Java》的時機成熟了。
由于大學已經畢業了,所以也不會有同學的《Effective
Java》放在邊上讓我看這樣的好事出現,老老實實地去了書店買了本《Effective
Java》中文版回來研讀。呵呵,大家也許會問我為什么不買本E文的看,雖然我大學早早也把英語4級過了,而且大學中不少計算機專業課程教材也是E文的,
當時為了考試也認真讀了。但是畢竟英語不是我們的母語,看起來速度上明顯比中文版的慢一截。當然,如果是那種垃圾翻譯者用機器翻譯出來的中文版,看那些垃
圾中文版速度肯定比不上直接看英文原版的。這時的我看《Effective
Java》已經不再是當初的那么感覺很陌生了,覺得上面說的那些要點自己想想還都是可以理解的。我個人覺得提高自身編程習慣以及水平最多的還是看類似于
《Practical Java》和《Effective
Java》的這種按照條目來進行說明的書,能把你自己平時容易忽略的地方按照重點一個個揪出來進行修正。比如《Effective
Java》中的第一條,使用靜態工廠來代替構造函數,自己原來在進行開發的時候,從來不怎么會主動想到建立一個靜態工廠,總覺得使用構造函數來新建一個對
象是天經地義的事情。但看完這個條目后,我的看法也隨之改變,發現靜態工廠還是非常好的,當然,也不是什么地方用靜態工廠都很好。上面也寫到了靜態工廠的
優缺點,比如在什么地方適合使用,什么場合最好不要使用等等。這本書我覺得翻譯的也不錯,絕對值,強烈向有一定開發經驗的人推薦。我大概看了3周半的樣子
把這本書看完,這時的時間也到了2004年的9月初,新員工入司培訓也不再是第一個月純粹的日語培訓,而是技術培訓和日語培訓一起開展,技術上培訓
Java,Web開發,數據庫開發這三門課程,日語則開始進行日本語國際三級的培訓。公司的日語培訓和技術培訓都還不錯,技術培訓純粹把大家當作什么都不
懂的人,在Java上從最原始的Hello
World開始培訓,Web開發上從HTML頁面開始培訓,數據庫開發則從Oracle的安裝,SQL語句的編寫開始培訓。當然,在培訓的過程中我也不會
閑著,而是又開始尋找自己要啃的書本,這次,我選中了Oreilly新出版不久的《Java與XML》第二版。
由于XML表達數據的自由性以及強大型,所以XML特別適合于做配置文件以及數據信息文件,在Java中XML的使用可謂是多如牛毛。在J2EE中,從
Web
Application的web.xml開始就是XML文件,到下面的Framework配置等等,沒有一個沒有XML的身影,而且XML都起到了舉足輕
重的作用。雖然我原來也懂一點XML,不過也僅限于XML的語法以及結構等等,那些深入下去的東西基本還是盲點,關于Java中如何處理XML更是一竅不
通。為了更好的學習J2EE,XML是必須征服得一座山峰。這次,我依然又再一次信任了Oreilly出版社,買了本當時出版不久的《Java與XML》
中文第二版。這本書剛開始并沒有過多介紹XML本身過多的東西,只是為了怕某些讀者并不了解XML而對XML語法結構等做了非常簡要的介紹,不過也非常到
位的介紹。介紹完了這些XML基礎知識后就開始了SAX——〉DOM——〉JDOM——〉JAXP——〉Web
Service的歷程。不過我現在覺得如果能介紹DOM4J就更好了,因為我現在覺得DOM4J是Java中最好用而且性能也不錯的XML處理工具。剛開
始的我其實什么是SAX,什么是DOM都不知道,對JAXP更是一無所知。這本書英文版據說很受好評,中文版我只能說一般,因為有些地方估計譯者并不擅長
這一塊,所以翻譯得很生硬,以至于部分段落難于理解。總體來說,書的絕大多數內容還是可以看懂,由于沒有具體實際操作的經驗,所以很多也就是把概念理解
了,直到幾個月后做正式項目開始應用這些XML處理工具進行開發的時候才達到了熟練運用的能力。在這本書中學會了JDOM的使用方法,JDOM也還是比較
好用的,學會了JDOM,以后操縱XML也方便了許多。這本書我的建議就是,可以一口氣讀到第十章JAXP部分,后面的Cocoon以及SOAP等等部分
那本書介紹的并不是很好。Cocoon我是看了官方專門的幫助文檔以后才感覺入了門。而SOAP是經過別的書籍加上項目中的實際運用才真正學會的。
這
時到我剛進公司已經兩個月過去了,時間已經到了9月中旬的樣子,還有一個月我們公司新員工入司培訓就要結束,也意味著還有一個多月我們就要開始接觸正式項
目。這時的我寫B/S程序僅僅是JSP +
JavaBean的水平,連JSP中的TAG都不會自定義,看見別人網上的程序自己還自己定義Tag很是羨慕,于是決定把那本《JSP設計》認真看完,把
自定義Tag的功能實現。后來看了以后發現原來那本《JSP設計》的精華都在最后的150頁內,最后那部分先是介紹了自定義Tag的定義方法以及Tag定
義所帶來的一些好處。自從學會了如何自定義Tag,在后來公司的項目中自己也根據項目的特點定義了一些共通的Tag,大大方便了不少項目中的開發人員,提
高了生產力。這本書而且也說了一下B/S開發的兩種Web
Module。在這里,我第一次知道了Web開發可以用一個Servlet作為控制器,用JSP僅僅作用于表現層,這也為以后掌握MVC打下了很好的基
礎。
9月中下旬掃完了《JSP設計》的尾巴后,有一次跟公司給我們培訓的老師在閑聊時談到了項目開發,我詢問他項目是不是用JSP和
JavaBean來開發,他笑著和我說不是這樣的,而是基于Framework來進行開發。比如Struts就是公司的常用Framework。
Struts這東西以前也好像聽說過,不過從來也只是聽說而已,并沒有看過。得到這個信息的我,為了能盡快熟悉實際項目的開發環境,便決心盡快學會
Struts。當時的市場上講解Struts的書只有一本,也就是Oreilly的《Jakarta Struts編程》,不像現在連《Struts
in
Action》的中文版也有了。我去了書店買來開始回家看,剛開始看的時候覺得如同云里霧里一般,因為這本書歸納總結性的東西很多,比較適合當參考手冊,
而真正帶領新手入門這一塊做的并不好。所以當我把這本書都看完了以后,還是不會用Struts編寫一個程序,只是感覺自己朦朦朧朧懂了一些概念,比如
MVC什么的。在公司我們的培訓也結束了,通知在國慶節過來以后的第一個星期——大概是10月10日左右進行考試,最后根據培訓考核情況來調整薪水。當時
跟我一起培訓的新員工基本上沒有人會Struts,其實這個時候連會用JSP +
JavaBean寫一個最簡單的登錄畫面的人也沒有多少個,大部分人還是模模糊糊懂一點,但是具體做東西還是做不來的那種水平。國慶節大概10月5號的我
去了趟書店,突然發現書架上新上了一本書,就是孫衛琴編寫的《精通Struts》這本書。孫衛琴的書我倒是聽說過,就是在這之前出的一本關于Tomcat
以及Web
App開發的書,據說挺容易上手的。我翻看了這本書的目錄結構,覺得可以值得一讀,于是雖然價格不菲,仍然買回家當天就研讀起來。憑我的讀后感覺來說,這
本書也許學術價值并不高,說得深入的東西基本沒有,但是特別適合初學者,通過Hello
World這種例子迅速讓你手把手編寫出第一個Struts程序。就這樣,在這本書買回來的第二天,我自己就用Struts寫了一個很簡單的登錄畫面程
序,當時的感覺別提多興奮了,就感覺自己入了門,以后的道路一片光明。在這里,我要由衷地感謝孫衛琴女士,寫了這么一本適合初學者的書,同時也建議沒有學
過Struts但又想掌握Struts的Java程序員們買這本書回來看(不知道我是不是有書托之嫌,我只是說我自己的心里想法)。
國慶的假期放完了,我也回到了公司準備考核,上午是筆試,下午是上機考試。筆試分為了4塊,分別是Java,Web開發,Oracle數據庫,以及
CMMI規約。這四門除了Oracle數據庫我一向不是很擅長,只考了個中等分數以外,其他三門分數都名列前茅。不過CMMI規約老實說我也不怎么會,不
過碰巧考的很多都是我知道的東西。下午是上機考試,題目給出來了,我一看題目,原來是一個最簡易的成績查詢系統,也就是數據庫里面已經有一些學生成績,我
們寫一個檢索頁面,可以輸入或者選擇檢索條件,把符合我們檢索條件的數據輸出并顯示在畫面中。我于是拿剛學會不久的Struts進行編寫,在3個小時內把
整個頁面都寫好了,并且還自定義了一個Tag來顯示數據信息。考完以后我才知道總共也就五六個人程序可以運行,而且只有我一個人用的是Struts,其他
人基本都是最簡單的JSP +
JavaBean,有的人連JavaBean都沒有,數據庫操作全部寫在了JSP頁面中。毫無疑問,這次上機考試我得到了好評,給了最高分。在全部的培訓
成績中我也居前兩名,我們部門新員工我排第一名。帶著這個成績,我們的入司培訓基本結束,開始進入部門做實習項目。
雖然說我們正式進了部門,不過試用期還沒有結束,我們試用期最后一個月的任務就是做一個實習項目,當然,每天還是要進行日語培訓,因為要參加12月份的國
際日語三級考試。公司也象征性得給大家培訓了三節課的技術,第一節是Struts培訓,第二節是Web
App的MVC結構的培訓,第三節是Log4j培訓,這幾次培訓下來,大部分人感覺好象云里霧里一樣,基本什么都沒聽懂,不過我由于有了點Struts的
基本知識,所以感覺收獲比較大,特別是MVC的培訓中我真正明白了視圖——控制器——模型這三層每層應該怎么處理,知道了一個Web
App中如何分Java
Package比較好,明白了專門有一個DAO層來處理數據庫所帶來的便捷,明白了Log在Web開發中的重要地位,這為以后的開發帶來了很大的好處。實
習項目的課題很快就下來了,要我們做一個電子相冊的B/S系統,要求有圖片上傳,圖片檢索,圖片顯示以及要用Struts來構建,這些是基本的要求,其他
功能可以自由擴張。我們部門的新員工分為兩個小Group,都是一樣的課題,互相促進和學習,每個Group還配備了一個老員工,作為督促我們的進度,防
止我們有過大的偏差等等,不過具體做東西上原則上要求是不會給我們什么幫助。首先每個小Group要選出一個Leader,結果我被大家一致選為我們
Group的Leader。在小組討論中我們先進行需求分析,大家的討論很是熱烈,主意也很多,不過基本上組員們也都是點子多,具體實現上面還都沒有想
過。對于他們的那些建議,絕大多數我決定都作為我們要實現的目標,但也有少部分我覺得目前以我們的水平還無法實現的,就先否決了。會議開完后,當天回家以
后我就開始排開發計劃和個人的進度,第二天寫畫面的基本設計,第三天把組員拉過來開始Review基本設計,我們組的速度還算比較快。從星期二公布課題,
到星期五就和幾個組員一起把DEMO畫面設計出來了。原來的計劃是第二個星期一開始Coding,大概花一個星期完成。不過其余組員似乎還是不怎么會
Struts,于是我回家星期六星期天基本全天都在看書寫代碼學習,花了兩天把項目基本Coding完畢。其中Web頁面部分也不再使用一開始使用
Frame的做法,而是采用了Tiles框架。Tiles的使用過后我感覺是非常好的東西,經過簡單的配置可以完成大批網頁中類似部分的構建,而且生成的
屬于一個頁面,這樣就省去了以前寫Frame時提交頁面總是要考慮設置Target以及在引用對象的時候大批Parent或者top對象使用的麻煩事了。
在開發過程中我使用了Log4j,這為我的調試程序帶來了極大的方便,呵呵,可以想象,沒有Log來調試一個Web程序真是不可想象的。
這
段時間我是邊開發邊翻查那本《精通Struts》的,這樣,迅速把Struts中提供的許多Tag弄熟練了,為以后具體的項目開發帶來了便捷。也許是一向
以來公司的實習項目完成效果都不是很理想吧,這次我們的迅速完成比較出乎Leader的意料,綜合三個月的試用培訓,由于我在日語和技術以及實習項目中表
現都還不錯,所以定工資級別時也是同一批進公司的新員工中最高的,隨著轉正會議的結束,我也在10月底成為了公司的正式員工。大概剛剛進入11月份,我們
Group便開動一個項目,項目不是很大。當時老員工們許多都在做項目的詳細設計,我便跟著公司一位技術專家(也是當初給我們入司培訓的其中一位老師)做
起項目的Framework構建工作。當時的我才進公司,第一資歷尚淺,第二我的確也并不是很會什么東西,所以給我的任務很多都是一些模塊的
Utility的設計。比如通用的Check方法啊,CSV以及定長文件的讀取解析什么的啊,還有某些在IE中可以實現的效果如何在Netscape中也
能實現同樣的效果等等。雖然這些東西在現在看來并不是很復雜,但是當時自己的確隨著做這些東西而學到了很多很多。比如使用JDOM對XML文件的解析啊,
很多Check方法的小技巧啊,IE和Netscape究竟有什么地方不一致,該如何解決等等,這些都在這幾天內了解了很多。在這幾天中,我通過網上查找
資料,臨場迅速學習了Java反射的使用方法,并且自己邊學邊寫實例,實現了各種情況下的反射案例。我個人覺得掌握Java反射技術是非常重要的,這讓你
可以寫一些通用的工具。如果不會反射技術的話,也許你永遠只能寫一些針對特定情況下的解決方法。而會使用反射以后,你可以寫一些代碼,這些代碼可以用在許
多地方,達到自己擴展甚至構建Framework的效果。在這個項目中,我使用了自定義Tag和Java反射技術,定義了些項目中比較需要的通用的
Tag,方便了大家。
后來聽老員工說新員工進公司就開始做Framework是以前從來都沒有過的事情,因為我們Leader對我希望比較大,所以想盡可能培養我,讓我早點挑
起項目大梁,所以給我的成長提供了一次又一次的機遇。11月中旬以后,項目開始進入編碼階段,我也第一次看到了正式的項目設計書。第一次看到設計書的時候
我都覺得自己腦子有點懵,一大堆日語什么含義自己不是很清楚,而且感覺根本無從下手,不知道從哪里開始看比較好。項目擔當耐心得和我說了設計書的格式以及
究竟什么地方是什么一個含義,以及Coding的時候按照什么個思路來看設計書。再加上項目中有老員工先寫了個Sample,讓大家看了標準的一個流程,
所以我們就依葫蘆畫瓢,慢慢得把一個畫面一個畫面Coding完畢。當然了,后來也有測試員來測試我們的畫面,發現bug后就發Bug
Report給我,那一個月就是在Coding,修正Bug中渡過的,這個項目是用Struts做的,因為不大。所以也沒有再用其他的
Framework,數據庫操作那里只有個非常簡單的單表操作DAO層,其余的DB操作都是自己通過JDBC操作語句來完成的。在這第一個自己接觸的真正
項目中,我自己學到了很多B/S設計的技巧,感覺很充實。不過書本學習方面我也沒有閑著,我為了能夠深入了解Java,大概在11月中旬左右開始看《深入
Java虛擬機》這本書,由于內容比較深入,所以看得也有點吃力。書翻譯得和寫得都還不錯,值得一看,我一直看了前八章,看到Java程序運行細節后就沒
再看了,大概看到了12月底的樣子吧,呵呵,有時間的話決定把后面的部分也看完。這本書看完后收獲就是了解了Class文件的實質,Java的安全模型,
虛擬機是如何工作的。這些知識對后來調試程序Bug或者Exception的時候非常有好處,可以把以前自己覺得莫名其妙的錯誤的原因找出來,不像以前遇
到很古怪的Exception的時候怎么死的都不知道,從讀完這本書以后,在以后的調試異常中很少再有不知所以然的感覺了。
2004年12月底的時候,我的第一個項目也做完了,由于我空閑著,Leader便在星期三的時候把一個公司內部開發的Source統計的小工具讓我進行
修改,使得添加一個比較有用的功能。東西給我的時候基本沒有任何文檔,在我手上的就是一堆源代碼而已,界面是用Swing制作的,因為沒有專門在UI上進
行精心設計,所以說不上好看,典型的Java編寫的圖形界面的程序的樣子。軟件不是非常大,估計在1萬行源代碼以內,不過對于只有一個人修改來說,也比較
夠嗆了。還好我在剛學Java的時候用JBuilder寫了一些Swing的程序,現在還是對Swing有概念的,所以拿到手上以后經過仔細分析,逐漸理
清了頭緒。經過修改和自己測試完畢后,覺得還比較滿意,達到了預期的目標,于是在星期五的時候提交給了Leader。通過這次,對Swing的開發又加深
了印象,自然,在有的細節技巧方面受益匪淺。
元旦很快來臨了,在年底以前,公司覺得有必要學習下Hibernate,雖然我們目前的項目中
還沒有用過Hibernate,而是用另外一個公司內部開發的ORM工具,不過幾名技術專家初步對Hibernate感覺后覺得Hibernate的功能
要強大的多,而且是開源的,不斷有人在推動,升級,所以有必要我們要學Hibernate。這次的學習采用學習小組的形式,也就是公司內部先抽幾名員工
(主要是技術部門的,當然,開發部門如果有興趣的話也可以考慮)來進行深入學習,然后定期開會交流互相學習,達到短時間內先行的幾名成員迅速深入掌握
Hibernate的形式。由于我第一處于空閑狀態,第二也比較有興趣,而且跟技術部門的專家們也比較談得來,所以我也加入了其中,成為幾名學習小組中成
員的一部分。我們學習資料主要就是《Hibernate in
Action》英文版一書以及官方的幫助手冊。我負責其中對象操作,Transaction和Cache,還有高級Mapping關系的設置幾個部分的學
習。由于資料都是全英文的,所以看書速度并不是很快,不過還是初步得到掌握了。大概學習了半個多月的樣子,我們各自基本學習完畢,互相交流后并且寫下了讀
書筆記,用來后面具體項目開發時候參考用。通過這大半個月的學習,我個人覺得提高了非常多,在這之前,我只知道有ORM這種東西,但是從來沒有使用過,也
從來沒有看過。自從學過了以后,我不僅對Hibernate在代碼編寫時的使用比較熟悉了,而且對Hibernate的配置以及許多底層的知識有了很清楚
的認識,讓自己在數據持久化方面的認識提高了大大的一步。
元旦過后,雖然一邊在學習Hibernate,不過由于下面項目的需要,Leader跟我說要我學一下Unix下的Shell編程,因為
項目中許多批處理會用Shell來啟動。UNIX命令在學校時候學過的,不過這個時候已經忘記了很多,只是翻閱資料的時候還能回想起來不少命令。
Shell并不難,如果有了編程基礎,學習Shell編程也很快的,總體感覺就是編程語言大同小異,從基本語法來說,不外乎賦值、條件、循環這幾種類型。
只要迅速掌握這幾種類型在這種編程語言中的編碼格式,那么你就可以迅速掌握這門語言最基本的編程能力。Shell經過一周的學習后覺得感覺不錯,不僅可以
順利看懂別人寫的Shell程序,而且自己可以在Linux下順利寫出符合自己需求的Shell程序并能順利執行。但是突發事件總是有的,那個項目突然決
定延后兩個月,所以前一個星期的學得Shell等于暫時派不上用場了。不過嘛,多學一樣技能總是沒有害處的,而且又復習了那么多Unix命令啦,感覺還是
很不錯的。于是我又進入了不在項目中的真空期了。
但是好景不長啊,好日子還沒有過上兩個星期,公司去年做的一個比較大的項目開始了2期開發,我也被一下拖入了項目中。說起那個項目,公司好多人還心有余
悸,據說去年那個項目開發的時候,大概50多號人干了好幾個月,每天都是11點以后才有可能回家,周六是鐵定加班,周日是看情況,晚上就算加班加到凌晨3
點也不是什么奇怪的事情。當時大家都說多來幾個這種項目大家就要死了,這次這個項目的2期過來了,大家精神又一次緊張起來咯。一開始照例是項目會議,聽完
項目經理描述以后,大家也放心了不少,這次雖然說是二期,不過規模不大,只需要15個人左右干一個月就能搞定。主要是把項目一期里面一些地方進行改修,當
然也有需要新的畫面的開發,不過相對于去年的那塊不是很多而已。對我來說這次是個很大的考驗,因為項目是二期,項目組內除了我,其他的人都做過1期開發,
所以對項目結構都很清楚。這次項目開始并沒有什么培訓,所以我只能單獨看1期的源代碼來熟悉項目結構什么的。這個時候項目經理把我叫去要我辦理護照,準備
這個項目派遣我去東京現場維護。
這個項目是個比較全面比較大的項目,服務器采取了集群的方式,數據量也是千萬乃至上億級別的,所以性能要求
特別高。在技術方面用到了很多,使用EJB來控制Transaction,使用了ORM工具來操縱DB數據等等等等。而且由于比較龐大,所以服務器初始化
的那塊為了Load上去大批配置信息,代碼量極其龐大,在權限控制的那塊地方,代碼非常難以讀懂。這也給我一開始的學習代碼帶來了很大的一塊麻煩。不過總
算靜下心來后把整個項目框架以及實現手法基本摸清楚了,這個時候覺得非常開心,而且對Web應用程序的構造心里面也非常充實,覺得自己已經具備寫
Framework的初步能力了。
項目是緊張的,基本上每天晚上都要加班到11點,然后打車回家,哈哈,公司報銷。而且臨近過年,這么加班
也一點都感覺不到過年的氣息。不過我也不能因此放松了自己的學習。我覺得自己的基礎應該算比較好了,便開始啃起另外一本大部頭——《Java與模式》。一
直以來我對設計模式的感覺就是一些已經成型的,久經考驗的代碼框架,具有非常好的可擴展能力以及非常好的代碼健壯性。不過初學者最好不要看設計模式,因為
你接觸的代碼不多,如果貿然看設計模式的話,會造成不明白為什么這種設計模式好,究竟好在什么地方的情況下就在代碼中亂套設計模式,對自己的以后編碼發展
帶來不利的影響。每一種設計模式都有每一種設計模式的特點,自然也有他們自身的適用范圍,比如拿最基本的單例模式(Singleton)來說,適合于做配
置信息讀取器,主鍵產生器等全局唯一的東西。如果初學者不明白這些,拿單例模式亂套,什么都用單例模式,比如把普通傳遞數據用的JavaBean也做成了
單例模式,帶來的惡果就嚴重了。這本《Java與模式》我是從頭到尾認認真真看了,每看完一個模式都會仔細回想以前看的代碼哪里用到過這個模式,總會自己
想想這些模式適用于哪些地方。因為這個時候我自己編寫的代碼行數也已經很多了,所以看見這些模式就會特別有感覺。經過50多天的認真研讀,所有模式都被我
消化了下去,并且使得我的對程序開發上面的認識提升了非常大的一步。順路說一句,這本書寫得非常好,例子很多,但是不復雜,有一定代碼編寫經驗的人就可以
看懂了。不過看懂并不是最重要的,重要的是消化下去,用來理解以前看過的代碼的精華,這樣自己才能得到提高。
這個項目雖然很緊張很忙,不過我還是適應了下來,而且對整個項目結構什么的都有了比較好的整體的把握。項目橫跨了整個過年期間,所以在過年的那幾天都必須
開著手機,怕有什么突發事件要求去加班。簽證在2月4日左右送過去簽,Leader跟我說因為在過年期間,所以簽證可能會比較緩慢,比較難簽,不過一般情
況下1個月應該足夠了。原計劃我是跟另外兩個同事3月6日去東京,這樣算算也差不多。不過中國有句話叫好事多磨,呵呵,用在我身上的確不過分,我的簽證3
月3日日本領事館才簽,三月四日送到南京。3月5日和3月6日是雙休日,所以3月7日簽證才送到我手上。由于計劃是3月6日派人去東京,所以只好派另外一
個身上有簽證還沒有過期的人代替我過去,這次的機會就算泡湯咯。不過我并不是很在意,因為公司這里去東京出差的機會狠多,特別對于開發人員,據說工作幾年
后一聽到去日本出差就不樂意,畢竟也背井離鄉么。
在這個項目的途中,大概在2005年1月底2月初的時候公司也開始進行了制作詳細設計的培訓,我雖然在項目中,不過也成為了其中一員。這次培訓總共大概6
次課,每次2個多小時,雖然時間不長,不過把詳細設計的要點以及思路和容易出錯的地方都說了出來,感覺很是不錯,這幾次課的培訓后,雖然可能要我立即進行
詳細設計編寫還有點困難,不過心里面已經有了不少底,我覺得經過一段時間后的鍛煉,我應該可以有進行詳細設計的能力了。
3月初這個大項目結束后,本以為可以休整下,不過很快通知我3月7日加入另外一個項目,其實也不算一個正式的項目,屬于公司知識庫的一個信息查詢模塊。由
公司的一個技術專家負責,那人也就是我進公司時候第一個項目中帶著我的那個技術專家,說起來我和他還真有緣,現在我這個項目還是跟著他,而且公司里面唯一
一個和我同月同日生的人,真是很巧的巧合呢。他人挺好,很熱心,所以我也從他那學到了很多東西。這次由于不是正式項目,所以并沒有什么基本設計書,而是他
給我們開會議的時候大致說了下項目的內容,每個畫面的具體功能以及數據庫表格的設計。由于這次項目規模很小,總共就12個畫面的量,所以不采取
Struts等Framework,而是采用比較原始的JSP +
JavaBeans的構造。我們每個人根據他所跟我們講解得功能寫每個人自己分配到的畫面的詳細設計,其實也不算真正的詳細設計,就是每個人把自己操作的
那塊的具體邏輯設計寫出來,然后和他一起review一次,再開始編寫代碼。詳細設計這里我做的很快,當天下午就把自己分配到的兩個畫面業務邏輯什么的都
寫好了,星期一布置得任務,我星期三的時候全部編碼自測完畢提交,所以我的感覺就好像這個小項目一瞬間就結束了。
日本每年財務結算是在3月
份,所以我們歷來的習慣就是每年1月和2月很忙,3月開始清閑,一直可以到5月左右會接到個大項目昨。所以接下來就真正到了我的空閑時期,沒有項目的壓
力,我可以自由學我自己喜歡的東西。很久以前買了本《精通EJB》第二版,可是一直以來我覺得自己功力尚淺,所以沒有看,這次我想認真學學EJB。雖然大
家公認EJB并不是很好,不過歷來受到批評的都是EJB中的Entity
Bean部分,這部分我覺得可以借助Hibernate來彌補,而會話Bean和消息驅動Bean則還是挺不錯的。這次也當學一門技術,學習其好的東西,
不是很好的東西就當作以后開發時候的借鑒。《精通EJB》這本書我的感覺是書質量比較好,不過翻譯的水平稍微差了點,特別是有不少錯誤,而且很低級的錯誤
居然校對的時候都沒有發現,不能不說是個比較大的瑕疵。但是它不失為一本EJB的好教材。從一開始的JNDI開始,然后講解了對象序列化,RMI-
IIOP等等。這些以前都模模糊糊,或者是看過了但是還不知道究竟有什么用。但是經過這次的學習以后,對這些分布式系統比較需要的東西有了進一步的了解,
感覺頭腦中比較清晰,究竟RMI是什么樣的工作原理,怎樣實現一個遠程方法調用等等。接下來的EJB學習,自己用Eclipse +
Weblogic邊看書邊動手,寫了一個個自己的學習小程序。我個人感覺看書最好就是邊看邊自己動手寫小學習程序,這樣比光看不練能學到多得多的東西。學
了EJB后覺得腦子又清晰了很多,看見一個案例后頭腦中就會有好幾種如何解決的方法,幾種方法互相在頭腦中自己比較,經過這樣,大大提高了自己的思維活躍
性。
3月中旬開始由于公司比較清閑,大部分人處于沒有項目的狀態,所以公司舉辦了第一屆全公司范圍的編程競賽。公司只指定了題目為一個日歷系統,要求具有日程
記事等功能,其余功能自由發揮。這次不再采用團隊形式了,而是采取各自為戰的策略。自從培訓過詳細設計以后,我頭腦一直有如何寫詳細設計的思路,這次我自
己首先指定了開發計劃,保證自己控制自己的進度。接著進行了需求分析,確定了我有哪些功能。然后在自己的基本設計中開始進行數據庫結構設計。這次我決定采
用Hibernate+Struts的結構進行編寫,這樣我的數據持久層操作大大簡化,而且功能上也增強了許多。DB設計好以后我開始DEMO畫面的制
作。說實話,我美工水平實在不怎么樣,可以說雖然一般網頁的效果我都會自己做出來,不過具體網頁設計成什么樣我還真是一竅不通。還好
Dreamweaver我還算算是比較熟練,自己搗鼓搗鼓也想摸象樣把DEMO畫面給設計出來了,不過美觀不美觀我就覺得不怎么樣了,只是我能力有限,也
沒辦法設計的更好看,這個時候我感受到了一個項目中美工是多么重要啊。下面的詳細設計自己寫得很開心,把需要的功能都用文字反映了出來,這也算我寫成詳細
設計樣子的第一份詳細設計了,做完挺有成就感的。接下來首先構筑自己這個小項目的Framework,經過公司兩個正式項目的洗禮后,那兩個項目的
Framework我都認真研讀過源代碼的,所以我自己有了自己心里一套Framework的構造方法,特別是如何把Struts和Hibernate結
合起來的結構,自己有自己的一些想法。在這次Framework構造中,我沒有復制任何公司以前的代碼段,都是憑著自己對以前看的代碼理解后寫出來的。這
次項目我覺得對自己的提高也很大,首先鍛煉了自己詳細設計的能力。其次,自己雖然學習過Hibernate,不過從來沒有這么樣應用過
Hibernate,這次讓自己大大提升了實踐運用的經驗。公司由于知道這時也沒有一個真正的項目使用Hibernate,所以這時的我也算公司內部
Hibernate使用經驗最豐富的人了,這也為了后來我協助別的使用了Hibernate的項目解決問題的原因。再次,我這次自己寫了
Framework,特別在批處理方面,運用了許多剛學會理解掉的設計模式,這些模式讓我的程序更具有健壯性和可擴展性,讓我在設計方面的能力大大提升
了。
這次的編程競賽我寫得比較認真,代碼量的確也很大,總代碼行數超過了3萬行,有效代碼行數也在1萬行以上。經過公司專家們的評定后,我
得到了第一名,雖然沒有什么獎品,不過肯定了我這段時間以來的努力,我還是很開心的。而且這次的編程競賽讓我大大增加了編碼的熟練度,而且也在其中演練了
許多自己想出來的編程技巧,為以后的發展帶來很大的好處。
從4月份開始,公司由于比較清閑,所以部門內部開始進行各種培訓。我們部門開展了3項培訓,第一項就是編程能力培訓,第二項是Oracle數據庫技術培
訓,第三項是測試技巧培訓。在編程能力培訓中,主要就是把原來沒有注意的細節采取大家討論,輪流講課的方式進行的,雖然其中很多東西我原來都是知道的,不
過也有原來不清楚的地方。而且經過了這次互相討論,更加加深了印象。在Oracle培訓中我覺得收獲很大,這個Oracle培訓采取了傳統的上課的模式,
由我們開發小組中一個取得OCM的老員工給我們講解。對于Oracle,我原來基本上就只會寫寫SQL語句,具體Oracle有什么特別的功能,可以做什
么我也不是很清楚。但是這次上課從Oracle的啟動原理開始,讓我知道Oracle中究竟有什么,Oracle數據庫各部分在磁盤上是如何存放的,
Control File,Redo
File究竟是什么意思,在數據庫中起什么作用,數據庫是怎么依賴他們運行的,還有如何對Oracle進行系統管理員級別的管理,如何在不停止數據庫運行
的情況下進行數據庫的更新、升級、備份等等。這些東西雖然非常有用,但在平時的開發是學不到的,這次趁著這個機會大大提升了自己Oracle的水平,感覺
非常開心。數據庫一向是我的弱項,在上大學的時候我SQL語句能力只是一般,數據庫管理配置什么基本一點都不懂,通過這次集中的培訓,我覺得自己的能力又
進一步增強了,弱項也在慢慢退卻。在三項培訓中最后進行的測試培訓我承認我沒有怎么認真去學,所以學會的也就是些測試概念,具體的測試技巧什么的還是不怎
么會。現在開發和測試的結合性越來越高,看來要下下功夫,以免給淘汰咯。
提了這段時間在公司的進展,還沒說自己的學習呢,這段時間正好看見中文版的《JUnit in
Action》出版了,在書的背后寫著“如果沒有看過這本書,就不要對J2EE進行單元測試”這句話。我早在去年就了解了JUnit的強大功能,再加上
Ant的話對于回歸測試是非常便利的。趁有時間,我便于3月底4月初的時候開始看這本書。當時的我看《精通EJB》第二版看了一半,發現其中錯誤越來越
多,而且文字也有些地方不知所云了,所以扔下不再浪費時間看那本書,專心攻讀《JUnit In Action》。憑良心說,Manning的這套In
Action叢書的確很不錯,從我先前看的《Hibernate In
Action》英文版就能看出來,其中對代碼的編排非常方便讀者,感覺可以很順利的看到你所想看到的代碼片斷。這套《JUnit In
Action》也是一樣,博文視點的紙張還是很好的,排版使用了Manning的風格,閱讀起來很舒服,所以我讀得很快,大概就兩個多星期就讀完了這本
400多頁的書。感覺的確收獲不淺,首先,原來的自動化配置工具中只會使用一個Ant,其他的基本沒聽說過,在這本書上詳細介紹了Maven。聽過書中的
講解以及自己的試驗,的確覺得Maven功能很強大,不過感覺起來配置比Ant要麻煩,所以我自己的感覺是Ant在項目中還是會廣泛應用,不過Maven
在大型項目,特別是整個Site中有很大的用武之地,對于我們來說,使用的方法都是很簡單的,掌握如何編寫配置文件才是我們的關鍵。
書對
JUnit與Cactus在J2EE的測試手法上給了大量的事例,給人的感覺非常好,In
Action這套叢書最大的優點就在這里,用實例代碼片斷讓你迅速了解一樣東西。在實際工作中其實JUnit應用也是比較廣泛的,特別如果采取測試驅動開
發的話,JUnit是必不可少的一部分。在TagLib測試,JSP單體測試,數據庫測試和EJB測試都是我以前根本沒有看過的東西。其實這次雖然學是學
會了,不過真正做的時候還是要有個代碼例子依葫蘆畫瓢。我想大家肯定也都有這種感覺,寫程序的時候先找一段有點相似的代碼片斷Copy過來,然后看看要修
改什么地方,真正從頭到尾自己用手寫的代碼片斷是不多的,除非你已經爛熟于心。不過這本書快看完的時候,項目又來了。
這次做一個企業的MIS系統,與以往不同的是,這次客戶給了一個比較龐大的基盤,封裝了近100個Tag,基本上把各種各樣有可能遇到的操作都封裝到
Tag里面了。而且所有的畫面顯示等信息都是放在數據庫的Table中,所以這次要求不寫任何程序代碼,只是學會使用好這些Tag,然后利用這些Tag寫
出Jsp頁面。一開始的時候還真是頭疼,這些Tag一個都不明白,而且文檔不是非常齊全,Tag的Source中注釋也比較少,學習起來不是很方便。我們
一共3個人投入到這個項目的前期準備中,在第一個星期的學習中大家互相分配好個人學習的模塊,隨時互相交流。在后來的深入中發現這個項目的業務邏輯操作會
使用PL/SQL以及存儲過程來進行,對于我來說,PL/SQL是從來沒有做過的東西,就叫做一竅不通,于是我需要從頭開始學習PL/SQL,以及如何編
寫存儲過程。我從網上下了一個PL/SQL的電子書籍,然后在公司花了一天時間進行學習,個人用的是Toad來調試PL/SQL的,雖然別人喜歡用
PL/SQL
Developer來進行開發,不過我還是比較鐘愛Toad,而且Toad的確功能也很強大,使用起來也很方便就是了。經過第一天的PL/SQL的學習,
基本掌握了全部語法以及存儲過程的書寫格式等等,開始能夠寫寫非常簡單的PL/SQL。接下來的兩三天不斷鞏固熟練,客戶那里也發過來幾本詳細設計讓我們
練習著做一下。有了實際的詳細設計,再加上我們之間互相交流,我們提高的都很快,大概過了三四天,大家就把基本詳細設計代碼編寫完畢了,而且經過實際鍛
煉,我的PL/SQL編寫存儲過程的水平也大大提升,已經可以滿足開發中的需要了。
這個項目因為如果我們一開始做的能讓客戶滿意的話,后續
的項目將會比較龐大,所以Leader決定把我們Group比較空閑的其他人也先培訓一下,讓他們有點感覺,到以后正式開發的時候也能迅速進入狀態,負責
給他們培訓的任務也就交給了我。說起來是培訓,其實也就是把大概流程以及方法通過一次會議的形式告訴他們,然后把我前面已經作好的那個畫面作為他們的作
業,要他們看著設計書自己把畫面制作出來。這個時候也要放勞動節了,黃金周可以休息一個星期,想想就覺得很Happy。勞動節的時候基本沒有怎么學習,只
是先把XML-RPC仔細看了下,學會了如何去寫一個XML-RPC的應用,接著稍微看了點SOAP,看得也不錯,只是些簡單的SOAP的例子而已,那些
SOAP的復雜東西都沒有看。
很快就五一黃金周七天放假放完,八號開始上班,上班后就開始正式做節前就定好的那個項目,這次性質屬于試做,也就是人家先發一批設計書過來,我們然后開始
Coding,大概做了一周后,我自己害了急性結膜炎,只能回家休息,這次可真的是只能休息了,眼睛覺得特別漲,不要說電腦了,連書都不能看,看了眼睛就
疼。所以在家就只能睡大覺,過了一周眼睛大概才復原,可以去公司上班了。回到公司以后,Leader通知我說我不用去做上次那個項目了,要我加入我們
Group的一個新的項目,這個項目比較大,當時還處于東京剛剛做好基本設計,我們從東京把任務接下來,準備發回來做詳細設計。我進去的時候項目才開始三
四天,基本上還沒有做什么,這次我進入了詳細設計制作小組,開始進行這個項目的詳細設計的制作。
由于我屬于第一次在正式的項目中參與詳細設計,所以很多東西都不明白,特別是業務上面的東西,許多日語中的業務術語我根本不明白,比如什么賣切,切替,仕
入什么的。看著基本設計書,感覺跟以前看詳細設計書有很大的不同。具體的東西寫的少了,業務流程邏輯框架什么的比較多,所以需要首先把業務內容都熟悉了,
才可能寫出詳細設計來。這次的詳細設計我也不是孤軍奮戰,而是有一個進公司4年的老員工帶著我一起做,我的任務很輕,不過重點是學會如何去寫詳細設計,也
許下次再有一個比較大的項目,就沒有別人再帶著我,而是我自己一個人去完成詳細設計了。大概詳細設計寫了20天左右,我被通知當天把手上的一份詳細設計寫
完,第二天進入方式設計小組進行方式的設計。
進入方式小組以后,接到的任務就是好幾個編寫DB操作方面的代碼自動化生成工具。由于這次DB
方面并沒有非常強制性的那種規約,所以SQL語句的編寫可以說比較隨意,這就給我工具的編寫帶來了很大的難度和挑戰。這次負責管理方式小組的人仍然是進公
司以后經常帶著我的那位技術專家,所以也真算很巧呢。寫工具其實很對自身代碼編寫的提高也很有好處,因為首先客戶那里資料會不斷修改,這些工具你為了以后
客戶更新資料后你能順利更新工具,你需要設計一個優良的Framework,不一定需要多么復雜的Framework,不過一定要盡量把程序各方面的耦合
度盡量降低,這樣才有利于自己對工具進行擴展。緊接著很快,項目代碼編寫開始了,我的任務算中等偏上,有2個畫面和一個批處理需要編寫,復雜度還算比較繁
一點。這次項目需要編寫JUnit程序,每天都要進行回歸測試,保證代碼Method的正確性。JUnit雖然自己會用,但是從來沒有在真正的項目中使
用,所以在真正用的時候感覺有點手足無措。以前做JUnit從來都是覺得給個參數,檢測一個返回值就好了,其實不是那么回事,業務邏輯復雜了,自己需要做
大量的Stub來模擬真實的Class的返回值。設計一個好的Stub是比較困難的,特別在數據庫內容比較豐富的時候,一張數據庫Table就有上百個
域,工作量可見一斑了。項目要到05年9月中旬才會結束,所以現在還在緊張的開發階段。我寫了JUnit的感覺就是難點不在如何去寫JUnit程序,而是
如何去設計測試用例。對于我們這樣不是以測試出身的程序員來說,設計測試用例是很痛苦而且很艱難的事情,估計有過相似經驗的人肯定會表示贊同。
當然我一邊在緊張的做項目,對于書本的學習也沒有閑著。這段時間抓緊把侯捷的Word排版藝術掃了一遍,看完覺得收獲頗豐。雖然我以前覺得我在Word上
用得挺不錯,日常的一些操作什么的我都會,不過看這本書的中間我發現我還是有很多地方不會的,也學到了不少東西,在以后的Word排版中會很受到好處。由
于項目用到了Spring知識,所以我也看了網絡上那個流傳廣泛的Spring開發指南的PDF看了一遍,感覺長了見識,對IOC以及DI有了進一步的了
解,也理解了為什么需要采用IOC以及DI。不過這個也沒有深入下去仔細看,以后等項目稍微空閑一點的時候一定再把Hibernate和Spring好好
看一下,學習人家的設計理念,提高自己能力。對了,也許最重要的是我最近在看一本書,就是《J2EE核心模式》的第二版,我當時原來準備看電子版的這本
《Core J2EE
Patterns》的,不過突然在書店發現這本書的中文版出來了,而且譯者有熊節的名字,也就是跟侯捷一起翻譯《重構——改善既有代碼的設計》的那個譯
者,我比較相信他翻譯的水平,于是買回來看,雖然項目非常緊張,我一個月算上周末需要加班在100個小時左右的樣子,但是我相信時間是海綿里的水,只要去
擠,肯定會有的。所以我到現在大概看了2周的樣子,已經看了300多頁,而且感覺自己的設計視野也開闊了許多,這本書的確很好,把J2EE中常用的一些模
塊原理都說了出來,說明了為什么這么做好,這么做如何減少了耦合性,提高了可維護性等等,總之,有1年以上J2EE開發經驗而且覺得自己對J2EE有了比
較好的了解的開發人員我強烈推薦看這本書。看了這本書以后我都在回想以前設計的一些框架,一些模塊,覺得自己有很多地方當時設計的時候覺得很精巧,不過卻
屬于弄巧成拙,加大了模塊的耦合性,所以在修改的時候比較難于下手。