写点什么

程序员容易忽略的 10 大软件开发定律

2021 年 3 月 16 日

程序员容易忽略的10大软件开发定律

与其他领域一样,软件开发领域也有一些非常经典的定律。这些定律包括了一些法则或软件开发大神的名言。

康威定律

也就是所谓的“按照组织架构来交付软件”:


“任何一个组织在设计一个系统时,这个系统的结构与这个组织的沟通结构是一致的”。


你或许认为可以通过一些方式来避免这个定律,比如跨功能团队的站会、进度更新和决策矩阵,但最终都不可避免地会发生冲突和分歧,而这些将导致冲突和分歧的过程和结果。

布鲁克定律

这个定律来自《人月神话》:


“在一个已经延期的项目中增加人手只会让项目延期更长”。


当你意识到项目没有取得预期的进展,并尝试从其他地方调取更多的资源,不仅会让项目延期,而且更有可能交付一个更脆弱、更复杂的产品。

Zawinski 定律

“每一个程序都会膨胀到需要加入 Web 服务器,不膨胀的程序最终会被膨胀的程序所代替”。


对 Web 服务来说,就是“膨胀到需要用户账号登录并收集所有用户的数据”。对物理服务来说,就是“膨胀到需要加入一个不安全的 WiFi 访问点,设置了你无法修改的默认密码,以及一个 Web 服务器”。

帕金森定律

“一项工作会占用掉所有用来完成它的时间”。


如果你不给一个项目的里程碑阶段设置截止日期,这个项目就永远完成不了。这就是为什么一定要给一个 MVP(最小可行产品)定一个固定的截止日期。


当然,这个定律也可以用在数据、算力、内存等方面:


“程序最终会把所有可用的存储空间、CPU 时间和内存用光”。

帕累托谬论

帕累托原则很容易被曲解,尤其是被管理层曲解,这通常会导致帕累托谬论的出现:


“当你完成了 80%的工作,你会认为真的只剩下 20%的工作要做”。


但你可能低估了剩下的 20%工作,因为它可能占用你 80%的时间。

史特金定律

“90%的东西都是垃圾”。


是的,包括你的产品在内。

皮特定律

“在一个等级制度中,每个员工都倾向于升到他们无法胜任的职位。因此,随着时间的推移,每个岗位都有可能被不称职的员工占据”。

伊格尔森定律

“你写的任何超过 6 个月没有看过的代码,有可能已经被别人改过了”。


这里说的 6 个月已经是一个很乐观的数字了。


不过,有一点需要注意,那就是“Yo Momma 推论”:只有作者才可以给代码提出批评,任何其他的负面反馈都将被驳回。

格林斯潘第十定律

用在认证方面:


任何一个定制开发的认证系统都包含一个临时的、非正式的、隐藏缺陷的、运行缓慢的 Kerberos 不完整实现。


这可以概括成一般性的 NIH 规则:“任何一个定制开发的系统都包含一个临时的、非正式、隐藏缺陷的、运行缓慢的行业标准的不完整实现(因为你拒绝直接使用标准实现)”。

冰山谬论

“一款新软件的开发成本只占管理层预算的总成本的 25%左右”。


运维界的一句格言:


如果说软件维护的成本占了总预算的 75%,那么这 75%都应该是运维支持。

LGTM 困境

“如果你想快速提交 10 行代码变更,可以把它隐藏在一个 1500 行的 PR 中”。


原文链接:


https://www.netmeister.org/blog/software-engineering-laws.html

2021 年 3 月 16 日 14:064883
用户头像

发布了 114 篇内容, 共 27.0 次阅读, 收获喜欢 292 次。

关注

评论 3 条评论

发布
用户头像
“90%的东西都是垃圾” 原文是 90% of everything is crud. 这里 CRUD 指代的是不是垃圾。
2021 年 03 月 22 日 22:31
回复
crud
英 [krʌd] 美 [krʌd]
n. 令人厌恶的事物,脏东西,污垢;(难以在上滑雪的)大雪;废话;可鄙的人
abbr. (CRUD)增查改删 (creat, retrieve, update, delete),增删查改(creat, delete, read, update)

