[轉(zhuǎn)載]探尋軟件的永恒之道 
   

探尋軟件的永恒之道
――評介《建筑的永恒之道》

撰文/透明

從模式說起

“模式”這個詞進(jìn)入中國軟件開發(fā)者的視野,是從《設(shè)計模式》[2]一書開始的。2000年9月,中國的軟件開發(fā)圖書市場還遠(yuǎn)不如今天繁榮,相信這本書給絕大多數(shù)人的都是一種耳目一新的感覺。突然之間看到如此之多精致優(yōu)雅的解決方案,足以令長期苦苦探索設(shè)計之路的開發(fā)者們“漫卷詩書喜欲狂”了。

在那個時候,我也是模式的癡迷者之一。還記得2001年,我和朋友的通信中多次表現(xiàn)出這樣的癡迷。下面是我2001年10月給朋友Windy的一封信:

對“面向模式的設(shè)計”的開悟,在十三陵。

站在長陵的綾恩殿,宏大的建筑,給我一種鵜鶘灌頂?shù)母形颉D翘霬ohn Vlissides說,Christopher Alexander曾經(jīng)說中國的建筑給了他很多靈感。今天,我想我抓到了一點大師的感觸。

繁復(fù)的構(gòu)造,精巧的設(shè)計,卻能天衣無縫的組成如此完美的建筑。無疑這是設(shè)計的成功。仔細(xì)觀察之下,發(fā)現(xiàn)對于各種各樣的建筑,其組成元件――欞椽梁柱――卻都是毫無二致。這是多么高的復(fù)用程度!這體現(xiàn)了多么成熟的設(shè)計體系!

……

在公路邊,一些建筑工人在建造一組仿古的房屋。朝代更替,光陰流逝,但工人們?nèi)匀荒軌蛲昝赖姆略焖陌倌昵暗慕ㄖR驗樗麄円淮鱾髦_而形象的模式語言。

盡管我看Shalloway的Design Patterns Explained已經(jīng)有一段時間,在今天,我終于知道為什么他如此鐘情于Alexander的建筑模式了。


可惜,由于缺乏一種文化的積淀,《設(shè)計模式》的讀者們(包括我在內(nèi))都患上了消化不良。我大膽估計,《設(shè)計模式》在中國軟件業(yè)造成的負(fù)面效果絕不少于其正面效果。Alan Shalloway曾經(jīng)說,“模式”并不僅僅限于“設(shè)計”,甚至“設(shè)計”二字正是導(dǎo)致最多誤會的根源[3];John Vlissides在他的Pattern Hatching中列舉了對模式的“十大誤解”,其中提到“模式并不僅僅是一種解決方案”[4]。但是,有多少人知道,為什么?

正是因為缺乏必要的背景知識,中國開發(fā)者對模式的了解往往是片面的甚至是錯誤的。如果把模式僅僅視為一種解決方案、或者一種反復(fù)出現(xiàn)的情況的總結(jié),那么它頂多只對軟件開發(fā)有一定的幫助或者指導(dǎo)意義;如果只把模式作為預(yù)先(up-front)設(shè)計的方案,它甚至?xí)?dǎo)致過分工程(over-engineering)。總而言之,模式頂多只能算一種“好東西”,至于“永恒之道”這種溢美之詞,即使最鐘情于模式如我,也是不敢出口的。

建筑的永恒之道

在面對一門有數(shù)十年思想基礎(chǔ)和十余年發(fā)展歷史的學(xué)科時,我們必須承認(rèn)自己的淺薄,我們必須不斷學(xué)習(xí)。同時,我們必須有自己的思想。蘇格拉底說:“我們無知,所以我們有智慧。”

為了真正理解GoF的思想,為了真正理解模式的思想,我們有必要先深入其思想基礎(chǔ)。于是,我翻開了手上的書。于是,我看到了與我以往的理解完全不同的知識,我看到了一個嶄新的世界。

