2023/08/14

過早優化效應 (Premature Optimization Effect)

Donald Knuth 在 The Art of Computer Programming 提出了過早優化法則

We should forget about small efficiencies,
say about 97% of the time:
premature optimization is the root fo all evel.
Yet we should not pass up our opportunities
in that critical 3%.

有 97% 的優化是不值得花時間去做的,過早優化是萬惡根源。
但還是要注意在關鍵的 3% 要提早去優化。

把開發時間花在不重要的優化上,可能會因為過度優化,而化簡為繁,讓系統太過複雜。過早的優化,會浪費大量資源,包含時間、金錢、人力,同時也可能因為這些優化,而衍生出其他的問題。

對於這個法則的爭論點在於,系統的哪個部分是關鍵的 3%。

這個問題跟開發人員的經驗、能力,專案的時程跟預算,系統規劃時設定的最大容量這些有關係。

要知道系統的 3% 關鍵,需要在產品規劃與設計時,就能夠預判系統的使用環境,同時的上線人數。但要能正確預判專案的基本條件並不容易,尤其是一個面對未知系統人數的服務,因為我們永遠不知道,這個系統是不是會爆紅而導致系統的瞬間流量突然增加。一但發生這個狀況,也只能面對,因為一般使用者,甚至是系統的 stake holder 都無法正確預判,有時候就只能等到事情發生了才知道,但也過了那個大流量的使用時機,因為使用者已經失去了信心,不會再用。

有經驗的開發人員,因為經驗的累積,能夠用以往的專案經驗,在新專案一開始的時候,就套用了一個基本能夠彈性修改的系統架構,但難免會遇到一個根本的問題,就是系統的運作硬體環境,程式語言或是 framework 本身的性能瓶頸,或是專案預算的限制。

問題都是存在的,但我們要知道,所有的系統使用時都有極限與限制,盡可能以漸進的方式使用某項新的系統與技術,用保守的態度面對,這樣應該比較能避免遇到問題。激進的方法當然也有可能成功,就看後續的問題處理,運氣好的話,也能撐過動蕩期。

References

过早优化是万恶之源——克努特优化原则 (Knuth's optimization principle) - 腾讯云开发者社区-腾讯云

# 流言終結者:過早進行優化是萬惡之源?

# 「过早的优化是万恶之源」这种说法对不对,为什么?

沒有留言:

張貼留言