良好的習(xí)慣是做好任何事情的重要保證,中培專家陸老師指出, 帕雷托法則明確指出,20%的因?qū)е?0%的果。又稱為80-20法則,它適用于幾乎每一個(gè)需要人作為勞動(dòng)主體的相關(guān)領(lǐng)域。
陸老師進(jìn)一步指出, 在軟件開發(fā)領(lǐng)域,這個(gè)法則可以概括為,大多數(shù)的問題都是由少數(shù)不良編碼習(xí)慣造成的。改變這些習(xí)慣,你會更有效率。
陸老師介紹了10條編程的壞習(xí)慣:
1.拼寫錯(cuò)誤
讓陸老師特別訝異的是,為什么大家明知這個(gè)習(xí)慣百害而無一利,竟然還是任其在代碼中肆虐橫行,以致于經(jīng)常出現(xiàn)拼寫錯(cuò)誤的變量名和函數(shù)名。更加悲劇的是,錯(cuò)誤的拼寫常常隱蔽得很好,很難發(fā)現(xiàn)。
至于解決方法,可以在一個(gè)良好的集成開發(fā)環(huán)境(IDE)上寫代碼,或者干脆用程序員專用的文本編輯器,這些都可以顯著減少拼寫錯(cuò)誤。還可以選擇特定 的變量名和函數(shù)名,一方面容易拼寫,另一方面即便寫錯(cuò)了也能輕易發(fā)現(xiàn)。盡量避免使用很容易拼錯(cuò)的單詞,例如“receive”,很容易拼寫成 “recieve”。
2.未按規(guī)定格式寫代碼
縮進(jìn)和格式化,能讓陸老師們的代碼一目了然、易于理解,有什么錯(cuò)誤也能一覽無余。而且也方便別人理解和維護(hù)。
如果你使用的是不會自動(dòng)格式化代碼的IDE,那么可以考慮使用代碼美化軟件,如Uncrustify,這個(gè)軟件允許用戶自定義格式要求,然后它會一絲不茍地執(zhí)行。
3.未按規(guī)定模塊化編寫代碼
一個(gè)函數(shù)對應(yīng)一個(gè)指令的習(xí)慣相當(dāng)好,因?yàn)楹喍趟砸子诶斫夂途S護(hù)。長函數(shù)實(shí)現(xiàn)的可能路徑太多,所以測試起來就特別麻煩。
第一個(gè)規(guī)范原則:一個(gè)函數(shù)最多只能占一顯示屏的空間。第二個(gè):如果有10個(gè)以上的if語句或者循環(huán)語句,那么你就可以考慮重寫了。
4.過度依賴IDE
毫無疑問,IDE和其他一些工具能讓你的代碼寫得又快又好。在一定范圍內(nèi)它們能提供變量和其他很多東西,給出你想要輸入內(nèi)容的多種選擇提示。但是這 種類型的工具也存在著風(fēng)險(xiǎn)——如果你不能保證自己有火眼金睛,那么很容易誤選相似的變量名。從本質(zhì)上說,這類工具替代了人的一部分思維,但實(shí)際上這是你自 己的責(zé)任。
工具的確是陸老師們的好幫手,例如可以消除拼寫錯(cuò)誤,以及提高工作效率等,但是如果你自己不仔細(xì)的話,同樣會有寫錯(cuò)代碼的問題出現(xiàn)。
5.使用硬編碼的密碼
很多人傾向于硬編碼一個(gè)秘密帳戶和密碼,這樣之后就可以自由進(jìn)入系統(tǒng)。但是這是不對的——沒錯(cuò),這于你而言的確是大大的方便了,但同時(shí)這也大大方便了別人去訪問你的源代碼。
究其原因在于,硬編碼的代碼比你想象的還要脆弱,這就使得它成為了一個(gè)巨大的安全隱患,而且還是一個(gè)很不好修復(fù)的安全隱患。
6.沒有采取良好的加密手段保護(hù)數(shù)據(jù)
敏感數(shù)據(jù)在互聯(lián)網(wǎng)上傳輸時(shí)是需要加密的,因?yàn)樵谶@個(gè)過程中它很有可能被攔截。不要抱怨麻煩,這是最基本的安全要求。
這也意味著以明文形式發(fā)送數(shù)據(jù)是不被認(rèn)可的,同時(shí)也排除了陸老師們使用自己的加密方式和混淆目標(biāo)的措施。寫安全加密系統(tǒng)是很難的——看看wep的情況就知道了——所以陸老師們不妨使用經(jīng)過驗(yàn)證的標(biāo)準(zhǔn)加密庫。
7.過早優(yōu)化代碼
Donald Knuth,一位**的程序員,曾經(jīng)說過,“程序員將太多的時(shí)間花在了思考和擔(dān)憂程序非緊要部分的進(jìn)度問題上,因?yàn)檫@些舉措反而對效率產(chǎn)生了強(qiáng)烈的負(fù)面影響,如果還同時(shí)要考慮到調(diào)試和維護(hù)的話,那么影響更甚。”
善于寫代碼的程序員的確能讓代碼跑得更快更順暢,但是后期調(diào)試和維護(hù)相反則會變難。提供一個(gè)好策略:清清楚楚地寫好代碼之后,再去找真正需要優(yōu)化的地方以提高性能。
8.沒有超前的思想
項(xiàng)目的目標(biāo)是什么?預(yù)計(jì)規(guī)模有多大?會有多少用戶,運(yùn)行速度得有多快?這些問題乍一看上去好像和陸老師們程序員沒啥關(guān)系——但是,如果不好好思考這些問題,陸老師們怎么能正確選擇開發(fā)應(yīng)用程序的框架,以滿足這些要求?
Twitter在這方面就有因?yàn)榈凸牢磥硇枨蠖〉睦樱瑢?dǎo)致其最終不得不放棄Ruby on Rails,并且重寫了很多使用Scala和其他技術(shù)的代碼,這是因?yàn)樵扔糜诩軜?gòu)的Ruby代碼,根本跟不上Twitter的快速增長的用戶群。
9.以為增加人手就能加快進(jìn)度
幾乎所有的軟件項(xiàng)目都會落后于計(jì)劃。有人會說,人多力量大,落后了那陸老師添加人手不就能跟上進(jìn)度了嗎?聽上去挺美的,但事實(shí)卻是,幾乎所有的項(xiàng)目在增加“新鮮血液”之后都發(fā)生了“凝血反應(yīng)”——整體效率不升反降。
10.知錯(cuò)不改,錯(cuò)上加錯(cuò)
接上面第9點(diǎn),有人會說,既然不能添加人手,那陸老師死命趕進(jìn)度總可以了吧。陸老師奉勸一句,不要抱這種幻想。如果你遠(yuǎn)遠(yuǎn)落后于計(jì)劃時(shí)間,那說明本身你對項(xiàng)目的預(yù)估時(shí)間就是錯(cuò)的。不要盲目地堅(jiān)持將錯(cuò)就錯(cuò),還是早點(diǎn)對項(xiàng)目時(shí)間做新的估計(jì)吧。