模式的简史和形而上学

一个围棋下得好的人知道,好的“形”对于围棋非常重要。形是棋子在棋盘上的几何形状的抽象化。 形就是模式(Pattern),也是人脑把握和认识外界的关键。人脑对处理模式的能力也非常高超,人可以在几百张面孔中一下子辨认出所熟悉的脸来,就是一个例子。模式化的过程是把问题抽象化,在忽略掉不重要的细节后,发现问题的一般性本质,并找到普遍适用的解决方案的过程。
模式是什么
现代科学和工程学能够发展到今天,有赖于规则的制定;模式的研究也不例外。在讨论模式之前,必须对“模式”这个词将以界定,以规范后面的讨论和研究。

简而言之,人们在自己的环境中不断发现问题和找寻问题的解决方案的时候,发现有一些问题及其解决方案不断变换面孔重复出现,在这些不同的面孔后面是共同的本质;这些共同的本质就是模式。

那么,模式是不是“在某种环境下,对某个问题的答案呢?”

这不完全对;模式所描述的问题及问题的答案都应当是具有代表性的问题和问题的答案。所谓具有代表性,就是说它以不同的形式重复出现,允许使用者举一反三,将它应用到不同的环境中去。为了与其他人交流,通常还要求给这个问题和问题的答案一个名字。

不知道读者会不会注意到,上面所使用的“代表性”、“举一反三”等词汇,是中国人特有的表达方式。这样的词汇翻译成任何一种西方语言,都需要浪费很多口舌加以解释。这是因为,模式其实非常适合中国人的思维方式,而不是西方人的思维方式。读者在阅读了本章之后,就会对这一点有更深的认识。

软件模式的简史
在面向对象的编程中使用模式化方法研究的开创性著作,是文献[GOF95](中译本[GOF95Z])。这四位作者通常被戏称为“四人帮”(Gang of Four, 或GoF)。这本书发表于1995年,而模式理论被引进到软件设计界的历史要稍早一些。

设计模式在软件设计行业中的起源可以追溯到1987年。那时,Ward Cunningham和Kent Beck在一起用Smalltalk作设计用户界面的工作。他们决定使用Alexander的理论发展出一个有五个模式的语言来指导Smalltalk的新手,因此他们写成了一篇"Using Pattern Languages for Object-Oriented Programs(使用模式语言作面向对象的程序)的论文(发表于OOPSLA'87 in Orlando )。

在那以后不久,Jim Coplien开始搜集C++语言的成例(idioms)。成例是模式的一种;这些C++成例发表在1991年出版的Advanced C++ Programming Styles and Idioms(高级C++编程风格和成例)一书中。

从1990到1992年,“四人帮”的成员开始他们搜集模式的工作。关于模式的讨论和工作会议则一再举行。

在1993年8月份,Kent Beck和Grady Booch主持了一个在科罗拉多的山区度假村召开的第一次关于模式的会议。模式研究的主要人物都参加了这次会议,包括:Jim Coplien, Doug Lea, Desmond D'Souze, Norm Kerth, Wolfgang Pree, 等。

在那以后不久,“四人帮”的《Design Patterns》一书发表。

此书发表之后,参加模式研究的人数呈爆炸性增长,被确定为模式的结构的数目也呈爆炸性增长。编程模式语言大会(Pattern Languages of Programming,或者PLoP)每年一次定期在美国举行,大会的论文也汇编成书,公开发表[PLOP95]、[PLOP96]、[PLOP98]、[PLOP99]。

模式也不断被应用到软件工程的各个方面。在诸如开发组织,软件处理,项目配置管理等等方面,都可以看到模式的影子;但至今得到了最好的研究的仍是设计模式和代码模式。

模式的起源
有趣的是,模式的研究并非起源于软件工程行业。

建筑的永恒之道
模式的研究起源于建筑工程设计大师Christopher Alexander的关于城市规划和建筑设计的著作。尽管他的著作是针对城市规划和建筑设计的,但是作者的观点实际上适用于所有的工程设计领域,包括软件开发设计领域。

