在編程過(guò)程中,整潔的程序雖然不是是編寫一個(gè)優(yōu)質(zhì)程序的必須,不過(guò)能用整潔的代碼編寫優(yōu)質(zhì)程序,那也是極好的。不過(guò)中培軟件專家龔老師指出,他在授課過(guò)程中,和自己的學(xué)員討論這一問(wèn)題是,發(fā)現(xiàn)在這一問(wèn)題上,很多程員本末倒置的現(xiàn)象不少。
龔老師曾經(jīng)和一些參加中培偉業(yè)培訓(xùn)的程序員就編程問(wèn)題進(jìn)行過(guò)有趣的討論。龔老師通常會(huì)有這樣的印象,感覺(jué)一些程序員過(guò)于強(qiáng)調(diào)代碼的整潔。雖然龔老師也很注重代碼的整潔,在過(guò)去幾年來(lái)也寫過(guò)不少?gòu)?qiáng)調(diào)代碼整潔的重要性的文章。但當(dāng)龔老師認(rèn)為,代碼整潔只是程序員的第二重要目標(biāo),它永遠(yuǎn)不會(huì)取代編程過(guò)程中的首要目標(biāo):讓軟件先跑起來(lái),讓它能跑得順暢而有效,這是應(yīng)該是編程首先應(yīng)該解決的問(wèn)題。
當(dāng)談?wù)撈鸫a整潔時(shí),很多人都能饒有興趣的說(shuō)出很多。他們堅(jiān)持不懈的追求這個(gè)目標(biāo),有時(shí)他們?cè)诰幊虝r(shí)還會(huì)穿上帶有Uncle Bob的綠色的宣傳圖標(biāo)衣服,代碼整潔以此提醒自己什么是最重要的:寫出整潔的代碼。不幸的是,很多次龔老師都發(fā)現(xiàn),很多人在重視“代碼的樣子”的同時(shí),卻忽略了要把“代碼的功能”也放在同等重要的位置。例如,很多人不愿意去學(xué)習(xí)ORM實(shí)現(xiàn)的背后原理,他們更愿意使用一些像Hibernate實(shí)體映射工具的東西把數(shù)據(jù)映射成實(shí)體對(duì)象,即使當(dāng)這樣做比起直接獲取數(shù)據(jù)是效率低的讓人驚訝時(shí)也是如此。他們并不考慮多次遠(yuǎn)程調(diào)用的代價(jià)或大數(shù)據(jù)量傳輸?shù)某杀尽K麄円槐橐槐榈木褪菍懖怀鲆粋€(gè)好的保齡球游戲,因?yàn)樗麄儼褦?shù)據(jù)庫(kù)的操作放在循環(huán)里了。
代碼整潔并不是構(gòu)成好程序的必要條件,好程序也并不必定是代碼整潔的。對(duì)龔老師來(lái)說(shuō),好程序是運(yùn)行良好的代碼,容易理解,容易修改。這是它們的先后次序。龔老師說(shuō)也許大家都非常明白,代碼的易于理解、易于安全的修改是非常的重要。但不管代碼寫的如何清晰易于閱讀和修改,如果它沒(méi)有做它本該做的事情不能覆蓋所有角落場(chǎng)景,或花費(fèi)了它本不該使用的長(zhǎng)時(shí)間執(zhí)行操作,它就不是好代碼。當(dāng)然,它很整潔,可卻沒(méi)有用處,不是嗎?
龔老師不是鼓勵(lì)程序員過(guò)早的進(jìn)行優(yōu)化,這個(gè)程序員有著不可思議的非凡技術(shù),否則你過(guò)早的優(yōu)化的程序里至少有四分之一是不正確的。優(yōu)化最重要的是找到瓶頸,其它的努力都是浪費(fèi)。
最后,龔老師總結(jié)道:程序員在編程過(guò)程中應(yīng)該寫成整潔的代碼,但在編程過(guò)程中一定要把握本末和主次,不要為了代碼整潔,而放棄了編寫優(yōu)質(zhì)的程序。