[轉(zhuǎn)載]探尋軟件的永恒之道 |
| |||||
探尋軟件的永恒之道 ――評(píng)介《建筑的永恒之道》 撰文/透明 從模式說(shuō)起 “模式”這個(gè)詞進(jìn)入中國(guó)軟件開(kāi)發(fā)者的視野,是從《設(shè)計(jì)模式》[2]一書(shū)開(kāi)始的。2000年9月,中國(guó)的軟件開(kāi)發(fā)圖書(shū)市場(chǎng)還遠(yuǎn)不如今天繁榮,相信這本書(shū)給絕大多數(shù)人的都是一種耳目一新的感覺(jué)。突然之間看到如此之多精致優(yōu)雅的解決方案,足以令長(zhǎng)期苦苦探索設(shè)計(jì)之路的開(kāi)發(fā)者們“漫卷詩(shī)書(shū)喜欲狂”了。 在那個(gè)時(shí)候,我也是模式的癡迷者之一。還記得2001年,我和朋友的通信中多次表現(xiàn)出這樣的癡迷。下面是我2001年10月給朋友Windy的一封信: 對(duì)“面向模式的設(shè)計(jì)”的開(kāi)悟,在十三陵。 站在長(zhǎng)陵的綾恩殿,宏大的建筑,給我一種鵜鶘灌頂?shù)母形颉D翘霬ohn Vlissides說(shuō),Christopher Alexander曾經(jīng)說(shuō)中國(guó)的建筑給了他很多靈感。今天,我想我抓到了一點(diǎn)大師的感觸。 繁復(fù)的構(gòu)造,精巧的設(shè)計(jì),卻能天衣無(wú)縫的組成如此完美的建筑。無(wú)疑這是設(shè)計(jì)的成功。仔細(xì)觀察之下,發(fā)現(xiàn)對(duì)于各種各樣的建筑,其組成元件――欞椽梁柱――卻都是毫無(wú)二致。這是多么高的復(fù)用程度!這體現(xiàn)了多么成熟的設(shè)計(jì)體系! …… 在公路邊,一些建筑工人在建造一組仿古的房屋。朝代更替,光陰流逝,但工人們?nèi)匀荒軌蛲昝赖姆略焖陌倌昵暗慕ㄖR驗(yàn)樗麄円淮鱾髦_而形象的模式語(yǔ)言。 盡管我看Shalloway的Design Patterns Explained已經(jīng)有一段時(shí)間,在今天,我終于知道為什么他如此鐘情于Alexander的建筑模式了。 可惜,由于缺乏一種文化的積淀,《設(shè)計(jì)模式》的讀者們(包括我在內(nèi))都患上了消化不良。我大膽估計(jì),《設(shè)計(jì)模式》在中國(guó)軟件業(yè)造成的負(fù)面效果絕不少于其正面效果。Alan Shalloway曾經(jīng)說(shuō),“模式”并不僅僅限于“設(shè)計(jì)”,甚至“設(shè)計(jì)”二字正是導(dǎo)致最多誤會(huì)的根源[3];John Vlissides在他的Pattern Hatching中列舉了對(duì)模式的“十大誤解”,其中提到“模式并不僅僅是一種解決方案”[4]。但是,有多少人知道,為什么? 正是因?yàn)槿狈Ρ匾谋尘爸R(shí),中國(guó)開(kāi)發(fā)者對(duì)模式的了解往往是片面的甚至是錯(cuò)誤的。如果把模式僅僅視為一種解決方案、或者一種反復(fù)出現(xiàn)的情況的總結(jié),那么它頂多只對(duì)軟件開(kāi)發(fā)有一定的幫助或者指導(dǎo)意義;如果只把模式作為預(yù)先(up-front)設(shè)計(jì)的方案,它甚至?xí)?dǎo)致過(guò)分工程(over-engineering)。總而言之,模式頂多只能算一種“好東西”,至于“永恒之道”這種溢美之詞,即使最鐘情于模式如我,也是不敢出口的。 建筑的永恒之道 在面對(duì)一門(mén)有數(shù)十年思想基礎(chǔ)和十余年發(fā)展歷史的學(xué)科時(shí),我們必須承認(rèn)自己的淺薄,我們必須不斷學(xué)習(xí)。同時(shí),我們必須有自己的思想。蘇格拉底說(shuō):“我們無(wú)知,所以我們有智慧。” 為了真正理解GoF的思想,為了真正理解模式的思想,我們有必要先深入其思想基礎(chǔ)。于是,我翻開(kāi)了手上的書(shū)。于是,我看到了與我以往的理解完全不同的知識(shí),我看到了一個(gè)嶄新的世界。 記得上面的一個(gè)問(wèn)題嗎?“模式并不僅僅是一個(gè)解決方案”。這句話是什么意思?請(qǐng)看下面這段話: ……模式系統(tǒng)形成了一種語(yǔ)言。 從數(shù)學(xué)觀點(diǎn)看,最簡(jiǎn)單的語(yǔ)言是一個(gè)包括兩個(gè)系列的系統(tǒng): 1. 一系列要素或符號(hào)。 2. 組合這些符號(hào)的一系列規(guī)則。 然而,……模式既是要素,也是規(guī)則,所以規(guī)則和要素不可分。模式就是要素。每一模式也是一個(gè)規(guī)則,它描述了本身也是其他模式的要素的可能的排列。[5] 于是豁然開(kāi)朗。從最初的定義開(kāi)始,模式就不僅僅是解決方案,而是一種完整的語(yǔ)言。作為解決方案,模式構(gòu)成了語(yǔ)言的要素;而作為語(yǔ)言規(guī)則時(shí),模式的意義同樣重要,甚至更加重要。而這個(gè)方面常常被《設(shè)計(jì)模式》的讀者們忽略了。 僅從書(shū)名就可以看出,作者把模式當(dāng)成“建筑的永恒之道”――這種說(shuō)法是否有點(diǎn)太不謙虛了?請(qǐng)看作者的解釋?zhuān)?BR> 有人已告訴我們,優(yōu)秀的建筑與低劣的建筑,優(yōu)秀的城市與低劣的城市之間沒(méi)有客觀的差別。 其實(shí),建筑、城市的好壞之別是一個(gè)客觀的問(wèn)題……不過(guò)易于理解,為什么人們?nèi)绱藞?jiān)信好劣建筑之別沒(méi)有單一堅(jiān)實(shí)的基礎(chǔ)。 這是因?yàn)楫a(chǎn)生這種差別的獨(dú)特的中心特質(zhì)無(wú)法命名。 (為什么這種特質(zhì)無(wú)法命名?) 把(這種)無(wú)名特質(zhì)想象為一點(diǎn),我們?cè)嚨拿總€(gè)詞作為一個(gè)橢圓。每個(gè)橢圓包括這點(diǎn),但每個(gè)橢圓也包括許多遠(yuǎn)離此點(diǎn)的其他的意義。 因?yàn)槊總€(gè)詞總是像這樣的一個(gè)橢圓,所以每個(gè)詞對(duì)于作為點(diǎn)的特質(zhì)來(lái)說(shuō),總是太空泛,太不明確,范圍太大。沒(méi)有一個(gè)詞可以表達(dá)無(wú)名特質(zhì),因?yàn)樘刭|(zhì)太特殊,詞太廣泛了。但是,它是存在于任何人、任何東西之中的最重要的特質(zhì)。[6] 很明顯,這里所說(shuō)的“好”的建筑和“差”的建筑,都不包含結(jié)構(gòu)有缺陷的“豆腐渣工程”。在結(jié)構(gòu)工程學(xué)能夠保證結(jié)構(gòu)的穩(wěn)固、健壯之后,建筑師們想到的便是如何讓建筑真正滿足人的需要。在書(shū)中,作者多次表示,盡管現(xiàn)代建筑有極其優(yōu)秀的結(jié)構(gòu),卻缺乏優(yōu)秀的設(shè)計(jì),導(dǎo)致大量的建筑違背人的本性。 我們已經(jīng)說(shuō)到了“人的本性”。那么,建筑中“人的本性”在哪里?它就在數(shù)千年流傳的模式語(yǔ)言中。一個(gè)特定的模式,在特定的場(chǎng)景下,輔以特定的相關(guān)模式,它就是符合人的本性的,因?yàn)槟J绞恰霸试S其自身內(nèi)力自我疏解”的,而模式語(yǔ)言又是有活力、能夠自我發(fā)展的。所以,基于模式設(shè)計(jì)、設(shè)計(jì)反向影響模式語(yǔ)言,這樣的過(guò)程正是“建筑的永恒之道”。 在此有些個(gè)人見(jiàn)解:我們已經(jīng)太習(xí)慣于IT圖書(shū)那種填鴨式的教學(xué)方法了,我們已經(jīng)太習(xí)慣于“一本入門(mén)應(yīng)用、一本進(jìn)階原理、一本參考資料”的讀書(shū)方式了。再說(shuō)一次,當(dāng)我們面對(duì)Christopher Alexander這些人文氣息濃厚的技術(shù)書(shū)籍時(shí),我們必須承認(rèn)自己的淺薄和無(wú)知,我們必須用自己的智慧來(lái)思考。中國(guó)人最擅長(zhǎng)邏輯思維,是以中國(guó)人也最容易被一些似乎有意義的詞匯蒙蔽雙眼而陷入邏輯先驗(yàn)不能自拔。當(dāng)《建筑的永恒之道》在一開(kāi)始就告訴你“這種中心特質(zhì)”無(wú)法命名的時(shí)候,你是不是很不能習(xí)慣?繼續(xù)讀下去,讓你快要生銹的大腦運(yùn)轉(zhuǎn)起來(lái)吧。 回到我們的模式 我這里所說(shuō)的“我們的模式”,是指“軟件開(kāi)發(fā)中的模式”。介紹了這么多建筑學(xué)中的模式,對(duì)于軟件開(kāi)發(fā)者有什么意義嗎?或者說(shuō)得更直白一些,模式會(huì)是“軟件的永恒之道”嗎?對(duì)此,我沒(méi)有答案,只有討論。不過(guò)我相信,沒(méi)有人能夠知道真理,有討論、有思考,我們就能離真理更近一些。 由于此書(shū)成于1979年,作者又是一位建筑學(xué)家,書(shū)中自然也無(wú)法給出關(guān)于軟件開(kāi)發(fā)的答案,仍然只能靠讀者自己去思考。讀完兩遍之后,我的心得大約有以下幾點(diǎn): ----和建筑結(jié)構(gòu)一樣,軟件中亦有諸多的“內(nèi)力”。和建筑設(shè)計(jì)一樣,軟件設(shè)計(jì)也應(yīng)該努力疏解系統(tǒng)中的內(nèi)力,使系統(tǒng)趨于穩(wěn)定、有生氣。一切的軟件設(shè)計(jì)都應(yīng)該由此出發(fā)。 ----任何系統(tǒng)都需要有變化,任何系統(tǒng)都會(huì)走向死亡。作為設(shè)計(jì)者,應(yīng)該擁抱變化、利用變化,而不是逃避變化。 ----好的軟件只能“產(chǎn)生”而不能“創(chuàng)造”,我們所能做的只是用一個(gè)相對(duì)好的過(guò)程,盡量使軟件朝向好的方向發(fā)展。從這個(gè)角度來(lái)說(shuō),開(kāi)發(fā)的迭代周期越短越好。 ----軟件的工業(yè)化使軟件僵死、失去“無(wú)名特質(zhì)”、謬誤百出、脫離現(xiàn)實(shí)。通過(guò)規(guī)程、制度來(lái)控制,只會(huì)使系統(tǒng)內(nèi)力無(wú)從疏解,最終走向崩潰。 ----…… 我好象沒(méi)有提到模式?因?yàn)檎緯?shū)講的都是模式。至于如何在軟件的領(lǐng)域中看待模式,那需要你自己去思考、去體會(huì)了。 模式到底是不是軟件的永恒之道?最終,我還是無(wú)法給出一個(gè)答案。但是,我相信,充分理解模式語(yǔ)言,充分理解模式語(yǔ)言和設(shè)計(jì)的關(guān)系,會(huì)幫助我們提高設(shè)計(jì)能力,也會(huì)幫助我們豐富模式語(yǔ)言。 未完的結(jié)尾 本文即將結(jié)束。作為對(duì)一本書(shū)的介紹,我并沒(méi)有介紹它的著、譯質(zhì)量。不是疏忽,實(shí)在是不必說(shuō)。作者Christopher Alexander用了14年的時(shí)間來(lái)撰寫(xiě)此書(shū),譯者趙冰用了數(shù)年的時(shí)間來(lái)翻譯此書(shū)――我們所看的IT圖書(shū),翻譯周期極少有達(dá)到一年的。還需要懷疑這本書(shū)的質(zhì)量嗎? 在讀完第一遍以后,我寫(xiě)過(guò)一篇名為《“軟件藍(lán)領(lǐng)”批判》[7]的讀書(shū)心得,引起了許多爭(zhēng)論。可惜,參與爭(zhēng)論的網(wǎng)友,絕大多數(shù)并沒(méi)有理解我寫(xiě)那篇文章的背景知識(shí),所以大半的討論都沒(méi)有意義。在此,我挑選最有意義的一個(gè)回復(fù)來(lái)回答,權(quán)當(dāng)為此文作結(jié),也希望張巖先生能看到這篇文章。 張巖對(duì)我說(shuō): Alexander是個(gè)建筑師,建筑師關(guān)心的是建筑如何能符合人的需要,也就是建筑的“軟”質(zhì)量。至于建筑的“硬”質(zhì)量,是由結(jié)構(gòu)工程師來(lái)確保的,建筑師既沒(méi)有能力,也沒(méi)有責(zé)任對(duì)建筑的“硬”質(zhì)量負(fù)責(zé)。因此建筑師的地位類(lèi)似于軟件工程中的總體設(shè)計(jì)師或曰架構(gòu)設(shè)計(jì)師(現(xiàn)在不是也叫Architect了么?),在這一族群里當(dāng)然沒(méi)有所謂藍(lán)領(lǐng)的容身之地。但軟件就沒(méi)有“硬”質(zhì)量的要求了么?當(dāng)然是有的,所謂編碼強(qiáng)度是也。不死機(jī)、不溢出、不誤操作等等。這些是由程序員來(lái)保證的,Architect同樣也管不到這一段。因此通常意義上的Software Enginner或者Programmer相當(dāng)于建筑中的結(jié)構(gòu)工程師的角色。這些人的思維方式應(yīng)該是內(nèi)聚的,不能具有發(fā)散性,否則“硬”質(zhì)量無(wú)從保證。而模塊也是在這一層次上才開(kāi)始引入的。 要知道,在建筑開(kāi)發(fā)過(guò)程中,建筑師是最不受工程化方法約束的人。因此如果討論工程化方法,是不應(yīng)該用建筑師的思維方式去類(lèi)比的。建筑史上有段“佳話”:悉尼歌劇院,建筑師的發(fā)散性思維害苦了結(jié)構(gòu)師,結(jié)果整個(gè)建筑超預(yù)算超了一個(gè)數(shù)量級(jí)!但建筑落成之后的收益卻比原先預(yù)計(jì)的高了一個(gè)數(shù)量級(jí)。因此創(chuàng)造性是“建筑師的武器、結(jié)構(gòu)師的噩夢(mèng)”。建筑與結(jié)構(gòu)是貫穿建筑界始終的一對(duì)矛盾,在軟件設(shè)計(jì)中同樣存在類(lèi)似的問(wèn)題。因此僅僅以建筑學(xué)的視角看問(wèn)題,我個(gè)人以為是有點(diǎn)偏頗的。 我在此回答: 你的回復(fù)告訴了我很多以前不知道的知識(shí)。帶著這些知識(shí),我又讀了一遍《建筑的永恒之道》。并且,我想我找到了答案。 建筑師不受工程化方法約束,但任何人都受自己的模式語(yǔ)言約束,而模式語(yǔ)言本身是受工程化方法約束的。悉尼歌劇院的例子,是在擴(kuò)充模式語(yǔ)言,這是非常罕見(jiàn)的。當(dāng)模式語(yǔ)言擴(kuò)充之后,再利用這些模式語(yǔ)言來(lái)建筑,就能得到“質(zhì)量提升了一個(gè)數(shù)量級(jí)”的建筑,成本卻不會(huì)再“超一個(gè)數(shù)量級(jí)”。不知道你最近去過(guò)大運(yùn)村那邊沒(méi)有?Philip Cox在那邊設(shè)計(jì)了一個(gè)名叫“錦秋知春”的小區(qū),采用了很多悉尼歌劇院中曾經(jīng)采用過(guò)的元素(或者叫模式),相信它的成本是不會(huì)超過(guò)預(yù)算一個(gè)數(shù)量級(jí)的,對(duì)吧?之所以在悉尼歌劇院的例子中出現(xiàn)這樣的窘境,我相信是因?yàn)榻Y(jié)構(gòu)工程的滯后――人的思想總是超前的,我們應(yīng)該讓滯后、僵硬的物理去適應(yīng)超前的、有生氣的思想,而不是相反,對(duì)嗎? -------------------------------------------------------------------------------- [1] 現(xiàn)在讀者可以在中國(guó)互動(dòng)出版網(wǎng)(http://www.china-pub.com/)購(gòu)買(mǎi)《建筑的永恒之道》一書(shū)及其姐妹篇《建筑模式語(yǔ)言》(A Pattern Language)和《俄勒岡實(shí)驗(yàn)》(The Oregon Experiment) [2] Eric Gamma等著,李英軍等譯,《設(shè)計(jì)模式》(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),知識(shí)產(chǎn)權(quán)出版社2002年2月,第144頁(yè)到第145頁(yè)。 [6] Christopher Alexander著,趙冰譯,《建筑的永恒之道》(The Timeless Way of Building),知識(shí)產(chǎn)權(quán)出版社2002年2月,第21頁(yè)到第30頁(yè)。 [7] http://expert.csdn.net/develop/Article/13/13656.shtm |