程序员架构修炼之道:架构设计中的人文主义哲学

Posted 禅与计算机程序设计艺术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员架构修炼之道:架构设计中的人文主义哲学相关的知识,希望对你有一定的参考价值。

引子

我们不是技术决定论或技术万能论者。
我们不能忘记,产品毕竟是给人建造的,无论是强调范式、结构与信息,还是注重交互、界面与智能,我们都会顾及用户的个人想法——也就是时刻关注“用户体验”。

从传统的建筑到新兴的架构

architecture 这个词应该与什么动作搭配呢?这要看你问的是谁,因为不同的人会用这个词来表达不同的意思,有时指的是建筑,有时指的是架构。

职业建筑师会告诉你,他在设计 architecture。他的工作是对建筑物进行设计,尽管有的时候也会参与构建,但其工作重点依然在于设计。反之,对于编写软件的程序员以及设计信息架构的设计师来说,他们用的说法则是做 architecture,也就是设计一套系统,让各个部件形成一个整体。为此,他们既需要自上而下地考虑这套系统的运作方式,又要自下而上地打好基础。从这些数字设计师与程序员的角度来看,建筑师的工作与他们的工作很相似,因为两者都特别复杂,都要考虑各种琐碎的问题。

设计师与程序员之所以使用architecture一词来描述他们要做的东西,是因为这种东西与建筑师要设计的那种architecture有相通之处,它们都很烦琐,都需要与之相关的专业知识。总之,他们用的说法是自己正在做architecture。

建筑是一项很严肃的工作,从事这项工作的建筑师必须认真对待该工作,这样才能对得起这一头衔。架构师也使用architect 这个词来描述自己的职位,这透露出他们所要处理的问题及数字结构与建筑师所要面对的建筑工作一样,也很复杂。

建筑物可以用结构来容纳各种复杂的实体,并为其提供支持。因此,工程师、计算机科学家以及数字产品的设计者,自然会想到借用建筑方面的概念来描述自身工作中的一些复杂状况,因为这些概念和说法可以把大的问题拆解成多个层面,并将各层面中的要素关联起来。如果某人不是建筑师,但却用architecture来指代他要做的产品,那说明他是想把自己的产品比作建筑,或是将自己设计该产品的过程比作建筑师设计建筑物的过程。他们要做的那种架构与建筑师要设计的建筑物一样,都要考虑人与空间的交互。因此,建筑与架构领域中的一些概念其实相当接近,并不像某些人想的那样遥远。

Architecture 这个词

architecture(建筑)一词的传统定义根据Oxford English Dictionary《牛津英语字典》[7]所说,是指building or constructing edifices of any kind for human use(建造或构造任何一种供人居住的建筑物)的活动,它既能指代“建造的动作或过程”,又能够指代这种动作或过程所产生的抽象及形象结构,此外,还可以表示建筑物在风格、结构以及装饰上面的组织方式。

谈论 architecture 时,不仅要关注它的建造,而且还应该强调它最初是怎么构想出来的,其理念后来又经过了哪些变化。

这至少应该与建造本身同样重要,因为建筑师毕竟不能刚一上来就直接动手盖楼,而是必须先做很长一段时间的理论与建模工作,然后才能真正开始建造。还有一个建筑学术语叫作 model(模型、建模),起初,它是指对构建工作所做的规划(法语的 modèle 或意大利语的modello在17世纪进入了英语,并形成了model一词),该词源自拉丁语的modulus,它在建筑学上面的意思是“测量、衡量”。

这样看来,model 可以理解为对想法进行权衡,将其从脑中的某个意象转换成一张图纸,进而转换成三维形式。这些与architecture有关的说法并不是最近才提出的。有远见的建筑师Étienne-Louis Boullée(艾蒂安-路易·布雷,1728—1799)早在18世纪末就说过:“必须对建筑进行构思,这样才能将其建造出来……对我们来说,这种为了产生并创造建筑物而进行的构思才是最有意义的。任何一幢建筑物,其建筑艺术都体现在我们是怎样把它给构想出来并加以完善的。”

对于Boullée来说,建筑的要义并不在于建筑物的建造过程(建造本身也是一种建筑艺术,但与设计相比,只能算次要的艺术)。

建筑师真正应该做的是把建筑给设计好,把细节给构思好,并把各种规格给制定好。

