[read]系统之美


=Start=

缘由:

整理总结一下最近看的《系统之美》这本书,收获不少,但还需不断重读、思考、实践。

正文:

参考解答:

前言

  • 管理者所遇到的问题通常都不是彼此孤立的,而是相互影响、动态变化的,尤其是在由一系列复杂系统构成的动态情境之中。在这种情况下,管理者不能只是解决问题,而应善于管理混乱的局势。
  • 只要懂得系统原理,就可以在恰当的地方施加干预措施,从而获得期望的转变。
  • 不能只通过了解系统的各个构成部分来认识系统整体的行为。
第一部分 系统的结构和行为
第1章 系统之基础
  • 总体大于部分之和
    • 对于一个系统来说,整体大于部分之和。任何一个系统都包括三种构成要件:要素、连接、功能或目标。它具有适应性、动态性、目的性,并可以自组织、自我保护与演进。
  • 从关注要素到透视游戏规则
  • 理解系统行为的动态性
  • 反馈:系统是如何运作的
  • 自动洄游的鱼:调节回路
第2章 系统大观园
  • 单存量系统
    • 系统1.1:一个存量、两个相互制衡的调节回路的系统
  • 双存量系统
    • 实际会出现哪种结果,取决于两方面:第一,关键转折点是否被突破。一旦关键转折点被突破,资源的种群数量实现再生的能力就会被破坏;第二,在资源逐渐衰减的过程中,抑制投资增长的调节回路的力度。如果该调节回路可以在关键转折点到来之前,快速起作用,控制资本的增长,那么整个系统就能平滑地达到均衡状态;如果该回路速度比较慢,不足够有效,系统就会振荡;如果该回路非常弱,或者起作用的速度很慢,这样一来,即使资源已经降低到难以再生的水平,但资本仍在持续增长,最终的结果是,该资源和产业都将崩溃。
    • 对于所有复杂的系统来说,判断系统未来行为走势的诀窍在于,了解什么样的系统结构包含哪些可能的行为,以及什么状况或条件可以触发这些行为。换句话说,如有可能,我们可以调整系统结构和相关条件,从而减少破坏性行为发生的概率,增加有利行为出现的概率。
第二部分 系统思考与我们
第3章 系统之美:系统的3大特征
  • 适应力
    • 系统之所以会有适应力,是因为系统内部结构存在很多相互影响的反馈回路,正是这些回路相互支撑,即使在系统遭受巨大的扰动时,仍然能够以多种不同的方式使系统恢复至原有状态。
    • 适应力总是有限度的。有适应力的系统可能是经常动态变化的。相反,一直保持恒定的系统恰恰是不具备适应力的。
  • 自组织
    • 系统所具备的这种使其自身结构更为复杂化的能力,被称为“自组织”(self-organization)。
    • 尽管以法律和维持秩序的名义,自组织能被长期压制、残酷打压,但它不可能被彻底消灭,而会顽强地持续下去。
    • 科学本身也是一种自组织系统,它倾向于认为,这个纷繁复杂的大千世界,往往生成自一些简单的规则。当然,究竟是否如此,科学到现在为止仍然未能给出答案。
  • 层次性
    • 在新结构不断产生、复杂性逐渐增加的过程中,自组织系统经常生成一定的层级或层次性。
    • 生命起源于单细胞细菌,而不是一头大象。层次性原本的目的是帮助各个子系统更好地做好其工作,不幸的是,系统的层次越高或越低,越容易忘记这一目的。因此,很多系统因为层次的功能失调,而不能实现并预定的目标。
    • 要想让系统高效地运作,层次结构必须很好地平衡整体系统和各个子系统的福利、自由与责任。这意味着,既要有足够的中央控制,以有效地协调整体系统目标的实现,又要让各个子系统有足够的自主权,以维持子系统的活力、功能和自组织。
第4章 系统之奇:系统的6大障碍
  • 6大障碍:复杂表象、非线性世界、划分系统边界、看清各种限制因素、无所不在的时间延迟、有限理性。
  • 别被表象所迷惑
  • 在非线性的世界里,不要用线性的思维模式
  • 恰当地划定边界
  • 看清各种限制因素
  • 无所不在的时间延迟
  • 有限理性
