Design Patterns - 蔣濤書評






■Design Patterns - 蔣濤書評

我的北京朋友蔣濤先生,辦了一份《程序員》雜誌。顧名思義,
是 programmer-oriented,以程序員為導向,以程序員為重心。
蔣濤先生技術好,文筆亦好,過去我看過不少他的文章以及關於
他的報導。他並親自執筆為《程序員》試刊號寫了一篇書評,談
的是重量級作品 "Design Patterns"。我在徵得他的同意後,放
到侯捷網站以及 BBS/CompBook 版以饗臺灣讀者。臺灣至今還沒有
"Design Patterns" 的中譯本,一嘆!

這篇書評直接從 GB 碼轉譯,並未對兩岸習用的技術術語加以處理。
"面向對象" 就是 Object-Oriented,"復用" 就是 reuse,"代碼"
就是 source,"編程" 就是 programming。

蔣濤先生文中談到技術書籍時說:『台灣在這方面做得很不錯﹐
英文版技術書籍能很快翻譯出版﹐同時也能出版較好的原創書籍。
大陸出版界應該向他們學習。』我看,這是距離帶來的美感。



design-patterns-l.gif (56368 bytes)


【近10年來最重要的軟件開發書籍《設計模式》】

作者:蔣濤
錄自:《程序員》雜誌 2000/11 試刊號


●前言

兩年前我曾經在中國計算機報寫過幾篇書評﹐那時候感覺軟件開發
方面的書籍雖然不少﹐可是精品屈指可數﹐只有幾本老牌經典名著
而且版本陳舊﹐如Charles Petzld的《Windows 開發指南》,
Jeffrey Richter的《Windows高級開發指南》David Kruglinski的
《VC 技術內幕》﹐這兩年情況大有改觀﹐可能是互聯網給軟件業
注入了新的活力﹐軟件從業人員迅速增加﹐各家出版社都爭相出版
計算機圖書﹐書目讓人眼花繚亂﹐書籍價格也越來越高﹐可是質量
良莠不齊﹐很多國內編著的技術書籍號稱“高級編程”﹐實際上只
相當于入門手冊﹐有的甚至把幫助(help)翻譯一下也能出書﹐
而且一版又一版﹐樂此不疲﹐真是出版界的悲哀。我是很喜歡買書
的人﹐技術領域裡沒有人不需要讀書﹐有時候在書店看見別人左挑
右選﹐最後拿著幾本質量低下的圖書去交款﹐真想拉住他﹐告訴他
你應該去買這一本那一本﹐不過我們中國人好像不太習慣這種直接
的方式。我想如果有專業書評的話﹐對讀者應該有很大的幫助﹐
Amazon為什麼能成為No1的購書網站﹐高質量的讀者評書就是其中
的一大原因。台灣侯捷先生的《無責任書評》也是非常受歡迎的書評
專欄﹐可惜現在侯先生專心創作﹐書評暫停﹐希望有一天還能看到
《無責任書評4》。

●購書心得

選擇書籍最重要的是看作者﹐一看他是否具有真正的水平,二看他
是否能將技術闡釋清楚
.國內一些編書或者翻譯的人對技術只是一知
半解﹐又追求速度和效益﹐結果這種書只能是誤人子弟。但水平高
的人如果只有技術﹐沒有寫作和表達才能﹐或選材過於艱深﹐或文字
晦澀難懂﹐也很難為讀者接受。國內原創圖書明顯弱點是過於生硬﹐
屬於“冷面扑克型﹐不帶任何感情﹐沒有任何技術以外的潤滑與承先
啟後的轉折”(侯捷先生語)﹐而且缺乏實用﹐看上去理論上都面面
俱到﹐可實際上卻沒有什麼應用價值﹐所以國內幾乎沒有什麼知名作者
甚至譯者﹐當然這也和出版大環境有關係。

