l

2014年2月25日 星期二

如何選擇第一個Pattern來設計軟體架構?

Feb. 24 13:00~14:40

螢幕快照 2014-02-20 下午2.36.00

先打個廣告,「第六梯次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?」

螢幕快照 2014-02-24 下午1.27.32

 

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這些名字記下來就好了,還要知道怎麼做。

螢幕快照 2014-02-24 下午1.45.11

 

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作為單字來講出一段話(做出一個設計)

螢幕快照 2014-02-24 下午2.00.59

***

Alexander說,套用pattern形成pattern language的精神是一種「整體先於部分,然後透過差異化的過程將整體逐步展開」。這句話聽起來有點玄,弄清楚之後卻覺得很簡單。就跟講話一樣,一定是在腦中先有一個想法(整體先於部分),然後在由上而下用一個字、一個字,一句話、一句話慢慢將想法(整體)逐步展開。

無法一次套用一個pattern來設計軟體架構的原因,大的方向就是Teddy上述提到的這樣。其實要學會pattern language,概念很簡單,但是「箇中修行之道」還是有一些小竅門。很可惜在台灣,絕大部分的軟體開發人員在學習pattern的時候,大概只看過下列這幾本書(中文英不拘)。只知道背單字,卻不知為何背單字,不要說一個打十個,就連「釘孤支」都有點勉強啊。

Image (8)

***

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還有五十音嗎?挑眉質疑

1 則留言: