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