Alexander在他的著作中指出,使用现在的设计方法所设计出的建筑物,不能满足所有工程设计的基本目的:改善人类的条件。Alexander想要发明的建筑结构,是能使人类在舒适和生活质量上受惠的建筑结构。他得出的结论是,设计师必须不断努力,以创造出更加适合所有的住户、用户和他们的社区的结构,满足他们的需要。

Alexander的著作有:[ALEX64]、[ALEX75]、[ALEX77]、[ALEX79],后三本都有中译本。如果读者对他的著作感兴趣的话,本书推荐读者首先阅读[ALEX79]或者中译本[ALEX79Z],也就是《建筑的永恒之道》一书。

在这些著作里,Alexander描述了一些他认为是永恒的,适合于任何工程学科的设计原则。这些原则是建立在下面的三个基本概念上的:质、门、道。

无名的质(QWAN)
在Alexander的论述中,质(The Quality)或无名的质(The Quality Without a Name,或简称为QWAN)处在核心的地位上。

Alexander认为,所有的生物、有用之物,均包涵有如下的“质”:自由性,整体性,完备性,舒适性,和谐性,可居住性,持久性,开放性,弹性,可变性,以及可塑性。QWAN使人感到充满活力,给人以满足感,并最终改善人类的生活。


“门”(The Gate)是通向“质”的管道。“门”是通过一个普遍的模式语言来体现的,这个模式语言使设计师能够创建多种形式的设计,以满足多方面的需求。“门”是普遍存在的是这些模式之间的关系,或是模式的“以太”,充满着一个特定的域。


“道”(The Way)又称作“永恒的道”(The Timeless Way)。

利用“道”,从“门”演化到“质”的过程,就是把一些特定的模式按照一定的顺序应用到系统设计上的循序渐进的过程。Alexander把从“门”到“质”的过程,比喻为胚胎发育过程。胚胎的发育过程的特殊之处是整体先于部分而存在;整体并通过分裂来产生部分。通过追寻“道”,可以通过“门”到达“质”。Alexander认为这个过程就是任何一种工程设计的发展过程。

与道家思想的关系
阅读过Alexander的《建筑的永恒之道》一书的人们无不为此书的哲理性所打动。人们将这本书比喻为一本“使用建筑学的例子讲解哲学”的书,或者一本“以哲学的风格讲解建筑学”的书。Alexander本人则一再强调,模式理论是一个完整、不可分割的整体;不能够将他的理论概括成为一套方法论,而不理会他的哲学观点。

现在,模式的理论回到了道家思想的故乡。遗憾的是,黑眼睛黑头发的道家传人中,有多少人还能够依稀辨认出模式理论的哲学观点的道家背景呢?

“强烈的道家观点”
Alexander的哲学观点有很深的道家渊源。

University of Texas at San Antonio数学系的Nikos A. Salingaros博士总结了Alexander的工作[SALIN],他说:“Alexander的建筑学著作发展出了一套关于自然和生命的哲学......Alexander认为宇宙是一个和谐的整体,包含了感觉和没有生命的物质。”Salingaros博士总结说,“Alexander的观点是强烈的道家观点”;而“他的观点是首先在《建筑的永恒之道》一书中发展起来的”。

“为技术人员写的易经”
亚利桑那大学的Joseph Boudreaux说[CCIT],《建筑的永恒之道》以及《建筑模式语言》两本书“是关于解决任何领域中的问题的设计模式和结构的书。这两本书就像Java或者C++的书一样,只是没有讨厌的代码语法。读着这两本书,就好像读着一本为技术人员写的易经或者是儒家-道家著作一样。”


混沌之死
在从道家的角度来栓释Alexander的观点之前,先来看一看《庄子·应帝王》中的一个寓言故事。(这个寓言故事被笔名为“瓜”的作者做了非常有意思的改写[HUNDUN]。)

“南海之帝为倏,北海之帝为忽,中央之帝为混沌。倏与忽时相与遇于混沌之地,混沌待之甚善。倏与忽谋报混沌之德,曰:‘人皆有七窍,以视听食息,此独无有,尝试凿之。’日凿一窍,七日而混沌死。”

