May 30 12:26~13:55
前幾天Teddy到天瓏書局買書,依照慣例一定都會走到賣patterns與agile原文書的那一櫃瞧一瞧。看到《Pattern-Oriented Software Architecture Volume 5: On Patterns and Pattern Language》這本書被貼上「六折」的貼紙已經有好一陣子了,依舊不動如山,內心不禁湧起一種淡淡哀傷之感。
Teddy當年還在唸書的時候,有好長一段時間都花在研究patterns和寫patterns上面。Teddy說的「研究patterns和寫patterns」不是指把GoF的23個design patterns拿出來研究跟寫程式實作,而是指「用patterns的方法來記錄或是描述特定領域的知識」。由於Teddy第一份工作是在做e-learning軟體開發,所以剛開始研究patterns寫作的時候,就以e-learning領域為標的,整理了應該有30-40幾個e-learning的patterns(最後實際寫出來的大概有10來個)。
這個e-language pattern languages研究做了應該快四年之後,在某種因緣際會之下,Teddy覺得e-learning這個領域實在是沒什麼搞頭(在台灣都被某批學教育出身和某校的大牌教授給把持了),決定還是回頭做跟軟體相關的研究算了。
不過還是那句老話,以上都不是重點。重點是,平常學習各種不同的patterns(不只是GoF那本書裡面的23個patterns)就已經覺得有點吃力了,但是鄉民們有沒有想過一個問題,如果要讓你自己寫出一個pattern(不是寫程式,而是用文字敘述的方式描述一個pattern),甚至是整理出一套pattern language,你知道要怎麼做嗎?
鄉民甲:你神經病啊,幹嘛自己寫pattern,浪費時間又不能賺錢。
鄉民乙:很簡單啊,pattern不是都有一定的格式,什麼pattern name、context、problem、forces、solution、resulting context,把這些內容掰一掰就搞定了啊。
***
Teddy剛開始準備自已動手寫patterns的當下,也跟「鄉民乙」的想法很像,不就是寫作文嘛,有什麼難的。等到自己真的動手之後,才發現還真的有夠難,至少比寫程式還要難N倍以上。如果只是要寫出「長得很像patterns的東西」,那的確是不難。但是這樣的作品是經不起考驗的,也不會有人想用(應該說也不能用)。當時Teddy也不知道該怎麼辦。於是指導教授就建議Teddy去讀Alexander的書,看看原本patterns與pattern languages起源的想法是什麼。在讀了《The Timeless Way of Building》、《A Pattern Language》、《The Oregon Experiment》與《Notes on the Synthesis of Form》(最後一本看不太懂…Orz)之後,雖然有更深入了解patterns領域的「地形地物」,但是說真的對於自己所寫出來的patterns還是沒有十分滿意。
2007年6月16日Teddy在天瓏買了《Pattern-Oriented Software Architecture Volume 5: On Patterns and Pattern Language》這本書,覺得這本書真是寫得太棒了。不像這一系列前四冊都在介紹不同的architecture patterns,這本書其實是在教大家「如何寫patterns與pattern languages」,好高興地球上終於有人寫了一本這個主題的書。但是,這種書在台灣是賣不出去的,因為沒什麼人對這麼冷門的主題有興趣。
***
鄉民們有看過「達摩祖師傳」這部電影嗎?Teddy自己是還滿喜歡的,看過好幾次重播。在電影中達摩祖師講過一句話:「看那看不見的東西,聽那聽不見的聲音,知那不知的事物,才是真理。」聽起來很有道哩,但是要怎麼「修行」到這樣的境界?每次專家學者們在檢討台灣經濟發展問題的時候,總說台灣應該要培養「關鍵技術」的能力,要有能力能夠自製「關鍵零組件」。那麼軟體哩,軟體的關鍵技術與關鍵零組件是什麼?
在讀了Alexander一系列的書之後,並沒有讓Teddy賺到更多的錢,在凡事講究投資報酬率或是C/P值得時代,研究這些東西底有何好處?
抽象的來說,就是培養「看那看不見的東西,聽那聽不見的聲音,知那不知的事物」的能力。舉個例子,在讀Alexander的書之前,Teddy覺得那一票做agile methods的人都好厲害啊。為什麼能夠「發明」有那麼多看起來違反常理,但是卻又那麼實用的做法。讀了Alexander的書之後,Teddy發現很多agile methods裡面的思想,其實跟Alexander對於建築的想法是很接近的。所以,雖然Teddy原本讀Alexander所寫的那幾本書的出發點是為了學patterns,但卻也得到一個很好的side effect(副作用),就是用另外一個角度把agile methods搞得更熟。這種體會,跟直接去讀agile methods書籍相比,還是有層次上的不同。
***
友藏內心獨白:最近出刊時間越來越晚啊…Orz。
我資質愚鈍,POSA I跟II買來看了之後覺得有如天書一般,就不敢再繼續買了
回覆刪除POSAI, POSAII 有一些內容的確是不太好讀,裡面有一些patterns, 像是 Reactor, Proactor, Blackboard說真的Teddy也在想現在有哪些常見的系統有在套用這些patterns呢?
回覆刪除不過像是 MVC, Layers, Pipes and Filters 這些都是很常見的,也許可以從這幾個開始學起。
另外,Acceptor-Connector 這個 pattern Teddy自己有用過好幾次,覺得還不錯,可以參考一下。