Feb. 24 13:00~14:40
先打個廣告,「第六梯次Design Patterns這樣學就會了:入門實作班」已經確定開課了,早鳥優惠到今天(2014/2/25 23:59)結束。
***
Teddy每次上「Design Patterns這樣學就會了:入門實作班」都會舉一個如何以「一 次套用一個pattern」的方式來設計軟體架構的例子,這個方法就是Alexander在《The Timeless Way of Building》所提到的Pattern Language方法。
前幾天在C. C. Agile Sprint 18活動中Teddy也快速介紹這個方法,有人問Teddy:「一次套用一個pattern,請問如何選擇第一個pattern?」
Pattern和Pattern Language的關係,就好比「英文單字」和「英文」的關係。要學英文(或是其他語言也一樣),總是需要先「背單字」,累積足夠多的字彙量。這個「背單字」的學習過程就類似學習單一pattern的過程。學習GoF Design Patterns、Kent Beck的Implementation Patterns、Martin Fowler的Enterprise Application Architecture Patterns和Analysis Patterns、《Pattern-Oriented Software Architecture》與《Pattern Languages of Program Design》這一系列的書,都是在「背單字」。
背單字有兩層涵義,不是把pattern的名稱,例如MVC、Observer、Command這些名字記下來就好了,還要知道怎麼做。
Pattern同時具備process與thing這兩個面向,thing代表「要做出什麼東西」,process代表「要怎麼做」。學習pattern如果不知道這兩個面向,花再多時間K書、參加讀書會,也是枉然。
***
Teddy發現,不少人學pattern,只學得process,「我知道怎麼實作Observer、Command、Singleton」,但卻不知道「為什麼要套用這些pattern」,那就是對於要產生什麼東西(thing)沒有真正理解。也就是說,沒有觀察到pattern的force。
另外一種情況,則是「說得一口好pattern」,知道每一個pattern所要達成的目的,但卻沒有實作能力。這種情況,也只能算是「投降輸一半」。
回到原本的問題:「一次套用一個pattern,請問如何選擇第一個pattern?」。會有這樣的疑問,首先一定是pattern的單字量不夠多,或是pattern的單字量夠了,但是學習的「質」不夠,沒有了解pattern的process與thing這兩個面向。大部分的人,都還處於這個階段。
***
如果pattern的單字量與質都夠了,還是存在「一次套用一個pattern,請問如何選擇第一個pattern?」的疑問,這時候才牽扯到pattern language層次的問題,也就是如何以pattern作為單字來講出一段話(做出一個設計)。
***
Alexander說,套用pattern形成pattern language的精神是一種「整體先於部分,然後透過差異化的過程將整體逐步展開」。這句話聽起來有點玄,弄清楚之後卻覺得很簡單。就跟講話一樣,一定是在腦中先有一個想法(整體先於部分),然後在由上而下用一個字、一個字,一句話、一句話慢慢將想法(整體)逐步展開。
無法一次套用一個pattern來設計軟體架構的原因,大的方向就是Teddy上述提到的這樣。其實要學會pattern language,概念很簡單,但是「箇中修行之道」還是有一些小竅門。很可惜在台灣,絕大部分的軟體開發人員在學習pattern的時候,大概只看過下列這幾本書(中文英不拘)。只知道背單字,卻不知為何背單字,不要說一個打十個,就連「釘孤支」都有點勉強啊。
***
Alexander說:「If your language is empty, your buildings cannot be full. If your language is poor, you cannot make good buildings until you enrich your language.(如果你的語言是空泛的,你的建築物不可能充實。如果你的語言是貧乏的,你不可能造出好的建築物直到你豐富你的語言)」
結論就是:快去背單字吧。
***
友藏內心獨白:不是要先學ABCD還有五十音嗎?
小心落入為Design Pattern而Design Pattern的陷阱
回覆刪除