这个故事讲的是没有感觉器官的混沌,在得到感觉器官之后,就死掉了。混沌是在人的感觉之前存在的;在进入了人的感觉之后,混沌就不存在了。

老子说,“无名天地之始,有名万物之母”。无名,是无法定义的意思。人脑认识一个客观实体的过程,就是界定一个实体的过程,也就是要给它定出界限。道家认为,一个实体是无法与其环境分割开来的,因此将一个实体局限到一个范围之中的过程,从而也就是改变它的过程。一个实体一旦被界定,也就不再是原始的那个实体了。

只有在一个实体被界定之后,才会在人脑中产生概念;这就是“名”。“名”就是死去的混沌。

大家知道,在经典力学中,波与粒子是完全不同的东西,波与粒子的属性是不能同时存在的。但是在量子物理学中,一个物理实体既具有波的属性,又具有粒子的属性。当实验探测的是波的性质时,微观粒子所显示出的,就是波的性质;相反,如果实验探测的是粒子的性质时,微观粒子所显示出来的,就是粒子的性质。而实验作出这种探测哪一种属性的决定完全可以是随机的、不预先设定的。这就表明,一个微观粒子本身必须同时具备波和粒子的性质。

没有观察者的介入,宇宙的真实本质是无法界定的,因此老子说“无名天地之始”。庄子的“混沌”就是“无名”的人格化。

一个实体被界定的方式可以千变万化,因此同一个实体可以产生不同的“名”。当人们试图界定宇宙的本质时,就会发现一千条、一万条属性,这些都是宇宙被用不同方式界定的结果。人们所见的万物,都是宇宙的一部分,是人脑将宇宙局限到一个区域中的结果。因此道家说“有名万物之母”。



图1、马王堆出土的《道德经》片段。

在量子物理学中,对具有“波-粒二象性”的微观粒子进行探测的时候,实验就干扰了被观测的实体,使得后者呈现出可以概念化的“名”,也就是波或者粒子的属性。

再论“无名的质(QWAN)”
所谓“质”(又称“无名的质”,或者简写作QWAN),所代表的概念非常接近于道家的“名”。

QWAN是一个建筑物所具有的属性,当人脑试图认识它的时候,不可避免地会将它局限到不同区域中;这个时候,这个无名的“质”就变成了一些可以定义的“质”,包括整体性(wholeness)、完备性(completeness)、舒适性(comfort)、和谐性(harmony)、可居住性(habitability)、持久性(durability)、开放性(openness)、可变性(variability)、可塑性(adaptability),等等。

QWAN是建筑设计依据的原始根据,而这些可以定义的“质”,便是一切工程设计的开始。

微观粒子的“波-粒二象性”就是QWAN概念的物理存在。QWAN就是老子的“无名”,或者庄子的“混沌”。

再论“门”
这一概念实际上非常接近于我国道家的“气”。《道德经》说,“万物负阴而抱阳,冲气以为和。”换言之,万物皆由阴阳组成,同时气又是阴与阳的中介和载体,气和阴阳是一个东西的两个侧面。气很接近于近代物理学的力场或物质波,而波与粒子则是一个物理实体的两种属性。

唐代的成玄英(约601-690年)在《庄子疏》中说:“气聚而有其形,气散而归于无形也”。换句话说,气以“形”体现出来,而“形”便是模式。模式的语言便是“形”的语言。

在粒子物理里面,微观亚原子粒子通过交换中介粒子产生相互作用;而这些中介粒子就成了道家的“气”概念的物理实体。

再论“道”
《道德经》说:“道生一,一生二,二生三,三生万物。万物负阴而抱阳,冲气以为和。”这就是说,万物是由道而生,第一个实体就是内部蕴含有阴、阳两极的一个整体。这就等于否定了任何阴或者阳单独存在的可能。