台灣在這方面做得很不錯﹐英文版技術書籍能很快翻譯出版﹐同時也能
出版較好的原創書籍。大陸出版界應該向他們學習,全國每年參加程序員
水平考試的就有將近二十萬人﹐以大陸人才之多﹐市場之廣﹐出版社
花心血出精品書籍﹐應該可以取得不錯的銷售業績﹐同時對整個軟件
行業水平的提高也應該有很大幫助。


●出版社“四大家”

國內有四家有名的電腦圖書出版社﹕清華大學出版社﹐機械工業出版社﹐
電子工業出版社﹐人民郵電出版社。本來希望出版社名聲很大﹐希望是
當年電腦圖書出版的主力軍﹐可惜現在只注重速度﹐太不重視質量﹐
每況愈下﹐好好的一本《VC技術內幕》第五版﹐和清華出的《VC技術內幕》
第四版相比﹐高下立判﹐所以對希望的書我現在有點敬而遠之。清華大學
出版社作風嚴謹﹐一直保持比較高的水準。電子工業出版社是老牌出版社﹐
曾經出版過不少好書名著﹐象《Windows 95編程奧秘》等等﹐但是最近
有點止步不前。人民郵電出版社也出了不少書籍﹐特別是和台灣出版社
合作較多﹐但技術書籍水平卻不敢恭維。相比這三家﹐機械工業出版社
是資歷最淺的﹐不過卻是步伐最快的﹐近幾年他引進的原版圖書數量肯定
排名第一﹐而且越來越重視質量﹐特別是最新出版的一批圖書﹐有幾個
可喜的地方﹕

* 開始注重譯者和翻譯質量﹐譯者來自各個大學﹐主要由教授博士擔綱﹐
翻譯質量中規中矩﹐相當不錯﹔

* 選材多樣性﹐覆蓋面廣﹐這批圖書有《TCP/IP詳解 卷三:TCP事務協議,
HTTP,NNTP和UNIX域協議》﹐《萊昂氏UNIX源代碼分析》﹐《Apache Server
源代碼分析》﹐《Linux內核源代碼分析》 《設計模式》﹐《軟件需求》﹐
《程序設計實踐》﹐《Delphi 5開發指南》﹐《Windows核心編程》等﹐
特別在網絡編程和軟件工程方面﹐都是十分精彩的名著﹔

* 提供了網站www.china-pub.com(中國互動出版網)支持﹐網站上大部份
圖書都有PDF格式的電子版﹐可惜不是買了書的讀者就可以下載。


今天我想給大家介紹的是《設計模式》﹐這本書不厚(不到三百頁)﹐
可是內容卻很厚實。


●《設計模式 可復用面向對象軟件的基礎》

《設計模式》的英文書名是《 Design Patterns: Elements of Reusable
Object-Oriented Software
》, 這本書成名已久﹐實際上是1995年出版的﹐
該數總共有四個作者Erich Gamma, Richard Helm, Ralph Johnson,
John Vlissides
﹐全部是博士﹐個個來頭不小。該書堪稱是面向對象設計
的經典名著﹐一直名列Amazon銷售排行榜﹐Amazon的讀者綜合評價達到了
滿分-五顆星﹐專家學者對《設計模式》也讚不絕口﹐書中扉頁列出了它
獲得的讚譽﹕

“這本書是我長期以來所讀過的寫得最好的、最富洞察力的書籍之一……
該書不是泛泛而論﹐而是結合實例﹐以最佳的方式確立了模式的合法地位。"
--Stan Lippman, C++ Report

“這本眾人期待的確達到了預期的全部效果。該書雲集了經過時間考驗的
可用設計。作者從多年的面向對象設計經驗中精選了23個模式﹐這構成了
該書的精華部份﹐每一個精益求精的優秀程序員都應擁有這本《設計模式》。”
--Larry O'Brien, Software Development

"<設計模式>在實用環境下特別有用﹐因為它分類描述了一組設計良好﹐
表達清楚的面向對象軟件設計模式。整個設計模式領域還很新﹐本書的
四位作者也許已佔據了這個領域造詣最深的專家中的半數﹐因而他們定義
模式的方法可以作為後來者的榜樣。如果要知道怎樣恰當定義和描述
設計模式﹐我們應該可以從他們那兒獲得啟發"
--Steve Billow, Journal of Object-Oriented Programming

