Nov. 27 11:16~13:35
圖片來源
在此。
今天這個標題有點「欠扁」,不過這是因為這兩天發生的兩件事剛好讓Teddy有這種體會。
埋下種子昨天下午應邀到某校資工系介紹design pattern,一講就是三小時,幾乎把「
設計模式這樣學就會了:入門實作班」的第一天課程,扣除pattern寫作練習與Singleton模式以外的內容講完。在演講開始之前和邀請者王教授聊了一會。
王教授:你在外面開了很多課程,每一門課我都很想去上啊。
Teddy:謝謝(傻笑…)。
王教授:不過課程費用不便宜啊…
Teddy:Orz……(
Teddy內心獨白:一分錢一分貨,而且我可是「燃燒生命」在授課的啊XD)
***
以上對話片段不是重點,重點是王教授說他日後想要開design pattern的課程,雖然design pattern已經「問世」快20年了,而且在業界也是非常實用與需要的一門技能,但是很遺憾國內大學資訊相關科系教授這門課的並不多。就Teddy所知,北科大(Teddy的母校)可能是國內最早教授design pattern的學校之一,時間可以追朔回10幾年前(關於這一點,Teddy也有一些小小的貢獻XD)。
王教授希望Teddy利用短短三小時的時間,在同學心中「埋下一顆design pattern的小種子」,日後可以引發學生學習design pattern的興趣。
如果鄉民們只有三個小時,請問你會選擇介紹GoF書中23個pattern的哪幾個?答案是,一個都不介紹。既然是要埋下種子,就要追本溯源,探討design pattern的源頭思想,也就是Alexander在他的《The Timeless Way of Building》以及《Notes on the Synthesis of Form》書中所提到的pattern方法。
演講的內容Teddy早已
公開在此,之前也談過好幾次了,就不再重複。Teddy想說的是,市面上比較流行的design pattern中文書籍,例如以下幾本,並沒有介紹Alexander的方法,這是Teddy覺得比較可惜的地方。
埋好種子Teddy目前發現唯一一本談論比較多Alexander方法的設計模式書籍,就是《Design Patterns Explained,2nd》,這本書出版至今也有10年了,很多年前第一版有翻譯成正體中文版,事隔10年之後最近博碩出了第二版的正體中文版。身為pattern愛好者自然買了一本回來看一下,前天拿到書稍微翻閱一下,大體上還OK,但有些小地方如果改善一下,可以減少一些讀者的誤解。
這本正體中文版很明顯就是從對岸簡體中文版轉過來的,書中有不少對岸的用語。不過這一點其實還好,不算什麼大問題。畢竟現在台灣從對岸接收太多的資訊,很多對岸用語,例如「優化」、「高清」、「編程」、「洗洗睡」,也慢慢地快變成「台灣本地用語」了
。語言的演變本來就是如此,不需要過於排斥。
Teddy小失望的地方是書中談到Alexander方法的一些細節,例如:
從背景設計原則(214頁)。
光看這句中文Teddy真的想不起來Alexander有提到「從背景設計」這種原則,這句話聽起來感覺是在寫電影劇本的時候會用到的技巧
。對照英文版才發現,原來是「The Principle of Designing from Context」。Context這個字在Alexander方法裡面佔有重要的地位,書中將Context翻譯成「背景」,感覺有那麼一點怪怪的。
Context真的不好翻,「The Principle of Designing from Context」不翻譯的話意思反而比較清楚,如果真的要翻,用「以脈絡為設計起點的原則」,並加上英文,可能會好一些。
***
Christopher Alexander將此稱為「複雜化」—一種從最簡單(概念性)的層次開始,然後逐漸增加細節和特徵,隨著逐步深化,設計也漸趨複雜的過程(215頁)。
對照英文版的說明:Christopher Alexander called this "complexification", the process of starting at the simplest (conceptual) level and gradually adding details and features, making the design more complex as you go deeper.
兩相對照翻譯並沒有什麼問題,但Teddy看到這裡一時也想不起來Alexander的書中有特別提到「複雜化」這件事。
奇怪了,敏捷開發告訴大家設計不是要儘量「簡單化」嗎,怎麼Alexander提倡「複雜化」?再往上追一層,看到Alexander在《The Timeless Way of Building》第370頁的講法:
This is a
differentiating process.
It views design as a sequence of acts of
complexification; structure is injected into the whole by operating on the whole and crinkling it, not by adding little parts to one another. In the process of differentiation, the whole gives birth to its parts; the parts appear as folds in a cloth of three dimensional space which is gradually crinkled. The form of the whole, and the parts, come into being simultaneously.
Teddy以前讀到Alexander書中這一段話的當下只把differentiating這個字記下來,並沒有特別去記憶complexification,因為光是講complexification很容易引起誤會。
Teddy拿到《Design Patterns Explained,2nd》中文版(《設計模式的解析與活用》)的時候是跳著看的,後來才注意到在上面這段話之前,書中第12章,184~185頁有對「複雜化」加以解釋,讀了這一段解釋之後讀者比較不會產生誤會。也許在215頁加個注釋,說明一下「複雜化」的觀念可以參考184~185頁的說明,這樣可以減少一些不必要的誤解。
***
從Alexander的方法來學pattern,可以看到許多光從GoF或是其他書籍所學不到的見解,廣義的來說,學會這套方法對於「設計」任何產品都有助益。要會學Alexander的方法,最快的方式就是來上Teddy的「
設計模式這樣學就會了:入門實作班」與「
設計模式這樣學就會了:進階實作班」
。
***
友藏內心獨白:學習絕世武功沒有人指點一不小心真的很容易走火入魔的說。