建筑师与学者 Robin Evans(1944—1993)在 “Translations from Drawing to Building”的论文中说,建筑与翻译之间在某些地方是可以比拟的,因为建筑图纸同建筑目标之间的关系有点像原文同译文之间的关系。“翻译是一种表达方式,是在不改变意思的前提下移动某种东西”。

对建筑进行设计是一种构思与处理的过程,需要在图像与语言之间移动,而且要做出诠释与翻译。

工程师、程序员与各种设计师在描述复杂系统的设计与再现时,同样会将其称为architecture。这种architecture是指用结构化的方法来设计复杂的系统,这涉及如何将程序组织成各种模块,以及怎样给计算机系统的用户研发更好的界面。

计算机的architecture是指:

“计算机或基于计算机的系统在使用或设计上面的概念结构与总体逻辑布局”。

工程师设计软件的方式与建筑师设计建筑物的方式其实是比较像的。Oxford English Dictionary对计算机的architecture所下的定义来自Frederick P.Brooks(1931年生)提出的 Architectural Philosophy(架构理念),收录于1962年出版的Planning a Computer System一书中,该书讨论的是世界上第一台超级计算机IBM 7030(也叫作Stretch)。Brooks说,“计算机的architecture与其他的architecture一样”,“都是这样一种艺术:要求我们在资金与技术的限制之下,判断出某套结构的用户有着什么样的需求,并据此进行设计,以便尽量满足这些需求”[14]。Brooks的看法源自John von Neumann(约翰·冯·诺伊曼,1903—1957)在1946年写的论文,那篇文章把设计EDVAC(它属于第一代电子计算机)的过程视为对计算机的“逻辑元件进行安排”,并据此制定相应的指令集。系统架构师需要对这些逻辑元件进行翻译与变换。这样的“概念结构”不仅涉及电路图与电线,而且还强调了诠释与翻译。Stretch计算机在细节与电路上面比同时代的其他计算机都复杂,但如此复杂的电路并没有帮助它取得成功,反而让它的速度始终达不到IBM所宣称的效果(IBM预计它要快100到200倍,但实际上只快了30倍)。这样的情况持续了5年时间,导致该计算机的销售以失败告终(本来可以卖1300万,后来跌价到800万,而且只有政府机构来买)。

尽管Stretch失败了,但它的架构却保留了下来,其后大获成功的IBM 7090及IBM S/360计算机还有其他品牌的一些计算机都是以该架构为基础而设计的[15]。这套架构后来终于得以发扬光大,因为它所依循的逻辑与平台可以迁移到新一代的系统上面,进而又迁移到该系统的下一代系统上面,并这样一代一代地传承下去。

架构设计理念:Architectural Philosophy

Christopher Alexander ( 1936~ )

Christopher Alexander(克里斯托弗·亚历山大,1936年生)开发过一套旨在强调秩序的操作系统,一开始,他是依靠计算机及相关的计算技术进行开发的。

后来,他与同事把这套系统的理念提炼为模式语言。Alexander的这套方法把认知心理学、启发法、控制论以及早期的人工智能理论全都融了进来。

Alexander对编写程序及开发数字产品的人产生了很大的影响,许多程序员谈到模式的时候,用的都是Alexander当年提出的一些说法,数字产品的设计师在讨论架构时也是如此。

不过,有一些建筑师对他的这些成就却有所批评,他们认为Alexander的方法说教气息太浓,而且太过刻板。

在20世纪60年代初,他所采用的做法是,通过集合与图论把建筑问题表达成固定的格式,后来,又通过IBM大型计算机来运行程序,以分析这些需求。他利用各种拓扑结构形象地展示建筑问题,从而让自己能够利用手头掌握的计算范式来相应地处理这些问题。在这个过程中,他会调整自己描述问题时所用的措辞,让这些问题更容易得到展示。

后来,他发现自己要研究的结构越来越复杂,于是不再依赖计算机,而改用模式语言。这种语言的生成能力较强,而且能够灵活地表达出他想要强调的那种秩序,因此,Alexander对此很感兴趣。对程序开发者影响最大的要数他的名作Notes on the Synthesis of Form and A Pattern Language,面向对象的编程语言、软件中的模式、维基百科(Wikipedia)等网站所依赖的维基格式、极限编程等开发方法,其理念都与这本书有所关联。