"總的來講﹐這本書表達了一種極有價值的東西。對軟件設計領域有著
獨特的貢獻﹐因為它捕獲了面向對象設計的有價值的經驗﹐並且用簡潔
可復用的形式表達出來。它將成為我在尋找面向對象設計思想過程中
經常翻閱的一本書﹕這正是復用的真實含義所在﹐不是嗎﹖"
--Sanjiv Gossain, Journal of Object-Oriented Programming



這本書雖然是五年前出版的﹐不過內容並不過時﹐軟件工程的重要概念
就是可復用﹐面向對象技術的發展使人們曾經設想會發明一種“軟件芯片
(software IC)”來滿足軟件開發的需要﹐但這種想法目前看起來還是
太遙不可及了﹐而近幾年來“模式”給出了“軟件可復用”的漂亮解決
方案。所謂模式一詞來源于城市建築領域﹐“每一個模式描述了一個在
我們週圍不斷重複發生的問題以及該問題的解決方案的核心。這樣﹐
你就能多次使用該方案而不必做重複勞動。”這種思想應用在面向對象
設計領域﹐指的是總結軟件設計中遇到的各類問題﹐並提出設計的解決方案。

有經驗的設計者知道﹐不是解決任何問題都要從頭開始。這本書的目的
就是將面向對象軟件的設計經驗作為設計模式記錄下來﹐每一個設計模式
系統地命名、解釋和評價了面向對象系統中一個重要的和重複的設計。

《設計模式》共有6章﹐第一章介紹了設計模式的概念﹐描述格式和分類﹐
解釋了設計模式是如何應用解決問題﹐最後給出了選擇和使用設計模式的
很多建議﹐這一章是總覽﹐需要和後面幾章參照才能理解。

第二章通過設計一個所見即所得的文檔編輯器介紹設計模式的實際應用﹐
對設計中的問題列舉了一個或多個設計模式的解決方案﹐並討論了它們
的優缺點﹐這個生動的實例充份顯示了四位世界級專家作者是如何思考
設計軟件的。

下面的三章分類詳細描述了23種常用的設計模式﹐給出了每種模式的
設計意圖﹐結構﹐使用效果﹐實現要點和缺陷﹐代碼示例(SmallTalk和C++),
在實際軟件中的應用﹐相關模式等。這些模式分類如下表:

目的 設計模式
5種創建型(creational) Abstract Factory
Builder
Factory Method
Prototype
Singleton
7種結構型(structural) Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
11種行為型(behavioral) Chain of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor


最後一章總結了設計模式給軟件設計帶來的巨大影響。幾年後的事實證明
《設計模式》是近10年來最重要的軟件開發書籍之一﹐《設計模式》給出
的模式格式和詞彙幾乎成了軟件設計的工業標準。

本書提供的23種設計模式看起來好像數目比較少﹐最新2000年出版的
《The Pattern Almanac 2000》號稱有700多種模式介紹﹐但實際上模式
數量不在多少﹐關鍵在於領會設計模式的思想﹐學以致用。本書作者之一
John Vlissides曾經有一次舉行演講﹐他問聽眾中有多少人看過《設計模式》﹐
幾乎所有人都舉手﹐他再問有誰能解釋如何實現組合模式(23種模式之一)﹐
舉手的人就寥寥無幾了。這23種模式凝聚了作者的經驗和心血﹐當你也
開始在設計中考慮如何應用模式﹐如何使設計更簡單﹐更靈活﹐復用性
更好時﹐你的實力就無形中提高了一個層次。

《設計模式》是每個軟件設計人員的必備書籍,﹐但我要說明的是這本書
並不是一本容易讀懂的書籍﹐有的專家甚至說一個開發人員需要花上一年
時間才能領會這本書的精要。學習模式需要反復練習體會﹐才能應用自如。
這有點象學圍棋中的定式﹐圍棋定式是百年來高手下法的總結﹐但不能
簡單地應用﹐要看場合選擇合適的定式﹐還要按棋理會變通下法。

