人们惯以历史上经验的教训,特别介绍给各君主、各政治家、各民族国家。但是经验和历史所昭示我们的,却是各民族和各政府没有从历史方面学到什么,也没有依据历史上演绎出来的法则行事。
--黑格尔《历史哲学》[1]
新常态
即将过去的2020年可以说是人类历史上非常特别的一年。就在前几天,美国《时代周刊》发布封面称“2020是最糟糕的一年”。在这个封面上,白底黑字的2020被画上了一个红叉。原因自然不用多说,相信大家都能明白。人类正在经历有史以来最为严重的传染病疫情之一。对于人类为什么最终没有控制住疫情蔓延的原因,我们往往喜欢往人类的一些劣根性方面去考虑,比如诉之于黑格尔那句被人断章取义且被胡乱翻译的所谓名言:“人类从历史中学到的唯一教训,就是人类无法从历史中学到任何教训。”
人类真的不会吸取任何经验教训吗?黑格尔如果知道他自己的话被人这样玩法,估计他老人家老早就被急得从棺材里跳起来。这句话真正的原文来自于黑格尔的《历史哲学》,也就是本文开篇那一段话。结合原文的语境来理解,这段话的本意是指人类从历史中吸取经验教训,但由于每一次碰到的局面都可能是全新的,独一无二的,所以人类不能机械的照搬历史经验,而是需要结合实际情况灵活的应对。
如何才算是结合实际情况灵活的应对?不说他国的情况,单就我们国家,其实我国是很擅长于总结经验教训并因实际情况运用之的。线上办公是其中一个很好的例子,是有效隔离传染病的经验与现代互联网技术结合而催生出来的行之有效的复工复产的手段。
因此,渐渐地,线上办公成为了2020年的刚需,成为了一种新常态。对于软件领域来说,这种新常态导致了很多原本是线下的设计工作被搬到了线上开展。为了适应新常态,我们期待的年度DDD大会也搬到了线上。
协作是软件设计的原生诉求
虽然线上办公的模式给复工复产带来了非常大的帮助,但是这种线上的方式却给原本流畅的软件设计带来了新的挑战。这种挑战在于,相比于线下,线上的模式在协作上天然是处于弱势的。例如,在原本的线下事件风暴过程中,参与者可以在现场非常顺畅的交流,他们可以利用白板和便利贴毫无阻碍的实时表达他们的想法,甚至他们的一个动作、手势、表情都充满了有价值的信息。坦然的是,受制于模式的限制,线上协作是很难完全达到线下协作的效果的。
那么,由于现实中疫情因素的制约,在软件设计过程中,我们是否应该就此舍弃掉协作呢?我想,答案是否定的。因为,从本质上来说,协作是软件设计的原生诉求,软件设计本质上是一种协作式设计。
“计算机系统的设计通常被视为艺术而非科学。关于使用哪种调度策略、运行多少服务器、每台服务器运行多快等决定,通常是基于直觉而不是数学公式……”[2] , 这是文献[2]开篇的第一句。这句话非常有意思,虽然我不是完全认同这句话的观点,但是它却很好地把软件设计(此处以及下文将以软件设计指代计算机系统的设计)与艺术以及科学的关系摆在了我们面前并供我们讨论。
实际上,对于上述问题,我们不妨换一个问法:是什么使得软件工程与别的工程学科显得如此不同?这也是我一直思考的一个问题。在文章《以理性不断的崇敬 - 对DDD之后复杂业务软件系统设计的思考》[3]中, 我曾经提到,相较于其他的工程学科,软件工程只有区区几十年历史,它还处于一个非常年轻的阶段。在那篇文章里面,我没有提及的一个观点是,相比于其他的工程学科,软件工程的构建物,也即软件本身,是与它的使用者之间存在着非常强烈的交互作用。使用者在页面上的每一次点击,每一次提交,软件都将给予一个响应。
这种人与构建物之间强烈的交互作用是很多别的工程学科所不具备的。也就是说,在软件工程领域,交互作用,或者更准确的说,互操作性(Interoperability),不仅仅存在于软件自身的各个组件之间,存在于软件与它的使用者之间,存在于软件与它的构建者之间,甚至更存在于其构建者之间。这种强烈的牵涉到人的互操作性使得软件工程相比于其他工程学科来说,具有了非常多的社会人文属性,也迫使我们可能需要以另外一个角度去思考软件工程以及软件设计的问题。实际上,如果只把目光限制在软件系统本身,将会是一个非常狭隘的视角。如果我们尝试站在一个更高的角度去看,我们会发现,不是软件系统,而是软件设计本身,将是一个非常复杂的开放系统(Opening System),一个既有人文科学属性又有自然科学属性的开放系统。
系统科学角度
其实开放系统不是一个新概念。在系统科学(System Engineering)中,它被用来指代那些能与外界进行能量、物质和信息交换的系统。 它最早出现在20世纪早期的生物和物理学科中,然后被引入物理和社会科学中。在20世纪60年代末期和70年代初期,这个概念开始被应用到商业信息技术中[4] 。
一个开放系统有若干特性,而其中一个重要的特性就是协作(Collaboration)(除此之外,还有开放接口、自治、突现、守恒、可重构、互利、模块性等特性)。“协作是指系统的组成部分之间的相互配合以使得它们联合作用的效果大于单个作用的效果之和。”[4] 。这种整体效果大于单个作用效果之和的效应,在系统科学里面被叫做突现(Emergence)。良好的协作使得开放系统产生了突现,使得整体大于部分。“当大量的系统或者元素组合连接在一起并形成复杂的新系统时,新的特性和性质会作为一个整体而不是组成部分浮现。”[4]
而在软件设计这么一个开放系统中,既包含了最终的构建物,也即软件本身,也包括软件的使用者与构建者。相对应的,存在三个层次的协作:第一个层次的协作来自于软件构建者之间的协同合作,软件构建者之间良好的协作将涌现出良好的软件设计。第二个层次的协作来自于软件系统组件之间的调用,软件各组件之间良好的调用将涌现出满足使用者需求的功能。第三个层次的协作来自于软件系统与使用者之间的交互,他们之间良好的交互将涌现出良好的业务能力。从这个角度出发,你会发现在软件设计中,一切皆为协作。也就是说,在软件设计中,协作是内生的特性。
在这三个层次的协作中,第一层协作无疑最核心的,它是其余两层协作的基础。而且,它是最灵活的,因为它是人之间的协作,给予我们的可操作空间很大。其实类似的经验性规律早就存在,并被奉为圭臬,其中最著名的就是康威定律(Conway's Law)[5]:
“Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.”
本质上来说,康威定律所表达的其实就是系统构建者的协作模式对所构建的系统协作的影响。构建者之间的协作越顺畅,所构建的系统各组件间的协作也就越顺畅,也就越能涌现所期望的功能。
心理学角度
另外一个思考的角度是从心理学的角度去考虑软件设计的问题。这个角度很好的一个体现是近年来非常流行的设计思维(Design Thinking)方法论。虽然设计思维不是特定于软件设计的,但是这种充满人文关怀的设计方法论也是非常强调 人的思维的横向连接。 设计思维相信跨界人才相互连接能营造创新的氛围,激发人的创新灵感。“……横向连接型的思维则更多地体现后现代的特征,在尊重个体价值的环境中,人的地位被提升到新的高度,每个人都占据一个独一无二的类别,产品和服务越来越倾向于围绕人,以人为中心来设计和开展,横线的拓展进而强调人与人之间的连接与互动,在交流、沟通和相互理解的基础上激发创意和创新。”[6]
某种程度上来说,设计思维是受到人本主义(Humanistic)影响的。它强调人的价值与责任,相信每一个设计的参与者都有创造力,鼓励打破层级观念,产生层次的创意连接。它的这些理念来自于每个人都有渴望沟通与被理解的需要,以及创造价值实现自我的需要,也即马斯洛需要层次理论(Hierarchical Theory of Needs)里面关于归属与爱的需要(Belongingness and Love Need)以及自我实现的需要(Self-actualization Need)。
设计思维对人的协作的重视表明了一个观点:无论从系统科学的角度出发还是从心理学的角度出发,协作,并不仅仅是软件设计(或者涉及到复杂交互的工业设计)中的一种形式,而是一种原生的特性,原生的诉求。在心理学层面,它满足了人类对于沟通与交流的需要以及对于创造成就从而实现个人价值的需要;在系统科学层面,良好的协作将可以涌现出良好的软件设计,并为良好的系统调用与功能的涌现提供支撑。
协作,是另外一种常态
大流行下的新常态致使我们可能在很长一段时间内都必须得保持在一个相对隔离的状态,但这种隔离的状态不应该成为妨碍我们互相建立连接的理由。相反,无论是为了团队即使分隔两地也能开展软件的设计,还是站在人类命运共同体的高度为了团结一致应对人类史上最为严重的传染病疫情,我们更应该迫切的破除物理上隔离的制约,建立心理的连接。我想,病毒使隔离成了常态,而协作,应该成为另一种常态,使我们能在与病毒的对抗中,感受彼此的温度,相拥前行。
参考资料
[1] G. W. F. Hegel. 历史哲学. 王造时译. 上海: 上海书店出版社, 1997
[2] Mor.Harchol-Balter. 计算机系统的性能建模与设计: 排队论实战. 方娟等译. 北京: 机械工业出版社, 2020
[4] Mo Jamshidi. System of Systems Engineering: Innovations for the21th Century.许建峰等译. 北京: 电子工业出版社, 2016.9
[5] http://www.melconway.com/Home/Conways_Law.html
[6] 王可越等. 设计思维创新导引. 北京: 清华大学出版社, 2017