為何程序員完成最后20%的工作需要的時間跟之前的80%一樣多?
英文原文:Let me tell you why the last 20% of work takes the same amount of time as the first 80%
聽過行百里者半九十吧。這句話在程序員的工作中同樣適用,到底是為何呢?Matija 用一個精巧的比喻揭示了個中道理。
其實這就好比在高峰期從郊外開車回市中心。前 80% 的路程很順,高速嘛,可能兩小時就走完了,但是到了城里,就走不動了,紅綠燈,人行道,各種環線和菜鳥司機,可能兩個小時還不夠用的。
編程也是如此。最開始你要設計框架,給整個項目打基礎,然后開始開發,幾周或者幾月之后,你完成了整個項目 80% 的工作,各種關鍵模塊開始起作用了。
但是好戲才剛剛開始,當你準備好好打磨這款產品時,就會發現許多奇怪的 bug 冒出來了。比如:“喂,你知道這個程序在讀取文件時拔掉 USB 線會崩潰么?”,“看起來是程序不想下載文件名里有感嘆號的文件...”
這個時候,如果管理層下令要盡快搞定這剩下的 20% 的話,開發團隊就得棄掉汽車,徒步越過最后幾個障礙,只求按期到達地點,把車丟那不管了。也許能夠按期完工,但是這種辦法并不明智。
這篇文章被貼到 HN 上之后,引發了眾網友的熱烈討論,大家紛紛表示感同身受。有一位朋友貼出了 Quora 上一個很精彩的問答:“為何軟件開發的實際周期總是比預期的要長兩三倍?”排位第一的回答真心機智幽默。
簡單的說是這樣的,軟件開發同徒步旅游一樣,可能你最初是計劃在 10 天內走完 500 公里,但真走起來,你會發現路上碰到的問題層出不窮,每天走的里程數都在遞減,團隊士氣也不太穩定,延期很多時候都是無可避免的。
其實何止是軟件開發,做任何一款產品的歷程大都如此。硬件項目也是做出原型簡單,真正量產時會碰到各種問題,需要你耐下性子一個個解決,有時還得不斷返工。魔鬼在細節中潛藏,要想達到盡善盡美,就得花額外的精力去雕琢那最后 10% 的部分。