星期三, 4月 02, 2008

GoF Design Pattern閱讀完了

在醫院有個好處,就是我跟電動被強迫分離,所以讀病歷、讀醫學原文、查房之餘很累的話,除了睡覺或冒著被轟出護理站的風險用公共電腦打逼以外就剩下讀電腦書了,這本書被我讀完就是這個原因XD

過去的C++課本教的都是物件帶來的好處,封裝繼承和多型怎麼克服古早時代functional programming遺留下來的一些問題,把細節藏起來可以如何如何降低耦合性,多型性和Abstract base class如何巧妙的幹掉一長串的if else。但這些都是以「一個類別/物件 v.s 一個function」的角度來分析,從來沒有書以一個系統的眼光來分析眾多物件如何才能有效率的達到分工合作。或許OOP寫久了就會自動學會很多的Design Pattern,至少書中一些Pattern我在替學校寫病理切片瀏覽程式那種小不拉機才三四千行的程式就領悟出來,但把眾多Pattern集合起來,以Pattern為基本單位有組織的來探討Design Pattern這個議題的,這本書似乎算是先鋒。

這本書的結構我認為大概可以分三部份:第一個部份講通用的哲學,如以delegation代替inheritance等,第二部份講一個名為Lex的文件編輯器,書本會舉很多設計上會遇到的難題,比如要如何做到可以輕易加入文件分析的能力(如各種line breaking algorithm),同時又不會把類別的介面改的亂七八糟,舉出問題後會用Design Pattern給個答案,如用Visitor + Iterator可以把文件的分析和文件的儲存分散在兩棵不同的物件樹,個人覺得在讀第一次的時候最難讀的就是這個部份,因為會有很多的Pattern突然凌空打來,在弄懂各個Pattern的同時還要想辦法全部整合在一起。但我也認為這個部份是這本書最最最重要的部份,這個部份弄懂了可以抓出綱要,在讀第三部份就會非常輕鬆。第三部份就是介紹各個單獨的Pattern,他們應付什麼問題?他們解決什麼問題?他們帶來什麼問題?基本上只要讀懂第二部份,第三部份就非常簡單。

讀這本書需要一些基礎的學問,C++/SmallTalk一定至少要會其中一門,而且要懂其物件導向的理念並且用一段時間,只是會宣告變數印Hello World是不算數的。只會一種語言沒關係,我完全不會SmallTalk,SmallTalk講解的部份就全部跳過,但損失其實不多。另外要有一點點資料結構和演算法的概念,雖然這不是這本書的核心部份,但當範例講一大堆Hash啦、SkipList啦,如果完全沒碰過這些相關概念範例就可能看不懂(不過都讀這本了,完全沒碰過資料結構的應該不多吧@@),Compiler則是要懂一點點,後面Intepretor Pattern就完全用Compiler的Parsing Tree來舉例,碰巧自己在台北讀中文書認識一點BNF和Parse Tree generation,所以範例大概還算看的下去。反正書本很多範例都假設讀者會某種東西。沒學過不會妨礙核心解說的閱讀,但是範例會看不懂。

聽Amazon的書評說這本書讀起來枯燥無味,怎麼會呢?跟死背第三代Cepharosporin可以對抗哪些細菌或是人類每天尿液超過三公升有哪二十種可能的疾病這種純死背的東西比起來,大概就像背Win32資料結構 v.s 看金庸小說這種快樂度的差距吧。從這個角度來說,唸醫學不能說沒用,當頭腦經過病態的訓練以後他的能力是會加強滴....

下本電腦書:Linkers and Loaders,Go Go Go! 全文連結

0 意見: