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:沉没成本不是继续的理由