Alexander提出的模式对以人为中心的设计者尤其重要,那么,建筑师与这些系统设计师之间到底还有没有区别了?如果有,那究竟体现在什么地方?传统的建筑师能否从Alexander对其他领域的影响上面获得一些启发?物联网与智慧城市等说法这几年变得相当流行,然而早在1996年,Alexander就对程序开发者说过:“如果这世界上还有某个方面没有让相应的程序影响到,也就是说,还没有人写出这种程序来管理这方面的实体与操作,那你恐怕就很难确定这个方面该叫什么名字才好。” 他还问道,程序开发者对于“影响、塑造并改变环境” 究竟愿意担负多大的责任。在这个数字化程度越来越高的时代,各种各样的架构师、设计师与程序开发者是不是都应该按照同样的理念来做事?

Richard Saul Wurman(1935~)

对于Richard Saul Wurman来说,信息建筑或信息架构是(information architecture)对页面、地图与书籍中的信息进行组织时所使用的方式,这种设计语言还可以推广到城市层面,进而运用于整个世界。由此来看,Wurman所说的信息架构可以通过图形清晰地描述结构并进行交流,或以书与地图集的形式展示信息,这些图形如果能够适当地予以运用,那么可以系统化地套用到城市层面,而地图集这一形式也从20世纪70年代中期开始逐渐流行起来。

Wurman刚开始和Louis Kahn(路易·卡恩,1901—1974)一起做建筑,后来在费城独立工作,最后改变了职业方向。近些年来,他最知名的举动可能要数创办TED大会了,Wurman一直都在通过各种活动与会议推行自己的理念。他在1972年主持了题为“The Invisible City”的亚斯本国际设计大会,1976年,又在费城主持了题为“Architectures of Information”的AIA(American Institute of Architects,美国建筑师学会)会议。这个会议的小册子上写道:

“如果我们都能够很自然地在城市中找到适合自己的生活方式,那么这座城市是不是就显得更有意义,也更有趣一些了呢?要想让城市更适合居住,建筑师不仅要建造漂亮的房子,更要注重信息,也就是要通过适当的信息体现出各个地点的用途及结构,帮助大家表达自己的需求,并对变化做出回应。这正是Architecture of Information的意义所在。”

Wurman影响了整整一代的软件设计者与网页设计师,让很多人都接受了“信息架构”这一理念,并将其运用在网站、软件以及移动应用程序的设计上面。

软件设计领域已经越来越多样化了,与此同时,信息架构这个概念也随着互联网的发展而有所变化,它现在主要指对用户上网时的体验做出规划。

Cedric Price(1934—2003)

Cedric Price 是按照其信息的流动情况来设计建筑物的。他把控制论中的反馈回路引入建筑项目中,使得建筑师、用户、地点与技术之间的关系变得与从前不同,这些建筑物以及有成长能力的建筑项目可以用一种意想不到的方式来了解用户的使用情况,并据此做出调整与回应。比方说,他运用控制论与前卫的剧场导演Joan Littlewood(1914—2002)及控制论方面的专家Gordon Pask(1928—1996)一起合作,设计了Fun Palace(该项目于1963至1967年之间进行,最终没有兴建),又在Oxford Corner House项目中设想着用计算机技术来装备餐厅所在的大楼(该项目于1965至1966年之间进行,最终没有实现)。

1976至1979年间,Price设计了名为Generator的网络化智能休闲中心,并在其中安排了一套响应式的部件(这个项目最终没有实现)。Price幽默地颠覆了传统的建筑与系统设计理论,他用控制论与信息处理技术来挑战自己,并刺激那些有可能使用该建筑的人,让大家觉得这栋建筑并不一定只能用来做这件事。Price构想的建筑物会高度利用计算机来运作,从而形成一套多媒体的环境,并构成分布式的智能平台,这促使我们想象,在计算机化程度极高的社会,大家应该如何学习、如何娱乐、如何生活。

尽管他的大部分作品都没有构建成实际的建筑,但Price依然很好地启发了后来的建筑师、学生以及英国大众,让大家思考建筑物这一概念在计算机时代会怎样变化。与其他建筑师、设计师与技术专家相比,Price对编程语言及数码产品的设计并没有太过直接的影响,然而他的理念与前者同样重要。

Nicholas Negroponte