記得上面的一個問題嗎?“模式并不僅僅是一個解決方案”。這句話是什么意思?請看下面這段話:

……模式系統(tǒng)形成了一種語言。

從數(shù)學(xué)觀點看,最簡單的語言是一個包括兩個系列的系統(tǒng):

1. 一系列要素或符號。

2. 組合這些符號的一系列規(guī)則。

然而,……模式既是要素,也是規(guī)則,所以規(guī)則和要素不可分。模式就是要素。每一模式也是一個規(guī)則,它描述了本身也是其他模式的要素的可能的排列。[5]

于是豁然開朗。從最初的定義開始,模式就不僅僅是解決方案,而是一種完整的語言。作為解決方案,模式構(gòu)成了語言的要素;而作為語言規(guī)則時,模式的意義同樣重要,甚至更加重要。而這個方面常常被《設(shè)計模式》的讀者們忽略了。

僅從書名就可以看出,作者把模式當(dāng)成“建筑的永恒之道”――這種說法是否有點太不謙虛了?請看作者的解釋:

有人已告訴我們,優(yōu)秀的建筑與低劣的建筑,優(yōu)秀的城市與低劣的城市之間沒有客觀的差別。

其實,建筑、城市的好壞之別是一個客觀的問題……不過易于理解,為什么人們?nèi)绱藞孕藕昧咏ㄖ畡e沒有單一堅實的基礎(chǔ)。

這是因為產(chǎn)生這種差別的獨(dú)特的中心特質(zhì)無法命名。

(為什么這種特質(zhì)無法命名?)

把(這種)無名特質(zhì)想象為一點,我們試的每個詞作為一個橢圓。每個橢圓包括這點,但每個橢圓也包括許多遠(yuǎn)離此點的其他的意義。

因為每個詞總是像這樣的一個橢圓,所以每個詞對于作為點的特質(zhì)來說,總是太空泛,太不明確,范圍太大。沒有一個詞可以表達(dá)無名特質(zhì),因為特質(zhì)太特殊,詞太廣泛了。但是,它是存在于任何人、任何東西之中的最重要的特質(zhì)。[6]

很明顯,這里所說的“好”的建筑和“差”的建筑,都不包含結(jié)構(gòu)有缺陷的“豆腐渣工程”。在結(jié)構(gòu)工程學(xué)能夠保證結(jié)構(gòu)的穩(wěn)固、健壯之后,建筑師們想到的便是如何讓建筑真正滿足人的需要。在書中,作者多次表示,盡管現(xiàn)代建筑有極其優(yōu)秀的結(jié)構(gòu),卻缺乏優(yōu)秀的設(shè)計,導(dǎo)致大量的建筑違背人的本性。

我們已經(jīng)說到了“人的本性”。那么,建筑中“人的本性”在哪里?它就在數(shù)千年流傳的模式語言中。一個特定的模式,在特定的場景下,輔以特定的相關(guān)模式,它就是符合人的本性的,因為模式是“允許其自身內(nèi)力自我疏解”的,而模式語言又是有活力、能夠自我發(fā)展的。所以,基于模式設(shè)計、設(shè)計反向影響模式語言,這樣的過程正是“建筑的永恒之道”。

在此有些個人見解:我們已經(jīng)太習(xí)慣于IT圖書那種填鴨式的教學(xué)方法了,我們已經(jīng)太習(xí)慣于“一本入門應(yīng)用、一本進(jìn)階原理、一本參考資料”的讀書方式了。再說一次,當(dāng)我們面對Christopher Alexander這些人文氣息濃厚的技術(shù)書籍時,我們必須承認(rèn)自己的淺薄和無知,我們必須用自己的智慧來思考。中國人最擅長邏輯思維,是以中國人也最容易被一些似乎有意義的詞匯蒙蔽雙眼而陷入邏輯先驗不能自拔。當(dāng)《建筑的永恒之道》在一開始就告訴你“這種中心特質(zhì)”無法命名的時候,你是不是很不能習(xí)慣?繼續(xù)讀下去,讓你快要生銹的大腦運(yùn)轉(zhuǎn)起來吧。

