雖說Java的大同世界理想「Write Once,Run Anywhere」,讓這樣的程式語言提供更多的便利性,但你是不是也有以下的經驗:在debug的過程中,有很多都是那種莫明奇妙找不出原因的錯誤,絞盡腦汁也不知其所以然,花費了數天的時間仍被搞得情緒低落,簡直快喊救命了!

最後你才發覺,其實許多問題的關鍵,只是單純源自Java語言本身的運作機制,以及運用APIs時的錯誤與應用所造成,所以也只能摸摸鼻子認了,下次當心點。

Java夜路走多了,也會遇著怪怪的事
要將Java程式寫好真的不容易,尤其是缺乏經驗的新手,花在嘗試錯誤的時間及成本,會比幹練的好手們高上許多,加上程式語言本身的陷阱眾多,常常搞得這些可憐的菜鳥們挫折感十足,根本分不清楚到底是自己程式的Bug,還是程式語言核心根本的問題。

當一個程序員程式寫久了,要在撰寫技巧上能更精進,或是遭遇一些莫明奇妙的問題要尋求解決,常見的做法是與同行之間相互討論學習,看一些Open Source的程式源碼結構,或是在網路社群網站參與討論交流。

其實坊間談論Java的書籍琳瑯滿目,但是針對進階Java程式撰寫的書一直很少(應該是不好賣吧),大多都是來自國外的翻譯書,加上近年來Java技術成長快速,且包含範圍廣泛,真的要寫一本實用深入的進階書籍,需要花上作者不少時間,就怕是叫好不叫座的悲慘結果。

陷阱呀陷阱,你怎麼這麼無情?
陷阱(Pitfalls)在程式設計的過程中一直是個被探討的問題,它令人厭惡的是,在程式編寫階段及編譯階段是不會被發覺的,而在執行階段才會出現一些意想不到的狀況,而造成一堆人抓bug的窘境。

這可能是在系統設計時就埋下的惡因,也可能是在程式撰寫時的失當造成,它會出現的幾個原因像是:

● 缺乏經驗的程式開發人員,對JDK運用限於API的操作,並不了解其中運作的原理。

● JDK版本變更速度愈來愈快,提供的功能日益複雜,可能造成的問題也就愈不可預期。

● JDK裡的一些物件設計並非十分直覺,光從類別及方法的名稱上,無法全然了解其真正含義為何,故容易在使用上造成誤解。

● Java 雖簡化了開發難度,提高了開發人員的生產力,當API的功能愈強大,表示隱含在內部做的事情就更多,到底做了什麼只有執行後才知道,提高日後除錯的困難度。

● 開發者對Java領域知識的不熟悉,對JDK核心未全然了解。

● 對程式開發有先入為主的觀念,容易以早期的經驗套用在不同的設計情境中,產生不當的設計決策,而造成程式執行效能低落而不思其解。

教你如何越過這些陷阱,提高生產力及品質
有鑑於這些常見的問題及陷阱,作者Michael C. Daconta和他的專業團隊將過去的開發經驗分享出來,讓讀者可以在挫折中站起來,進而避開這些陷阱,愈挫愈勇。

Java Pitfalls系列至今已推出了兩個版本,想當然爾第一版必定反應不錯,才會有續集推出。然而由於推出的時間點不同,所討論的重點當然也會有所差異,兩個版本之間的差異在於:

● 兩本皆歸納收集了五十項陷阱問題,但第一版主要著重於J2SE範圍的討論,針對lang、util、io、awt、swing等套件的使用建議,同時亦提及Java語言相關的用法,其中又以GUI的討論佔大部份;而第二版除了延續J2SE的討論外,亦將J2ME、J2EE等這些風行已久的相關技術列入討論的議題,像是EJB、Servlet/JSP、HTTPSession、Filters、Database/JDBC、Web Service等十分普遍的技術內容,而在執行效能上有更多篇幅的討論,更能符合實際專案上的需要。

● 在第二版另外討論了第一版所沒有的新功能,包括Regular Expressions、NIO、Assertions、JAXR、JAXM、JAX-RPC等,同時亦加入知名Open Source的討論(像JUnit、Ant等),讓內容更趨完整。同時章節的編排也分成三個部份(Client Tier、Web Tier、Enterprise Tier)來討論,包含的範圍更廣。

● 兩本書切入的角度亦不同,第一版問題的描述主要著重在系統實作(programming)層級,像是JDK套件的如何正確使用,程式語法撰寫上的建議,僅量避免的做法等;而第二版則有不少部份著重在系統架構(Architecture)及設計層級,像是系統設計上的策略。

