

大家好,我是人月聊IT。今天继续聊思维方面的话题。即什么是系统思维,个人应该如何培养和提升系统思维能力。
我们先来讲下系统思维和其它思维方式的区别,然后再展开谈下系统思维,包括通过举例的方式来说明下系统思维能力如何培养,包括可以使用的一些工具。
要谈到区别,我这里只谈我自己的理解。

逻辑思维核心是归纳+演绎,有诸多因得到一个果,或者有一个结论泛化诸多因。
逻辑思维是所有科学思维的基础,即归纳演绎,结构化思维里面也包括了逻辑思维。对于逻辑思维的时候我们没去强调我们思维的主体事件或现象,具体内部构造是如何的?
这种构造的源头基本都在树状展开或列表表格两种基本类型,要得到这种结构往往需要分解,分类,组合,聚合,排序等。做这些事情的本质是没有探究到事物内部结构很难将事物本质真正搞清楚,复杂的问题解决一定涉及到这些内容,内部结构如何更好的探究涉及到结构化思维。
系统思维:单向结构还是环状结构,对于简单的思维通过归纳或演绎看到的是多个因得到一个果,或者一个果分解到多个因。那么有多个果(目标)的时候如何办?分解出来的多个因之间有相互作用的时候如何办?这些需要系统思维的来解决。当然系统思维里面自然会用到大量的逻辑思维和结构化思维。
批判思维:这个不应该纳入到前面三种里面,而是应该分开,这个更多谈的是思维中的主客观态度,二元对立和辩证法等。在前面三种思维中都会用到。
对于系统思维的标准的一些定义,在这里就不再详细叙述了。但是核心还是要再说下,就是系统思维的三要素,元素,连接和目标。对应到我自己从事IT行业和软件架构,和我经常谈到的架构思维的核心内容也是一致的,即组件,组件之间关系,组件集成协同后对外展示出的行为状态。
具体可以参考下图:

