在软件开发的世界里,我们每天都在踩着各种坑前行:项目延期、代码腐化、团队协作卡壳、技术债越堆越高……这些坑及最佳实践应对方案其实都有客观规律可循。很多软件行业的前辈早就把这些规律提炼成了各种设计模式、架构模式、定律,只不过它们散落在书籍、论文、博客、推文、StackOverflow 答案、口口相传的行业经验中。
Laws of Software Engineering 就是把这些散落的智慧系统化整理起来的绝佳资源。
Laws of Software Engineering:https://lawsofsoftwareengineering.com/
Laws of Software Engineering 收集了56条软件工程定律,涵盖架构、团队、规划、质量、规模、设计和决策七大维度。每一项都附带简短描述和出处,页面采用卡片式设计,支持按Junior / Mid-Level / Senior 三个级别和七大类别过滤,点击卡片还能看到更详细的解释。无论你是刚入行的开发者,还是带团队的架构师,都能快速找到“对症”的智慧。

几个最经典的例子:
Conway’s Law(康威定律)(Architecture类):组织设计的系统,结构必然镜像其沟通结构。团队割裂,代码必然割裂。
Brooks’s Law(布鲁克斯定律)(Teams类):给一个已经延期的软件项目增加人力,只会让它更延期。经典图书《人月神话》里的永恒真理。
Hyrum’s Law(海勒姆定律):只要API用户足够多,所有可观察的行为都会被某个人依赖。
YAGNI(You Aren’t Gonna Need It):不要提前实现你“可能”需要的功能。
Technical Debt(技术债)(Quality类):一切让后续开发变慢的东西。
Pareto Principle(80/20法则)(Decisions类):80%的问题来自20%的原因。
Linus’s Law(林纳斯定律):只要有足够多的眼睛,所有bug都会变得浅显。
这些定律从本质上都其实揭示了:软件开发最大的挑战往往不在于技术本身,而在于组织结构、沟通成本和人类对复杂性的认知极限。
Laws of Software Engineering 值得每个软件工程师收藏并持续更新,核心价值:
- 避免重复发明轮子:很多“新手错误”其实是老前辈早就总结过的。
- 提升决策质量:面对“要不要加人”“要不要重构”“要不要上新框架”时,用这些定律快速判断。
- 团队沟通利器:将复杂的工程现象总结为简洁的定律,有助于团队达成共识。
- 终身学习框架:随着经验增长,你会不断发现新定律与旧经验的呼应。
定律(Laws) vs 设计模式(Design Patterns) vs 架构模式(Architectural Patterns)
定律(Laws):描述世界如何运作以及不可违背的约束
设计模式(Design Patterns): 提供局部问题的标准解法
架构模式(Architectural Patterns): 定义系统级结构组织方式

在AI时代,Laws of Software Engineering 各种定律的价值
在AI 编程席卷传统开发流程的当下,很多人产生了一种错觉:既然 AI 可以生成代码、自动重构、甚至辅助设计架构,那么传统的软件工程定律是否已经失效了?
事实恰恰相反。在 AI 时代系统复杂度的增长方式、团队沟通成本、规模化的物理极限、人类认知偏差并没有改变,因此这些定律的价值不仅没有削弱,反而因为开发速度的极速提升而变得更加至关重要。
- AI 不只是加速开发,也在加速犯错:以前写错一行代码要半天,现在 10 秒就生成 1000 行垃圾。定律是刹车和减速器。
- AI时代定律是工程系统的约束引擎:用好定律可以校验 AI 输出、控制系统复杂度、防止错误决策。
- AI时代最稀缺的能力是判断力:顶级工程师的护城河从“会写”变成“会选”,会 Prompt 的人越来越多,会用定律做架构决策、团队设计、风险评估的人,依然稀缺。
正如Google Cloud AI 工程总监 Addy Osmani 在书评中直言:AI 正在改变软件工程的本质,这本《Laws of Software Engineering》提供了理论基础和实用工具箱,帮助从业者理解系统、驾驭未来。
类似Laws of Software Engineering 总结软件行业方法论的资源:
Hacker Laws:https://github.com/dwmkerr/hacker-laws
Laws of Software:https://www.laws-of-software.com/
56 Laws of Software Engineering:https://leadership.garden/56-laws-of-software-engineering/