敏捷之旅

《管理3.0》 读书笔记 之三

2017-12-02  本文已影响0人  越爸刘伯

第3章 复杂系统理论

很多敏捷软件开发专家都认同,软件开发团队可以视为一个复杂的自适应系统,因为团队是由一定范围内若干个相互影响的部分组成,并且能够根据过去的经验来学习和改变。

《涌现:复杂性与组织》杂志曾经就涉及“复杂性”的管理类书籍对来自各学科的专家进行过一次广泛的调查,这些学科中不发物理和数学这样深奥的领域。结果显示,评审人员都认为复杂性理论应用于组织和管理中时很有用。

进入正题了。敏捷导入培训时,教练拿出snowden的认知模型问大家,敏捷转型是属于哪个象限,有同事觉得是属于简单或者是繁杂象限的,理由是敏捷也不是什么新东西了,也已经有很多公司完成了敏捷转型,应该还是有一定的套路可循的。教练答复说敏捷是属于复杂象限的,因为一个软件团队其实就是复杂的,每个个体作为一个独立的人就是复杂的,再引入人际关系就更为复杂,并且团队成员越多沟通渠道就越多,人与人会通过互动互相影响,很多事情不会按照设计好的方向演进。

跨职能科学

几十年来,不同学科领域内的科学家们一直踟躇于他们无法解释的“复杂”现象。如果各个学科之间能够互相联系起来并且人们将跨所有学科的系统理解成复杂系统,一切会变得豁然开朗。我曾经听到一个说法:当科学家在其不熟悉的领域内工作时,科学会有一个质的飞跃,因为他们会将其熟悉的、其他领域内的只是和经验(哪怕是失败的呢)带到该领域。

就像敏捷软件开发那样,复杂理论侧重于用跨学科的方法来解决问题。

学习必须要跨界才行啊,不然视野会太窄,只局限在自己熟悉的小圈子里,停留在比较低的认知水平上。分学科这种学习方式其实不是很合理。

一般系统理论

一般系统理论(有时简称为系统理论),他们的研究基于这样的理念:宇宙中的多数现象可以视为宇宙之间的关系网络。无论其本质是生物学的、化学的或社会学的,这些系统都有着共同的模式和行为,通过对其研究可以更深入地了解一般性的系统。系统理论的宏伟目标是要形成一个跨学科的科学统一体:跨越所有学科的通用系统语言。

以下观点都可以归入一般系统理论:软件开发团队可以自我组建;可以自我定义其身份;需要与其环境相互作用;团队成员之间的互动和团队成员本社具有同样的重要性(甚至更重要)。

事实证明:几乎所有系统理论规则也对复杂性理论有效,这比软件工程所取得的各种统一框架还要多。

温伯格的《系统化思维导论》,到现在还没有读完,找个时间把它完成。

控制论

控制论研究的是调控系统,这些系统有明确的目标,并通过反馈机制与其环境相互作用。控制论本身的目标是要了解这种调控系统中的过程,包括动作(对环境有影响)、感知(检查环境的反馈)、评估(将现状与系统目标相比较),最后再回到动作上来。这个循环过程是控制论研究的基本概念。

从控制论中,我们可以看到一点:软件开发团队是一个目标导向系统,它使用各种反馈循环来调节自身。我们已经知道在一个自我调节的系统中——比如软件团队,相比能量和力量,信息、沟通、目标反而是更重要的因素。控制论帮助我们明白了在复杂行为开发中,“反馈”扮演了一个关键的角色。

人们经常混淆一般系统理论和控制论。这并不奇怪,原因很多:它们相互影响,它们名称不同;它们都想努力建立系统的统一科学;实践也证明,它们都无法达到其初始目标。但无论如何,它们都负责承载系统知识体系,使其后的理论可以从中受益或以其为基础。

温伯格在《质量 软件 管理》中对软件研发过程模型的抽象中就提到了基于反馈的模型,说这是最好的。在他写书的时候还没有敏捷宣言。在看到这本书的时候没有明白他说的是什么意思,直到熟悉了Scrum才理解他这个总结的高度。敏捷是高度依赖反馈的,建立各种大大小小的反馈环,让个人、团队、组织、过程不断变得更好,这是敏捷有效的关键。