我个人的系统思维启蒙也是从彼得圣吉的《第五项修炼》这本书开始了,后面又进一步看了《系统思考》和系统动力学建模。
系统思维为何没有在哲学里面专门作为一种逻辑形态存在,实际系统系统本质仍然是辩证逻辑,包括辩证逻辑后续发展到的矛盾论。简单来说,多个元素或影响因子最终得出了一个目标结果,这个标准的形式逻辑范畴。但是多个元素之间是否存在关联依赖和制约,元素之间这种制约影响对最终的目标会形成哪些影响?这个是由辩证逻辑来解决的。
今天我准备讲两个例子来说下系统思维,但是在讲例子之前,我还是对例子里面涉及到的一些关键内容做一下总结。
我原来举例说过,餐馆进货成本涨价了,那么是否菜品是否涨价?从目标决策来说肯定要涨价,但是实际我们的目标不是简单的二元决策,而是幅度决策,即究竟应该涨多少?从一个大系统来说里面的每个元素都会有一个范围值在波动,那么这些波动是如何相互影响到最终的目标,这就是不是简单的求解一个算术公式这么简单了。
还是会到涨价这个事情,涨价是最终的决策不是目标,真正的目标是我要利益最大化。但是这个目标本身不是静态目标,而是增加了时间维度的一个动态发展目标。你希望1个月盈利最大化和1年盈利最大化,那么得出的决策结论会出现明显差别。
传统形式逻辑下,往往问题求解是标准公式,得出的是一个最优解。但是系统思维下,往往得出的是一个诸多因素相互平衡下面的满意解。传统模式下是求解公式,系统思维下是寻找平衡,而寻找平衡的方式往往是基于历史数据做大数据动态模拟来完成的,这就是后面例子我要谈到的借助工具做的动态建模。
系统思维本身不难,但是一看这些书的时候容易感觉到要学习系统思维方法很难,特别是环形正负反馈回路的构建和拓展,我们一开始学习系统思维最容易的就是陷入到这些方法和工具里面去,而忽视了系统思维本身的应用场景和思考模式。
对于系统,在这里简单谈下个人的理解,系统是由多个部件或组件,多个类别的工作或活动,多个影响因子等构成的一个整体。这个整体表现出来的一个最大特点就是这些子部件或因子之间相互影响,相互制约,抑制和促进,正反作用,在某一个时间点达到了一种动态的平衡。理解了这点,那么系统思维的一个核心内容就清楚了,即需要找到这些子部件或影响因子,然后再找到这些影响因子之间的正反作用关系,有了这个为基础才谈得上环形思考和闭环回路的构建。
那么系统思考本身又应该如何,如果简单的将系统思维说为需要具备整体观和全局观,那系统思考本身又陷入了思维层面而不是方法层面。我们需要的还是系统思维的一个可操作方法的落地。对于《系统思考》一书详细介绍了方法,但是是偏问题驱动入手的,而真正的系统思维则应该从理解系统入手。
如何才能够理解系统,这和结构化思维的很多方法和思路一样的,要理解一个复杂的系统则需要首先到这个系统进行分类和分解,将大系统分解为子系统或更小的单元,再来分析各个组成单元之间的关系和制约。系统本身的分解类似于一种思维导图方式的树状展开,但是这个展开往往只是第一个步骤,前面已经谈到过,对展开后的部件或因素再去分析它们之间的相互影响和制约关系才是最重要的。
一个管理软件是一个系统,可以分解为多个业务模块或组件,同时这些组件之间又相互协同和制约,这是从物理和逻辑上的分解。项目管理体系本身也是一个系统,可以分解到范围,成本,质量和进度四个核心要素或子目标,这是从影响因子方面的分解。分解完了自然需要考虑类似范围和进度,成本和质量等之间的相互影响关系。
系统思考本身的目的还是为了决策,比如该不该招聘新人,究竟该招聘多少人?经营的餐馆究竟是否该涨价?公交车的发车频率究竟应该多少合适?当我们提出这些问题的时候自然就需要做决策,那么决策的依据应该是目标,只有清楚了目标才能够清楚如何决策。是否招聘新人是为今年团队整体绩效目标服务的,餐馆是否调价是为餐馆某个期间的经营利润率服务的。
由问题找目标的原因是什么? 因为问题本身不是系统,而目标下隐藏的才是一个完整系统,只有找到了目标才能够完整的分析影响因子,包括上面谈到了找到餐馆经营收益这个目标,就清楚了原材料成本,销售价格,销售量这些影响因子,才能够进一步去寻找这些影响因子的子影响因子。
因此我们说:由问题反溯目标,由目标找到系统,再找到系统后进行子件或影响因子的分解才是系统思考里面最重要的内容。拿我们下围棋来说,围棋里面经常谈到系统思考和全局观,讲形势判断,那么当我们思考下一颗棋子的落处的时候,首先你需要的就是找到这个大棋盘(系统),然后仔细分析棋盘里面已有的棋子位置和相互关系,如何我们的思考连系统本身都没有找到或分析清楚,如何谈得上叫系统思考。
后面我讲到的《餐厅涨价》这个案例的重点即使由问题找到目标,由目标来分解影响因子,再分析这些影响因子之间的相互制约关系。了解了这个大思路好像系统思考本身已经是比较简单的事情了。但是很多时候并不是这样,即系统往往本身的复杂性就体现在对于我们关注的系统往往不是单目标,而是多目标。比如一个项目,对于质量,进度,成本都是我们关注的目标。那么在这种情况下应该怎么办?
在这里给出的方法主要有两种,即第一种方法是转多目标位单目标,例如一个项目,很多时候我们对该项目的质量和资源成本投入往往可以约束为不可变的目标,那这样我们再进行分析就相当来说简单。这个时候又回到一种单目标下的系统分析和影响因子决策问题。
第二种方法就是就是保留多目标,但是要将多个目标分析下的复杂关系转换为多个两两目标进行分析。即我们常说的将一个N维问题转换为多个二维问题进行分析。在转换为二维目标后,由于两个目标可以变动,那么就不是传统情况单目标决策下的唯一解,在这个时候自然就涉及到进行系统模拟得出多组可选择的解决方案在进行决策。这也是为何谈到系统思考的时候会和动态模拟发生关系的原因。还是拿刚才的项目管理来举例,如果当前是质量和成本两个维度的目标决策。即可能得出如下模拟结果:
得出这些模拟结果后,剩下的工作就简单了,接根据目标本身容忍度的范围和子目标的重要性来选择一个最佳的方案。这个方案往往就是对多个子目标都存在变动范围下的最好平衡。这种子因素的平衡即使全局思考,我们在思考中也经常无意识的在用,只是在这里把它以一种定性+定量方式再阐述出来。
当然不仅仅是在多目标下需要用到模拟,对于单目标也经常用到模拟,即当你面对的不是二元决策,而是一个幅度决策的时候。简单决策是否涨价可能不需要模拟这么复杂,但是当你决策究竟涨价幅度为多少的时候,往往则需要通过已有的数据积累去模拟。
让我们从一个小例子来分析如何找到思维之核心步骤和模式。 例子:张三开了一家小餐馆,最近原材料涨价成本压力很大,准备对原材料进行涨价。关于是否涨价和涨价多少的问题等了很多员工的激烈讨论和回复,具体如下。
甲:不应该涨价吧,由于其它餐馆涨价我们生意不原来好了很多,薄利多销也是一样的。 乙:我们餐馆只有这么大忙不过来,餐馆规模又无法扩大,涨价不会影响到顾客数。 丙:我这一带人群生活指数都挺高的,涨一点价大家都能够接受,最重要的还是服务和产品卫生质量有所提高。 丁:涨多了顾客肯定会减少,涨少了我们的成本又增加,这个应该要平衡好。 戊:涨价了顾客开始会减少,当大家认同了我们的产品和服务后,相信顾客量会提高。 己:还是不涨价好,这次其它餐馆涨价,如果我们不涨价更容易赢取顾客,为餐馆后续扩张做准备。 庚:我们原材料采购价格上涨了20%,因此我们菜品应该也上涨20%。 辛:涨价多少不应该按一个规则,我绝对应该根据菜品的历史销量和菜品价格来制定差异化涨价策略。原来50块的菜涨价20%到60块顾客会感觉涨了很多,当时10块的涨价到12块顾客往往并没有感觉。所以低价菜品涨价幅度应该高点。
但是在现实生活中,我们的思维活动往往并不会如此复杂,我们是凭借我们的经验,通过思维活动快速简单的制定了相关策略。头脑风暴和发散思维都是好事情,但是却容易让我们抓不住核心逻辑,导致无法解决关键问题。
对于以上思考,我们可以看下通过系统思考方法中的因果循环图描述如下:

