写点什么

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

  • 2021-03-16
  • 本文字数:1164 字

    阅读完需:约 4 分钟

程序员容易忽略的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-03-16 14:065972
用户头像

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

关注

评论 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
回复
没有更多了
发现更多内容

一个cpp协程库的前世今生(二十四)对象池与栈内存池

SkyFire

c++ cocpp

面向复杂度架构设计之学生管理系统

晨亮

「架构实战营」

模块一

Geek_f3e842

架构实战营

低代码实现探索(三十)低代码设计器设计方式

零道云-混合式低代码平台

面试官太难伺候?一个try-catch问出这么多花样

阿Q说代码

效率 字节码指令 1月月更 try-catch finally-return

Hive企业级性能优化

五分钟学大数据

hive 1月月更

微信业务架构、学生管理系统(草稿)

Geek_16d2b8

架构训练营

深入理解Python内存管理与垃圾回收

宇宙之一粟

Python 内存管理 1月月更

微信业务架构图 & 学生管理系统架构设计

smile

架构实战营

ReactNative进阶(三十五):应用脚手架 Yo 构建 RN 页面

No Silver Bullet

React Native 1月月更 BloC yo

征文投稿丨在轻量应用服务器上部署SpringBoot项目

阿里云弹性计算

阿里云 用户投稿 轻量应用

微信业务架构+学生管理系统毕设方案

李大虾

#架构实战营 「架构实战营」

一条SQL查询语句是如何执行的?

蝉沐风

MySQL sql 面试

作业帮基于 Flink 的实时计算平台实践

Apache Flink

大数据 flink 编程 实时计算 IT

代码之外的生存指南,先掌握这五步。

叶小鍵

为什么需要闭包?闭包是什么概念?

蜜糖的代码注释

Java 后端 开发

Web or Native 哪个才是元宇宙的未来(下)?

Orillusion

WebGL 元宇宙 Metaverse webgpu

征集用户| 填写 2022 Apache Pulsar 用户调查问卷,抽取丰厚礼品

Apache Pulsar

开源 云原生 中间件 Apache Pulsar 社区

SAST 为什么会成为网络安全领域的下一件大事?

旋极智能

静态分析 静态测试工具 代码静态分析

Hive 数据倾斜问题定位排查及解决

五分钟学大数据

hive 1月月更

行业先锋畅聊 Flink 未来 —— FFA 2021 圆桌会议(北京)

Apache Flink

大数据 flink 编程 后端 实时计算

一文了解 MySQL 中的锁

Ayue、

MySQL 数据库 1月月更

用 K3s 来运行安装和极狐GitLab Runner

极狐GitLab

Awesome DAO 文章和资源推荐(8/100)

hackstoic

DAO

混沌工程之ChaosMesh使用之模拟CPU使用率

zuozewei

混沌工程 Chaos Mesh 1月月更

Mybatis中的VFS是个啥

尹昶胜

mybatis

如何使用JavaScript开发AR(增强现实)移动应用

汪子熙

JavaScript AR 1月月更 增强现实

TortoiseSVN 执行清理( cleanUp )失败的解决方案

编程三昧

svn 开发工具 1月月更

Fabric.js 将本地图像上传到画布背景

德育处主任

前端 数据可视化 前端可视化 FabricJS Fabric.js

华为云FusionInsight连续三次获得第一 加速释放数据要素价值

数据湖洞见

大数据 FusionInsight 华为云

微信业务架构图及学生管理系统架构设计实践

IT屠狗辈

系统架构 架构实战营 微信业务架构图

程序员容易忽略的10大软件开发定律_语言 & 开发_Jan Schaumann_InfoQ精选文章