這本書不是讀完就可以束之高閣的﹐只有具備相當基礎的讀者才能從本書
獲益﹐讀者首先必須熟悉面向對象設計語言如C++或者Java,而且最好有
開發和維護面向對象軟件的經驗﹐只有具備一些反面的設計經驗才能充份
體會設計模式的妙處。

這本書的出版雖然比英文版晚了近五年﹐但總是從無到有﹐有了巨大的
進步。據可靠消息﹐目前國內有幾家出版社都在大力引進國外技術名著﹐
在技術出版領域保持跟蹤國外最新動態﹐這對於國內軟件業整體水平的
提高和發展大有益處﹐畢竟最新的軟件技術和發展都來自于國外﹐希望
今後的技術名著不再有這五年之差﹐也希望我國的軟件業能走向海外。

-- the end

發信人: kodavid.bbs@cis.nctu.edu.tw (david), 看板: CompBook
標  題: Re: Design Patterns - 蔣濤書評
發信站: 交大資科_BBS (Wed Nov 15 12:39:29 2000)
轉信站: maple!news.cs.nthu!news.cis.nctu!cis_nctu
Origin: 212.c150.ethome.net.tw

==> 在 jjhou.bbs@bbs.cs.nthu.edu.tw (jjhou) 的文章中提到:
> ■Design Patterns - 蔣濤書評
> ●《設計模式 可復用面向對象軟件的基礎》
> 《設計模式》的英文書名是《 Design Patterns: Elements of Reusable
> Object-Oriented Software 》, 這本書成名已久﹐實際上是1995年出版的﹐
> 該數總共有四個作者Erich Gamma, Richard Helm, Ralph Johnson,
> John Vlissides﹐全部是博士﹐個個來頭不小。該書堪稱是面向對象設計
> 的經典名著﹐一直名列Amazon銷售排行榜﹐Amazon的讀者綜合評價達到了
> 滿分-五顆星﹐專家學者對《設計模式》也讚不絕口﹐書中扉頁列出了它


這裡值得一提的是這五顆星是70or80以上人評價的平均值, 這真的很不容易
很少有書是大家這麼一致稱讚的


> 最後一章總結了設計模式給軟件設計帶來的巨大影響。幾年後的事實證明
> 《設計模式》是近10年來最重要的軟件開發書籍之一﹐《設計模式》給出
> 的模式格式和詞彙幾乎成了軟件設計的工業標準。
> 本書提供的23種設計模式看起來好像數目比較少﹐最新2000年出版的
> 《The Pattern Almanac 2000》號稱有700多種模式介紹﹐但實際上模式
> 數量不在多少﹐關鍵在於領會設計模式的思想﹐學以致用。本書作者之一


這句話真是深得我心, "數量不在多少﹐關鍵在於領會設計模式的思想﹐
學以致用", 我當初剛看我時每次寫程式我都拼想要用上去, 後來經過一段時
間的沉澱, 發現其中的要訣是在其思想,其精神, 很多狀況下大多的pattern
都不會剛好適用, 大部分都是要base on其精神去加以衍生及修改. 所以將來
大家有空去看這本書時, 每個pattern 前面的觀念介紹是要多看幾遍, 最後
的sample反而到沒那麼重要. (不過通常第一次看時, 能接受的的程度剛好是
相反過來, 後面的範例比較容易懂, 前面的可應用範圍即可彈性化的地方,反
而很難理解)

> John Vlissides曾經有一次舉行演講﹐他問聽眾中有多少人看過《設計模式》﹐
> 幾乎所有人都舉手﹐他再問有誰能解釋如何實現組合模式(23種模式之一)﹐
> 舉手的人就寥寥無幾了。這23種模式凝聚了作者的經驗和心血﹐當你也


