软件开发中反复出现的模式
软件工程规律
把散落在架构、团队、计划、质量和决策中的经验,整理成可以随时查阅的 56 条规律。
先按主题定位
分类浏览
规律不是教条,而是帮助我们识别风险和做出更好判断的经验。
一张可搜索的工程经验地图
全部规律
56 条规律
康威定律
一个组织设计出的系统,往往映射出该组织自身的沟通结构。
查看解释过早优化
在确认性能问题之前进行优化,常常会增加复杂度而没有实际收益。
查看解释海勒姆定律
当 API 用户足够多时,系统的每一种可观察行为都可能被人依赖。
查看解释童子军守则
让你修改过的代码比接手时更整洁一点。
查看解释YAGNI:你不会需要它
不要为尚未出现的需求提前增加功能和抽象。
查看解释布鲁克斯定律
给一个已经延期的软件项目增加人手,通常会让它延期得更久。
查看解释加尔定律
能正常工作的复杂系统,往往由一个能工作的简单系统逐步演化而来。
查看解释抽象必漏
任何有实际意义的抽象都会在某种程度上“泄漏”,暴露底层实现细节。
查看解释特斯勒定律:复杂度守恒
每个应用都有无法消除的固有复杂度,只能在系统与用户之间转移。
查看解释CAP 定理
在发生网络分区时,分布式系统必须在一致性和可用性之间做取舍。
查看解释第二系统效应
一个成功的小系统之后,团队往往会做出过度膨胀的第二个系统。
查看解释分布式计算的八大谬误
新手常常错误地假设网络可靠、延迟为零、带宽无限且拓扑不会变化。
查看解释意外后果定律
改变复杂系统时,应预料到计划之外的后果。
查看解释扎温斯基定律
每个程序都会不断扩张,直到它能够读取邮件。
查看解释邓巴数
一个人能够稳定维持的社会关系数量存在认知上限,常被估计在 150 左右。
查看解释林格尔曼效应
群体规模变大时,个人平均产出往往会下降。
查看解释普莱斯定律
在许多协作活动中,约一半的产出往往来自总人数平方根那么多的参与者。
查看解释普特定律
懂技术的人往往不管理技术,而管理技术的人往往不真正理解技术。
查看解释彼得原理
层级组织中的人,往往会晋升到自己不再胜任的层级。
查看解释巴士因子
一个项目失去多少名关键成员后,就会陷入严重困境?
查看解释迪尔伯特原理
组织有时会把能力不足的人提拔到管理岗位,以减少他们直接影响技术工作的机会。
查看解释帕金森定律
工作会膨胀,直到填满可用于完成它的全部时间。
查看解释90–90 法则
前 90% 的代码耗费 90% 的开发时间,剩下 10% 又耗费另外 90%。
查看解释霍夫施塔特定律
事情总是比预期耗时更久,即使你已经把霍夫施塔特定律考虑在内。
查看解释古德哈特定律
当一个指标成为目标时,它就不再是一个好的指标。
查看解释吉尔布定律
任何需要量化的事情,都可以找到一种比完全不测量更好的测量方式。
查看解释墨菲定律
凡是可能出错的事情,最终都有可能出错。
查看解释波斯特尔定律
对自己输出的内容要保守,对接收到的内容要宽容。
查看解释破窗理论
没人修复的小问题,会向团队传递出质量不重要的信号。
查看解释技术债务
所有持续拖慢软件开发的东西,都可以视为技术债务。
查看解释林纳斯定律
只要有足够多双眼睛,所有缺陷都更容易暴露。
查看解释克尼汉定律
调试代码的难度约为写出它的两倍,因此写代码时要控制复杂度。
查看解释测试金字塔
项目应该有大量快速单元测试,较少集成测试,以及少量端到端界面测试。
查看解释杀虫剂悖论
反复运行同一组测试,发现新缺陷的能力会逐渐下降。
查看解释莱曼软件演化定律
面向真实世界的软件必须持续演化,而演化会受到可预测的限制。
查看解释斯特金定律
任何领域中,大约九成内容可能都很平庸。
查看解释阿姆达尔定律
并行化带来的加速受限于无法并行的工作比例。
查看解释古斯塔夫森定律
通过扩大问题规模,可以在并行处理系统中获得显著加速。
查看解释梅特卡夫定律
网络的潜在价值通常随着用户数量的平方增长。
查看解释DRY:不要重复自己
每一条知识都应该有一个唯一、明确且权威的表达。
查看解释KISS:保持简单
设计和系统应当尽可能简单,但不能简单到失去必要能力。
查看解释SOLID 原则
五条帮助提升代码可维护性和可扩展性的面向对象设计原则。
查看解释迪米特法则(最少知识原则)
一个对象应该只与直接协作者交互,避免了解陌生对象的内部结构。
查看解释最小惊讶原则
软件和界面的行为应该尽量符合用户和开发者的合理预期。
查看解释邓宁—克鲁格效应
能力不足的人往往也难以准确评估自己的能力,因而容易高估自己。
查看解释汉隆剃刀
不要把能够由疏忽或无知解释的事情归因于恶意。
查看解释奥卡姆剃刀
在能够解释事实的方案中,较简单的解释通常更值得优先验证。
查看解释沉没成本谬误
因为已经投入了时间或精力,就继续坚持一个当前并不划算的选择。
查看解释地图不等于疆域
我们对现实的表示,不等同于现实本身。
查看解释确认偏误
人们倾向于寻找和相信支持已有观点的信息。
查看解释炒作周期与阿玛拉定律
我们容易高估技术短期影响,同时低估它的长期影响。
查看解释林迪效应
对于不会自然消亡的事物,存续时间越长,未来继续存在的可能性往往越高。
查看解释第一性原理思维
把复杂问题拆解到最基本的事实,再从这些事实重新构建方案。
查看解释逆向思考
从相反结果出发,倒推什么会导致失败,再据此改进方案。
查看解释帕累托原则:二八法则
很多结果由少数关键原因产生,常见的近似表达是 80% 的结果来自 20% 的原因。
查看解释坎宁安定律
想在互联网上获得正确答案,有时最有效的方式不是提问,而是先发布一个错误答案。
查看解释