结合上面的案例,我们来谈思维最核心的三个关键步骤:
1.确定目标
思维活动是为了解决问题,而问题是现实和期望之差距,期望即是我们的目标。确定目标包括了空间和时间两个方面的目标,也可以讲是从静态和动态两个方面的来看待目标。如上面的例子,我们空间目标是利润最大化,当时仅仅提出利润最大化这个目标是没有意义的,而应该在这个目标上增加时间,即是当年利润最大化,还是3年利润最大化。空间+时间将直接影响到后续的决策要素的值。
2.分解和关联
在这里我用分解这个词,当我们遇到的是一个问题群的时候,我们还可能涉及到分类的概念,当时当是特定问题的时候更重要的是分解。而分解的重点则是考虑清楚要达成目标,究竟存在哪些因素。比如上面的例子,价格,顾客生活指数,竞争对手,原材料成本,销售量等都是我们达成目标的影响因素。
分解的一个重要法则即《金字塔原理》里面提及到的MECE原则,当时该原则最大的问题就是没有谈分解后的要素之间的关联和依赖关系,即单独提升一个影响要素的时候会对其它要素造成消极影响。比如提升价格会对销售量带来消极影响等等。因此分解后有个重要工作是在分解完成后要继续分析要素之间的相互作用和影响,以去寻找一个达成目标的动态平衡点,即我们所说的系统思考之根本。
在分解过程中可以自顶向下,也可以通过头脑风暴后在从下向上进行归纳和整合,这两种方式都是可以的。而对于我们以前完全没有接触过的事物,我们更推荐采用流程分析方法,即我们说的思维中的动态要素,通过流程分析来找寻和全面识别影响要素,这是其目的,因此动态流程分析是为了静态分解服务的。
3.决策
决策分为了简单的二元决策,也存在复杂的定量决策,当时决策应该逐步走向结构化决策。在后面文章将对结构化决策进行详细的分析和讨论。对于简单二元决策,用常用的结构化决策方法,如层次分析法等即可以搞定;当时涉及到量的决策,如究竟应该涨价多少才合理,则涉及到我们定量分析的范畴,而定量分析和决策则涉及到计算机模拟和动力学模型辅助决策。
可以看到思维的核心步骤完全属于分析和解决问题的步骤,再加上前面的问题定义以及加上后面的解决方案的跟踪实施即是完整的分析和解决问题的方法。这也正是思维和问题之本质联系。
系统思维始终和动态过程是联系在一起的。系统动态学从整体的角度来看待事务,考虑系统中各个对象和因子间的相互影响和作用。当系统中各个因子间的相互作用力达到一致的时候,系统处于一种动态平衡的状态,当任何一个因子由于外界环境因素影响而改变都会打破这种平衡,动态的系统在这种平衡被打破后由会去不断的去调整各因子的值和相互作用,直到下一次动态平衡。 I Think,I see.对于基于这种思想的动态思维建模和模拟软件iThink能够为我们很好的将我们头脑里的想法用模型记录下来。我们相信直觉,直觉也经常帮助我们做出准确的判断,但对于多于复杂的多因素影响的系统直觉则往往是错误的。即使直觉正确也经常只能够告诉我们是或否,但具体的数量级的概率或精确点的数据则是无法得到的。经验或直觉在没有通过模型固化下来之前是没有很好的传递性和继承性的,只有通过模型将思维固化下来才能够形成相关的理论或方法。 对于软件团队中人员流动问题在《最后期限》一书中也专门进行了模型的模拟。在这里将根据自己的思路对该模型重新进行整理和建模。首先我们需要得到一个在人员不流动,其项目团队成员都是熟练员工的情况下的一个平衡模型。在这个平衡模型下堆积100个功能点的需求,每天流入新需求约5个功能点,项目团队成员 10人,每周工作40h,每小时的生产率为0.0125FPS/h,在这种情况下项目以迭代方式进行多版本发布,每个版本持续时间为8周,因此新提交的需求一般在2个月后就可以上线运行。在这种情况下我们得到一个平衡的模型,在这个模型模拟Running的过程中,堆积需求始终保持在100FPS.