与此相类似地,Alexander在《建筑的永恒之道》中“空间的分化”中写道:“在自然界中,一个实体总是作为一个整体出生、发展的,”他认为一个建筑设计的过程,就像一个受精卵的发育过程一样,是一个逐步分化的过程;是从整体到部分的过程,而不是从部分到整体的过程。

由此可见,模式的哲学很接近于道家哲学。哲学,是形而上学。形而上学始于“形”之上。希望大家在学习模式时,不要忘记模式(“形”)还有“而上之学”。

由于这形而上学的相似性,中国人学习模式,应当尽量采用中国人固有的思维方式,因为我们的思维方式最适合于演绎模式理论。

建筑风水学?软件风水学?
风水描述只存在于建筑物及其环境所形成的整体之中,而不存在于独立的各个部分之中的一些属性。

风水强调建筑与环境的相互作用,认为建筑物与其环境是一个和谐的整体,这个整体会给居住在其中的人带来特定的体验。比如,一个花瓶的美,不仅仅存在于花瓶的形状及其表面装饰,而且存在于花瓶所在的位置及其环境。一个物体与其环境的相互作用,是通过“气”产生的;如果这个相互作用是和谐的,那么“气”就以美的形式表现出来。

与此相类似地,Alexander在《建筑的永恒之道》中写道,一个花园之所以有“有生命”,是由于植物、风、动物都处于完美的平衡之中的缘故。

风水在中国流行了几千年,在北方,大多与坟墓方位和活人的权势有关;在南方,大多与住宅的位置和财运有关。风水总是与迷信相关联,与功利相关联,使得风水在中国一直很难退去其神秘主义的外衣,变成科学的一部分。

Alexander的著作可以提醒有中国文化背景的读者,注意“风水学”内在的合理性。如果能够成功地将迷信和功利的因素剥离,而重新以理性、科学(包括心理学)塑造“风水学”,可以大有作为。

对于一个软件设计工程师来说,一个软件系统也必定有某些属性仅仅属于其整体,而不存在于其某个部分的情况。换言之,读者可以思考,软件系统设计可否有“风水学”;这个“软件设计风水学”与现有的设计模式理论有何关系,等等。

软件的永恒之道
通过遵循Alexander的观点并且追溯到他的观点的道家起源,可以将他的理论“投射”到软件设计中。

三论“无名的质(QWAN)”
首先,QWAN意味着一个软件的内在属性不仅仅存在于这个软件之中,而且存在于这个软件与其它软件的相互作用之中,存在于这个软件与计算机外部的世界,特别是用户的相互作用之中。

这个最重要的属性之所以是“无名”的,是因为它是映射到人脑之前的属性。在这个属性被映射到人脑中之后,就已经经历了用各种方式局限到各种不同范围之内的过程;这种过程导致这个无名的质变成一大堆“有名”的“质”。在本书后面读者会读到,这些“有名”的“质”就包括软件性能要求的可变性,软件的可用性;以及系统的可扩展性、灵活性和可插入性等等。

三论“门”
对于Java语言设计师来说,“气”就是Java源代码,这些源代码汇聚而形成“形”;而其中的一些“形”反复重复出现,构成对一些典型问题的典型解决方案;而这就是模式。人们给这些“形”可以区别的名字,以便能够相互沟通;人们研究这些“形”,可以积累经验,以便能够举一反三地处理类似的问题。

一个模式中会有几个角色存在,这些角色本身也是“气”汇聚而成;并且通过“气”相互发生作用。

根据“形”的尺度,模式可以分成“代码模式”,也就是由Java语句组成的“形”;“设计模式”,也就是由Java类和对象组成的“形”;“架构模式”,也就是由大尺度的构件组成的“形”。

三论“永恒之道”
软件的设计,必须从软件的整体属性,也就是QWAN出发;通过性能的分化,形成各个模块、各个用户界面、各个类,以及各个方法。在软件的性能要求发生变化的时候,QWAN是不会变化的;一个软件如果能够保持QWAN,就能保证在变化的世界中保持一个软件设计的稳定性。这就是软件设计的永恒的道。

