程序员的思维模型指南
前言
人与人之间最大的差异是认知差异,而认知源于思维方式。相同的人,不同的思维方式能塑造出完全不同的情绪、行为和选择,所以十分有必要了解优秀的思维的运作方式,并以此指导我们的生活、学习和工作。
本文对心理学、数学、工程学、生物学、物理学、化学、统计学、经济学、管理学、计算机软件学等学科的思维模型定义或要素做了总结、梳理,并列举了跨学科的应用案例,特别是在计算机软件学科上的案例。希望对程序员群体能有所启发和帮助。
学科
心理学
逆向思维
-
模型定义或要素
把问题反过来想,就是说要解出来x,得先研究如何能得到非x
-
跨学科应用案例
对于复杂适应系统以及大脑自己,如果采用逆向思考,问题往往会变得更容易解决。
- 五年后蓝图是什么?这个问题不好回答,我们逆向转化为:五年前的蓝图是什么,相对比较好回答了。
- 如果你想要帮助中国,你应该考虑的问题不是“我要怎样才能帮助中国”,相反地,你们应该问“我要怎样才能损害中国”。
- 数学中的“反证法”。如证明是否存在一个最大的质数。可以先假设存在,再在假设基础上,找到个比它更大的质数。以之反证。
人类误判心理学
-
模型定义或要素
情感倾向往往受基因控制,具有动物性,而非理性,从而导致大量认知错误。这些情感倾向包括喜欢、讨厌、生气、怀疑、认同、回馈等。典型的认知偏差如受简单联想影响的倾向、被剥夺反应倾向、获得性偏差、确认偏差、霍桑效应、旁观者效应(责任分散效应) 、曝光效应等等。
-
跨学科应用案例
- 确认偏差在教练、PK中的应用:通过提问引导对方自己说出答案,对方对答案就有较高的接受度。
- 霍桑效应在下级管理中的应用:管理者只需要表现出关注一个人的任务时,这个人的工作效率就会有很大概率的提高。
- 曝光效应在上级管理中的应用:只需要多在上级面前多刷存在感,就能建立好感。
- 受简单联想影响的倾向在引导中的应用:让A、B两件不相干的事情先后发生,通过获得期望结果B,让被引导者更容易认可接受A。
- 如何让老X机赚更多的钱?提高近似中奖的概率,使玩家产生被剥夺的心理误判,引导其持续下注。
- 获得性偏差指人们对一个事物判断失误往往不是因为他什么都不知道,而是因为把注意力太多都放在了已经拥有的部分。
例如飞回来的飞机,专家认为翅膀中弹最多,所以需要加固翅膀。这就是一种获得性偏差。恰恰相反,最需要加固的反而是中弹最少的地方。
峰值尾值理论
-
模型定义或要素
峰值、尾值
-
跨学科应用案例
- 在写作上的应用:龙头、猪肚、凤尾
- 在人际关系上的应用:在请别人吃饭的时候,李嘉诚总是提前到酒店的电梯口等客人到来;宴请结束时,李嘉诚还会和大家一一握手告别,包括服务人员,并且送大家到电梯口,直到电梯关上才离开。
- 在客户关系上的应用:海底捞的拉面表演,形式新颖,让人眼前一亮。
破窗效应
-
模型定义或要素
环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉。
-
跨学科应用案例
- 软件开发中的“坏味道”的代码是破窗。
蜥蜴逻辑
-
模型定义或要素
下意识表现出来的情感往往是非理性的,会导致错误判断。
-
跨学科应用案例
- 战斗、逃跑或恐惧,立刻行动,领头意识等等。
多感官反馈
-
模型定义或要素
视觉、听觉、触觉、味觉、嗅觉
-
跨学科应用案例
- 高效阅读中,有一个提高阅读速读的技巧就是“指读法”,通过手指的快速移动,消除眼睛的回读效应。
异类联想
-
模型定义或要素
让知识建立连接,把一个领域经验用到另一个领域中。
-
跨学科应用案例
- 把人的大脑类比为计算机,就会得出很多有趣的发现:大脑是双CPU共享总线,左右脑有总线竞争,所以让左脑释放总线,右脑才能发挥作用;记忆是DRAM,保持数据就要定时刷新(反复记忆) 。
- 软件开发模式 类比 乐高积木。那么在搭乐高时总结的技巧是否可以应用在软件开发上?
墨菲定律
-
模型定义或要素
如果事情可能出错,它就会出错。
-
跨学科应用案例
- 在设计系统时,应该多考虑 墨菲定律:
任何事物都没有表面看起来那么简单。
所有的事都会比你预计的时间长。
可能出错的事总会出错。
如果你担心某种情况发生,那么他就更有可能发生。 - 防御性编程、版本控制、TDD、等等,这些都是针对这一定律的防御性实践。
- 在设计系统时,应该多考虑 墨菲定律:
数学
定义式思维
-
模型定义或要素
定义的过程,本质上是在回答一个事物是什么、不是什么的过程,是建立事物的边界、锁定事物本质特征的过程。
-
跨学科应用案例
- 讨论问题时,可以这么问:“你说的XX的定义是?”,“给我一个主语”,“给我一个宾语”,“你说的‘他们’指谁?”
- 你的灯亮着吗?解决问题的关键点,是把问题定义清楚,如问题是什么?问题该由谁解决?问题来自哪里?问题真的需要解决吗?
归纳与类比(分类与变换)
-
模型定义或要素
归纳、类比
-
跨学科应用案例
- 操作系统类比团队管理,那么团队管理可以从操作系统中的通信机制、进程管理、内存管理等策略中借鉴些什么?反之呢?
- 从TCP通信看如何有效沟通。TCP断链的四次握手,收到请求时回复一次,完成任务后再回复一次。
- 水波通过水的微粒运动传播,声波通过空气振动传播,那光应该也是通过某种物质来传播。
- 作为三维空间的人,观察四维空间很抽象,但想象二维空间的纸片人观察三维空间而得出的现象则简单的多。这些结论有助于归纳推理人们观察到的四维空间现象。
幂次法则
-
模型定义或要素
非线性、重复
-
跨学科应用案例
复杂系统往往符合幂次法则。
- 持续重复一个事情最终能带来非线性的变化,如对一项技能的刻意练习;一个人事业的发展;个人财富的积累等
正交性
-
模型定义或要素
用向量术语说,两条直线互不依赖。
-
跨学科应用案例
- 软件设计的正交性。在计算机技术中,正交性用于表示某种不相依赖性或是解耦性。如果两个或更多事物中的一个发生变化,不会影响其他事物。
- 项目团队划分的正交性。如果团队的组织有许多重叠,哪个成员就会对责任感感到困惑。
- 排列组合划分要素的正交性。
排列组合原理
-
模型定义或要素
先选元素(组合),后排列,按元素的性质进行“分类”和按事件的过程“分步”,始终是处理排列、组合问题的基本原理和方法,通过解题训练要注意积累和掌握分类和分步的基本技能,保证每步独立,达到分类标准明确,分步层次清楚,不重不漏。
-
跨学科应用案例
- 通过排列组合对问题进行全面分析。如
在投资学中,股票内容与价位的排列组合4象限分析方法。
在人的管理中,意愿和能力的排列组合4象限分析方法。
在时间管理中,紧急和重要的排列组合4象限分析方法。
在思考方法上,按现实/理论,过去/未来的排列组合划分出的系统性思考框架:数据-分析-方向-下一步。 - 通过排列组合进行创新。如电视+电话组合出来了新的产品可视电话、自行车+移动支付组合出来了共享单车、汽车+电池组合出来电动汽车等等。
- 通过排列组合对问题进行全面分析。如
决策树理论
-
模型定义或要素
在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。
-
跨学科应用案例
- 用决策树决策是否投资房产。
- 用决策树决策是否投资学习一个新技能,如Java。
工程学
控制论
-
模型定义或要素
对设定的目标,通过多次输入和输出,反馈调节,最终达成目标的方法。
-
跨学科应用案例
- 敏捷软件开发提倡小步快跑、收集反馈、快速迭代,就是对控制论思维最好的应用。
- 用控制论提高学习效率。看了再多书,本质上只是输入,没有产生价值。你需要输出来产生价值,输出可以是书写、教会别人、应用等;并在输出过程中,找到知识盲区,纠正错误的观点。
- 费曼学习法。
- 系统思考。系统思考语言有三个基本元件:不断增强的反馈,反复调节的反馈,时间延滞。
质量控制理论
-
模型定义或要素
质量控制是为了通过监视质量形成过程,消除质量环上所有阶段引起不合格或不满意效果的因素。以达到质量要求,获取经济效益,而采用的各种质量作业技术和活动。
-
跨学科应用案例
- DevOps敏捷工具链平台就是质量控制思维的一种体现。
冗余备份
-
模型定义或要素
为达成目标多准备一份或多份可以实现同一功能的系统,以备不时之需,减少失败的可能性。
-
跨学科应用案例
- 汽车后备箱的备用轮胎,就是一种冗余备份思维的体现。
- 从冗余备份思维看,为个人财务增加冗余,就显得十分重要。
- 关键系统部件,往往采用硬件冗余备份来提高系统可靠性,如核心路由器的双主控系统。
生物学
生命周期
-
模型定义或要素
万物皆有生命周期。
-
跨学科应用案例
-
从生命周期看软件架构,软件架构的拆分就是对生命周期的拆分。
a. 根据要解决的问题,确定问题的主题,界定目标的边界。
b. 切分目标的生命周期,区别核心与非核心生命周期。将非核心生命周期独立起来,使之并行起来,缩短整个生命周期的执行时间。
c. 对切分后的部分,确定各自的生命周期和主体,以及负责的角色。
d. 在拆分后的生命周期之间建立沟通机制。让非核心生命周期可以围绕核心生命周期形成树状结构,提供其需要的服务。
-
每个行业/技术生命周期都包括:出现期、迅速增长期、缓慢增长期、成熟期 和衰退期。
-
生态系统
-
模型定义或要素
生态循环、多样性、环境
-
跨学科应用案例
- 任务事物都不是孤立的,都是生态系统的一部分。分析一件事物时,不要孤立地分析个体,而要找到它的生态循环系统,并从生态系统的内、外部2个视角进行分析。如软件工程中做需求分析、总体方案设计时,先画出其所属系统,确定其在系统中的位置、关系和边界,并分别进行分析。
- 多样性能有效激活系统的正向循环。研发团队作为一个生态系统考虑的话,它的多样性是否足够?
- 动物在合适生长的地方能够繁衍,同样地,那些在商业世界中专注于某个领域的人,往往能够得到他们无法以其他方式获得的良好经济回报。
物理学
熵增定律(热力学第二定律)
-
模型定义或要素
随时间进行,一个孤立体系中的熵不会减小。
-
跨学科应用案例
- 封闭系统必然走向混乱,个人和组织的成长必需保持开放,引入外力。
- 技术人员写博客是一个反熵增行为,因为博客是一个开放、资源交换的窗口。
- 软件的熵。当软件中的无序增长时,我们称之为“软件腐烂”。
万有引力定律
-
模型定义或要素
任意两个质点有通过连心线方向上的力相互吸引。该引力大小与它们质量的乘积成正比与它们距离的平方成反比,与两物体的化学组成和其间介质种类无关。
-
跨学科应用案例
- 在人际关系管理中的应用,能力是“质量”,沟通频次是“距离”,所以自身能力却大,沟通频次(如刷脸)越多,对对方的吸引力越大。
临界点思维
-
模型定义或要素
临界点模型是高度非线性的,系统在某个点被“引爆”产生突变,一个很小的改变就会产生巨大的影响。
-
跨学科应用案例
- 微小问题如果不加以干预,随着持续积累,最终会发生质变,变成无法控制的大问题。
半衰期
-
模型定义或要素
放射性元素的原子核有半数发生衰变所需的时间。
-
跨学科应用案例
- 知识的“半衰期”。应该把更多的精力花在半衰期长的知识学习上。如果知识的半衰期为 5 年,那么一个工程师或 IT 从业者算下来一周要花费 10 个小时的时间充电学习,才能不掉队。
海森堡测不准定律
-
模型定义或要素
一个微观粒子的某些物理量(如位置和动量,或方位角与动量矩,还有时间和能量等),不可能同时具有确定的数值,其中一个量越确定,另一个量的不确定程度就越大。
-
跨学科应用案例
- “海森堡虫子”。软件bug定位过程,调试手段改变了被调试系统的行为。
- 软件架构设计中,如果设计时候架构不够内聚单一,可理解性就不是很强,而是单单靠功能测试来验证架构的正确性,就会出现海森堡的测不准原理带来的问题,即潜在问题无法预知。
杠杆原理
-
模型定义或要素
要使杠杆平衡,作用在杠杆上的两个力(动力和阻力)的大小跟它们的力臂成反比。
-
跨学科应用案例
- 研发管理中,要花更多的精力在团队的前10%成员上,并且利用杠杆原理,让这些带头人影响身边的团队成员,撬动整个团队的氛围。
- 系统思考基本模式中的杠杆解。1.成长上限。包含成长或改善的增强环路,运作一段时间之后,碰上一个抑制成长的调节环路,改善变慢或最终终止。杠杆解:去除限制因素。2.舍本逐末。包含两个调节环路,其中一个代表见效快的症状解,另一个代表常常包含延迟根本解。依赖症状解会削弱根本解,并且形成一个副作用的增强环路,导致恶性循环。杠杆解:加强根本解。
- 金融杠杆原理。
化学
实验思维
-
模型定义或要素
本质是观察与归纳:实验-->观察-->发现、推断与总结
-
跨学科应用案例
- 在系统设计阶段,对不确定技术方案或技术选型进行快速穿刺验证。
- 软件故障定位时,对多个怀疑点进行实验,并对实验结果进行分析、推断和总结。
催化效应
-
模型定义或要素
催化即通过催化剂改变反应所需的活化自由能,改变反应物的化学反应速率,反应前后催化剂的量和质均不发生改变的反应。
-
跨学科应用案例
- “石头汤”的故事,寻找合理的“石头”,设法催生变化。
统计学
随机性
-
模型定义或要素
世界的大部分都是由随机的、非连续的、无序的事件构成的。
-
跨学科应用案例
- 情绪管理中应用随机性思维,避免归因偏差。如在工作中和同事因为某个技术问题产生辩论。但在很多时候,一些不相关的人对你做出的刺激实际上并不值得你真的花精力去反馈,而大脑在这种时候往往远远没有你想象的那么聪明,它只会单纯的像只狗一样对每一个外来的刺激信号都发出原始的冲动反应。
正态分布
-
模型定义或要素
多个独立统计量的和的平均值,符合正态分布。
正态分布式熵最大的概率分布。
如果各种因素对结果的影响不是相加,而是相乘,那么最终结果不是正态分布,而是对数正态分布 -
跨学科应用案例
- 把一批数据是否能很好地拟合正态分布,作为判断该批数据是否同质或者真实的依据。
- 在不知道真实分布时,我们应该选择在给定的知识的限制下,选择熵最大的概率分布,即正态分布。
- 停车场找停车位,根据正态分布,在入口两端更容易找到空闲停车位。
- 很多事物都可以用正态分布曲线表示,或者辅助思考,比如,科技创新接受度,基本上就符合正态分布。
- 回归均值是最强大的力量之一。在经济学和政治领域,极端主义都无法长期生存。人们趋向于平均水平。各种竞争都会导致回归均值。
幂律分布
-
模型定义或要素
两个变量为幂函数的关系。
凡有生命的地方,有进化,有竞争的地方都会出现不同程度的无标度现象,即幂率分布。
个体间相互影响的临界状态,就很容易形成规模不定的连锁反应,进而在统计上形成幂律分布。 -
跨学科应用案例
- 微博上所有用户的粉丝数量符合幂律分布。
- 20%的人口拥有80%的财富,80%的利润来自20%的顾客。即二八法则。
- 在英语学习中应用幂律分布。2,000个最高频使用的控制词汇,使用频率为90%,掌握这2000个词汇,就能快速掌握英语。
经济学
复利(72法则)
-
模型定义或要素
FV = PV * (1+r) ^t,FV位将来值,PV为现在值、t为期数、r为每一期的利率。
-
跨学科应用案例
- 日拱一卒,功不唐捐。复利的人生的2个主要要素:r代表每日的质量、进步,要保证是正的,才有意义;t要大,要坚持5年,10年甚至20年。
- 用复利思维,设计自己的职业规划。
规模优势理论
-
模型定义或要素
扩大经营规模可以降低平均成本,从而提高利润水平。
-
跨学科应用案例
- 从电视广告中得到规模优势。从拥有了很高的知名度而获得规模优势。还可以从社会认同心理学获得规模优势。只有做到第一或者第二,才能形成规模优势。
劣币驱逐良币法则
-
模型定义或要素
两种实际价值不同而名义价值相同的货币同时流通时,实际价值较高的货币,即良币,必然退出流通--它们被收藏、熔化或被输出国外;实际价值较低的货币,即劣币,则充斥市场。
-
跨学科应用案例
- 技术平庸的资深员工会导致技术能力强的员工离职;
- 在追求异性上,优质或普通男性竞争不过劣质男性
二八定律(帕累托定律)
-
模型定义或要素
对于很多现象,80%的后果源于 20%的原因。
-
跨学科应用案例
- 80%的 bug 来自 20%的代码。
- 80%的代码是由 20%的员工完成的。
- 按事情的“重要程度”编排事务优先次序的准则是建立在“重要的少数与琐碎的多数”的原理的基础上。
- 产品追求小而美,在产品需求管理中应用二八定律:20%新增功能,80%优化现有功能
管理学
金字塔原理
-
模型定义或要素
金字塔原理的四个基本原则:结论先行、以上统下、归类分组和逻辑递进。
-
跨学科应用案例
- 故障分析文档可以采用“问题;结论;详细分析过程;”三段式结构;“问题;结论”部分要符合“背景-冲突-疑问-答案(SCQA)”结构,“详细分析过程”要符合“分组归纳,自上而下”的结构化思维,表达形式上可以采用表格、缩减等形式。
- 面对一个问题的时候,先不要马上进入细节,而要先思考框架,如果无法找到框架,列出所有信息,用自下而上提炼的方法找到框架;
情境领导
-
模型定义或要素
能力、意愿四象限
-
跨学科应用案例
- 对不同特征的下属采用不同的领导风格。
- 在复杂系统的管理中,首先找出正交的关键影响因子,按照因子的排列组合对系统分类、分析和制定不同的管理措施。
双目标清单/双轨分析
-
模型定义或要素
目标清单(即主要目标)vs.拒绝清单(即次要目标)
理性因素 vs. 潜意识因素 -
跨学科应用案例
- 理性地看,哪些因素真正控制了涉及的利益?其次,当大脑处于潜意识状态时,会自动形成哪些潜意识因素?这些潜意识是需要格外注意的。
三法则
-
模型定义或要素
人一般只能记住三条信息。
-
跨学科应用案例
- 当你试图说服一个比较资深的人去做某件事的时候,一定要给出三个原因。不是两个,也不是四个,要正正好好给出三个原因。
黄金圈法则
-
模型定义或要素
Why-What-How
-
跨学科应用案例
- 用黄金圈法则挖掘需求。如老太太买李子的故事。
PDCA
-
模型定义或要素
计划(Plan) 、执行(Do)、反馈(Check) 、改进(Action)
意义:每一项工作,都是一个pdca循环,都需要计划、实施、检查结果,并进一步进行改进,同时进入下一个循环,只有在日积月累的渐进改善中,才可能会有质的飞跃,才可能取得完善每一项工作,完善自己的人生。 -
跨学科应用案例
- 敏捷软件开发中的SCRUM四会(计划会、立会、展示会、反思会)就对应PDCA四个环节。
- 精益是在目前的基础的,不断的改善,不断的提升,逐步的完善,实际上就是PDCA循环。
DMAIC
-
模型定义或要素
定义Define、测量Measure、分析Analyze、改进Improve、控制Control
-
跨学科应用案例
- 可用于降成本、提效等过程改进。如降低外场单板硬件故障率;提高软件交付质量等等。
SMART
-
模型定义或要素
具体的(Specific)、可度量的(Measurable)、可实现的(Attainable)、相关性(Relevant)、时间可控的(Time-based)
意义:人们在制定工作目标或者任务目标时,考虑一下目标与计划是不是SMART化的。只有具备SMART化的计划才是具有良好可实施性的,也才能指导保证计划得以实现。 -
跨学科应用案例
- 制定改进措施要符合SMART原则;
- 制定OKR目标要符合SMART原则;
- 给下属安排任务要符合SMART原则;
5W2H
-
模型定义或要素
5W2H分析法是一个非常好的提问方法,通过一整套标准的流程对事情进行深入提问,快速理清任务要素。为什么(Why) ;做什么(What);何人做(Who);何时(When);何地(Where);如何(How);多少(How much)。
-
跨学科应用案例
- 故障分析定位时,用5W2H法快速收集信息:“什么时候(when)做了什么(what)操作触发故障的?为什么(why)做这个操作?故障在哪个环境的哪个单板上(where)?那些人(who)已经看过了,他们的定位结论是什么?这个故障如何(how)复现?这个故障之前出现过多少次(how much)?”
GROW
-
模型定义或要素
目标(Goal)、现状(Reality)、方案(Option)、意愿(Will)
-
跨学科应用案例
- 作为技术教练讨论技术方案时应用GROW模型:
G:你期待的具体目标是什么?
R:关于这个问题,之前你做过哪些尝试?
O:你还可以做哪些努力呢?
W:你可以总结一下我们刚刚交流的内容么?
- 作为技术教练讨论技术方案时应用GROW模型:
系统思考
-
模型定义或要素
系统循环图、正负反馈环
当环路上“O”(反向影响)的个数为偶数,该环路为增强环路;
当环路上“O”(反向影响)的个数为奇数,该环路为调节环路。 -
跨学科应用案例
- 可口可乐公司的节约水资源案例。
- 系统思考为什么⾃动化测试的推进步履维艰。
- 系统思考为什么敏捷推进困难重重。
紧急重要四象限
-
模型定义或要素
把事务按照重要程度和紧急程度划分为四个象限。
第一象限(重要而且紧急):立即去做。第一象限的事务越少越好。
第二象限(重要但不紧急):有计划去做。投入自己的时间和精力到第二象限中,做好计划,先紧后松。
第三象限(不重要但是紧急):尽量交给别人去做;如果无法交出,耗时短的马上处理掉;耗时长的可归类集中处理。
第四象限(不重要而且不紧急):尽量别去做,浪费生命。 -
跨学科应用案例
- 在需求管理时,按紧急重要四象限对需求优先级进行排序。
- 根据事务的紧急重要程度划分,选择IM、邮件、电话、面谈等不同的交流方式。
SWOT
-
模型定义或要素
Strengths:优势;Weaknesses:劣势;Opportunities:机会;Threats:威胁
意义:帮您清晰地把握全局,分析自己在资源方面的优势与劣势,把握环境提供的机会,防范可能存在的风险与威胁,对我们的成功有非常重要的意义。 -
跨学科应用案例
- 小孩升学择校时,使用SWOT分析决策。
- 技术选型决策时,使用SWOT分析决策。
价值链
- 模型定义或要素
企业的事业活动可以被整理成一个流程。对这个流程(价值链)的各个环节进行分析,找出其问题所在。
-
跨学科应用案例
- 分析定位疑难故障时,先梳理出故障所在的流程图,并对每个流程节点进行故障可能性分析。
- 软件架构设计时,从软件生命周期流程的各个环节来考虑其对架构的诉求。
5WHY
-
模型定义或要素
当你要解决一个复杂问题时,你可以先问自己“这个问题的本质是什么?” 然后再一层一层的问下去。
-
跨学科应用案例
- 用5why法对设备故障进行根因分析。
思维导图
-
模型定义或要素
一种利用图像式思考辅助工具来表达思维的工具。
-
跨学科应用案例
- 读书学习时,使用思维导图提炼、总结知识点。
- 用思维导图做会议纪要。
- 用思维导图做需求分析。
- 用思维导图做故障根因分析。
计算机软件学
计算思维
-
模型定义或要素
本质是抽象和自动化。即运用计算机科学的基础概念去求解问题、设计系统和理解人类行为。计算思维也是一种递归的思维。
-
跨学科应用案例
- 软件开发中遇到的所有问题,都可以通过增加一层抽象而得以解决。过程、对象、函数等都是抽象的有效手段。
- 图灵机本质上是递归;函数式编程范式本质上也是递归。
- 诺伊曼机的基本思想是运算和存储分离,这也是软件设计的基本思想:把抽象放进代码,把细节放进数据。
康威定律
-
模型定义或要素
组织沟通方式决定系统设计
-
跨学科应用案例
- 在架构设计划分系统时,应该多考虑 康威定律:
系统架构是公司组织架构的反映。
应该按照业务闭环进行系统拆分/组织架构划分,实现闭环/高内聚/低耦合,减少沟通成本。
如果沟通出现问题,那么应该考虑进行系统和组织架构的调整。
在合适时机进行系统拆分,不要一开始就把系统/服务拆的非常细,虽然闭环,但是每个人维护的系统多,维护成本高。
- 在架构设计划分系统时,应该多考虑 康威定律:
奥卡姆剃刀定律
-
模型定义或要素
如无必要,勿增实体,即简单有效原理
-
跨学科应用案例
- 在投资决策时使用奥卡姆剃刀原则。如自动挡汽车必然逐步替代手动挡汽车,也是因为自动挡对大多数用户来说满足“简单有效原理”。
迪米特原则
-
模型定义或要素
一个对象应当对其他对象有尽可能少的了解,只与你的直接朋友交谈,不跟“陌生人”说话。
-
跨学科应用案例
- 某个对象的任何方法都应该只调用属于以下情形的方法:
它自身;传入该方法的参数;它创建的对象;直接持有的对象。
- 某个对象的任何方法都应该只调用属于以下情形的方法: