l

2012年9月18日 星期二

Force是什麼?

Sept. 17 23:41~Sept. 18 01:25

image

八月底在上「Design Patterns這樣學就會了:入門實作班」的時候,有一個練習寫pattern的活動,每一個小組要合作在30分鐘之內寫出一個pattern出來。在活動開始之前,Teddy先用一個例子來介紹pattern寫作的演化過程,接著說明一個pattern最重要的六大元素:

  1. Pattern name:模式名稱,增加開發者的設計字彙。
  2. Context:描述問題發生的地形地物。
  3. Problem:描述問題本身。
  4. Force:問題的限制或特性。
  5. Solution:解決問題的方法。
  6. Resulting Context:套用解決方案之後的結果。

在開始練習寫作的時候,有一組學員問Teddy:「force和context很像耶,好像可以把force放到context裡面,也可以把context裡面的東西變成force。要如何判斷?」這是一個非常好的問題,其實Teddy自已寫pattern的時候也經常會有這樣的困擾。先看看《POSA5》這本書中有關force的說明:

Force告訴我們為什麼模式所要解決的「問題」是一個真正的問題;為什麼這個問題很難,為什麼這個問題需要一個聰明的,甚至是違反直覺的解決方案。Force也是了解為何會採用此種解決方案(而非其他方案)的關鍵。

嗯,看完上面這句知道force和problem與solution有關係,但是和context的關係呢?還好Teddy有關pattern的書還蠻多的,請看《The Patterns Handbook》對於force的說明:

The often contradictory considerations to be considered when choosing a solution to a problem. Each solution considers certain forces. It optimizes some and may totally ignore others. The relative importance of the forces is determined by the context.

鄉民甲:上面這段怎麼沒有英翻中?!

看完上面這段英文說明,至少知道一個概念:forces的重要性是由context所決定。鄉民們可以把force想成是凸顯問題特性(問題發生在context底下)的個別敘述。這樣解釋其實還是很難理解,Teddy上禮拜去聽了「遇見大未來學堂系列講座4-向大自然學設計」這個講座,剛好講者提到一個例子,非常合適用來解釋force。講者的例子是兩張圖,讓Teddy用文字來敘述一下。

Context: 你居住在靠海邊的台地上,在冬季時東北季風很強,室內溫度經常降到15度以下。就算沒有季風吹拂,在冬天海邊還是很冷。居住在這樣的生活環境中,尤其是老人與小孩,經常感到身體不適且容易生病。

Problem: 要如何保持室內溫暖?

光是從上面的context與problem,可以想出很多solution:

  1. 裝暖氣
  2. 裝地板暖氣
  3. 裝壁爐
  4. 牆壁採用隔熱(保溫)材質

如果我們仔細分析一下這個context,可以發現以下幾個可能的force:

  • 強烈的季風不斷地直接吹襲建築物,將會降低室內保溫效果。
  • 透過熱氣裝置提高溫度將大量消耗能源,不利節能減碳。

如果考慮上面這些force(可以想成針對問題進一步分析之後,得到的限制條件),那麼新的solution可能會變成:

Solution:在住宅的東北方種植不同層次的防風林,以減少季風直接吹襲住宅。在室內安裝合適的暖氣設備來維持室內的溫度。

***

鄉民甲:還是看不懂耶?

在此姑且只考慮「強烈的季風不斷地直接吹襲建築物,將會降低室內保溫效果」這個force。原本的solution,無論是「裝暖氣」、「裝地板暖氣」、「裝壁爐」,甚至是「牆壁採用隔熱(保溫)材質」,其實都可以達到「保持室內溫暖」的目的。但是,由於「強烈季風不斷地直接吹襲建築物」這個force在這些solution中並沒有被解決或是妥善安排,以至於這個force持續存在於這些solution之中,降低這些solution的完整性與有效性

現在回頭看一下「透過熱氣裝置提高溫度將大量消耗能源,不利節能減碳」這個force,似乎和新的solution沒有很直接的關係。假設把它移到context之中,那麼原本的context就變成:

Context: 你居住在靠海邊的台地上,在冬季時東北季風很強,室內溫度經常降到15度以下。就算沒有季風吹拂,在冬天海邊還是很冷。居住在這樣的生活環境中,尤其是老人與小孩,經常感到身體不適且容易生病。如果僅是透過熱氣裝置提高並保持溫度,則將大量消耗能源,不利節能減碳。

這時候problem似乎也應該要隨著修改一下:

Problem: 要如何有效率的保持室內溫暖?

再回頭看一下剛剛的solution是否還是有效:

Solution:在住宅的東北方種植不同層次的防風林,以減少季風直接吹襲住宅。在室內安裝合適的暖氣設備來維持室內的溫度。

看起來應該還OK,所以就把第二個force移動到context裡面。

***

上面的這個例子只是Teddy臨時想到所舉出的「疑似pattern範例」,真正的pattern寫作過程,是必須要經過更加嚴密的思考與討論(找不同人的來幫你讀看看pattern寫得好不好)。經常需要來來回回好幾次,不斷地修改。在每次修改的過程中,對於pattern所要表達的問題與解法,會變得更加清晰。有一些小技巧可以幫助pattern的撰寫,例如整理pattern的人一定要對pattern所描述的問題與解法有相當豐富的經驗。另外,也可透過團體合作,腦力激盪的方式,來找出與歸納force。

***

友藏內心獨白:尋找force真的是一件不容易的工作。

沒有留言:

張貼留言