八二定律湊談
不知道為甚麼,軟件界常常提及八二定律例如是優化工作,卻往往不知所云。
八二定律的全句是: 約20%的變數控制了80%的結果
80/20的法則認為:原因和結果、投入和產出、努力和報酬之間本來存在著無法解釋的不平衡
出處
或曰:
二八定律又名80/20定律、帕累托法則(Pareto‘s principle)也叫巴萊特定律、朱倫法則(Juran’s Principle)、關鍵少數法則(Vital Few Rule)、不重要多數法則(Trivial Many Rule)最省力的法則、不平衡原則等,被廣泛應用於社會學及企業管理學等。
百度百科
不管叫怎樣的名字都好,共通點皆表達出少數比多數重要,甚至被包裝是”最省力法則”。 現在開始破題,掀開八二定律的葫蘆裡賣甚麼藥。
八二定律的抽象點在於原因和結果皆沒有定義好,所以是一個萬能KEY,甚或是只要分布看起來像八二開,那就運用八二定律orz
比如說人類80%時間都在睡覺和吃飯,剩20%時間有用,那你是不是不睡覺了~
這裡給出一個例子: 扔飛鏢。我也不懂扔飛鏢,假設正中間是50分,外面綠色圈是30分,內圈都10分,外圈5分,扔不中板子當然是0分,最高分的勝出。

接著請某人蒙著眼扔100個飛鏢,飛鏢隨機地到板子上每一個位置。最後結算分數會發現80%的總分數很可能是來自於當中的20發。
簡單概括八二定律直接指出,幾發飛鏢貢獻的分數最多,很可能就是正中紅心50分和只差一點點的綠色小圈30分。
誤區一: 投入再多 報酬一樣 / 減少投入 報酬一樣
這顯然是錯誤的。如果蒙著眼扔100個飛鏢可得300分,那麼蒙著眼扔50個飛鏢的期望值(expected value)是150分,而蒙著眼扔200個飛鏢的期望值是600分 — 扔飛鏢的數目和分數期望值完全是線性關係(linear relationship & directly proportional)。
誤區二: 那麼我只需要20發飛鏢
這的確是有利用八二定律,卻毫不實際 — 你需要準繩度。你不能再蒙著眼,每枚飛鏢打出去都不是打中紅心就是旁邊的綠圈。
要做到20發飛鏢打出300分之前需要用200發、2000發甚至20000發飛鏢訓練。所謂的台上十分鐘,台下十年功啊…
因此八二定律在扔飛鏢應該如此解讀: 投入與投入之間是不平衡的,盲著眼扔的人只需要亂扔; 高手看著板子不知道在看甚麼。報酬與報酬之間之間是不平衡的,扔中紅心當然比扔到旁邊分數高不少。
再精練一點說, 非凡技術造就非凡成就,僅此而已。
八二原則不管叫怎樣的名字都好,共通點皆表達出少數比多數重要,甚至被包裝是”最省力法則”。可以想想如今標題黨橫行的現世下把”最省力法則”5個大字打印在書名、複製到內容農場(content-farm)上面去,進而加工成心靈雞湯,後果難以想像。八二原則任意讓人羅列一堆變量和結果,忽略達成那些變量的條件,強行安放八二劃分,是痂人說夢,不知道害了多少人。有見及此,試以劣筆諫言幾句,奢望能遏止歪風。
回到編程,80%的代碼不需要優化,但是要優化那20%需要優化的代碼,很可能也會用上80%的時間。只付出20%的投入,是不可能有同樣的高度,共勉之。