l

2013年10月1日 星期二

為什麼要開「例外處理設計與重構實作班」?

Sept. 27 15:00~16:20

image

 

在9月份C. C. Agile活動中一位朋友問Teddy「例外處理設計與重構實作班」在教些什麼?該課程的投影片Teddy幾天前已經公開分享出來(請參考《例外處理設計與重構實作班教材分享》),今天不談課程內容,聊一下「為什麼要開這門課」。

相信只要是有在寫程式的鄉民們,一定都會遇到在程式中需要處理例外或是錯誤的時候。N年前Teddy剛出社會的時候,以為只要學會Java的try-catch-finally,或是搞懂Visual Basic的on error…goto…resume…resume next,就知道要如何做好例外處理。哪知案情並沒有那麼單純,程式語言提供的例外處理機制,只是最基本的工具。要做好例外處理設計,開發出穩定不被客戶幹譙的系統,背後還有很多不為人知的祕辛。

話說Teddy工作7年之後重回學校念博士班,一開始在研究e-learning pattern language,研究了三年把Alexander的pattern和pattern language理論稍微有一點點基礎的理解。後來覺得e-learning這個領域在台灣都被那些所謂「學教育的人」給把持,而且這個領域還是沒有軟體開發來的好玩,在博三結束的時候決定換題目。

Teddy一直對Bertrand Meyer的Design by Contract(DBC)非常感興趣,DBC由兩個主幹構成:

  • Contract specification:指定pre-condition、post-condition、class invariant,還有sub-contracting rule等。
  • Exception handling:Meyer提出了一個所謂的Disciplined exception handling的作法。

因為exception handling太難了,正所謂柿子挑軟的吃,所以Teddy選擇了contract specification作為博士論文題目,提出一種在Java語言實作contract(合約)的方法。後來陰錯陽差,因為某個原因不小心讀了幾十篇exception handling的論文,結果除了contract specification這個題目以外,同時又多做了exception handling。到快畢業得時候發現exception handling的東西反而做的比較多,最後博士論文題目就變成了「Java Exception Handling: Models, Refactorings, and Patterns」。

難道這就是傳說中的「豬沒肥去肥到狗」挑眉質疑

***

不過以上都不是重點,重點是,在這個學習過程當中,Teddy搞清楚了下面幾個觀念,以及更重要的,這幾個觀念之間錯綜複雜的關係

  • Exception:到底exception是什麼意思?Exception的用途是什麼?怎樣才能算是學會一種語言的例外處理?
  • Handling:當例外發生的時候,該由誰、在何時、何地、如何處理這個例外。
  • Context:如何判斷誰有足夠的context來決定例外該如何處理。
  • Process:軟體開發流程,尤其是在敏捷開發方法中,如何安排例外處理活動。
  • Goal:例外處理的目標是什麼,怎樣才能算是做完例外處理。套句Scrum的術語,就是例外處理的DoD(Definition of Done)是什麼。
  • Smell:例外與錯誤處理最終需要程式碼時作完成,就算是設計與規劃的再好,例外處理程式寫錯、寫得不漂亮、不好懂、不好改,也是枉然。所以,能夠判斷例外處理程式碼裡面的壞味道(bad smell),對於確保程式設計品質就非常的重要。
  • Refactoring:既然知道了壞味道,就必須探討相對應的重構(refactoring)方法,將這些例外處理的壞味道給移除。

***

扯了這麼一大串,還是沒提到「為什麼要開這門課」。理由很簡單,只有兩點:

  • 要賺錢過生活。
  • 把上面這些關於例外處理設計與重構的經驗傳授給有緣的鄉民們。

報告完畢。

最後打個廣告,「第二梯次例外處理設計與重構實作班」報名網址在此10月10日前完成報名並繳費者,課程結束後贈送Teddy博士論文一本(Java例外處理:模型、重構、與樣式),價值...無價 XD。

***

友藏內心獨白:絕世武功目錄的第一頁還沒翻完。

沒有留言:

張貼留言