回到我們的模式

我這里所說的“我們的模式”,是指“軟件開發(fā)中的模式”。介紹了這么多建筑學(xué)中的模式,對于軟件開發(fā)者有什么意義嗎?或者說得更直白一些,模式會是“軟件的永恒之道”嗎?對此,我沒有答案,只有討論。不過我相信,沒有人能夠知道真理,有討論、有思考,我們就能離真理更近一些。

由于此書成于1979年,作者又是一位建筑學(xué)家,書中自然也無法給出關(guān)于軟件開發(fā)的答案,仍然只能靠讀者自己去思考。讀完兩遍之后,我的心得大約有以下幾點:

----和建筑結(jié)構(gòu)一樣,軟件中亦有諸多的“內(nèi)力”。和建筑設(shè)計一樣,軟件設(shè)計也應(yīng)該努力疏解系統(tǒng)中的內(nèi)力,使系統(tǒng)趨于穩(wěn)定、有生氣。一切的軟件設(shè)計都應(yīng)該由此出發(fā)。

----任何系統(tǒng)都需要有變化,任何系統(tǒng)都會走向死亡。作為設(shè)計者,應(yīng)該擁抱變化、利用變化,而不是逃避變化。

----好的軟件只能“產(chǎn)生”而不能“創(chuàng)造”,我們所能做的只是用一個相對好的過程,盡量使軟件朝向好的方向發(fā)展。從這個角度來說,開發(fā)的迭代周期越短越好。

----軟件的工業(yè)化使軟件僵死、失去“無名特質(zhì)”、謬誤百出、脫離現(xiàn)實。通過規(guī)程、制度來控制,只會使系統(tǒng)內(nèi)力無從疏解,最終走向崩潰。

----……

我好象沒有提到模式?因為整本書講的都是模式。至于如何在軟件的領(lǐng)域中看待模式,那需要你自己去思考、去體會了。

模式到底是不是軟件的永恒之道?最終,我還是無法給出一個答案。但是,我相信,充分理解模式語言,充分理解模式語言和設(shè)計的關(guān)系,會幫助我們提高設(shè)計能力,也會幫助我們豐富模式語言。

未完的結(jié)尾

本文即將結(jié)束。作為對一本書的介紹,我并沒有介紹它的著、譯質(zhì)量。不是疏忽,實在是不必說。作者Christopher Alexander用了14年的時間來撰寫此書,譯者趙冰用了數(shù)年的時間來翻譯此書――我們所看的IT圖書,翻譯周期極少有達(dá)到一年的。還需要懷疑這本書的質(zhì)量嗎?

在讀完第一遍以后,我寫過一篇名為《“軟件藍(lán)領(lǐng)”批判》[7]的讀書心得,引起了許多爭論。可惜,參與爭論的網(wǎng)友,絕大多數(shù)并沒有理解我寫那篇文章的背景知識,所以大半的討論都沒有意義。在此,我挑選最有意義的一個回復(fù)來回答,權(quán)當(dāng)為此文作結(jié),也希望張巖先生能看到這篇文章。

張巖對我說:

