全球专业中文经管百科,由121,994位网友共同编写而成,共计436,047个条目

過早優化

用手机看条目

出自 MBA智库百科(https://wiki.mbalib.com/)

目錄

什麼是過早優化

  過早優化 (Knuth's optimization principle)又稱“克努特優化原則”最早由電腦科學家高德納提出。在《goto語句的結構化編程》論文中,他寫到[1]

  “程式員們浪費大量時間去思考或者擔心他們程式中非關鍵部分速度。而在考慮調試和維護時,這些所謂提高效率做法實際上十分不妥。我們應該放棄小效率點,並且要在97%時間提醒自己,過早優化是萬惡之源,而且連那關鍵3%也不能夠放過。”

  優化是一個褒義詞,涵義積極正面。甚至於,很多人不加思考地追求最優化。但“差之毫釐,謬以千里”,將優化絕對化,不管何時何地都追求最優化,會反受其害。

  例如,前置思考中提到,恐龍等頂級掠食者,為高居食物鏈頂端,演化方向較為單一,追求長得更大、更有力量、跑得更快、爪牙更鋒利,讓少數幾個性狀逼近生理極限,使自己沒有天敵。

  如此一來,其他多數性狀都喪失發展機會。這在生物學界,被稱為“演化單行道”,甚至是“演化死衚衕”。錶面上看起來很強大,但實際上很脆弱。

  也就是說,最優是最優,但環境一變卻因為無法適應,導致種族滅絕。可以說,片面追求最優化,是“撿了芝麻,丟了西瓜”。凡事利弊兼具,過早片面優化,可能帶來災難。

過早優化的啟示[1]

  避免過早優化,不是說不要優化,僅僅是說“不要過早”優化。也就是說,優化之前要判斷是否是優化時機。

  做一個類比,就好像我們畫畫,先畫輪廓、草圖,然後填入細節,一步步臻於完美。這有嚴格優先順序順序。

  如果剛畫幾筆,就開始優化細節,很可能這個局部畫得很好,達到局部最優,但整體結構編排不當,產生結構性缺陷,最後畫作質量平平,可能就淪為平庸之作。

  類似的,寫一篇文章,首先考慮的是中心思想、整體框架,其次是段落編排、起承轉合,最後才是文字潤色、咬文嚼字,如果顛倒這個順序,也屬於過早優化。

  要優化,不要過早優化,核心在於優化目標設定。

  過早優化,其實是在追求“局部最優解”,意即:把其中一部分做到極致,再做另一部分。陷阱在於,劃分部分方法可能失之隨意、整體失當,容易導致局部優化對整體影響不可控。

  適時優化,其實是在追求“全局最優解”,意即:優化整體表現。劃分方式往往是,從整體到部分、從抽象到具體,先驗證邏輯,再補充細節,這樣就不容易鎖死在局部高峰,更有條件登上整體高峰。

  換一種說法是,在沒有找到影響整體最優最重要幾個因素前,不要過早把資源投放到次要甚至完全不重要因素優化上。

  高德納最早提出過早優化概念,就是因為洞察到,程式員在錯誤方向和時間點浪費太多時間。對此,有一個類比說,還沒有寫完程式,你就開始考慮它的性能問題,這樣的軟體好比姑娘還沒有成年卻已經嫁人了。

  事實上,只有通過測量並找出真正存在問題地方,才需要開啟優化。

  類似的,在商業領域、管理領域等,先推出最小可用品,獲得真實數據反饋,明確自己所開發產品或者解決方案,真正符合市場需要,才不會在錯誤開發方向浪費過多資源。

  值得註意的是,分辨什麼是局部高峰、什麼是整體高峰,富有挑戰。

  也就意味著,可能要反覆試錯,常走下坡路,這需要科學方法和足夠耐心。如果一個人不能延遲滿足,只能接受走上坡路有序愉悅,不能接受走下坡路混亂痛苦,就容易掉入過早優化陷阱。

參考文獻

  1. 1.0 1.1 Donald E Knuth, 蘇運霖. 帶goto語句的結構程式設計(續)[J]. 電腦科學, 1982(3):36-52.
本條目對我有幫助1
MBA智库APP

扫一扫,下载MBA智库APP

分享到:
  如果您認為本條目還有待完善,需要補充新內容或修改錯誤內容,請編輯條目投訴舉報

本条目由以下用户参与贡献

上任鹅陈.

評論(共0條)

提示:評論內容為網友針對條目"過早優化"展開的討論,與本站觀點立場無關。

發表評論請文明上網,理性發言並遵守有關規定。

打开APP

以上内容根据网友推荐自动排序生成

官方社群
下载APP

闽公网安备 35020302032707号