对于每周40h是理想的情况,当需求积累过多而无法满足的时候往往需要员工加班来解决问题。我们任务加班80h是每周加班的极限时间,而具体的加班时间跟需求积累比率成正比。如果累积需求达到了200FPS,即比率为2时候,则需要加班到80h左右。因此可以利用iThink的图形建模功能得到一个加班时间与需求累积率的函数。 假设人员流失为每季度即12周流失一名成员,对于项目成员流失的时候一般提前4周进行资源的提前补充。因此对于人员流入和人员流出都为阶段点的非连续型数据。在老员工离职后新员工的技能提升是一个长期的过程,新员工要达到老员工的生产率水平一般需要2年的时间,但经过1年的时间基本可以达到7成水平,在这里新员工的技能水平提升符合学习曲线。 为了模拟较长的单位,将最小时间修改为1个月,同时对新员工的学习曲线修改为线性的方式。对于新员工增加后,需要占有老员工的培训时间,这里暂时将项目可用人数减少0.5进行处理。新员工刚进入时候的技能水平为0.4,以后每一个月后增加0.025,则两年后达到熟练员工的水平。由于需求积累超过限度后引起的加班,赞时不考虑加班过长对人员效率人员流水的影响。对于员工离职,模型假设新员工可以提前一个月入职接手相关工作。

