工匠與設計師的差別,在於不斷反思

由於Java開發學習曲線高,因此很多人認為Java是學術性的東西,很適合做學問,但開發效率不夠高。耿維德不以為然:「這是一種誤解,Java是非常工業化的產品。」Java的應用範圍很廣,可以開發手機、PDA甚至汽車上的等應用,絕對不是關在實驗室裏的一種技術。

王森認為:「因為Java很重視設計架構,所以開發初期都在建構底層架構,所以看不出什麼明顯的成果,才會讓人誤解開發效率不高。」但也因為蹲馬步的功夫紮實,才使其後續的穩定性及可靠度受到信任。Java可延伸的特性,可應付企業高階應用的需求

Java的技術很廣,可以學的東西很多,所以讓人感到恐懼,耿維德解釋:「其實很多開發人員僅學習JSP,以Model 1的架構開發網頁,依然可以活得很愉快。」進階的應用有其背後的理論基礎,所以有難度存在,不過,以一般MIS角度,只要可以滿足需求,未必需要學習所有的技術。事實上,Java專家也有各自擅長的領域,並不是全部都很專精的全才。

不過,企業的需求多元,會有需要進階的部分,除了JSP的開發,未來可能會衍生出更高階的需求,而Java可延伸擴展到各種應用,才可能滿足需求。耿維德建議:「資訊人員不能永遠在寫程式,所以不要從程式開發的角度去判定Java有太多東西要學,要從生涯規畫的角度思考。」

以過去程式開發的經驗,兩年學一種新的程式語言,根本沒有時間學習更高階的知識。然而Java是穩定的技術平臺,語言本身的變革不多,因此行有餘力可以繼續學其他的技術。耿維德直言:「我非常感謝Java,讓我在這幾年有機會持續學習各領域的專業知識及UML、軟體工程等各種技術及知識。」

避免使用特殊技巧

凡事「先求有,再求好」是很正常的心態,在請教諸位Java專家「如何寫『好』Java程式」這個問題時,他們都不約而同地回答:「可以正確執行就很不錯了。」

朱仲傑以實際開發專案的經驗分析:「先求可以正常運作,再精算程式的精簡程度。」但是精簡不代表使用獨門的特殊技巧,因為系統不是一個人獨立完成,也不可能永遠都自己維護,為了讓他人可以接手並維護下去,程式的可讀性也很重要,所以程式碼不能孤芳自賞就好。工匠與設計師差別在反思

不過,在鎮日與程式碼為伍的歲月裏,往往只有初期忙著學習新技術,及吸收各領域專業知識的日子很充實,當運用的技巧愈來愈固定,工作的挑戰性逐漸降低,開發人員就會發覺自己好像不是高科技人才,而是「純手工傳統產業」的工匠。

難怪蔡學鏞所著「程式與香雞排」一文,在網路上興起一陣轉寄的熱潮,開發人員的薪水不如賣香雞排的論調,讓許多開發人員心有戚戚焉。其實最主要的原因,即王森在「程式設計師真情懺悔錄」中所言:「這是進入門檻的問題,會做相同事情的人多了,就會削弱那樣技能的價值。」

當競爭的人變多,價值就降低,而且剛畢業的人才,使用的是最新的技術,薪水又比資深工程師低,那開發人員該如何塑造自身的不可取代性?王建興認為:「一年經驗一年強。」不要覺得自己每天做著類似的工作,就沒有成長。很多人看系統分析師只出張嘴,一行程式也不用寫,就羨慕起他人的輕鬆愉快,其實大家應該看透動嘴背後是經驗的累積。

葉秉哲針對王建興的說法補充:「如果只是每天制式地寫程式,沒有反思的話,那的確不過是砌磚的工匠。」工匠每天做同樣的事情,十年、二十年也只是增加熟練度而已。開發人員必須時常反思,為什麼要這樣寫、有沒有更好的解法,再看看別人的作法。

如此以更上層的視野思考設計的架構,才會有所成長。工匠與設計師的差別,就在於工匠只是盲目地工作,設計師會反思,尋求更好的方法。若以工匠的角度出發,開發人員的確不如去賣香雞排,但不斷反思並成長的程式「設計」師,其價值遠高於賣香雞排。

看看別人的「招式」,學習好的設計

反思之後,該如何強化開發功力呢?諸位專家的意見也很一致,就是多看別人寫的程式。這個答案超乎筆者的預期,王森解釋:「不是看功力差的人寫的程式,現在開放原始碼專案很多,選一個下載程式碼,看看他人的寫法,對自己很有用處。」林上傑說:「設想同樣的功能自己會怎麼寫,再看別人是怎麼寫,如此就會有成長。」

在工作中為了要維護系統,必須看前人的程式碼,已經是很痛苦的事情,看開放原始碼專案的程式,要懂每一行在寫什麼也是很累的事情。王森回答:「是看招式。」耿維德強調:「寫毛筆字也是從臨摹開始,唯有看過別人的設計,才能提升自己。」Design Pattern就是前人的設計,也是智慧的結晶,所謂的招式就是Design pattern。

朱仲傑表示:「演算法也很重要,很多人覺得資訊科系教演算法、離散數學是很理論的東西,事實上有其必要性。」Java程式很重視效能,同樣的結果程式有多種寫法,不同的寫法即使邏輯正確且結果無誤,但執行效能會差很多,所以Design Patterns和演算法都是重要的課題。

葉秉哲與王建興針對寫「好」程式這個問題,他們建議資料結構、演算法等理論不可省,基本語法、常見問題的程式技巧是基本功,軟體架構方面應學習Design Pattern,最後,充實金融、會計、醫療、電信等專業領域的知識是貼近使用者需求的關鍵。如此全面的回答,足見博士面對問題的嚴謹態度。隨著經驗的累積,對Patterns的體會有所不同

耿維德分析他四年來參加Java2的經驗,都在強調Design Patterns,第一年他請託去美國參加JavaOne的蕭松瀛,帶回<>這本書,向臺灣的Java族群簡介J2EE Patterns,第二年講解利用J2EE Patterns開發高效率J2EE應用程式,第三年是實例探討,第四年則介紹新出爐的J2EE Patterns 2.0。

四年來對Design Patterns有興趣的學員愈來愈多,在Java界,Design Pattern已是很普遍的概念,Java書中多少都會提到設計模式,朱仲傑也表示Design Pattern是工程師溝通的語言,在開發專案之初,工程師會相互討論套用哪些Design Patterns。

Design Patterns是抽象的,是前人面對類似的問題,研究出來的設計模式,所以在學習Java基礎之初,其實並沒有必要急於學習,因為未必可以理解,隨著開發經驗的累積,對Patterns才會更深的體會。王建興也認同:「Design Pattern是形而上卻又實際的東西。」沒有經驗的開發者看Design Pattern,會覺得空泛。翻譯四人幫<>的葉秉哲也表示:「隨著年紀的增長及開發經驗的累積,回頭看Design Patterns都會有不同的體認。」

初學者最需釐清物件導向

耿維德認為物件導向分析設計,是初學者必須釐清的概念,物件導向只是一種觀念,不代表使用Java就會運用物件導向。Java只是實作封裝、繼承及多型等物件導向行為的語言,換個角度,即使非物件導向的語言例如COBOL,只要觀念正確,也可以實作物件導向。

探究VB的使用者學習Java所遭遇的困境也就是物件導向,VB不是完全物件導向的語言,習慣VB開發人員,學習Java的障礙甚至以Java入門的初學者更高。不過,即使不選擇Java,從VB升級到VB.NET也會遭遇到同樣的困境,因為.NET已轉向完全物件導向的架構。所以物件導向的概念,是學.NET及Java都要學習的課題。