QWAN必须通过对“道”的追随,经过“门”而实现。对一个Java设计师而言,这就意味着要经过Java源代码的形成好的“形”达到软件系统的QWAN。

如果读者进一步阅读本书的话,就会发现,“开-闭”原则就非常接近这样的“道”。它在不同条件下分化为几条不同的设计原则。这些设计原则都是“永恒的道”在不同方向上和不同层次上的体现。

而设计模式,包括本书将要介绍的26个设计模式,都是帮助设计师到达QWAN的途径。

对哲学的呼唤
建筑物的建造会受到很多物理规律的限制,比如重力、材料强度等等。而软件存在的世界是一个虚拟的世界,是一个没有重力、没有空气阻力、没有摩擦力的世界。这使得软件工程学与一般的工程学有很大的区别;而其中重要的一点区别,是人们可以在一个软件系统中,以很少的成本做各种实验。这是何其自由。

软件是人类思维活动的直接延伸;软件将人类心理学、人类信仰、科学、艺术综合在一起。这又与中国古代的思考方式何其相近。

如果读者阅读本书后面所讲解的一系列软件系统设计原则的话,就会发现,这些原则与中国古代思想家在完全不同的领域、对完全不同的问题提出的观点何其相似。

正如量子物理学在上个世纪初处在科学哲学的前夜一样;毫无疑问,软件工程学现在正处在产生自己的科学哲学的前夜。具有中国文化传统的人们在这个重要关头享有很大的优势;因为现有的这些设计原则和模式的研究与中国的道家思想的联系是何其紧密。

希望“软件工程哲学”的太阳能够从东方的地平线上升起。

(以下略)

参考文献
[PLOP95] James O. Coplien and Douglas C. Schmidt (ed.), Pattern Languages of Program Design, Addison-Wesley, 1995.

[PLOP96] John M. Vlissides, James O. Coplien and Norman L. Kerth (ed.), Pattern Languages of Program Design 2, Addison-Wesley, 1996.

[PLOP98] Robert Martin, Dirk Riehle, Frank Buschmann (ed.), Pattern Languages of Program Design 3, published by Addison Wesley, 1998.

[PLOP99] Neil Harrison, Brian Foote, Hand Rohnert, (ed.), Pattern Languages of Program Design 4, published by Addison Wesley, 1998.


[ALEX64] Notes on the Synthesis of Form, Harvard University Press, 1964.

[ALEX75]The Oregon Experiment, Oxford University Press, 1975. (此书中译本[ALEX75Z]) .

[ALEX77] A Pattern Language: Towns, Buildings, Construction, Oxford University Press, 1977(此书中译本[ALEX77Z]).

[ALEX79] The Timeless Way of Building, Oxford University Press, 1979 (此书中译本[ALEX79Z]).

[ALEX75Z]《俄勒冈实验》(美)C.亚历山大 M.西尔佛斯坦 S.安吉尔 石川新 D.阿布拉母斯,译者:赵冰 刘小虎,知识产权出版社,出版日期:2002-2-1

[ALEX77Z]《建筑模式语言》(上、下册)(美)C.亚历山大 S.伊希卡娃 M.西尔佛斯坦 M.雅各布逊 Z.菲克斯达尔一金 S.安吉尔,译者:王听度 周序鸣,知识产权出版社,出版日期:2002-2-1。

[ALEX79Z]《建筑的永恒之道》(美)C.亚历山大,译者:赵冰,知识产权出版社,出版日期:2002-2-1。

[APPLETON] Brad Appleton, Patterns and Software: Essential Concepts and Terminology, (http://www.enteract.com/~bradapp/)


[SALIN] Nikos A. Salingaros, Some Notes on Christopher Alexander, http://www.math.utsa.edu/sphere/salingar/C...Chris.text.html.

[CCIT] Joseph Boudreaux, Whatcha’ readin’?, Computing and Communications News, The University of Arizona, Center for Computing and Information Technology, March 2002.

[HUNDUN] 瓜,混沌——创世神话的瓜式重构,橄榄树文学月刊,二零零一年四月刊
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值