第5章 系统之危与机:系统的8大陷阱与对策
第三部分 改变系统
第6章 系统之杠杆点:系统的12大变革方式
  • 复杂系统的特征之一是“违反直觉的”,而寻找和撬动杠杆点也通常不能靠直觉。
  • 复杂的系统就是复杂的系统,对其进行一般化的归纳是十分危险的。
  • 12. 数字:包括各种常数和参数
  • 11. 缓冲器:比流量力量更大、更稳定的存量
  • 10. 存量-流量结构:实体系统及其交叉节点
  • 9. 时间延迟:系统对变化做出反应的速度
  • 8. 调节回路:试图修正外界影响的反馈力量
  • 7. 增强回路:驱动收益增长的反馈力量
  • 6. 信息流:谁能获得信息的结构
  • 5. 系统规则:激励、惩罚和限制条件
  • 4. 自组织:系统结构增加、变化或进化的力量
  • 3. 目标:系统的目的或功能
  • 2. 社会范式:决定系统之所以为系统的心智模式
  • 1. 超越范式
第7章 与系统共舞:系统的15大生存法则
  • 跟上系统的节拍
  • 把你的心智模式展现在阳光下
  • 相信、尊重并分享信息
  • 谨慎地使用语言,并用系统的概念去丰富语言
  • 关注重要的,而不只是容易衡量的
  • 为反馈系统制定带有反馈功能的政策
  • 追求整体利益
  • 聆听系统的智慧
  • 界定系统的职责
  • 保持谦逊,做一名学习者
  • 庆祝复杂性
  • 扩展时间的范围
  • 打破各种清规戒律
  • 扩大关切的范围
  • 不要降低“善”的标准
附录
  • 系统术语表
  • 系统原理概要
  • 常见的系统陷阱(8个常见陷进)
  • 采取干预措施的杠杆点(12个杠杆点)
  • 系统世界生存法则(15个生存法则)
参考链接:

=END=


《 “[read]系统之美” 》 有 7 条评论

  1. 降低软件复杂性的一般原则和方法
    https://mp.weixin.qq.com/s/-Gu_XkY2bZq9Lf2ZCJZPtQ
    `
    本文是作者阅读John Ousterhout的《A Philosophy of Software Design》之后,结合自己的工作经验,对“降低复杂性”做了详细总结,希望给读者朋友们带来不一样的思路。

    一、前言
    本篇文章是围绕着“降低复杂性”这个主题展开的,很多重要的结论来源于John Ousterhout,笔者觉得很有共鸣,就做了一些相关话题的延伸、补充了一些实例。虽说是“一般原则”,也不意味着是绝对的真理,整理出来,只是为了引发大家对软件设计的思考。

    二、如何定义复杂性
    子模块的复杂度Cp是一个经验值,它关注几个现象:
    1.修改扩散,修改时有连锁反应。
    2.认知负担,开发人员需要多长时间来理解功能模块。
    3.不可知(Unknown Unknowns),开发人员在接到任务时,不知道从哪里入手。
    造成复杂的原因一般是代码依赖和晦涩(Obscurity)。其中,依赖是指某部分代码不能被独立地修改和理解,必定会牵涉到其他代码。代码晦涩,是指从代码中难以找到重要信息。

    三、解决复杂性的一般原则
    首先,互联网行业的软件系统,很难一开始就做出完美的设计,通过一个个功能模块衍生迭代,系统才会逐步成型。对于现存的系统,也很难通过一个大动作,一劳永逸地解决所有问题。系统设计是需要持续投入的工作,通过细节的积累,最终得到一个完善的系统。因此,好的设计是日拱一卒的结果,在日常工作中要重视设计和细节的改进。

    其次,专业化分工和代码复用促成了软件生产率的提升。比如硬件工程师、软件工程师(底层、应用、不同编程语言)可以在无需了解对方技术背景的情况下进行合作开发;同一领域服务可以支撑不同的上层应用逻辑等等。其背后的思想,无非是通过将系统分成若干个水平层、明确每一层的角色和分工,来降低单个层次的复杂性。同时,每个层次只要给相邻层提供一致的接口,可以用不同的方法实现,这就为软件重用提供了支持。分层是解决复杂性问题的重要原则。

    第三,与分层类似,分模块是从垂直方向来分解系统。分模块最常见的应用场景,是如今广泛流行的微服务。分模块降低了单模块的复杂性,但是也会引入新的复杂性,例如模块与模块的交互,后面的章节会讨论这个问题。这里,我们将第三个原则确定为分模块。

    最后,代码能够描述程序的工作流程和结果,却很难描述开发人员的思路,而注释和文档可以。此外,通过注释和文档,开发人员在不阅读实现代码的情况下,就可以理解程序的功能,注释间接促成了代码抽象。好的注释能够帮助解决软件复杂性问题,尤其是认知负担和不可知问题(Unknown Unknowns)。

    四、解决复杂性之日拱一卒
    4.1 拒绝战术编程
    4.2 设计两次

    五、解决复杂性之分层
    5.1 层次和抽象
    5.2 复杂性下沉
    5.3 异常处理

    六、解决复杂性之分模块
    6.1 深模块和浅模块
    6.2 通用和专用
    6.3 信息隐藏
    6.4 拆分和合并

    七、解决复杂性之注释
    7.1 注释的误区
    7.2 使用注释提升系统可维护性
    7.3 使用注释改善系统设计

    八、后记
    John Ousterhout累计写过25万行代码,是3个操作系统的重要贡献者,这些原则可以视为作者编程经验的总结。有经验的工程师看到这些观点会有共鸣,一些著作如《代码大全》、《领域驱动设计》也会有类似的观点。所以本文中提到的原则和方法具有一定实操和指导价值。对于很难有定论的问题,也可以在实践中去探索。

    关于原则和方法论,既不必刻意拔高,也不要嗤之以鼻。指导实践的不是更多的实践,而是实践后的总结和思考。应用原则和方法论实质是借鉴已有的经验,可以减少我们自行摸索的时间。探索新的方法可以帮助我们适应新的场景,但是新方法本身需要经过时间检验。
    `

  2. OD必读书|《系统之美》精读笔记(一):了解系统
    https://mp.weixin.qq.com/s/S36WUtI6pgks1WkjI3Zftg

    OD必读书|《系统之美》精读笔记(二):系统的特征及障碍
    https://mp.weixin.qq.com/s/gztIV04Agk4riUTEz9v4pg

    OD必读书|《系统之美》精读笔记(三):系统的8大陷阱与对策
    https://mp.weixin.qq.com/s/f61kDCOzouDCddkvEzcQMQ

    OD必读书|《系统之美》精读笔记(四):系统的12大变革方式
    https://mp.weixin.qq.com/s/x-3PfxHwMTcBZQVY3W5-3w

    OD必读书|《系统之美》精读笔记(五):系统的15大生存法则
    https://mp.weixin.qq.com/s/iwH13ncWQ4pvxss4mOt_zA

  3. 1.《系统之美》10000字思考笔记,遇见新世界(一)
    https://mp.weixin.qq.com/s/To_wsGC5B1AzqMq814FyDQ

    2.《系统之美》10000字思考笔记,遇见新世界(二)
    https://mp.weixin.qq.com/s/DRSywIF9R7npC9QW1oFOsg

    3.《系统之美》10000字思考笔记,遇见新世界(三)
    https://mp.weixin.qq.com/s/-esw_tNCVPoEnquEZmBlag

    4.《系统之美》10000字思考笔记,遇见新世界(四)
    https://mp.weixin.qq.com/s/vlMu6Fge2sLE-ts9xNyH8Q

  4. 解决复杂问题时,深思熟虑未必管用
    https://mp.weixin.qq.com/s/f8OIp2UsZKXQeSoQ9Bp6GQ
    `
    人们经常发现,做出最佳决策的时机往往并不是主动做决策的时刻。相反,这些瞬间通常发生在洗澡或者锻炼的时候。因为出乎意料的解决方法通常在我们放松的状态下出现,叫做“产生灵感的瞬间”。有时候,这些突如其来的想法是解决复杂问题的唯一办法,如果你有意识地进行思考,反而可能无法得出结论。

    灵光乍现并非看起来那么偶然,而是能够在特定条件下被捕捉到的。数年来,我们一直在关注一项研究,提出了获得更多灵感的“四步法”。其中的每一步,都能帮助你意识到大脑中新的活动,而那些富有创造力的时刻正是来源于此。

    # 注意安静的信号
    不管你有多忙,尽最大的努力在会议间隙放松一下,给自己留一段独处的时间。你可以找一间空会议室,或者离开自己的办公室到外面走走。(科学家发现,散步很有可能给你带来下一个灵感。)

    # 看清事物的本质
    为了营造最好的“白日梦”氛围,永远不要将你的日程排得满满当当。相反,你应该有规律地安排一些的“停工期”——即使是很短的间隙,也能产生极大的影响。
    你可以试着每天将你的电子设备关闭几个小时——如果可能的话,你也可以每周关闭几天。这样,你的意识就能自由地神游,你的大脑也就不会错过任何灵光一现的时刻。

    # 保持积极的状态
    如果你在进行一个复杂的决策时感到脾气暴躁,那么就应该做些其他事情来释放你的情绪。跟好友聊聊天,去外面吃顿饭,或者读一本书……这些都能带来你急需的突破性进展。
    近期的研究也表明,小睡是一个缓解挫折感的好方法。因此,可以日常小睡片刻,以维持最好的状态——睡醒之后,你忙碌的大脑可能会催生出一个完美的解决办法来向你致谢。

    # 避开深思熟虑
    记住,在任何决策过程中你都应该稍稍休息一下。并且,当你在休息时,一定要将思维专注在其他事情上。
    运动是一种万无一失的休息方式,它能让你的大脑得到充分的休息,所以,就像安排公司会议一样,你可以将每天的锻炼时间也放到日程规划中去。

    简而言之,任何能帮助你注意到大脑中安静的信号——也被称为“弱活动”——的事情,都能增加你产生灵感的可能性。
    通过训练自己:1.为宁静留出空间;2.保持内在专注;3.采取积极办法;4.不要太过主动,我们能在每一天的生活中收获更多灵感。
    更多的灵感与洞见,意味着更快地解决复杂问题,无论这个问题是进行营销活动、解决客户挑战,还是改变世界,我们都将从中获益。
    `

  5. 如何从容应对复杂性
    https://mp.weixin.qq.com/s/FlBRFQjErM7fUdh9wH_pUA
    `
    软件的复杂性,是一个很泛的概念。
    但是一直都是开发过程中的一个难题,本文旨在探讨如何去从容应对复杂性。

    01-软件的熵增、构造定律

    熵的概念最早起源于物理学,热力学第二定律(又称“熵增定律”),表明了在自然过程中,一个孤立的系统总是从最初的集中、有序的排列状态,趋向于分散、混乱和无序;当熵达到最大时,系统就会处于一种静寂状态。
    软件系统亦是如此, 在软件系统的维护过程中。软件的生命力会从最初的集中、有序的排列状态,逐步趋向复杂、无序状态,直到软件不可维护而被迫下线或重构。

    自然界是如何应对这复杂性?
    这在物理中被称为构造定律 (Constructal Law), 是由Adrian Bejan于1995提出的:
    For a finite-size system to persist in time (to live), it must evolve in such a way that it provides easier access to the imposed currents that flow through it.
    对于一个有限大小的持续活动的系统,它必须以这种方式发展演进:它提供了一种在自身元素之间更容易访问的流动方式。

    02-如何应对软件系统的复杂性?
    Ousterhout教授在《软件设计的哲学》书中提到:软件设计的最大目标,就是降低复杂度(complexity)。
    就是设计符合业务的构造定律的演进方式,一种可以以最小的开发维护成本, 使业务更快更好的流动发展的方式。

    03-软件复杂性来自哪里, 如何解决?

    # 不确定性的来源
    1、业务的不确定性
    2、技术的不确定性
    3、人员流动的不确定性

    # 如何面对不确定性

    面对外部的确定性,转化为内核的确定性。
    面对外部的不确定性,找到稳定的内核基础。

    1、专注问题域
    Robert C. Martin提到的BDUF,永远不要想着在开始就设计好了全部的事情(big design up front),一定要避免过度设计。除非能够十分确认的可预见变化,业务边界,否则专注解决当前1-2年内业务变化设计, 讲好当下的用户故事,专注解决眼前的问题域。 面向不确定设计,增量敏捷开发。

    2、确认稳定的系统内核
    随着业务的变化、系统设计也要持续演进升级。没有一开始就完美的架构,好的架构设计一定演化来的,不是一开始就设计出来的。
    一个健康公司的成长,业务横向、纵向会发展的会越来越复杂,支持业务的系统也一定会越来越复杂。
    系统演进过程中的成本,会受到最开始的设计、系统最初的内核影响的。面对外部业务的不确定性,技术的不确定性,外部依赖的不确定性。一个稳定的内核应该尽量把外部的不确定性隔离。

    # 如何面对规模膨胀带来的复杂性

    1、业务隔离, 分而治之
    2、专注产品核心竞争力的发展
    3、场景分层

    # 认知成本

    是指开发人员需要多少知识才能完成一项任务。
    在引入新的变化时,要考虑到带来的好处是否大于系统认知成本的提升,比如:之前提到的BPM流程编排引擎,如果对系统带来的好处不够多也是增加认知成本的一种。
    不合适的设计模式也是增加认知成本的一种,前台同学吐槽的中台架构比较高的学习成本, 也是认知成本的一种。

    # 如何降低认知成本
    1、系统与现实业务更自然真实的映射,对业务抽象建模
    软件工程师实际上只在做一件事情,即把现实中的问题搬到计算机上,通过信息化提升生产力。
    2、代码的含义清晰,不模糊
    3、代码的整洁度
    4、系统的有序性, 架构清晰
    5、避免过度设计
    6、减少复杂、重复概念, 降低学习成本
    7、谨慎引入会带来系统复杂性的变化

    04-应对复杂性的利器

    领域驱动设计——DDD
    1、对通用语言的提炼和推广
    2、贫血模型和充血模型

    * 贫血模型是事务脚本模式
    贫血模型相对简单,模型上只有数据没有行为,业务逻辑由xxxService、xxxManger等类来承载,相对来说比较直接,针对简单的业务,贫血模型可以快速的完成交付,但后期的维护成本比较高,很容易变成我们所说的面条代码。

    * 充血模型是领域模型模式
    充血模型的实现相对比较复杂,但所有逻辑都由各自的类来负责,职责比较清晰,方便后期的迭代与维护。
    面向对象设计主张将数据和行为绑定在一起也就是充血模型,而贫血领域模型则更像是一种面向过程设计,很多人认为这些贫血领域对象是真正的对象,从而彻底误解了面向对象设计的涵义。

    3、对业务的理解和抽象
    4、结构与防腐层
    5、让隐性概念显性化

    简单设计原则——《Clean Code》
    1、保持系统最大可测试
    2、避免重复
    3、更清晰的表达开发者的意图
    4、尽可能减少类和方法
    `

  6. 《系统思维的艺术》(The Art of Thinking in Systems: Improve Your Logic, Think More Critically, and Use Proven Systems to Solve Your Problems – Strategic Planning for Everyday Life)
    https://index.pmthinking.com/The-Art-of-Thinking-in-Systems-Improve-Your-Logic-Think-More-Critically-and-Use-Proven-Systems-to-6e6ebc0d1caa49b583a79430abf6f233
    `
    第一讲:线性思维和系统思维
    抓住反馈回路,你就抓住了解决系统问题的关键。

    第二讲:坏政策和好政策
    要想改变一个系统,可以有上中下三种政策 ——
    * 下策是直接命令。想要什么就直接要,反对什么就直接禁止。
    * 中策是间接刺激。找到系统中的一个平衡反馈回路,让回路松弛一下。
    * 上策是寻求一个新的共识。在这个新的共识上,把全社会团结起来去做一件事。

    第三讲:负反馈和正能量
    1. 平衡回路的作用是把当前系统的表现和系统的目标进行比较,一旦发现其中有差距就采取行动;
    2. 因为坏消息和好消息的不对称,各种意外会使得我们对系统的印象,比系统的真实情况更差;
    3. 更差的印象会降低我们心目中的系统目标,降低了的目标会让平衡回路的工作变得无效,结果就是恶性循环,系统逐渐走向衰败。
    你的系统没有你想的那么差。所以该吃药得按时吃药啊!别忘了,一匹正在倒下的骆驼会吸引很多把刀。

    第四讲:好系统的三个特征
    好系统首先要不怕打击;为了不怕打击,系统就要自己更新自己学习,这就要求自组织能力;为了更好地实现自组织,协调好自组织和大系统的关系,就要有健康的层级结构。有了稳定的层级结构之后,系统的抗打击能力又会进一步增强。
    这样的系统充满活力,能适应各种新局面。它会变得越来越复杂,越来越强大。
    咱们今天说的似乎都是企业和国家这样的大系统,但是这三条对个人的学习和发展系统也很重要 ——
    * 想要有**抗打击能力**,你就不能依赖单一的技能,不能指望一成不变的稳定工作,要建设好自己的负反馈回路。
    * 想要发展创新,你就得有**自组织能力**,你要不断探索新事物,尝试新做法。
    * 想要做大做强,你就不能事无巨细全靠自己,你要善于利用现有的工具,善于跟别人模块化地对接和合作。
    死气沉沉、整齐划一、令行禁止,那不叫好系统。活力、自由、赋能,这才叫好系统。

    有关系统思维我们暂时就讲到这里。系统论说起来并不难,真正用好可不容易,我们讲的这些可以说都是纸上谈兵。但是只要你脑子里有了这根弦,以后看问题,必然就多了一个角度!
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注