Alexander是個建筑師,建筑師關(guān)心的是建筑如何能符合人的需要,也就是建筑的“軟”質(zhì)量。至于建筑的“硬”質(zhì)量,是由結(jié)構(gòu)工程師來確保的,建筑師既沒有能力,也沒有責(zé)任對建筑的“硬”質(zhì)量負(fù)責(zé)。因此建筑師的地位類似于軟件工程中的總體設(shè)計師或曰架構(gòu)設(shè)計師(現(xiàn)在不是也叫Architect了么?),在這一族群里當(dāng)然沒有所謂藍(lán)領(lǐng)的容身之地。但軟件就沒有“硬”質(zhì)量的要求了么?當(dāng)然是有的,所謂編碼強(qiáng)度是也。不死機(jī)、不溢出、不誤操作等等。這些是由程序員來保證的,Architect同樣也管不到這一段。因此通常意義上的Software Enginner或者Programmer相當(dāng)于建筑中的結(jié)構(gòu)工程師的角色。這些人的思維方式應(yīng)該是內(nèi)聚的,不能具有發(fā)散性,否則“硬”質(zhì)量無從保證。而模塊也是在這一層次上才開始引入的。

要知道,在建筑開發(fā)過程中,建筑師是最不受工程化方法約束的人。因此如果討論工程化方法,是不應(yīng)該用建筑師的思維方式去類比的。建筑史上有段“佳話”:悉尼歌劇院,建筑師的發(fā)散性思維害苦了結(jié)構(gòu)師,結(jié)果整個建筑超預(yù)算超了一個數(shù)量級!但建筑落成之后的收益卻比原先預(yù)計的高了一個數(shù)量級。因此創(chuàng)造性是“建筑師的武器、結(jié)構(gòu)師的噩夢”。建筑與結(jié)構(gòu)是貫穿建筑界始終的一對矛盾,在軟件設(shè)計中同樣存在類似的問題。因此僅僅以建筑學(xué)的視角看問題,我個人以為是有點偏頗的。


我在此回答:

你的回復(fù)告訴了我很多以前不知道的知識。帶著這些知識,我又讀了一遍《建筑的永恒之道》。并且,我想我找到了答案。

建筑師不受工程化方法約束,但任何人都受自己的模式語言約束,而模式語言本身是受工程化方法約束的。悉尼歌劇院的例子,是在擴(kuò)充模式語言,這是非常罕見的。當(dāng)模式語言擴(kuò)充之后,再利用這些模式語言來建筑,就能得到“質(zhì)量提升了一個數(shù)量級”的建筑,成本卻不會再“超一個數(shù)量級”。不知道你最近去過大運(yùn)村那邊沒有?Philip Cox在那邊設(shè)計了一個名叫“錦秋知春”的小區(qū),采用了很多悉尼歌劇院中曾經(jīng)采用過的元素(或者叫模式),相信它的成本是不會超過預(yù)算一個數(shù)量級的,對吧?之所以在悉尼歌劇院的例子中出現(xiàn)這樣的窘境,我相信是因為結(jié)構(gòu)工程的滯后――人的思想總是超前的,我們應(yīng)該讓滯后、僵硬的物理去適應(yīng)超前的、有生氣的思想,而不是相反,對嗎?
--------------------------------------------------------------------------------

[1] 現(xiàn)在讀者可以在中國互動出版網(wǎng)(http://www.china-pub.com/)購買《建筑的永恒之道》一書及其姐妹篇《建筑模式語言》(A Pattern Language)和《俄勒岡實驗》(The Oregon Experiment)

[2] Eric Gamma等著,李英軍等譯,《設(shè)計模式》(Design Patterns),機(jī)械工業(yè)出版社2000年9月。

[3] 2002年4月30日UMLChina主辦的Alan Shalloway網(wǎng)上交流記錄,http://gigix.cool2u.net/download/Shalloway.pdf

[4] John Vlissides,《模式的十大誤解》,http://gigix.cool2u.net/download/topten.pdf

[5] Christopher Alexander著,趙冰譯,《建筑的永恒之道》(The Timeless Way of Building),知識產(chǎn)權(quán)出版社2002年2月,第144頁到第145頁。

[6] Christopher Alexander著,趙冰譯,《建筑的永恒之道》(The Timeless Way of Building),知識產(chǎn)權(quán)出版社2002年2月,第21頁到第30頁。

[7] http://expert.csdn.net/develop/Article/13/13656.shtm