l

2012年5月31日 星期四

Pattern是個雙面人(上)

May 30 23:18~May 31 00:20

image

 

如果有人問你:「什麼是pattern?」,你會怎麼回答。

 

鄉民甲:(跳、跳)選我,選我。

Teddy:請作答。

鄉民甲:A pattern is a proven solution to a recurring problem in a specific context。

Teddy:還有沒有其他的解釋嗎?

鄉民甲:糟糕,只背到這一句。ㄟ,沒有,等你教。

***

關於pattern,除了上面那一句常見的解釋,還有另外一句鄉民們可能比較少聽到,但卻也是很重要的觀念,那就是Alexander在《The Timeless Way of Building》書中提到的:A pattern is a process and a thing。

蝦米?Pattern是「流程」也是「東西」?此話何解?

一個pattern本身表達一件「東西」,這個東西,以建築領域來說,可能是一張代表該pattern意境的照片;如果是軟體的pattern,可能是高階的設計圖或是程式實作的邏輯描述。

如果鄉民們手邊剛好有《A Pattern Language》這本書(應該是沒有人會有…XD),翻開書中的每一個pattern,第一眼看到的就是一張代表該pattern的照片。看一下這本書第548頁代表Entrance Transition(入口的過度空間)這個pattern的圖,再接著看這個pattern的目的。

螢幕快照 2012-05-30 下午11.47.01

 

Buildings, and especially house, with a graceful transition between the street and the inside, are more tranquil than those which open directly off the street.

看完圖之後再讀這個pattern的意圖就比較容易理解。

很可惜GoF的Design Patterns並沒有像Alexander一樣在每個patter開始之前先給張圖瞧瞧。不過Design Patterns裡面的Structure某種程度也扮演著類似的角色。畢竟軟體設計的patterns有時候不是那麼容易可以用一張圖或是照片來表達它的意涵。但是,如果鄉民們patterns的書看得夠多的話,就會發現有些人所寫的patterns是會參考Alexander原本的風格,在開始用文字描述pattern之前先提供一張照片。例如,《Patterns For Fault Tolerant Software》這本書的patterns寫作方式就是採用Alexander在《A Pattern Language》書中的寫作方式。

總之,pattern的第一個面向就是:要能夠讓人讀了之後知道這個pattern所代表的「東西」是個什麼樣的玩藝兒(請捲舌)。

***

Pattern的第二個面向就是:它是一個流程。鄉民們心中可能會想:「拜託,pattern是一個東西我勉強還能夠接受,pattern是一個流程這又是那招?」流程,是waterfall還是RUP這種流程嗎?還是Scrum?

都不是,這裡說的流程是指「讀了pattern的解決方案之後,鄉民們應該有能力能夠把這個pattern給實做出來」。如果做不到,就表示這個pattern可能寫得不夠好(迷之音:當然也有可能是讀pattern的人太笨…Orz)。

總之,pattern的這兩個面向,是在學習撰寫pattern時很重要的觀念。以Teddy自己的經驗,要同時把「東西」跟「流程」都描述得很好其實並不容易(寫作本來就是一件很難的事情)。姑且先不管寫作pattern,畢竟大部分的鄉民都屬於「pattern使用者」,而非「pattern產生者」。請鄉民們思考一下,「A pattern is a process and a thing」這個事實對於「學習pattern」這件事有何幫助?

下集待續。

***

友藏內心獨白:難不成patterns是黑白郎君嗎?

2 則留言:

  1. 其實應該說,

    Pattern是某個情境下,所建立的運作模型及解決方案

    它是一種Schema,與心理學中的Schema理論有些類似
    所以說,只要是一個具體的應用情境下有效的解決方案之運作模型,它就可以說成一個Pattern
    一個Pattern應該不止包括那個解決的抽象運作模型,還要包括他的情境,才是完整的Pattern...

    就我個人的想法是如此認為:P

    回覆刪除
  2. Hi SuperMan,

     你說的沒錯,patttern除了描述problem和solution以外,還必須指名problem所發生的context. 所以文章裡面有提到A pattern is a proven solution to a recurring problem in a specific "context".

    回覆刪除