l

2016年4月26日 星期二

不只是會動

April 25 11:40~12:47

IMG_1124

 

先打個廣告,五月份「單元測試與持續整合實作班」確定開課,早鳥優惠到4/30日截止。

***

上禮拜六剛上完「Design Patterns這樣學就會了–入門實作班」,和往常一樣,每個梯次都會有學員問到:

  • 不同pattern之間的差異與比較
  • 為什麼某個pattern要這麼做而不那麼做
  • 如何知道什麼時候要套用哪個pattern
  • 怎麼判斷所套用的pattern是否合適而不會導致過度設計(over design)

除了上述問題,這梯次的學員有人特別關注:「要做到pattern所提供的功能,也可以用其他方法啊,為什麼要套pattern哩?」例如,在Factory Method中產生產品類別(product)的責任交由子類別決定。要做到相同的功能,也可以不要使用繼承,只需要傳一個callback function給父類別就可以了啊。

沒錯,如果光從「功能面」,也就是解決方案(solution)的角度來看,有好幾個方法都可以達到同樣的功能。但是,pattern不是只有解決方案,還包含context、problem、force、resulting context這些元素。Teddy遇到不少學員,在學習pattern的時候都是從解決方案的角度來學習與應用pattern。如果學習pattern只看到解決方案,pattern所帶來的麻煩很可能比它所帶來的好處還要來的多

舉個例子,如果只是為了填飽肚子,你可以選擇:

  • 便當
  • 三明治
  • 拉麵
  • 牛排
  • 義大利麵
  • 漢堡
  • 水果
  • 沙拉
  • 夜市小吃
  • 喝水
  • 減肥餐
  • 別人吃剩的食物

你可以花一整天來爭吵上面這麼多個解決方案哪一個才可以用來「填飽肚子」,甚至你可以額外再列出100個替代方案。光是從解決方案的角度來討論意義不大,因為它們都可以解決「填飽肚子」這個問題,吵到最後變成意氣之爭。所以,一定有其他force(因素)影響著我們如何找到一個合適的解決方案。

IMG_1145

***

歌手黃小琥曾經唱過「不只是朋友」,在這首歌中有一句歌詞:

你從不知道我想做的不只是朋友

在軟體開發中,這句歌詞可以改成:

你從不知道我想要的不只是會動

男女雙方如果真得很喜歡對方,光是做朋友還不夠,還希望能夠以結婚為前提交往。軟體開發也一樣,如果你很重視你的客戶與團隊,程式一定要可以動,但光可以動還不夠,還要考慮各種品質屬性(非功能需求)是否滿足。

哪些品質因素?軟體架構中那些以ability結尾的英文單字,例如:

  • Testability
  • Modifiability
  • Usability
  • Scaiability

以Testability(可測性)來看,許多人不知道怎麼做自動化測試,並不是真的不會「測試」這個技能,而是因為「待測物」設計的太爛,導致測試極端困難。軟體開發的核心技能,像是流程、設計、實作、測試、重構、架構,看起來是個別獨立的不同能力,實際上是互相緊密關聯的一個體系。

所以,學習pattern不能只看pattern,還要探討pattern在流程、設計、實作、測試、架構、重構中所扮演的角色。同樣,學習測試也不能光看測試,還要探討測試在流程、設計、實作、架構、重構中所扮演的角色。學習流程也一樣,要關注其他非流程的面向。依此類推,久而久之觀察force的能力就越來越強,解決問題的能例也越來越好。

***

友藏內心獨白:要建立關聯,不要製造孤島。

沒有留言:

張貼留言