● 第一版主要著重在程式語法撰寫上的改良及建議,不管是錯誤寫法的修正及不當效能的提昇均有所著墨,而第二版則採全新風格,針對Root Cause問題點進行剖析,在解題的過程中循序地嘗試以不同的方案來解決,最後提出最佳解的理由及比較。讓讀者不單純只了解一個問題點,而是一個問題面。不同的閱讀方式,仍能讓你有不同的體驗
兩本書共一百個陷阱案例,篇幅不少,要怎麼個讀法比較有效呢?

● 你可以發奮圖強,逐頁研究每篇細節,找出這些陷阱的根本原因,做為自我提昇的好方法,不過這種閱讀方式需要有過人的毅力及充裕的時間,否則容易變成不錯的睡前催眠良藥。不過投資這些心血,換來未來所節省的時間,這樣的投資報酬率仍然值得。

● 作者貼心地將相關議題安排在一起,方便讀者逐章閱讀時更具連貫性。像是第一版中依相同的Package,第二版則依相同的技術及層級分別討論,可以節省不少在閱讀上花費的時間。

● 若你是位頗具經驗的Java老手,可以試著將這兩本書做為測試自己功力的好考題。透過研習本書中的每個陷阱,可以檢驗一下你對Java的了解有多深,同時你也學到如何避免錯誤,寫出正確的程式碼改善軟體品質。

● 只針對你有興趣的章節來閱讀,也許是工作或學業所需,閱讀的過程中配合書上的完整程式範例實際執行一次,讀完之後再配合實際運用,改寫自己手邊工作的程式碼,印象也比較深刻。

● 或者你可以將它當成工具書,當遇到像是陷阱類的問題時,再拿來查閱參考,對症下藥。

● 如果你是講師,或是老鳥帶菜鳥,或是你需要著手從事Java教育訓練課程內容的設計,本書也許是不錯的教材來源,兩冊同時採用的話,廣度與深度並俱,不失講授內容之專業性。

● 筆者建議可以採讀書會的方式(這是先前筆者公司自行提昇技術能力不錯的方法,極力推薦),這些成員都是以自願方式加入這樣的小組,分章節及小組各別討論,除了研讀書上章節所提及的內容外,大家還可以分享一些過去在程式開發過程中遭遇類似的問題及採用解法,透過集思廣益讓整個學習的過程更充實,收穫會遠比個人單純閱讀本書還更多。

讓讀者精益求精的書籍,國內的書還是相對較少
上回曾經向各位介紹了一本《Java Puzzlers》,即是一本Java程序員的進階精進手冊,可以提昇對Java核心的掌握程度,有效發揮執行效能及正確性。裡頭也是用了一堆會讓你噴飯的範例,讓你看到結果之後直呼不可能!另外類似的書籍像是《Practical Java》、《Effective Java》、《Advanced Java: Idioms, Pitfalls, Styles and Programming Tips》等,也都是深入Java核心的書籍,可以當成私房武功秘笈,值得一讀。

不過這類型的書原著還是以原文書居多,中文書則少之又少(當然,像王森《Java深度歷險》類型的還真是不多),大多還是以入門級為主流。幸運的是本次書評介紹的兩本書都已經有中文翻譯書。不過若讀者對原文書的閱讀有障礙,對於一些較新的技術涉獵上還是會有時差。

其實這樣的書籍在茫茫Java書海中是很容易被發掘且被購買的,尤其是對於那些已經被Java折磨已久,一直想在技能上有所精進的Java同好們。

雖然這兩本書已出版有一段時間,採用的JDK版本也現行的主流不同,但由於討論的重點皆針對核心套件,提到的觀念及做法均能向下相容,因此仍頗具參考價值。

目前這兩本書籍已經有中文版問世,對不諳原文內容閱讀的讀者,應該算是好消息,由碁峰出版,張耀仁先生所譯的《Java Pitfalls中文版》及《More Java Pitfalls中文版》是你不錯的選擇。

Java Pitfalls: Time-Saving Solutions and Workarounds to Improve Programs
Eric Monk、J. Paul Keller、Keith Bohnenberger、Michael C. Daconta /著
John Wiley & Sons出版
推薦:Amazon四顆星

《作者簡介》陳宏一
現任億訊國際資深顧問,交通大學資訊管理研究所碩士。曾任職於南亞科技資訊部工程師、資迅人網路研發副理、數位營運研發專案經理、艾群科技產品研發部經理,專精於OOAD、J2EE Technology、Web application development、軟體開發流程及專案管理等;通過SCJP、SCWCD、 SCJD、SCEA等認證。

曾參與線上社群網站規劃設計、電子商務網站規劃設計、金流整合及後臺管理系統規劃設計、線上遊戲系統監控管理平臺及計費系統規劃設計、網路開店系統平臺架構設計、WAP Portal規劃設計等專案規劃建置。

熱門新聞

Advertisement