在互聯網時代,相信幾乎每一個人都據說過「奧卡姆剃刀定律」,可是你真的懂它的意思嗎?更進一步,你真的知道在實際中如何運用奧卡姆剃刀定律嗎?html
咱們先看一下百度百科對它的定義:程序員
奧卡姆剃刀定律(Occam's Razor, Ockham's Razor)又稱「奧康的剃刀」,它是由14世紀英格蘭的邏輯學家、聖方濟各會修士奧卡姆的威廉(William of Occam,約1285年至1349年)提出。這個原理稱爲「如無必要,勿增實體」,即「簡單有效原理」。正如他在《箴言書注》2卷15題說「切勿浪費較多東西去作,用較少的東西,一樣能夠作好的事情。」數據庫
對於任何一個概念,看定義無疑是第一步也是重要的一步,可是「紙上得來終覺淺」,要想把一個概念吃透——真正掌握,必然要在實踐中反覆去體悟才行。上面的定義雖然清晰,但也容易形成一些誤導。「簡單有效原理」彷佛在暗示奧卡姆剃刀定律就是極簡主義,相信有不少人也是這麼認爲的。編程
奧卡姆剃刀最初被用在天然科學的相關理論中,做爲啓發技巧來使用,咱們能夠先從天然科學的一些例子中來理解它。在物理學裏,物理學家一般都致力於用最簡單的公式來闡述一個基本理論,這能夠看做是對奧卡姆剃刀的一個應用。咱們熟知的不少物理定律都有很是簡潔的形式,好比大名鼎鼎的牛頓第二定律:架構
好比愛因斯坦質能方程:編程語言
好比,牛頓萬有引力定律:函數式編程
在愛因斯坦出現以前,牛頓毫無疑問是對人類歷史影響最大的科學家。愛因斯坦的相對論打破了牛頓力學的規律,爲物理學開闢了一個新的天地。說白了,相對論出來以後,萬有引力定律就」不正確「了。不過,你好像歷來沒有據說過牛頓力學是錯的吧?其實理論沒有絕對的對錯,只有哪一個更具備解釋性而已,相對論適合大質量物質之間的相互做用(好比太陽,黑洞),其重力場方程的公式以下:函數
是否是要比萬有引力定律的公式複雜多了🙂?其實牛頓力學在你所能碰見的絕大多數場景裏仍然都是」正確「的,根據奧卡姆剃刀原則,咱們就不必在這種場景下使用廣義相對論。然而,舉個極端例子,當處理黑洞問題的時候你有必須得使用愛因斯坦的廣義相對論,雖然它「並不簡單」。oop
奧卡姆剃刀定律說的並非「簡單」=「有效」,也不會刻意追求「簡單」,你能夠理解爲它追求的是相對簡單:在能知足須要的前提下,追求更簡單的那一個;而當知足須要的只有一種選擇時,你根本用不到奧卡姆剃刀定律。學習
用來若是關於同一個問題有許多種理論,每一種都能做出一樣準確的預言,那麼應該挑選其中使用假定最少的。- wiki
因此,奧卡姆剃刀並非極簡主義,不是要刻意追求極簡,實際上奧卡姆剃刀是實用主義,實用優先,在知足需求的狀況下毫不搞複雜的事情。回到咱們的主題,在程序員的平常工做中,該怎麼利用奧卡姆剃刀呢?
構建指的是你創做一個東西,也就是程序員工做中的開發任務。在開發工做中咱們須要用到奧卡姆剃刀,再重述一下前面的結論:奧卡姆剃刀是實用主義,實用優先,在知足需求的狀況下毫不搞複雜的事情。一句話, 不要濫用你的技術。能用簡單的手段解決的問題,絕對不要用複雜的辦法。關於這個問題已經有無數的大牛和前輩給咱們分享過了經驗,若是你瞭解淘寶架構的演變歷史(http://www.javashuo.com/article/p-phqfxiai-d.html)就不難理解這個道理。架構的設計最能體現奧卡姆剃刀原則,加入創業公司作一個網站,上來就作一個媲美淘寶的架構,雖然技術上你多是很厲害,但你的公司確定會完蛋了。這個極端的例子不難理解,而在實際的開發中,有些權衡和取捨並無那麼容易「一眼看穿」,因此須要你不斷用奧卡姆剃刀的思惟去審視本身的工做。
根據邏輯學,奧卡姆剃刀定律的逆反命題也必定成立。
原命題:如無必要,勿增實體。
逆反命題:若是增長了實體,證實必定有其必要性。
實際上咱們經常忽略這個逆反命題的做用。程序員天天除了開發任務,還有大量的時間和精力須要用來學習新的技術。一個新技術的出現,和舊的技術相比必定是解決了某些問題。若是僅僅由於「新」,或者「高大上」,是不足以使一門新技術發展並流行起來的,這符合奧卡姆剃刀逆反定律。因此在學習新技術的時候,咱們要時刻用這樣的思惟來指導本身,好比:
在不少問題上你均可以這樣去思考,若是你真的能搞清楚新技術中增長的「實體」有哪些「必要性」,那必定會起到提綱挈領的做用,讓你對新技術有一個宏觀的把握,從而對其理解的更加透徹、深入。
總之,應用奧卡姆剃刀定律和奧卡姆剃刀的逆反定律做爲指導思想,對咱們的開發和學習有很大的指導做用。因此說,每一位程序員手裏都應該有一把。
若是你喜歡個人文章,能夠在任一平臺搜索【黑客悟理】關注我,很是感謝!