過早優化是萬惡之源

watch-life.net發表於2012-08-10

  Donald Knuth說“過早優化是萬惡之源”(premature optimization is the root of all evil)。這話也許有些誇張,但“過早優化”的危害我覺得不能忽視。

  讓正確的程式更快比讓快速的程式正確要容易太多,太多。所以,預設情況下,不要集中在讓程式碼更快上,首先把注意力放在使程式碼儘可能性的清楚和可讀上。清楚的程式碼易於書寫正確,易於理解,易於重構,並且易於優化。複雜化,包括優化,總是在稍後引入,並且只是在必須的時候。

  同時,我覺得“過早優化”的概念不專屬編寫程式,生活中的示例也比比皆是。不信,你看看下面這些情形你是否遇到過:

  1、當你開始學一門程式語言的時候(比如c#),你想如果可以精通開發工具(比如Visual Studio)一定如虎添翼,於是一開始你就花很多時間去研究開發工具,而忘記自己學習的重點是語言本身,而非工具。或者,一開始,你花不少的時間去選擇哪門程式語言,比較各種語言的優劣,在五花八門的語言前面猶豫不決,這個想學,那個也不想放棄,結果都是學個半路子。

  2、當你學習一門外語比如英語的時候,一開始,你花了很多的時間去下載有關英語資料,花了很多的時間去找英語書籍,以為有了這些資料和書籍就可以學好英文,而不是一開始就踏踏實實的從單詞、語法開始,結果後來資料下載了一大堆,書籍買了不少,卻沒有堅持下去。

  3、你想搞體育鍛煉,比如打羽毛球,於是一開始你花大量時間去買球衣、球鞋、球拍等裝備,可沒連幾天,你發現自己開始三天打魚了,最後,那些裝備都起了灰,也沒鍛鍊幾次。

  4、你想做時間管理(Getting Things Done),於是你研究各種時間管理的資料,上各種時間管理技巧的網站,比如lifehack、 digg 、gtdlife,下載對最流行的GTD的管理軟體,以節省時間的名義浪費時間,很浮躁,不能做到實實在在把每天的計劃都落實,拖拖拉拉。

  5、你有沒有這樣的體驗,一本書你總是對開頭的部分看的最仔細,後面的章節沒堅持看下去,下次又重複這種迴圈。當你計劃做一件事的時候,總是規劃的非常完美,幾乎考慮每個細節,但卻沒有認認真真、一步一步執行,或者過早完美計劃,反而讓你縮手縮腳,猶豫不前,瞻前顧後,顧此失彼,最後虎頭蛇尾。

  6、比如,如果我有了錢,我就如何如何享受快樂,比如,如果我將來有了很多的時間,我就會花更多的時間陪家人或鍛鍊…

  這樣類似的例子還可以舉很多。

  過早優化對大的問題在於:過早關注不重要的部分,而忽略行動和目標本身。以靜態的思維來優化,殊不知,事務發展總是動態的,“優化”是需要長期的實踐積累才可以獲得。出發點是好的,但往往好心辦壞事,折騰大量的時間,做了很多不該做的,而該做的、重要的反而沒做。強化外部條件、工具等外在,而忽略內在因素和行動本身,或者,過多期望將來,而忽略當下眼前。

  活在當下,實實在在做好手頭的事,是避免“過早優化”最好的方法之一

相關文章