當程序員的經(jīng)歷讓我知道了一些關(guān)于軟件編程的事情。下面的這些事情可能會(huì )讓朋友們對軟件開(kāi)發(fā)感到驚訝:
一個(gè)程序員用在寫(xiě)程序上的時(shí)間大概占他的工作時(shí)間的10-20%,大部分的程序員每天大約能寫(xiě)出10-12行的能進(jìn)入最終的產(chǎn)品的代碼 — —不管他的技術(shù)水平有多高。 好的程序員花去90%的時(shí)間在思考、研究和實(shí)驗,來(lái)找出最優(yōu)方案。差的程序員花去90%的時(shí)間在調試問(wèn)題程序、盲目的修改程序,期望某種寫(xiě)法能可行。
”一個(gè)卓越的車(chē)床工可以要求比一個(gè)一般的車(chē)床工多拿數倍高的工資,但一個(gè)卓越的軟件寫(xiě)手的價(jià)值會(huì )10000倍于一個(gè)普通的寫(xiě)手。“ — — 比爾 蓋茨
一個(gè)好的程序員的效率會(huì )是一個(gè)普通的程序員的十倍之上。一個(gè)偉大的程序員的效率會(huì )是一個(gè)普通程序員的20-100倍。這不是夸張 — — 1960年以來(lái)的無(wú)數研究都一致的證明了這一點(diǎn)。一個(gè)差的程序員不僅僅是沒(méi)效率 — — 他不僅不能完成任務(wù),寫(xiě)出的大量代碼也讓別人頭痛的沒(méi)法維護。
偉大的程序員只花很少的時(shí)間去寫(xiě)代碼 — — 至少指那些最終形成產(chǎn)品的代碼。那些要花掉大量時(shí)間寫(xiě)代碼的程序員都是太懶惰,太自大,太傲慢,不屑用現有的方案去解決老問(wèn)題。偉大的程序員的精明之處在于懂得欣賞和重復利用通用模式。好的程序員并不害怕經(jīng)常的重構(重寫(xiě))他們的代碼以求達到最好效果。差的程序員寫(xiě)的代碼缺乏整體概念,冗余,沒(méi)有層次,沒(méi)有模式,導致很難重構。把這些代碼扔掉重做也比修改起來(lái)容易。
軟件遵循熵的定律,跟其它所有東西一樣。持續的變更會(huì )導致軟件腐爛,腐蝕掉對原始設計的完整性概念。軟件的腐爛是不可避免的,但程序員在開(kāi)發(fā)軟件時(shí)沒(méi)有考慮完整性,將會(huì )使軟件腐爛的如此之快,以至于軟件在還沒(méi)有完成之前就已經(jīng)毫無(wú)價(jià)值了。軟件完整性上的熵變可能是軟件項目失敗最常見(jiàn)的原因。(第二大常見(jiàn)失敗原因是做出的不是客戶(hù)想要的東西。)軟件腐爛使開(kāi)發(fā)進(jìn)度呈指數級速度放緩,大量的軟件在失敗之前都是面對著(zhù)突增的時(shí)間要求和資金預算。
2004年的一項研究表明大多數的軟件項目(51%)會(huì )在關(guān)鍵功能上失敗,其中15%是完全的失敗。這比1994年前有很大的改進(jìn),當時(shí)是31%。
盡管大多數軟件都是團體開(kāi)發(fā)的,但這并不是一項民主的活動(dòng)。通常,一個(gè)人負責設計,其他人負責實(shí)現細節。
編程是個(gè)很難的工作。是一種劇烈的腦力勞動(dòng)。好的程序員7×24小時(shí)的思考他們的工作。他們最重要的程序都是在淋浴時(shí)、睡夢(mèng)中寫(xiě)成的。因為這最重要的工作都是在遠離鍵盤(pán)的情況下完成的,所以軟件工程不可能通過(guò)增加在辦公室的工作時(shí)間或增加人手來(lái)加快進(jìn)度。

