每一位程式設計師手中都應該有一把 奧卡姆剃刀

2021-10-05 15:04:32 字數 2263 閱讀 6333

在網際網路時代,相信幾乎每個人都聽說過「奧卡姆剃刀定律」,但是你真的懂它的意思嗎?更進一步,你真的知道在實際中如何運用奧卡姆剃刀定律嗎?

奧卡姆剃刀定律(occam's razor, ockham's razor)又稱「奧康的剃刀」,它是由14世紀英格蘭的邏輯學家、聖方濟各會修士奧卡姆的威廉(william of occam,約2023年至2023年)提出。這個原理稱為「如無必要,勿增實體」,即「簡單有效原理」。正如他在《箴言書註》2卷15題說「切勿浪費較多東西去做,用較少的東西,同樣可以做好的事情。」

對於任何乙個概念,看定義無疑是第一步也是重要的一步,但是「紙上得來終覺淺」,要想把乙個概念吃透——真正掌握,必然要在實踐中反覆去體悟才行。上面的定義雖然清晰,但也容易造成一些誤導。「簡單有效原理」似乎在暗示奧卡姆剃刀定律就是極簡主義,相信有很多人也是這麼認為的。

奧卡姆剃刀最初被用在自然科學的相關理論中,作為啟發技巧來使用,我們可以先從自然科學的一些例子中來理解它。在物理學裡,物理學家通常都致力於用最簡單的公式來闡述乙個基本理論,這可以看作是對奧卡姆剃刀的乙個應用。我們熟知的很多物理定律都有非常簡潔的形式,比如大名鼎鼎的牛頓第二定律:

比如愛因斯坦質能方程:

比如,牛頓萬有引力定律:

在愛因斯坦出現之前,牛頓毫無疑問是對人類歷史影響最大的科學家。愛因斯坦的相對論打破了牛頓力學的規律,為物理學開闢了乙個新的天地。說白了,相對論出來之後,萬有引力定律就」不正確「了。不過,你好像從來沒有聽說過牛頓力學是錯的吧?其實理論沒有絕對的對錯,只有哪個更具有解釋性而已,相對論適合大質量物質之間的相互作用(比如太陽,黑洞),其重力場方程的公式如下:

是不是要比萬有引力定律的公式複雜多了??其實牛頓力學在你所能遇見的絕大多數場景裡仍然都是」正確「的,根據奧卡姆剃刀原則,我們就沒必要在這種場景下使用廣義相對論。然而,舉個極端例子,當處理黑洞問題的時候你有必須得使用愛因斯坦的廣義相對論,雖然它「並不簡單」。

奧卡姆剃刀定律說的並不是「簡單」=「有效」,也不會刻意追求「簡單」,你可以理解為它追求的是相對簡單:在能滿足需要的前提下,追求更簡單的那乙個;而當滿足需要的只有一種選擇時,你根本用不到奧卡姆剃刀定律。

用來如果關於同乙個問題有許多種理論,每一種都能作出同樣準確的預言,那麼應該挑選其中使用假定最少的。- wiki

所以,奧卡姆剃刀並不是極簡主義,不是要刻意追求極簡,實際上奧卡姆剃刀是實用主義,實用優先,在滿足需求的情況下絕不搞複雜的事情。回到我們的主題,在程式設計師的日常工作中,該怎麼利用奧卡姆剃刀呢?

構建指的是你創作乙個東西,也就是程式設計師工作中的開發任務。在開發工作中我們需要用到奧卡姆剃刀,再重述一下前面的結論:奧卡姆剃刀是實用主義,實用優先,在滿足需求的情況下絕不搞複雜的事情。一句話, 不要濫用你的技術。能用簡單的手段解決的問題,絕對不要用複雜的辦法。關於這個問題已經有無數的大牛和前輩給我們分享過了經驗,如果你了解**架構的演變歷史(就不難理解這個道理。架構的設計最能體現奧卡姆剃刀原則,加入創業公司做乙個**,上來就做乙個媲美**的架構,雖然技術上你可能是很厲害,但你的公司肯定會完蛋了。這個極端的例子不難理解,而在實際的開發中,有些權衡和取捨並沒有那麼容易「一眼看穿」,所以需要你不斷用奧卡姆剃刀的思維去審視自己的工作。

根據邏輯學,奧卡姆剃刀定律的逆反命題也一定成立。

原命題:如無必要,勿增實體。

逆反命題:如果增加了實體,證明一定有其必要性。

實際上我們常常忽略這個逆反命題的作用。程式設計師每天除了開發任務,還有大量的時間和精力需要用來學習新的技術。乙個新技術的出現,和舊的技術相比一定是解決了某些問題。如果僅僅因為「新」,或者「高大上」,是不足以使一門新技術發展並流行起來的,這符合奧卡姆剃刀逆反定律。所以在學習新技術的時候,我們要時刻用這樣的思維來指導自己,比如:

在很多問題上你都可以這樣去思考,如果你真的能搞清楚新技術中增加的「實體」有哪些「必要性」,那一定會起到提綱挈領的作用,讓你對新技術有乙個巨集觀的把握,從而對其理解的更加透徹、深刻。

總之,應用奧卡姆剃刀定律和奧卡姆剃刀的逆反定律作為指導思想,對我們的開發和學習有很大的指導作用。所以說,每一位程式設計師手裡都應該有一把。

每一位程式設計師都應該提高文件編寫能力

在軟體界,程式設計師不願寫文件和寫不好文件已經成為普遍現象 類似的場景,你是否遇見過 其實,成為ppt架構師固然不好,但成為只會碼程式,無法向同事 老闆 客戶有效解釋 闡述你的意圖 計畫的技術人,你覺得好嗎?乙個專案通常要包含的文件 1 專案實施 開發 計畫和方案 2 軟體需求規格說明書 3 軟體設...

每個程式設計師都應該經歷一次軟考

今天討論的問題可能會引起很多爭議,但我還是堅持做有爭議的敢說真話的人 軟考在很多各大高校裡還是比較流行的,只能說是流行而已,60 的人只是去湊熱鬧為國家軟考辦去做貢獻的,為什麼要說 每個程式設計師都應該經歷一次軟考 呢,這是源自於本人從軟考中得到的感悟吧,在園子裡很多人都是經歷過軟考的,有的人會說軟...

程式設計師都應該挖一口屬於自己的井

兩個和尚的故事 兩個和尚住在隔壁,所謂隔壁就是隔壁那座山,他們分別住在相鄰的兩座山上的廟裡。兩座山之間有一條溪,這兩個和尚每天都會在同一時間下山去溪邊挑水,久而久之,他們便成為了好朋友。就這樣,時間在每天挑水中不知不覺已經過了5年。突然有一天,左邊這座山的和尚沒有下山挑水,右邊那座山的和尚心想 他大...