優(yōu)秀的程序員,都該需要知道一點剃刀法則

轉載自Duing(ID:duyi-duing)
大家好,我是法醫(yī)
在互聯(lián)網(wǎng)時代,相信幾乎每個人都聽說過「剃刀法則」,但是你真的懂它的意思嗎?更進一步,你真的知道在程序員的實際中工作如何運用剃刀法則嗎?
我們先看一下百度百科對它的定義:
“剃刀”(Razors)是一種經(jīng)驗法則,可以幫助我們簡化決策,推動更好的結果發(fā)生。如果使用得當,它可以有效地提高我們的決策質量,并在此過程中減少壓力。
其實,所謂的剃刀法則并不只是單一的某一個定律,它包含了很多經(jīng)驗法則。今天的文章,我們就來講一下,那些適用于程序員的剃刀法則。
奧卡姆剃刀定律又稱“奧康的剃刀”,它是由14世紀英格蘭的邏輯學家、圣方濟各會修士奧卡姆的威廉(約1285年至1349年)提出。這個原理稱為“如無必要,勿增實體”,即“簡單有效原理”。正如他在《箴言書注》2卷15題說“切勿浪費較多東西去做,用較少的東西,同樣可以做好的事情?!?/span>
奧卡姆剃刀定律說的并不是“簡單”=“有效”,也不會刻意追求“簡單”,你可以理解為它追求的是相對簡單:在能滿足需要的前提下,追求更簡單的那一個;而當滿足需要的只有一種選擇時,你根本用不到奧卡姆剃刀定律。
所以,奧卡姆剃刀并不是極簡主義,不是要刻意追求極簡,實際上奧卡姆剃刀是實用主義,實用優(yōu)先,在滿足需求的情況下絕不搞復雜的事情?;氐轿覀兊闹黝},在程序員的日常工作中,該怎么利用奧卡姆剃刀呢?
1、構建的角度/開發(fā)
構建指的是你創(chuàng)作一個東西,也就是程序員工作中的開發(fā)任務。
在開發(fā)工作中我們需要用到奧卡姆剃刀,再重述一下前面的結論:奧卡姆剃刀是實用主義,實用優(yōu)先,在滿足需求的情況下絕不搞復雜的事情。
一句話,不要濫用你的技術。能用簡單的手段解決的問題,絕對不要用復雜的辦法。
關于這個問題已經(jīng)有無數(shù)的大牛和前輩給我們分享過了經(jīng)驗,如果你了解淘寶架構的演變歷史就不難理解這個道理。架構的設計最能體現(xiàn)奧卡姆剃刀原則,加入創(chuàng)業(yè)公司做一個網(wǎng)站,上來就做一個媲美淘寶的架構,雖然技術上你可能是很厲害,但你的公司肯定會完蛋了。
這個極端的例子不難理解,而在實際的開發(fā)中,有些權衡和取舍并沒有那么容易“一眼看穿”,所以需要你不斷用奧卡姆剃刀的思維去審視自己的工作。
2、解構的角度/學習
根據(jù)邏輯學,奧卡姆剃刀定律的逆反命題也一定成立。
原命題:如無必要,勿增實體。
逆反命題:如果增加了實體,證明一定有其必要性。
實際上我們常常忽略這個逆反命題的作用。程序員每天除了開發(fā)任務,還有大量的時間和精力需要用來學習新的技術。一個新技術的出現(xiàn),和舊的技術相比一定是解決了某些問題。
如果僅僅因為“新”,或者“高大上”,是不足以使一門新技術發(fā)展并流行起來的,這符合奧卡姆剃刀逆反定律。所以在學習新技術的時候,我們要時刻用這樣的思維來指導自己。
比如:面向對象編程如此普遍和強大了,為什么還會有Scala這樣的函數(shù)式編程語言流行,函數(shù)式編程解決了什么問題?
在很多問題上你都可以這樣去思考,如果你真的能搞清楚新技術中增加的“實體”有哪些“必要性”,那一定會起到提綱挈領的作用,讓你對新技術有一個宏觀的把握,從而對其理解的更加透徹、深刻。
帕累托法則指出,通常80%的結果來自20%的原因。數(shù)字80和20無論如何都不是精確的,但該原則的總體思路是結果通常分布不均。
我們可以看到生活的許多領域遵守著這條規(guī)則,例如:
世界上最富有的20%的人創(chuàng)造了世界80%的收入。
80%的犯罪是由20%的罪犯所為(自2020年以來)。
我們知道80%的病毒傳播來自20%的受感染人群。
……
作為程序員,我們該如何應用在日常工作中?
我們可以從帕累托法則中獲得的主要好處是專注。它可以幫助我們專注于重要的事情(20%),而不是在不重要的事情(其他80%)上浪費時間和精力。
不重要的事情對我們來說往往很重要,因為這樣的事情總是有太多(而且看起來很緊急)。但是最好的結果往往是通過關注重要的少數(shù)來達成的。
在前端開發(fā)中,我們可以使用它來專注于構建正確的功能,例如:
專注于實現(xiàn)80%產品價值的那20%的產品功能。
專注于導致80%用戶使用異常的那20%的錯誤。
專注于實現(xiàn)80%的產品功能需要的那20%總構建時間等等。
只要問“現(xiàn)在最重要的事情是什么?”就可以幫助建立下一個最重要的事情,而不是下一個最緊急的事情。
具體解釋是這樣的:
很多時候,當與持不同意見者交流時,若非必要,就先聽再說,多聞慎言,不要一被提建議意見就下意識地進入防御狀態(tài),這毫無裨益。而如果真的聽得下去,就總能收獲一些有用的東西。
對于我們程序員來說,用戶在使用軟件的過程中會形成對軟件的意見和建議;對于這些用戶的反饋與聲音,如果我們視而不見、充耳不聞,那么我們最終將失去用戶;但是,如果我們認真的去傾聽用戶的聲音并對這些“聲音”進行積極的反饋,那么,這將推動我們開發(fā)軟件朝更好的方向去發(fā)展。
總結來說,多掌握一些定律和原則肯定是對我們的日常工作有很大幫助的。這使我們能夠從某個角度評估某些情況,如果沒有它們,我們不可能了解這些情況的背后道理。然而,盲目地將定律和原則應用于每種情況是行不通的。每一種情況都會存在微妙的變化,這可能意味著某個原則不能或不應該適用。
最后希望大家,不要被細枝末節(jié)阻礙了視線,把握住事情的本質才能快速有效地解決好它。
有的時候,化繁為簡,反而可以輕松自如哦~
RECOMMEND
