April 25 11:40~12:47
先打個廣告,五月份「單元測試與持續整合實作班」確定開課,早鳥優惠到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(因素)影響著我們如何找到一個合適的解決方案。
***
歌手黃小琥曾經唱過「不只是朋友」,在這首歌中有一句歌詞:
你從不知道我想做的不只是朋友
在軟體開發中,這句歌詞可以改成:
你從不知道我想要的不只是會動
男女雙方如果真得很喜歡對方,光是做朋友還不夠,還希望能夠以結婚為前提交往。軟體開發也一樣,如果你很重視你的客戶與團隊,程式一定要可以動,但光可以動還不夠,還要考慮各種品質屬性(非功能需求)是否滿足。
哪些品質因素?軟體架構中那些以ability結尾的英文單字,例如:
- Testability
- Modifiability
- Usability
- Scaiability
以Testability(可測性)來看,許多人不知道怎麼做自動化測試,並不是真的不會「測試」這個技能,而是因為「待測物」設計的太爛,導致測試極端困難。軟體開發的核心技能,像是流程、設計、實作、測試、重構、架構,看起來是個別獨立的不同能力,實際上是互相緊密關聯的一個體系。
所以,學習pattern不能只看pattern,還要探討pattern在流程、設計、實作、測試、架構、重構中所扮演的角色。同樣,學習測試也不能光看測試,還要探討測試在流程、設計、實作、架構、重構中所扮演的角色。學習流程也一樣,要關注其他非流程的面向。依此類推,久而久之觀察force的能力就越來越強,解決問題的能例也越來越好。
***
友藏內心獨白:要建立關聯,不要製造孤島。
沒有留言:
張貼留言