动力系统理论

动力系统理论来源于上世纪六十年代的应用数学。这个理论阐述了动力系统有多种状态,其中有些稳定,有些则不然。当系统的一部分一直保持不变,或当它们被打乱后总是回到其原始值时,我们就说稳定状态充当着吸引子的作用。

动力系统理论与软件开发的关联性使其有助于解释为什么有些项目是稳定的,而另一些则不然。它也解释了为什么有时一个组织似乎不可改变,因为它总是回退到其原始行为。

感觉这个说的是不是熵增原理,要减少系统的熵,必须要有外力做功。敏捷强调大家让大家目标一致,必须有足够的外力吧,否则很可能就会回退到原始状态。何勉在《精益产品开发》中提到,一位国外的敏捷大师自述,他带过的不少团队,遭遇教练在的时候按照敏捷方式运作,教练走了就退回原来状态的例子,可见敏捷转型要想取得彻底的成功还是有比较大的难度的,要有足够长时间的实践,让团队把运作方式固化成习惯才行。

博弈论

作为应用数序的另一分支,博弈论尝试捕获系统在战略态势中的行为,其间,一方的胜败在某种程度上取决于另一方的决策。

博弈论在很多领域内都被证明是一个重要工具,包括经济学、哲学、人类学和政治科学。当然还包括软件开发。它不仅能帮助软件开发人员创建游戏、电子市场和点对点系统,也对团队中的人的行为和组织中的团队行为做出了解释。

人和人之间是会互相影响的。

进化论

进化论对所有系统研究都贡献巨大,无论是生物系统、数字系统、经济系统还是社会系统。有人说团队、项目和产品都是在适应其不断变化的环境中得到“进化”。虽然软件系统中的“进化”和达尔文锁描述的并不相同,但进化思想能帮助我们理解系统是如何随着时间的推移而成长、生存和适应的。因此,我将进化论视为系统知识体系的大脑。

敏捷强调适应性调整,符合进化论说的适者生存。从历史来看,最适合环境变化的物种未必是最有力或者最聪明的物种。

混沌理论

动态系统固有的不可预料性对估计、规划和控制有着深远的影响,这在气象学家和交通学家之间有着广泛的共识,但是项目经理和直线经理很少愿意承认这一点。

有人认为混沌理论是复杂理论的前身,并因其不确定性和变化性而受到广泛赞誉。这也是我将其比作系统知识体系心脏的原因。

混沌理论是核心,意思还是强调不可预测性吧?

系统知识体系

“复杂”这个概念还没有统一的定义,而且也没有单独的理论能解释所有复杂系统。科学家长期依赖一直努力寻找适用于所有系统的基本原理,但到目前为止,它们还没有取得成功。

每一个系统都是不同的,而且过去的经验并不是未来的保证。所以,似乎我们所拥有的知识一个理论集,而这些理论有时是互补的,有时是重叠的,有时又是矛盾的。

尽管身体的某些部位比例失调,并且我所画的任务比穿着短裙的僵尸还难看,但系统知识体系这个“身体”是活蹦乱跳、生气勃勃的。如果应用于复杂系统,我们将称其为复杂系统理论。

作者把上面这些知识体系全部都画到一个小人身上了,如下图:

简单:新模型

系统的结构-行为模型

纵坐标指的是系统的结构和我们如何正确理解它。

简单的=容易理解

繁杂的=非常难以理解

横坐标指的是系统行为和我们的预测能力。

有序的=完全可以预测的

复杂的=在某种程度上可以预测(但会有很多出乎意料的事情发生)

混沌的=极其难以预料的

我的内衣很简单,我很容易理解它们的工作原理。但是我的手表是精密繁杂的。如果把它拆开,我需要很长时间才能了解其设计原理和组件。但是我的手表和我的内衣都没有什么让人吃惊的(至少对我而言)。它们是有序的、可以预料的系统。

其他的模型

这与其他模型是如何区分的?

斯诺登(David Snowden),一名知识管理学者,提出了一种称作Cynefin的架构,它描述的是一个环境类型学,分为四类:简单、繁杂、复杂和混沌(第五类叫失序,被放到中间),用于指导决策和政策的制定。

管理学教授史泰西(Ralph Stacey)创建了一个类似的模型,叫“认同度&确定性矩阵”(The Agreement & Certainty Matrix),它展示了四个领域:简单、繁杂、复杂和混乱(混沌)。它基于两个维度:认同度和不确定性。

在第16章中,你会看到所有的模型都是错的,但有些还是有用的。这提到的三个模型都是错误的,但每一个都有用。我的模型与另外两个模型的主要区别就是我没有将繁杂和复杂视为两个独立的领域。我的“结构-行为”模型识别出6个领域而非4个,并且在繁杂的和复杂的系统方面有一些重叠。如果感觉这有用,可以用我的模型进行系统评估。如果觉得没用,就使用另外两个,它们也不错。

Cynefin模型如下图:

认同度&确定性矩阵模型如下图:

“繁杂的”指的是系统的构造错综复杂而无法理解,除非你是一个专家。而“复杂和混沌”指的是系统行为——这在一定或很大程度上是不可预料的。繁杂的东西不一定复杂,就像一个车库里的两辆汽车一样。复杂也不一定是繁杂的,就像两个人在一个卧室里。

很难搞得清楚繁杂和复杂的区别,不过这两个例子说清楚了,繁杂是头绪很多但仍然有章可循,复杂是指无法预料的东西。人是复杂的动物,两个人在一起就更复杂了。这是为什么程序员宁愿和机器打交道,不愿意和人打交道的原因吧。

简单化,目的是使结构更容易理解(在我的模型中将其从顶端移到底部)。

线性化,目的是使行为更容易预测(在我的模型中将其从右边移到左边)。

不幸的是,人们经常将线性化(外行人这样定义)与简单化混为一谈。这就是混乱的开端。

软件系统中的复杂性指的是什么?

很多人认为,软件应该尽量简单。当软件不够简单的时候,有些人就会要求“减少复杂性”。

这有点乱,因为“减少复杂性”中的“复杂性”这个词不符合“复杂性”的科学本义。同时也无法区分软件系统的结构和行为。

但是,我的良知告诉我,我必须承认一点:在“复杂”和“繁杂”这两个词早在科学家开始赋予它们不同的含义之前就已经存在了。所以在这一点上,门外汉是正确的,科学家反而错了。

但是,如果要求专家理解你的软件结构,我更喜欢说它是繁杂的。当软件行为无法完全预测时(比如在人工智能、神经网络或多人游戏中),我就认为软件是复杂。

简单的、结构良好的软件可能具有非常复杂的行为,而繁杂、混乱的软件仍旧可以正常运行,并且不出任何意外。

在中文世界里,似乎繁杂和复杂这两个词很难区分,刚才想要解释繁杂,似乎第一时间想到的还是复杂这个词。或许把complicated翻译成繁复的,把complex翻译成费解的或者难懂的,可能更符合原意。繁复的只是线索和头绪比较多,但仍然是可以理解的,因为其还是符合一定的规律,从因能够推导出果;而费解、难懂的意思是无法找到明显的因果关系。

最后,总结下这一章的中心思想吧:

一个新时代:复杂性思维

本书应用复杂系统理论的方式与这个理论本身所表达的非线性、非决定性和不确定性并不矛盾。管理3.0模型应用了复杂性思想。它假设管理者不能建立并驾驭自组织的团队。但是,必须建立并培养这样的团队。它承认一个高效的组织不是靠模型和计划来管理的。相反,它必须要依靠自组织和进化的力量才能发展壮大。我希望看到复杂性思维可以像阳光一样滋润着万物的生长。它是一切生命派生和成长的能量源。


我是有底线的

上一篇下一篇

猜你喜欢

热点阅读