law-sofsoftware-engineering

2026-04-244 引用
  • S:在学习和实践“law-sofsoftware-engineering”时,需要建立统一的概念和问题边界。
  • C:相关概念、实现机制和工程取舍容易混在一起,导致只记住结论而无法判断适用条件。
  • Q:“law-sofsoftware-engineering”要解决什么问题?它的核心抽象、工作机制和边界分别是什么?
  • A:本文围绕“law-sofsoftware-engineering”整理核心概念、关键机制和工程实践,并明确其适用边界。

https://lawsofsoftwareengineering.com

S: 软件工程中存在大量经验法则和定律,散落在各种书籍和文章中。 C: 不同定律适用于不同层面(架构、团队、质量、决策等),容易混淆或遗漏。 Q: 如何系统地理解和运用这些软件工程定律? A: 按类别梳理,理解每条定律的核心含义,在实际工作中有意识地识别和应用。

Architecture 架构

定律 中文名 核心含义
Conway's Law 康威定律 组织的系统设计会映射其沟通结构
Hyrum's Law 海勒姆定律 API 用户足够多时,系统的所有可观测行为都会被依赖
Gall's Law 盖尔定律 能运行的复杂系统必然是从能运行的简单系统演化而来
Law of Leaky Abstractions 抽象泄漏定律 所有非平凡的抽象都会在某种程度上泄漏
Tesler's Law (Conservation of Complexity) 泰斯勒定律(复杂度守恒) 每个应用都有不可消除的固有复杂度,只能转移,不能消除
CAP Theorem CAP 定理 分布式系统只能同时保证一致性、可用性、分区容错性中的两个
Second-System Effect 第二系统效应 成功的小系统之后,往往是过度工程化的臃肿替代品
Fallacies of Distributed Computing 分布式计算谬误 分布式系统设计者常犯的八个错误假设(网络可靠、零延迟等)
Law of Unintended Consequences 意外后果定律 改变复杂系统时,要预期意外副作用
Zawinski's Law 扎温斯基定律 每个程序都会膨胀到能读邮件为止(功能蔓延)

Design 设计

定律 中文名 核心含义
YAGNI 你不会需要它 在需要之前不要添加功能
DRY 不要重复自己 每条知识在系统中应有唯一、明确、权威的表示
KISS 保持简单 设计和系统应尽可能简单
SOLID Principles SOLID 原则 五条提升软件设计质量的指导原则(SRP/OCP/LSP/ISP/DIP)
Law of Demeter 迪米特法则 对象只应与直接朋友交互,不要和陌生人说话
Principle of Least Astonishment 最小惊讶原则 软件的行为应让用户和开发者最少感到意外

Teams 团队

定律 中文名 核心含义
Brooks's Law 布鲁克斯定律 向延期项目增加人手只会让它更晚交付
Dunbar's Number 邓巴数 一个人能维持的稳定关系上限约为 150 人
Ringelmann Effect 林格尔曼效应 团队规模增大时,个体生产力下降(社会惰化)
Price's Law 普莱斯定律 总参与者的平方根完成了 50% 的工作
Putt's Law 帕特定律 懂技术的人不管理技术,管理技术的人不懂技术
Peter Principle 彼得原理 层级组织中,每个人都会晋升到其不胜任的位置
Bus Factor 巴士因子 最少几个关键成员离开会导致项目陷入困境
Dilbert Principle 呆伯特原理 公司倾向于把不称职的员工提拔到管理层以减少危害

Planning 计划

定律 中文名 核心含义
Premature Optimization (Knuth) 过早优化(Knuth) 过早优化是万恶之源
Parkinson's Law 帕金森定律 工作会膨胀以填满所有可用时间
Ninety-Ninety Rule 九十-九十法则 前 90% 代码花前 90% 时间;剩下 10% 再花 90% 时间
Hofstadter's Law 侯世达定律 事情总比预期花更长时间,即使考虑了 Hofstadter 定律
Goodhart's Law 古德哈特定律 当一个度量变成目标时,它就不再是好的度量
Gilb's Law 吉尔布定律 任何需要量化的东西,都能以某种方式度量,总比不度量好

Quality 质量

定律 中文名 核心含义
Boy Scout Rule 童子军规则 让代码比你发现时更好
Murphy's Law 墨菲定律 凡是可能出错的,就一定会出错
Postel's Law (Robustness Principle) 伯斯塔尔定律(鲁棒性原则) 发送时保守,接收时宽容
Broken Windows Theory 破窗理论 不要留下"破窗"(坏设计、错误决策、差代码)不修复
Technical Debt 技术债务 技术债务是一切拖慢软件开发速度的东西
Linus's Law 林纳斯定律 眼睛足够多,所有 bug 都是浅显的
Kernighan's Law 柯尼汉定律 调试的难度是编写代码的两倍
Testing Pyramid 测试金字塔 大量快速单元测试 > 较少集成测试 > 少量 UI 测试
Pesticide Paradox 杀虫剂悖论 反复运行相同测试,效果会递减
Lehman's Laws of Software Evolution 雷曼软件演化定律 反映真实世界的软件必须演化,且演化有可预测的极限
Sturgeon's Law 斯特金定律 任何事物的 90% 都是垃圾

Scale 规模

定律 中文名 核心含义
Amdahl's Law 阿姆达尔定律 并行化加速受限于不可并行部分的比例
Gustafson's Law 古斯塔夫森定律 通过增大问题规模,可以在并行处理中获得显著加速
Metcalfe's Law 梅特卡夫定律 网络的价值与用户数的平方成正比

Decisions 决策

定律 中文名 核心含义
Dunning-Kruger Effect 达克效应 对某事了解越少,越容易自信
Hanlon's Razor 汉隆剃刀 能用愚蠢或粗心解释的,不要归因于恶意
Occam's Razor 奥卡姆剃刀 最简单的解释通常最准确
Sunk Cost Fallacy 沉没成本谬误 因已投入的时间/精力而坚持一个错误选择
The Map Is Not the Territory 地图非疆域 对现实的描述不等于现实本身
Confirmation Bias 确认偏误 倾向于偏好支持已有信念的信息
Hype Cycle & Amara's Law 技术成熟度曲线 & 阿马拉定律 短期高估技术影响,长期低估技术影响
Lindy Effect 林迪效应 存在越久的东西,越可能继续存在
First Principles Thinking 第一性原理 把复杂问题拆解到最基本的要素,再从头构建
Inversion 逆向思维 通过考虑相反结果并反向推导来解决问题
Pareto Principle (80/20) 帕累托法则 80% 的问题来自 20% 的原因
Cunningham's Law 坎宁安定律 在互联网上获得正确答案的最好方法是发布一个错误答案

评论