在这种情况下进行模拟后发现最终的生产率水平保持在原有生产率的70-80%左右,而且由于生产率下降引起的需求积累,导致加班增加,加班曲线呈现持续增长状态,显然这并不是一个能够平衡的动态模型。为了减少加班情况,在第一年末在模型中新投入一名不需要培训的熟练员工。加班曲线可以降低下来到46h左右。

1. 对于需求流入率稳定的情况下:当新员工学习周期大于员工离职周期的时候,会出现加班不断增加的恶性循环,生产率无法回答原有水平。在这种情况下削减需求也很难解决问题。而更需要的是人员的提前储备,而且需要按照2-3倍的量进行人员的储备。或者提高待遇和进行团队建设降低老员工的流失率。 2.当新员工学习周期和老员工离职周期基本匹配的时候,项目生产率维持在8成左右的水平,为了完成项目相关任务,平均加班在45-50h左右,但不会出现加班时间持续增加的情况,在这种情况下是一种动态的平衡,但项目成员长期处于忙碌状态可能会对流失率造成新的影响。 3.当新员工学习周期小于老员工离职周期时候,项目处于一种良性的可接受状态。在员工离职和新员工刚进入时候加班较多。而随着新员工技能的逐渐提高,一周工作时间可以逐渐恢复到40-45h小时左右的水平。项目有张有弛,容易形成稳定团队。 对于加班后对流失率和生产率的影响,对团队效率的影响在后续学习中将进一步模拟。
大家可以自己试下,如果我们没有提前做相关的提示语设计,直接出一个问题让AI帮我们出一个系统思维和系统思考里面经常用到的系统因果循环图,实际AI很难输出我们满意的结果。
那么在AI辅助下我们应该如何来做这个事情?
首先我们应该有一套系统动力学因果循环图SVG图的提示语模板。这个模板当然页借助AI辅助来完成。即首先让AI输出如果我希望画这种类型的图,那么这种图有哪些核心要素和内容。然后AI会输出绘图的核心要素内容。最后再让AI帮我们将其转换为绘制SVG图的完整提示语模板。
这个基本就完成了第一个步骤。
那么接着是否能够简单的提出系统思考类问题就让AI输出符合我们期望的构图呢?实际在个人试验中发现,里面还是少了关键的一个步骤。就是类似图的绘制,我们让人要人工拆解步骤。
就是首先拿到问题后,我们应该让AI先生成问题的系统思维报告,里面就是要参考系统思考的方式找到核心的正负循环,关键路径, 杠杆点,只有把这个梳理清楚了绘制图才可能清楚。
第一次出图如下,实际没有太满足我期望。

因此我做出第二次优化要求:
我希望正向反馈循环和负向反馈循环最终体现都是都是类似圆形或椭圆形。对于R2循环要减少和合并因素,现在因素点太多了。注意兼职时间投入和业务时间投入确实是一对制约因素。而我决策考虑的关键是当前某个时间周期节点收入总和,这个总和本身是由短期收入+长期收入构成的,决策临界点应该体现在这里。请基于上面要求修改svg图。
AI在基于我优化要求修改后图如下:

以上即关于系统思维方面的一些思考,供参考。