2 分钟阅读
你的 Bug 可能正是别人的功能
软件工程的魔幻定律
每隔一段时间,总有人在项目里重新发现同一个道理:往进度已经落后的项目里加人,只会让项目更晚交付。这个判断不是凭感觉,它有名字,叫 Brooks’s Law,1975 年就写进了《人月神话》。
问题在于,这类教训极难传承。前人的血泪藏在绝版书里、散落在博客角落,或者以"老鸟的直觉"的形式存在于某位资深工程师的脑子里。每一代工程师都得重新踩一遍。
Dr. Milan Milanović 花了几年时间,把这些分散在 50 年历史中的规律收集整理,做成了 Laws of Software Engineering 网站和同名书籍,收录了 56 条核心定律,加上伴随原则总计 63+ 条定律与原则。这篇文章不是书的摘要,而是试图从工程师的角度,把其中最值得深思的几条拉出来,讲清楚它们背后的逻辑。
一张地图:七个维度的定律体系
这 63+ 条定律大致覆盖七个领域。把它们的关系画出来,会发现一件有趣的事:不同维度的定律之间经常互相印证,甚至互相矛盾。这种张力,正是软件工程的本质。
mindmap
root((软件工程定律))
架构与复杂度
Gall's Law
Law of Leaky Abstractions
Tesler's Law
CAP Theorem
Hyrum's Law
人员与组织
Conway's Law
Brooks's Law
Dunbar's Number
Bus Factor
时间与估算
Hofstadter's Law
Parkinson's Law
90-90 Rule
Goodhart's Law
质量与演化
Murphy's Law
Boy Scout Rule
Technical Debt
Lehman's Laws
规模与性能
Amdahl's Law
Metcalfe's Law
编码与设计
DRY / KISS / YAGNI
SOLID
Law of Demeter
决策与认知偏差
Dunning-Kruger Effect
Sunk Cost Fallacy
Confirmation Bias
本合集内容:
架构与复杂度
- Gall’s Law:从简单开始,别想着一步到位
- Law of Leaky Abstractions:抽象总是有漏洞的
- Tesler’s Law:复杂度不会消失,只会转移
- Hyrum’s Law:足够多的用户会依赖你的 bug
人员与组织
- Conway’s Law:组织结构决定系统结构
- Brooks’s Law:加人不解决问题,往往制造更多问题
- Bus Factor:知识集中是一种隐藏的技术债
时间与估算
- Hofstadter’s Law:自我指涉的估算悖论
- Parkinson’s Law:工作膨胀以填满时间
- Goodhart’s Law:指标成为目标后就失效了
质量、维护与演化
- Lehman’s Laws:软件的熵增是不可逆的
- The Boy Scout Rule:让营地比你来时更干净
- Kernighan’s Law:调试比编写困难两倍
编码与设计原则
- DRY、KISS 和 YAGNI:三位一体的简洁哲学
- Law of Demeter:最少知识原则
认知与决策偏差
- Dunning-Kruger Effect:你不知道你不知道什么
- Sunk Cost Fallacy:沉没成本不是继续的理由