JAVA學習,是一條漫長的道路

  我在java 1.0正式問世前就開始學習java,這么多年過去了,到現在我的java學習歷程還沒有停過。我閱讀原文書,研究原始碼,撰寫程式,自認為走得紮實,不奢望一步登天。像我這樣老式的學習方式,顯然和現在的快餐主義背道而馳。從許多讀者的來信和學生的反應中,我發現大多數的人對於java的學習歷程都差不多是:因為公司需要使用java來進行伺服器的計畫,所以急急忙忙地學習java語言,然後就開始使用j2ee的api,開始寫起程式來了。如此急就章的學習方式,程式設計師基礎能力根本就不夠,對於對象導向精髓不能掌握,對於java語言內部的運作機制毫無所悉,對api的整體連貫性懵懵懂懂。

當然,我們也不好因此責怪程式設計師,畢竟軟體技術變動得太快。公司不可能給程式設計師足夠的訓練之後才開始做計畫。程式設計師一下子被指派使用a技術,還沒弄懂a技術是怎么回事,又被指派使用b技術,而且都是縫縫補補的方式邊學邊用,每次都像是全新的開始,遑論技術能量的累積。

我很慶幸的是,我不太有這樣的困擾。因為我是資訊工程系出身(而且我大學時上課一向很認真),所以理論基礎穩固,學習新技術對我來說不是難事。我就讀大學時,周遭許多同學都瞧不起數據結構、程式語言、作業系統這些所謂「學院派」的課程,以為這些課程一點都不實用。他們認為到了外面公司,這些信息科系所學的一切都派不上用場,「只要會visual basic和資料庫就夠了」。這種偏差的心態,恐怕會使得他們在知識經濟時代吃足了苦頭。

另外還有一派同學很瞧不起程式設計工作,他們告訴我,像我這樣會寫程式的人,未來進了社會「還不是被他們這些走管理的人踩在腳下」。所以,他們很輕忽理工課程的學習,甚至還有人相當熱衷「成功學」,認為這是邁向成功的捷徑,卻因此把學校的課業棄之不顧。我不敢相信有人竟然如此地本末倒置。

前一類的人太過於短視近利,後一類的人太過於好高騖遠。我一直很不能理解這些人的想法為什麼會這樣,或許是因為社會環境的風氣使然。我很慶幸我到目前還沒被社會的大染缸給玷污了(最好這輩子都不要)。我不認為我的學習方式是一種典範,但是一路走來,倒也頗有進展。許多讀者來信問我的學習歷程,雖然我個人的學習方式不見得適用於每個人,但或許還有一些參考價值(特別是對於那些有志進入信息行業的年輕學子),我想透過本文簡短地敘述一下。


我一向是採用先深後廣(也稱為bottom-up,deep-first)的學習方式。比方說,當我在學a技術的時候,學到一半發現需要b技術的基礎,我會到書局找出一兩本b技術的書,然後把a先擱著,開始看起b技術的書。甚至,我在技術書籍上看到不太熟悉的英文句構時,我會找出一本英文文法書詳細讀過。這種先深後廣的學習方式,適合學生時代全面地自我能力提升,但不適合業界人士。試想,老闆要你開發的erp系統已經延遲了,你怎有空研究j2ee原文書中的英文文法。先深後廣的好處是,學習很紮實;缺點是有時候會偏離主題太多。有一次我發現我原本是要學某軟體技術,幾次「先深後廣」下來,我居然看起老子的道德經了。

在技術上,我一直都是一個喜新厭舊的人,很少有軟體技術能讓我持續研究半年以上,我幾乎每隔幾個月就要換一次領域。java 能讓我持續這么久,也正是因為java的領域廣。透過java,我的技術視野變開闊了。這些年來,我換過的 java 相關領域包括了:虛擬機器、資料庫、企業運算、多媒體、2d/3d圖學、網路.…..等。

我的學習完全是興趣導向的,所以壓力並不大。因為有興趣,所以我會很想充分理解一切細節。又因為理解,所以許多原本片片斷斷的知識都可以漸漸互相融會貫通,累積技術能量,理論和實務之間的藩籬被打破了,學習效率倍增。

我多年來的學習觸覺很敏銳,我常常會搶先一步學好有前瞻性的技術。比方說,java還在beta時、uml還在0.8時、xml還在draft時,我都已經透過網路下載技術檔案回來每天抱著猛讀了。而在java、uml、xml當紅之後,我已經差不多把這些技術都摸熟了。

至於該學什麼技術,我的判斷方式是以技術的優劣來決定。優秀而有獨到之處的技術是我的最愛,雖然這類的技術不見得會在市場上勝出,但學習這些技術所得到的啟發,對於技術能量的累積與能力的提升會有相當大的助益。至於技術差,但市場需求甚殷者,我還是懶得碰。(好吧!我承認我曾因為市場需求的緣故而學過mfc。越清楚mfc的技術細節,越是討厭它,這真是個不堪回首的經驗。)

我通常只看英文技術資料,畢竟大部分第一手的技術信息都是以英文來傳播。所以我很早就開始閱讀英文技術資料。讀英文技術資料的好處是,就算沒有學到書中的專業知識,至少也累積培養了英文閱讀能力,我一直都是抱著這樣的態度。一開始是正襟危坐的看英文技術書籍,字典、翻譯機隨侍在側;幾年下來,現在是躺著看、趴著看、很隨性地看英文技術書籍,因為看英文技術書籍變成一種習慣了。現在,我可以用很快的速度吸收英文技術書籍的知識(有人叫我「吃書的機器」,我把這稱號當作是一種恭維)。
近年來,我花在寫程式的時間不多,因為時間對我來說很寶貴,而寫程式很浪費時間。對初學者來說,大量地寫程式是必要的,但過了某個階段之後,寫程式所帶來的技術能力成長已經到了極限,還不如多花一點時間看書,學新技術和新觀念。
我從國小時期開始學習寫程式,迄今已有近十八年的時間;採取上述的方式密集學習,迄今也有近十年的光景。邇來數年,我接觸的領域越來越廣,而且學習速度正在加快,我認為是以前那些努力植下的根苗開始成長了。看看現在的我,或許你會覺得羨慕,但回顧這段學習的歲月,何嘗不是一條漫長的道路。