進行軟件開(kāi)發,整天敲代碼、好不容易調試成功,但是代碼的質量堪憂,可讀性不是很高,反過頭來還得對代碼進行完善。也許這不是你的編碼能力問題,很有可能在你進行代碼編寫時,一(yī)些看似不重要的編碼注意事項沒有遵守。這有一(yī)份高級開(kāi)發人員(yuán)經常遵循的 19 條原則,其中(zhōng)很多與實際編碼無關,而是與流程以及如何處理任務有關,可能對你有幫助。
1. Rule Of Three 原則
這是一(yī)條代碼重構的經驗法則,用于決定何時将複制的代碼段替換爲新的代碼 / 過程 / 方法。
它的含義是,第一(yī)次用到某個功能時,你寫一(yī)個特定的解決方法;第二次又(yòu)用到的時候,你拷貝上一(yī)次的代碼;第三次出現的時候,你要着手「抽象化」,寫出通用的解決方法。
該原則的主要思想是使代碼 / 過程 / 方法更加通用,從而保證在其他地方可以重複使用。
2. 應用程序結構與編碼方式保持一(yī)緻
應用程序結構與編碼方式保持一(yī)緻有助于提高其可讀性和可維護性。
嘗試制定編碼标準,這有助于保持編碼一(yī)緻性。編碼标準應該與變量的命名規則一(yī)樣少。另一(yī)大(dà)問題是應用程序的結構,開(kāi)發人員(yuán)進行更改或添加新内容的地方應該很明顯。
3. 減少程序嵌套
if 裏面嵌套 if 會使得程序很混亂,代碼很難讀。在編寫代碼時可能無法繞開(kāi)這些問題,但你需要經常查看代碼結構。
else if 同樣如此,因此需要盡量避免嵌套。
4. 了解全局很重要
了解全局有助處理較小(xiǎo)的細節。一(yī)旦了解了全局,你就不會花很長的時間在小(xiǎo)細節上。
5. 程序中(zhōng)的命名
在編程中(zhōng)進行命名是最困難的事情之一(yī),包括爲一(yī)個類、一(yī)個方法命名,甚至是爲變量命名。優秀的開(kāi)發人員(yuán)會花時間考慮相關的命名方式,這樣會增加程序的可讀性。
6. 減少技術負債
技術負債指開(kāi)發人員(yuán)爲了加速軟件開(kāi)發,在應該采用最佳方案時進行了妥協,改用了短期内能加速軟件開(kāi)發的方案,從而在未來給自己帶來的額外(wài)開(kāi)發負擔。這種技術上的選擇就像一(yī)筆債務一(yī)樣,雖然眼前看起來可以得到好處,但必須在未來償還。軟件工(gōng)程師必須付出額外(wài)的時間和精力持續修複之前的妥協所造成的問題及副作用,或是進行重構,把架構改善爲最佳實現方式。
對于技術負債問題,提高預估時間有助于解決這類問題。盡自己最大(dà)的努力寫好代碼,否則你将不斷地進行代碼完善。
7. 提高預估時間
你會看到,高級開(kāi)發人員(yuán)總是給任務預留更多的時間,因爲他們知(zhī)道完成任務所需的時間總是高于預期,而且在評估階段增加一(yī)個緩沖時間可以真正幫助你把事情做好。
這确實有助于解決技術負債問題。如果你低估了任務完成時間,你就可能會因爲時間不夠而寫出僅僅可以運行的代碼,簡潔性、可維護性就顧不上了。
8. 文檔和代碼注釋
文檔和代碼注釋有助于保存上下(xià)文和共享知(zhī)識。你會聽(tīng)到有經驗的人一(yī)直在說,我(wǒ)(wǒ)們是否可以記錄這個過程,或者代碼審查失敗,因爲對接口之類的内容沒有任何注釋。
9. 删除不需要的代碼
許多缺乏自信的開(kāi)發人員(yuán)會注釋掉大(dà)量的代碼塊,而不是選擇删除。但是代碼版本控制是有目的的!優秀的開(kāi)發人員(yuán)會删除應用程序中(zhōng)不好的代碼。
10. 花時間進行代碼評審
優秀的開(kāi)發人員(yuán)會花更多的時間在代碼評審上,代碼評審的重要性包括:
更早地發現錯誤;
提高開(kāi)發人員(yuán)的技能,并讓團隊的其他成員(yuán)參與到良好的實踐中(zhōng);
共享知(zhī)識;
一(yī)緻的設計和實現。
最好的代碼評審過程是:
對于一(yī)個風險較小(xiǎo)的任務,1 名開(kāi)發人員(yuán)評審就可以;中(zhōng)型 / 大(dà)型更改或者是有風險的更改,應由 3 名開(kāi)發人員(yuán)進行評審,其中(zhōng)須有一(yī)位是高級開(kāi)發人員(yuán);風險極高的更改或者是正在開(kāi)發的應用程序的新部分(fēn),應該安排一(yī)次會議,3 名開(kāi)發人員(yuán)中(zhōng)至少有一(yī)位是首席開(kāi)發人員(yuán),他們一(yī)起完成每條線并提出觀點。
11. 編寫好的測試
你會注意到經驗豐富、能力更強的開(kāi)發人員(yuán)花更多的時間編寫好的測試。擁有好的測試可以幫助你更有信心地擴展應用程序,并減少錯誤。
12. 花時間設計程序
在真正投入寫代碼之前,開(kāi)發者會經過一(yī)番思考并将代碼分(fēn)解成小(xiǎo)塊。這有助于他們更好地将所有内容組合在一(yī)起并創建更清晰的代碼。
13. 關注基礎原理,而不是語法
更多地關注基礎原理,而不是語法,有助于開(kāi)發者更快地發現問題,也能更好地理解問題并在搜索引擎上搜索解決方案。
14. 讓搜索引擎成爲你最好的朋友
高級開(kāi)發者都是用搜索引擎來解決問題的專家。從上一(yī)條也可以看出,他們關注基礎原理而不是語法,因此知(zhī)道要搜索的關鍵詞。如果你一(yī)直專注于語法,這将很難做到。
15. 首先确保程序能運行,然後再完善
你經常會看到一(yī)些相對較弱的開(kāi)發人員(yuán),他們一(yī)開(kāi)始花費(fèi)大(dà)量的時間讓程序看起來漂亮,但之後發現,程序不能運行。
優秀的開(kāi)發人員(yuán)會在更早的階段找到愉快的工(gōng)作方式。在他們把事情做好之前,盡早發現問題。這可以幫助項目進行得更加順利。
16. 風險管理和問題解決
高級開(kāi)發人員(yuán)可以定義風險,能夠通過應用設計模式提煉出複雜(zá)的問題,并且能夠根據以往的經驗獨立解決不同的問題。
17. 多提問
高級開(kāi)發人員(yuán)什麽都想知(zhī)道。他們不介意問問題,包括技術問題和業務問題,盡管這些問題聽(tīng)起來非常簡單。理解業務需求有助于開(kāi)發者編寫更好的代碼!他們不害怕問問題,因爲他們對自己的能力有信心。
18. 盡可能将邏輯排除在數據庫之外(wài)
這一(yī)點可以歸結爲你正在構建的應用程序的類型,并且僅當它不會影響性能時才适用。
高級開(kāi)發人員(yuán)知(zhī)道将數據庫查詢保留爲簡單的 CRUD 操作。CRUD 是指在做計算處理時的增加 (Create)、檢索(Retrieve)、更新(Update) 和删除(Delete)。
接下(xià)來,業務邏輯層應将 CRUD 操作整合在一(yī)起。這有助于開(kāi)發人員(yuán)了解在哪裏尋找業務邏輯。如果你在數據庫查詢和代碼中(zhōng)有邏輯,這會很快變得混亂!
19. 保持代碼簡潔
保持代碼簡潔是最好的做法。即使這意味着要編寫更多行代碼。下(xià)面是相對較弱的開(kāi)發人員(yuán)編寫的單行代碼:
return dir.Keys.Any(k => k >= limit) ? dir.First(x => x.Key >= limit).Value : dir[dir.Keys.Max()];
這樣的代碼雖然可以運行,但可讀性很低。