呵呵~~~~, 沒事舉一個最複雜的composite pattern自然舉手的會比較少,
不過這個pattern這的很有用而且用的機率應該也不小(以我接的case而言)

> 開始在設計中考慮如何應用模式﹐如何使設計更簡單﹐更靈活﹐復用性
> 更好時﹐你的實力就無形中提高了一個層次。
> 《設計模式》是每個軟件設計人員的必備書籍,﹐但我要說明的是這本書
> 並不是一本容易讀懂的書籍﹐有的專家甚至說一個開發人員需要花上一年
> 時間才能領會這本書的精要。學習模式需要反復練習體會﹐才能應用
> 這有點象學圍棋中的定式﹐圍棋定式是百年來高手下法的總結﹐但不能
> 簡單地應用﹐要看場合選擇合適的定式﹐還要按棋理會變通下法。


好例子

> 這本書不是讀完就可以束之高閣的﹐只有具備相當基礎的讀者才能從本書
> 獲益﹐讀者首先必須熟悉面向對象設計語言如C++或者Java,而且最好有
> 開發和維護面向對象軟件的經驗﹐只有具備一些反面的設計經驗才能充份
> 體會設計模式的妙處。
> 這本書的出版雖然比英文版晚了近五年﹐但總是從無到有﹐有了巨大的

這是真的嗎大陸已經出了中文版了? 請問侯老師哪裡可以買的到?

柯仁傑

侯捷回覆 :

Hi, David :

蔣濤先生看到你的回應,一定感懷知音。我會把你的回應 email 給他。
此書大陸剛出譯本 — 機械工業出版社。我正請朋友帶一本回來呢。
他在上海福州路(上海的圖書街)買的,五大都市都該有吧。

我想你我的情況和想法是一樣的:我們都能看原文書,但是我們對
國內這麼多出版社在這麼長的時間裡沒有能夠出版這麼一本超重量級
的書(的譯本),感到…一嘆!在電腦出版界,也許從沒有人注意到
要做這本書,也許有人注意到了不敢做,也許有人想做卻缺乏魄力與
遠見。諸般因素,結果反正是一樣:我們沒有 Design Patterns 的
繁體中譯本。

為什麼說到魄力與遠見?像這樣的書,出版社如果還是拿著一般
翻譯價碼的成本觀念來找譯者,會找到什麼譯者?多久才能找到
合格的譯者?對含金量這麼高的書還畏瑟不前,談什麼大開大闔?
重賞之下必有勇夫,我就不相信錢砸下去東西做不出來。
這種書啊,是不能拿算盤來算的,算盤算不出名聲與形象。
當然啦,如果草率做,由於讀者都是精英,肯定轟他個滿頭包。
話說回頭,如果好好做,由於讀者都是精英,都是大大小小的
意見領袖,讚美聲會特別大,鼓掌聲會特別響,漣漪也會傳得特別遠。

老實說,我不知道出版業內看得見銷售報表以外的東西的老板有幾個。

我們都還沒見過大陸譯本,不知品質如何。兩岸術語差異那麼多,
對簡體字也不是很眼順,這大陸簡體版對我們其實是派不上用場的。
光只是聽到人家有譯本出來,就發出這些慨嘆,可想這個領域是
多麼「孺慕」此書。

不少讀者寫信給我,希望我譯此書,我自知才不足以堪此大任,
曾推薦至少兩位極佳人選給有意此書的出版社。其中一位在
接觸過後也答應譯了,出版社卻卡著一年沒有任何動靜。後來
人家公司的 project 忙起來,也請不動了…。哎,算了,不想
再講。

最可怕的是,網路上早先還有人說:『要不要大家分幾個 patterns,
合力把它譯出來。』年輕人不知天高地厚,我不嘲笑他們,我真怕
哪家出版社當真,就這麼幹了。

-- the end

發信人: kojenchieh.bbs@bbs.csie.nctu.edu.tw (david), 看板: CompBook
標  題: Re: Design Patterns - 蔣濤書評
發信站: 交大資工鳳凰城資訊站 (Thu Nov 16 10:05:57 2000)
轉信站: maple!news.cs.nthu!netnews.csie.nctu!bbs

