我之所以要用聰明和懶惰來形容高效的程序員,原因有以下幾點:
聰明是因為能找出問題的正解
懶惰是因為不愿寫多余的代碼(即不會長時間地坐在電腦前)
好的軟件開發(fā)過程應(yīng)該是懶惰的軟件開發(fā),亦稱耐心開發(fā),原因是開發(fā)人員在寫代碼之前會先將時間花在透徹地考慮各種解決方案上。
這是懶惰開發(fā)的主旨,即在不了解之前就不會開始寫代碼。這個負責(zé)任的態(tài)度減少了他們所需要寫的代碼量。
主要需要做到以下幾點:
真正了解需求、獲得產(chǎn)品管理,關(guān)鍵是要明確什么才是實際要求
確保與團隊中其他開發(fā)人員之間的順利對接
這些過程都是需要時間的。然而,不少開發(fā)人員往往一拿到問題就開始急于敲代碼,然后再花費大把大把的時間修改代碼。
事實上,只有5%都不到的時間才真正是有生產(chǎn)力的。所以下回你要是看到某個開發(fā)人員將他100%的時間都緊盯著屏幕,不與其他人做任何互動,那么只能說你找來的程序員可不太好啊。
這是一個不好的跡象——如果開發(fā)人員總是寫代碼的話
高效的開發(fā)人員會時不時地檢查對需求的理解,以確保與代碼相一致。富有生產(chǎn)力的開發(fā)人員會經(jīng)常與產(chǎn)品經(jīng)理/業(yè)務(wù)分析員分析交流,也時??梢钥吹剿麄兣c同事和架構(gòu)師出雙入對。當(dāng)然資深的開發(fā)人員也會因其自身豐富的經(jīng)驗而變得非常有效率。事實上,最好的開發(fā)人員與其他人相比:
編寫初始編碼所用的時間約為1比20
調(diào)試時間的比例超過1比25
程序執(zhí)行速度大概是1比10
程序大小為1比5
然而,總的說來,隨著時間的推移,開發(fā)人員的生產(chǎn)效率并沒有隨之而增長,即從成千上萬的開發(fā)人員那兒可以證實,豐富的經(jīng)驗和生產(chǎn)力是無關(guān)的。事實上,我們的生產(chǎn)效率在過去50年間已經(jīng)提高了8倍,所以,從總體上說,經(jīng)驗與生產(chǎn)力水平是不相干的。
為什么在代碼上的懶惰會變得如此重要?
很多人很勤快,還沒有好好理解需求就開始動手寫代碼。并且,迅速編寫的代碼往往不能很好的適應(yīng)其他人的代碼。而這一問題往往只有在集成代碼的時候才能被發(fā)現(xiàn),但是已經(jīng)晚了。優(yōu)秀的開發(fā)人員很有耐心,他知道快速編碼的風(fēng)險。
開發(fā)人員在心理上很重視他們的代碼
差的開發(fā)人員往往不愿意去改變自己寫得不好的代碼。他們只會選擇增添更多的代碼來彌補不足,而不會重寫不理想的代碼。更糟的是,他們往往會去責(zé)怪其他人有不良的代碼,而不愿意自我檢討。在他們手中,最終只會導(dǎo)致一個嚴重缺陷和不穩(wěn)定的系統(tǒng)。
當(dāng)然,好的開發(fā)人員也會寫出差的代碼,非最優(yōu)的代碼。所不同的是,他們愿意認識自己的不足,并且對于有問題的部分:
如果代碼大致還是能正確運行的,那就重構(gòu)代碼
否則,就重寫代碼
當(dāng)開發(fā)人員生產(chǎn)并維護了非最優(yōu)代碼,隨著時間的推移,那么修改這些代碼就會變得越來越難。這是因為你的同事需要在這些代碼接口上寫代碼,然后再創(chuàng)建繁雜的接口等等使用這些非最優(yōu)代碼。并且隨著代碼庫的發(fā)展,會有更多更多的代碼是依賴這些原始代碼編寫出來的。故而,后面寫的代碼再怎么好也幾乎增加不了代碼的穩(wěn)定性,也不能對略有改動時bug增殖的情況產(chǎn)生影響??傊?,開發(fā)過程會變得越來越慢、越來越難。
所以,如果有什么疑問,那么不妨偷個懶,晚點再寫代碼,須知,磨刀不誤砍柴工啊!