Nicholas Negroponte(尼古拉斯·尼葛洛庞帝,1943年生)与同事Leon Groisser创建了MIT Architecture Machine Group(简称AMG),这个实验室由一群喜欢研究东西的建筑师与电子工程师组成。它是1967年成立的,后来成为MIT Media Lab(麻省理工媒体实验室)的基础,并于1985年并入后者。

Negroponte把他们在这个实验室中所做的建筑研究工作视为MIT在技术与科学方面的一项事业,并与Artificial Intelligence Lab(人工智能实验室,这个实验室成立于1959年,当时称为AI Project)合作,同时也接受美国国防部及公司的资助。起初,AMG的研究方向是给CAD(Computer-AidedDesign,计算机辅助设计)系统及屏幕上显示的界面做设计,后来,这些项目的范围越变越大,而且所追求的效果也越来越逼真。

AMG的研究者设计出了整个屋子那么大的多屏幕环境,让处在该环境中的用户有种身临其境的感觉。后来,Negroponte用“media”这个词给实验室起了个新名字,将其称为MIT Media Lab,这是个特意选出来的词,用来涵盖消费性电子产品、图形、出版、学习、音乐、手势、屏幕及语音命令等各种系统。

AMG所做的这些研究对今天某些新兴的领域依然有着贡献,比方说人工智能(Artificial Intelligence,AI)、机器学习、智能环境、虚拟现实(Virtual Reality,VR)、遥感以及无人机侦察,等等。目前,很多人在展望数字时代的发展前景时,首先想到的都是MIT Media Lab。

30多年后的今天,我们更加需要认真思考这个实验室是怎样演化到现在这个样子的,它所提出的设想会在哪些方面引领未来30年的发展趋势,该实验室的研究者又提出了哪些值得大家探寻的问题。

计算机的创新能力

Marvin Minsky估计:就算以“最保守的”态度来看,计算机都将在“很大范围内对我们有所帮助”。他还举了一些较为“直观”的例子,比方说,Minsky认为,计算机图形系统可以绘制、渲染或生成平面图。到了1974年,他又预计,建筑事务所以后可以用计算机图形技术来工作,这句话基本上没说错。然而,Minsky并未就此止步,他还继续展望了20世纪90年代中期的发展情况。

用不了30年,计算机就会变得与人一样聪明,甚至比人还聪明。这些机器不仅能够进行规划,而且可以完全以机械的方式来进行拼装。现在,某些计算机已经安装了扫描设备,因此可以观察到建筑图纸,以后,这些计算机还将有手臂及眼睛,并且会安装适当的程序,从而相当迅速地完成拼装与建造工作。到了那时,承包商必须面对建筑行业的自动化趋势,与此同时,设计师也必须适应设计领域的自动化潮流。我认为,计算机的创新能力最后会强大到令人恐惧的地步。

Minsky的这些话既提到了20世纪60年代的建筑师与AI研究者所忧虑的问题,又点出了令他们感兴趣的一些地方,其中很多预言后来都成了现实。后来的建筑师还是在担心计算机会取代自己,这种情绪直到今天都一直存在。其实其他行业(例如医生、从政者以及制定决策的人)也同样担心该问题,只不过,这个问题对于建筑师来说有着特别的意义。Greenfield写道:“特别的地方在于,建筑学中的问题涉及许多变数,要想解决这些问题,我们必须用三维的形式来加以表达,而且最后必须求助于解析,建筑问题在形式上的这种特殊之处最为重要。”

不过,还有一个问题是:

计算机到底会不会自发地产生出创新能力?

人机共生

J.C.R.Licklider(1915—1990)于1960年发表了“Man-Computer Symbiosis”(人机共生)学说,在涉及智能与交互的概念中,这是一项经久不衰的理念。他这样写道:“人机共生是人类与电子计算机在交互协作的过程中自然发展出来的,它涉及人类与其电子搭档之间的这种非常紧密的耦合关系。”

人机共生的目标是让双方能够以相互协作的方式来解决问题,而不是先由人把程序调配好,然后再交给计算机去执行。Licklider强调,这种协作让人与计算机之间能够以新的方式“合作,以制定决策并控制各种复杂的状况,而不是必须依赖预先编好的某一段固定程序”。

控制论