> 我想你我的情況和想法是一樣的:我們都能看原文書,但是我們對
> 國內這麼多出版社在這麼長的時間裡沒有能夠出版這麼一本超重量級
> 的書(的譯本),感到…一嘆!在電腦出版界,也許從沒有人注意到
> 要做這本書,也許有人注意到了不敢做,也許有人想做卻缺乏魄力與
> 遠見。諸般因素,結果反正是一樣:我們沒有 Design Patterns 的
> 繁體中譯本。
> 為什麼說到魄力與遠見?像這樣的書,出版社如果還是拿著一般
> 翻譯價碼的成本觀念來找譯者,會找到什麼譯者?多久才能找到
> 合格的譯者?對含金量這麼高的書還畏瑟不前,談什麼大開大闔?
> 重賞之下必有勇夫,我就不相信錢砸下去東西做不出來。


侯老師

自從我們一群人出來開公司, 我們就發現理想與現實不容易取得
平衡點
.常常有很多時候和別的公司接觸, 發現它們常使用舊的開發方式
(像是一直維持著2-tier架構), 或是用到問題時總是採用見樹不見林
(老是不從架構上調正,總是想出一些局部性的做法).抑或是很少注重
CM與QA環境的建置. 雖然我們很有心幫助他們, 但是在他們時間.長
官與自己排斥的壓力下, 常常不是不了了之或是阻力重重. 雖然日後
發現他們自己系統沒有彈性, 品質不高,但是這樣的事還是一直沒改善.
所以也難怪出版業在賺錢與卡位的心態下, 不會去發展這種高技術,
低回收的書籍了.

因此如果能多遇到一些人能出些類似無責任書評等文章, 可能我
就很心滿意足了.........

> 最可怕的是,網路上早先還有人說:『要不要大家分幾個 patterns,
> 合力把它譯出來。』年輕人不知天高地厚,我不嘲笑他們,我就怕
> 哪家出版社當真,就這麼幹了。


最好不要有出版社這樣做吧, 這真的太恐怖了, 這樣的豈不好像在讀
23本書嗎? 呵~~呵~~

柯仁傑

侯捷回覆 :

> 自從我們一群人出來開公司, 我們就發現理想與現實不容易取得
> 平衡點
.常常有很多時候和別的公司接觸, 發現它們常使用舊的開發方式

只要帶有一點點理想色彩,理想與現實就不難取得平衡點怕的是
滿腦子現實,怕的是不想理想。

我個人從不要求還在掙扎求存的人去做無近利的事,那太殘忍也不實際。
但是我們對體質已經壯碩整體利潤已經不虞匱乏的公司,就會
希望他扛點社會責任。有的公司我們會希望他多環保一點,有的公司
我們會希望他多回饋社會、贊助公益、敦親睦鄰…。對於電腦出版業,
我會希望他們把 entry level 書籍賺來的利潤撥一些用在 high level
書籍的開發與引進。

> 所以也難怪出版業在賺錢與卡位的心態下, 不會去發展這種高技術,
> 低回收的書籍了.


就別說「名聲也是一種利潤」這類陳義過高的話好了,製作
《Design Patterns》就一定賠錢嗎?那也未必。只不過
算盤聲音太響,遮了 programmers/engineers 的心聲。

過往千帆,唯名利而已。有人要利,有人要名,有人名利都要。
光要利的人,沒有被尊敬的本錢,光要名的人,沒有生存的本錢。
要利又要名,要名又要利,才能生存得好而且受人尊敬。

人愈有錢,愈怕沒有錢!如果我們能把自己放到初創業的時候,
放到年輕的時候,放到學生的時候(那時充滿多少理想呀),
放到空的時候,我們就不會太在乎現實的利了 — 還有比空
更空的嗎?

p.s. 我真希望自己什麼時候能到達這一點

-- the end