优秀的程序员,都该需要知道一点剃刀法则

共 2380字,需浏览 5分钟

 ·

2022-11-15 01:08


前端猎手
 链接每一位开发者,让编程更有趣儿!
关注

转载自Duing(ID:duyi-duing


大家好,我是法医


在互联网时代,相信几乎每个人都听说过「剃刀法则」,但是你真的懂它的意思吗?更进一步,你真的知道在程序员的实际中工作如何运用剃刀法则吗?


我们先看一下百度百科对它的定义:


“剃刀”(Razors)是一种经验法则,可以帮助我们简化决策,推动更好的结果发生。如果使用得当,它可以有效地提高我们的决策质量,并在此过程中减少压力。


其实,所谓的剃刀法则并不只是单一的某一个定律,它包含了很多经验法则。今天的文章,我们就来讲一下,那些适用于程序员的剃刀法则。


01
奥卡姆
剃刀法则

奥卡姆剃刀定律又称“奥康的剃刀”,它是由14世纪英格兰的逻辑学家、圣方济各会修士奥卡姆的威廉(约1285年至1349年)提出。这个原理称为“如无必要,勿增实体”,即“简单有效原理”。正如他在《箴言书注》2卷15题说“切勿浪费较多东西去做,用较少的东西,同样可以做好的事情。”


奥卡姆剃刀定律说的并不是“简单”=“有效”,也不会刻意追求“简单”,你可以理解为它追求的是相对简单:在能满足需要的前提下,追求更简单的那一个;而当满足需要的只有一种选择时,你根本用不到奥卡姆剃刀定律。


所以,奥卡姆剃刀并不是极简主义,不是要刻意追求极简,实际上奥卡姆剃刀是实用主义,实用优先,在满足需求的情况下绝不搞复杂的事情。回到我们的主题,在程序员的日常工作中,该怎么利用奥卡姆剃刀呢?


1、构建的角度/开发


构建指的是你创作一个东西,也就是程序员工作中的开发任务。


在开发工作中我们需要用到奥卡姆剃刀,再重述一下前面的结论:奥卡姆剃刀是实用主义,实用优先,在满足需求的情况下绝不搞复杂的事情。


一句话,不要滥用你的技术。能用简单的手段解决的问题,绝对不要用复杂的办法。


关于这个问题已经有无数的大牛和前辈给我们分享过了经验,如果你了解淘宝架构的演变历史就不难理解这个道理。架构的设计最能体现奥卡姆剃刀原则,加入创业公司做一个网站,上来就做一个媲美淘宝的架构,虽然技术上你可能是很厉害,但你的公司肯定会完蛋了。


这个极端的例子不难理解,而在实际的开发中,有些权衡和取舍并没有那么容易“一眼看穿”,所以需要你不断用奥卡姆剃刀的思维去审视自己的工作。


2、解构的角度/学习


根据逻辑学,奥卡姆剃刀定律的逆反命题也一定成立。

原命题:如无必要,勿增实体。

逆反命题:如果增加了实体,证明一定有其必要性。

实际上我们常常忽略这个逆反命题的作用。程序员每天除了开发任务,还有大量的时间和精力需要用来学习新的技术。一个新技术的出现,和旧的技术相比一定是解决了某些问题。

如果仅仅因为“新”,或者“高大上”,是不足以使一门新技术发展并流行起来的,这符合奥卡姆剃刀逆反定律。所以在学习新技术的时候,我们要时刻用这样的思维来指导自己。

比如:面向对象编程如此普遍和强大了,为什么还会有Scala这样的函数式编程语言流行,函数式编程解决了什么问题?

在很多问题上你都可以这样去思考,如果你真的能搞清楚新技术中增加的“实体”有哪些“必要性”,那一定会起到提纲挈领的作用,让你对新技术有一个宏观的把握,从而对其理解的更加透彻、深刻。


02
帕累托
剃刀法则

帕累托法则指出,通常80%的结果来自20%的原因。数字80和20无论如何都不是精确的,但该原则的总体思路是结果通常分布不均。

我们可以看到生活的许多领域遵守着这条规则,例如:

世界上最富有的20%的人创造了世界80%的收入。

80%的犯罪是由20%的罪犯所为(自2020年以来)。

我们知道80%的病毒传播来自20%的受感染人群。

……

作为程序员,我们该如何应用在日常工作中?

我们可以从帕累托法则中获得的主要好处是专注。它可以帮助我们专注于重要的事情(20%),而不是在不重要的事情(其他80%)上浪费时间和精力。

不重要的事情对我们来说往往很重要,因为这样的事情总是有太多(而且看起来很紧急)。但是最好的结果往往是通过关注重要的少数来达成的。

在前端开发中,我们可以使用它来专注于构建正确的功能,例如:

专注于实现80%产品价值的那20%的产品功能。

专注于导致80%用户使用异常的那20%的错误。

专注于实现80%的产品功能需要的那20%总构建时间等等。

只要问“现在最重要的事情是什么?”就可以帮助建立下一个最重要的事情,而不是下一个最紧急的事情。


03
倾听
剃刀法则

具体解释是这样的:

很多时候,当与持不同意见者交流时,若非必要,就先听再说,多闻慎言,不要一被提建议意见就下意识地进入防御状态,这毫无裨益。而如果真的听得下去,就总能收获一些有用的东西。

对于我们程序员来说,用户在使用软件的过程中会形成对软件的意见和建议;对于这些用户的反馈与声音,如果我们视而不见、充耳不闻,那么我们最终将失去用户;但是,如果我们认真的去倾听用户的声音并对这些“声音”进行积极的反馈,那么,这将推动我们开发软件朝更好的方向去发展。

总结来说,多掌握一些定律和原则肯定是对我们的日常工作有很大帮助的。这使我们能够从某个角度评估某些情况,如果没有它们,我们不可能了解这些情况的背后道理。然而,盲目地将定律和原则应用于每种情况是行不通的。每一种情况都会存在微妙的变化,这可能意味着某个原则不能或不应该适用。

最后希望大家,不要被细枝末节阻碍了视线,把握住事情的本质才能快速有效地解决好它。

有的时候,化繁为简,反而可以轻松自如哦~



RECOMMEND


推荐阅读

   

2022年面向前端开发人员的9个最佳UI组件库/框架

2022高频前端面试题合集之JavaScript篇(上)

2022高频前端面试题合集之JavaScript篇(中)

影响程序员独立思考的陷阱,你中招了吗?

程序猿终身学习有必要吗?这篇文章就是最好的答案

2022程序员跳槽不完全指南



浏览 5
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报