由於VB的用戶群很龐大,昇陽甚至特別針對VB的用戶,推出<<從Visual Basic到Java完全手冊>>,希望藉由兩相對照的方式,協助VB的使用者學習Java。

軟體工程是臺灣升級必走的路

由於耿維德最早的工作性質,是接國外的案子回臺灣做軟體代工,國外市場很重視開發流程,因此很自然地接受軟體工程的概念。後來接觸臺灣市場他才發覺本土廠商接專案重速成,因此品質下降,但不代表這樣就比較省錢,因為後續要付出更大的成本。

臺灣市場OOP(Object-Oriented Programming;物件導向程式開發)的人才很多,但OOA(Object-Oriented Analysis;物件導向分析)及OOD(Object-Oriented Design;物件導向設計)的人才很欠缺,許多系統的問題不在於程式碼本身,而是因為沒有周延的分析及設計,導致後續付出更多的除錯代價。

分析印度軟體業掘起的原因,是依循一定的步驟、計畫並提出具體的數據及報表,所以軟體品質贏得國際信任。臺灣軟體界要向上提升,才能走得進國際市場,耿維德表示:「我們不能用老是用技術解決政治問題。」臺灣硬體產業的觀念就比較正確,就像鴻海郭台銘所言:「我們賺的是管理的錢。」硬體產業可以這麼做,軟體產業當然也可以。

不過,臺灣以中小企業為主,軟體廠商多的是十幾二十人的小公司,未必有意願花費成本導入軟體工程。耿維德分析:「臺灣市場是被逼著走上軟體工程這條路。」新竹科學園區的廠商導入軟體工程,是因為被外國廠商要求品質,即使是硬體廠的軟體部門,也因為系統需與國外接軌,而需採用正規嚴謹的開發方法,國外甚至主動派人輔導。

再者,從國外回來的技術人員,會認同軟體工程的理念,將這樣的觀念帶回臺灣。目前政府也開始推動軟體工程,因為臺灣無法置身於世界之外,面對大陸及印度的競爭,臺灣會逐漸感受到壓力,知道自己的不足,就會思考改進的方法。所以耿維德認為:「軟體工程是臺灣升級必走的路。」文⊙李延華Java奇人王建興

王建興及其交大資訊科學系時期的學長葉秉哲,兩人前後均有組隊參加趨勢科技舉辦的「百萬程式競賽」也都奪得第一名,可見Java開發功力有一定的水準。不過在看過王建興於Blog自述的中學生活,會驚訝地發現這位清大準博士,並不是一般人想像好學生的典範,打架、蹺課樣樣來,甚至一學期被當五科,連軍訓都可以被當。轉型用功念書的動力,只是想給心怡的女孩一個稱頭的印象。

大學到研究所擅長Assembly、C及C++的王建興,原本不會Java,後來研究所時,因為指導教授誤以為他會Java,所以在學弟妹面前,介紹他對Java很有研究,並請他協助指導學弟妹。當時對Java根本一竅不通的王建興,在學弟妹及教授面前,不知如何解釋,只好回去苦學Java 。

剛開始接觸Java時,因為習慣Assembly、C及C++榨乾硬體資源的作法,王建興對Java佔用資源及效能不彰的特性很反感,後來逐漸體認開發最大的問題並不在執行的效能慢,而是開發本身就慢。Java與C、C++對硬體操控的程度相當,但開發的速度提升許多。深究效能問題,其實網路頻寬是更大的瓶頸。現在的硬體設備已可以提供相當優渥的執行環境,而且Java針對效能問題,已有許多加速的解決方案,所以不會是很大的問題。因為Java的原始碼可以下載,王建興對Java抱持肯定態度之餘,開始研究及使用Java的程式庫(Library),他一邊用一邊讚嘆:「Java的設計哲學單純,頗具示範性,絕對可作教學之用。」因此一頭栽進Java領域,甚至與侯捷合作翻譯<>,並參與昇陽Java2活動協助推廣Java。

熱門新聞

Advertisement