
在互聯網時代,相信幾乎每個人都聽說過「奧卡姆剃刀定律」,但是你真的懂它的意思嗎?更進一步,你真的知道在實際中如何運用奧卡姆剃刀定律嗎?
我們先看一下百度百科對它的定義:
奧卡姆剃刀定律(Occam's Razor, Ockham's Razor)又稱“奧康的剃刀”,它是由14世紀英格蘭的邏輯學家、圣方濟各會修士奧卡姆的威廉(William of Occam,約1285年至1349年)提出,這個原理稱為“如無必要,勿增物體”,即“簡單有效原理”,正如他在《箴言書注》2卷15題說“切勿浪費較多東西去做,用較少的東西,同樣可以做好的事情,”
對于任何一個概念,看定義無疑是第一步也是重要的一步,但是“紙上得來終覺淺”,要想把一個概念吃透——真正掌握,必然要在實踐中反復去體悟才行,上面的定義雖然清晰,但也容易造成一些誤導,“簡單有效原理”似乎在暗示奧卡姆剃刀定律就是極簡主義,相信有很多人也是這么認為的,
奧卡姆剃刀定律是極簡主義嗎?
奧卡姆剃刀最初被用在自然科學的相關理論中,作為啟發技巧來使用,我們可以先從自然科學的一些例子中來理解它,在物理學里,物理學家通常都致力于用最簡單的公式來闡述一個基本理論,這可以看作是對奧卡姆剃刀的一個應用,我們熟知的很多物理定律都有非常簡潔的形式,比如大名鼎鼎的牛頓第二定律:

比如愛因斯坦質能方程:

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

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

是不是要比萬有引力定律的公式復雜多了???其實牛頓力學在你所能遇見的絕大多數場景里仍然都是”正確“的,根據奧卡姆剃刀原則,我們就沒必要在這種場景下使用廣義相對論,然而,舉個極端例子,當處理黑洞問題的時候你有必須得使用愛因斯坦的廣義相對論,雖然它“并不簡單”,
奧卡姆剃刀定律說的并不是“簡單”=“有效”,也不會刻意追求“簡單”,你可以理解為它追求的是相對簡單:在能滿足需要的前提下,追求更簡單的那一個;而當滿足需要的只有一種選擇時,你根本用不到奧卡姆剃刀定律,
用來如果關于同一個問題有許多種理論,每一種都能作出同樣準確的預言,那么應該挑選其中使用假定最少的,- wiki
所以,奧卡姆剃刀并不是極簡主義,不是要刻意追求極簡,實際上奧卡姆剃刀是實用主義,實用優先,在滿足需求的情況下絕不搞復雜的事情,回到我們的主題,在程式員的日常作業中,該怎么利用奧卡姆剃刀呢?
程式員手中的剃刀
構建的角度/開發
構建指的是你創作一個東西,也就是程式員作業中的開發任務,在開發作業中我們需要用到奧卡姆剃刀,再重述一下前面的結論:奧卡姆剃刀是實用主義,實用優先,在滿足需求的情況下絕不搞復雜的事情,一句話, 不要濫用你的技術,能用簡單的手段解決的問題,絕對不要用復雜的辦法,關于這個問題已經有無數的大牛和前輩給我們分享過了經驗,如果你了解淘寶架構的演變歷史(https://www.cnblogs.com/bianqi/p/12184331.html)就不難理解這個道理,架構的設計最能體現奧卡姆剃刀原則,加入創業公司做一個網站,上來就做一個媲美淘寶的架構,雖然技術上你可能是很厲害,但你的公司肯定會完蛋了,這個極端的例子不難理解,而在實際的開發中,有些權衡和取舍并沒有那么容易“一眼看穿”,所以需要你不斷用奧卡姆剃刀的思維去審視自己的作業,
解構的角度/學習
根據邏輯學,奧卡姆剃刀定律的逆反命題也一定成立,
原命題:如無必要,勿增物體,
逆反命題:如果增加了物體,證明一定有其必要性,
實際上我們常常忽略這個逆反命題的作用,程式員每天除了開發任務,還有大量的時間和精力需要用來學習新的技術,一個新技術的出現,和舊的技術相比一定是解決了某些問題,如果僅僅因為“新”,或者“高大上”,是不足以使一門新技術發展并流行起來的,這符合奧卡姆剃刀逆反定律,所以在學習新技術的時候,我們要時刻用這樣的思維來指導自己,比如:
- MySQL已經那么強大了,為什么最近這些年NoSQL資料庫很火,NoSQL的出現一定是解決了一些MySQL無法解決的事情,那是什么?
- 面向物件編程如此普遍和強大了,為什么還會有Scala這樣的函式式編程語言流行,函式式編程解決了什么問題?
- Hadoop不香嗎? 為啥Spark現在越來越火?要看Spark和Hadoop有什么區別,最好先看一下Spark解決了哪些Hadoop不能解決的核心問題,
在很多問題上你都可以這樣去思考,如果你真的能搞清楚新技術中增加的“物體”有哪些“必要性”,那一定會起到提綱挈領的作用,讓你對新技術有一個宏觀的把握,從而對其理解的更加透徹、深刻,
總之,應用奧卡姆剃刀定律和奧卡姆剃刀的逆反定律作為指導思想,對我們的開發和學習有很大的指導作用,所以說,每一位程式員手里都應該有一把,
如果你喜歡我的文章,可以在任一平臺搜索【黑客悟理】關注我,非常感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/14096.html
標籤:其他