控制论用来描述各种系统及有机体之内的反馈与控制情况,例如生物系统、计算系统、人类学系统或政治系统等。cybernetics这个词是Norbert Wiener(诺伯特·维纳,1894—1964)在1948年创造的,它源自希腊语的kybernetes,意思是舵手。这项理论围绕着反馈这一概念而发展,它关注的重点在于某一组消息是通过什么样的交换方式来控制系统的,而不在于其中每条消息的具体内容。系统在执行某个动作时,会收到与该动作的效果有关的信息,并据此做出相应的调整,这与舵手掌舵的情况有些相似。

控制论后来之所以吸引了许多人,其真正原因在于它可以运用到各种各样的有机体与实体上面,动物、人、政府、剧场与其中的表演、艺术品、建筑物等全都适用。它可以为Geof Bowker所说的那种全方位策略提供支持。Bowker写道:“总之,控制论专家呼唤新的时代,这既能够融合各种领域(考虑到当前的技术与战争状态),又能够激发各种思想(考虑到它所能激发的各种人文理念)。它是一种强大的工具,能够在这两个意义上面来回转换。”

人工智能

人工智能这个说法是John McCarthy(约翰·麦卡锡,1927—2011)在1956年提出的。然而,这种能够自主解决问题的计算机其实早就有人想到了。

人工智能以及与之有关的自动机等机械其历史可以追溯至公元一世纪,只不过要到20世纪50年代,它才发展成一项专门的领域,旨在以人脑的思考方式为模型,设法让机器具备与之类似的逻辑。

对于控制论与系统理论方面的许多学者来说,人工智能不仅对计算机科学有意义,而且其研究范围还可以扩展到生物学、神经学、数学、统计学、语言学、管理科学及心理学等诸多领域。

尽管AI研究是从控制论中诞生的,但它所关注的核心问题却与控制论不同。这些问题主要考虑的是系统如何学习,或怎样自我复制。早期的AI研究者乐观地提出了许多种有可能实现的概念,然而这些概念真正想要实现却需几十年时间。正如Marvin Minsky在1961年所写的那样:“我认为……我们正在开启这样一个新的时代,在这个时代中,智能的解题机器将会强烈影响我们,甚至有可能统治我们。

在Minsky的人工智能理念中,启发法早就占据了核心地位,
不过,他于20世纪60年代给“智能”一词下定义时,却说得相当谨慎。

什么是智能?什么样的行为才是智能的行为?

这些问题始终不好回答,到现在也没人说清。你当然可以用启发法或分类法拟定一套规则,让计算机按照这套规则来行动,但这样做是不是缺了什么呢?Minsky写道:“我明白,如果把各种复杂的启发式方法组合起来,那么我们迟早能够拼装出解题能力超强的程序。”然而,单纯地堆技术并不会发生本质变化,于是,Minsky就问:“如果用尽了各种手段都无法产生智能,那么我们是否应该考虑一下,自己到底有没有正确地理解‘智能’这个词?”

参考阅读

我们能够根据亲自解决或观察他人解决问题时所获得的经验提出合理的猜测。在人工智能与认知心理学领域,研究者会运用这种方法来探寻人类是怎样把问题的解法给找到的。研究者可以将这套探寻手法创建成软件模型,从而运用启发法对其他问题的求解过程进行研究。建筑师也可以运用这些手法构思出具备进化及学习能力的建筑系统。Christopher Alexander的Notes on the Synthesis of Form一书的核心程序就使用了启发法。

建筑师会把建筑学当作一门解决问题的学科来进行探索,并且会在探索的过程中运用启发式的方法(或者叫作试探法)。启发法的意思是“有助于发现”问题答案的方法,它是通过How to Solve It(《怎样解题》)这本书流传开的,该书出版于1945年,作者是George Pólya(波利亚·哲尔吉,1887—1985)。这本书不仅对数学很有影响,而且还波及了控制论、认知心理学、人工智能以及计算机科学等领域”
摘录来自: 【美】莫莉·赖特·斯廷森(Molly Wright Steenson). “架构启示录。”

以上是关于程序员架构修炼之道:架构设计中的人文主义哲学的主要内容,如果未能解决你的问题,请参考以下文章

程序员修炼之道:务以己任,实则明心——通向务实的最高境界

程序员架构修炼之道:如何设计“易理解”的系统架构?

程序员架构修炼之道:如何设计出可持续演进的系统架构?

程序员不愿意说的秘密!Java进阶架构师必看:架构完美设计+程序员三门课+架构修炼之道

程序员架构修炼之道:软件架构设计的37个一般性原则

哲学本质之道技术工具之术,谁是架构设计之魂?