Hacker Laws

Posted on 2021年12月31日周五 技术

TheDunning-KrugerEffect 无能的人往往不会意识到自己的无能。而得出正确答案所需要的技能,正是你认识到何为正确答案所需要的技能。

Goodhart'sLaw 当压力施于其上以进行控制时,任何观测到的统计恒性都倾向消散。 当一个措施本身成为目标时,它就不再是一个好的措施。

Hick'sLaw 决策时间和可供选择的选项数量呈对数增长关系。 该定律仅适用于选项 按顺序排列 的情况,例如 ABCD。这隐含在一二为底的对数中,也就是说决策者本质上在进行 二分法查找。实验表明,如果选项不是按顺序排列的,那么所花费时间与选项个数将会呈线性增长关系。

Hofstadter’sLaw It always takes longer than you expect, even when you take into account Hofstadter's Law.

技术成熟度曲线 我们倾向于过高估计技术在短期内的影响,并低估长期效应。

隐式接口定律 当 API 有足够多的用户时,你在合同中的承诺已不重要:你系统的所有可观察行为都将被某些人所依赖。 没有人会去读API 文档,并遵守其中的各种使用规范。

Linus'sLaw given enough eyeballs, all bugs are shallow.

帕金森定理 在工作能够完成的时限内,工作量会一直增加,直到所有可用时间都被填满为止。

TheLawOfDemeter 别和陌生人讲话。 该定律表明,软件的一个单元应该只与其直接合作者交谈。比如对象 A 引用了对象 B,对象 B 引用了对象 C,则 A 可以直接调用 B 的方法,但不应直接调用 C 的方法。所以如果 C 有一个 dothing() 的方法,A 不应该直接调用,而是使用 B.getC().doThis()。

帕累托法则 生活中大多数事情不是均匀分布的。

简洁

Hanlon'sRazor 能解释为愚蠢的,就不要解释为恶意的。

奥卡姆剃刀 如无必要,勿增实体。

专注

过早优化效应 过早优化是万恶之源。

程序员们浪费了大量的时间去思考或者担心他们的程序中的非关键部分的速度。而在考虑调试和维护的时候,这些所谓提高效率的做法实际上十分不妥。我们应该放弃小的效率点,并且要在 97% 的时间提醒自己,过早优化是万恶之源。而且连那关键的 3% 也不能够放过。

帕金森琐碎定理 该定理显示,群体将给予更多的时间和注意力来处理琐碎的问题,而不是用来处理严肃而实质性的问题。 常见的虚构例子是委员会批准核电站的计划,他们大部分时间都在讨论自行车棚的结构,而不是电厂本身等更为重要的设计。如果没有大量的专业知识或者准备,很难给非常大的复杂主题讨论提供宝贵的意见。但是,人们希望看到更多意见。因此,他们倾向于将大量时间集中在很容易推敲,但不一定被看重的小细节上。

All models are wrong, but some are useful. 所有的模型都是错的,但有些是有用的。 这一原则表明,所有的系统模型都是有缺陷的,但只要它们没有太多缺陷,那便有可能是有用的。这一原则源于统计学,同时也适用于科学和计算模型。 大多数软件的一个基本要求都是对某种特定系统进行建模。无论是计算机网络、资源库、社会关系图还是任何其他类型的系统,设计者都必须依据适当的细节程度来建模。过多的细节可能会导致太高的复杂度,过少的细节可能会使模型无法正常工作。