网络上还能搜到类似的语句,比如90% of everything is crap, 90% of everything is trash...所以,你觉得这里的crud指的是什么?
展开
2021 年 03 月 23 日 16:33
回复
CRUD软件工程里肯定指代增删查改,而非垃圾。
2021 年 03 月 30 日 10:39
回复
没有更多了
发现更多内容

FastAI:滴普技术荟:某工业产品内部结构尺寸图像测量和缺陷检测分析

滴普科技2048实验室

目标检测 图像处理 缺陷检测 AI测量 图像检测

FastAI:滴普技术荟:基于深度学习的云边一体化OLED屏缺陷自动光学检测技术

滴普科技2048实验室

学习 缺陷检测 云边一体 自动光学检测

TypeScript | 第三章:函数、泛型和枚举

梁龙先森

typescript 编程 前端 七日更

世界之书:《禅与摩托车维修艺术》与发现良质

lidaobing

禅与摩托车维修艺术 28天写作

语音助手中的复杂语义表达方法

DataFunTalk

AI nlp

12张图带你彻底理解分布式事务!!

冰河

分布式事务 BASE理论 TCC ACID CAP理论

FastAI:滴普技术荟:基于机器视觉的典型多目标追踪算法应用实践

滴普科技2048实验室

目标追踪 目标检测 追踪算法

低代码与零代码工具的这些特征,弥补了所有人和IT之间的差距!

低代码指南

程序员 互联网 开发者 软件开发 开发工具

SQL优化最干货总结-MySQL「2020年终总结版」

Java架构师迁哥

wildfly 21的domain配置

程序那些事

程序那些事 wildfly wildfly21 配置管理 domain模式

附PPT丨AWS基于数据湖构建云上的数据分析架构

dbaplus社群

数据湖 AWS

夜莺二次开发指南-监控系统(2)

qinyening

滴滴夜莺 夜莺监控

比特币的安全性到底有多高?

CECBC区块链专委会

比特币

职业规划

HQ数字卡

职业规划 七日更

业务中台建设 - 配置化

孝鹏

中台 微服务 配置化开发

单点破局思维|技术人应知的创新思维模型(8)

Alan

个人成长 技术人应知的创新思维模型 七日更 28天写作

数据为墨,智能作笔:画一卷新姑苏繁华图

脑极体

“社恐”独处好去处:无人自习室,一个人的“世外桃源”

IoT云工坊

物联网 无人自习室 智能门禁 智能灯控 线上预约

代码零改动Serverless架构升级?这家在线编程教育企业是这么做的

阿里巴巴中间件

Python Serverless

Shell简介

入门小站

Shell

如何成为架构师?

xcbeyond

个人成长 架构师 七日更

Serverless 落地之痛怎么解?

阿里巴巴中间件

Serverless

夜莺二次开发指南-监控系统(1)

qinyening

滴滴夜莺 夜莺监控

生产环境全链路压测建设历程 18:某快递 A 股上市公司的生产压测案例之中篇

数列科技杨德华

全链路压测 七日更

彩色的线,数据的诗,你好——贵州鲲鹏!

脑极体

Nginx常见典型故障|Linux干货

赖猫

c++ nginx Linux

揭秘大流量场景下发布如丝般顺滑背后的原因

阿里巴巴中间件

阿里巴巴

《数据分析》PDF免费下载

计算机与AI

数据分析

用大白话给你解释Zookeeper的选举机制

爱笑的架构师

zookeeper ZooKeeper原理 七日更

[git使用技巧] git提交忽略不必要的文件或文件夹

xcbeyond

git 七日更

JDK 16 即将发布,新特性速览!

xcbeyond

Java 七日更

程序员容易忽略的10大软件开发定律-InfoQ