我從高級開發者身上學到的19條編碼原則

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"進行軟件開發,整天敲代碼、好不容易調試成功,但是代碼的質量堪憂,可讀性不是很高,反過頭來還得對代碼進行完善。也許這不是你的編碼能力問題,很有可能在你進行代碼編寫時,一些看似不重要的編碼注意事項沒有遵守。這有一份高級開發人員經常遵循的 19 條原則,其中很多與實際編碼無關,而是與流程以及如何處理任務有關,可能對你有幫助。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/a0/a0b1b21cc56c252f386dd796b5062c15.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"1. Rule Of Three 原則"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是一條代碼重構的經驗法則,用於決定何時將複製的代碼段替換爲新的代碼 / 過程 / 方法。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"它的含義是,第一次用到某個功能時,你寫一個特定的解決方法;第二次又用到的時候,你拷貝上一次的代碼;第三次出現的時候,你要着手「抽象化」,寫出通用的解決方法。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"該原則的主要思想是使代碼 / 過程 / 方法更加通用,從而保證在其他地方可以重複使用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"2. 應用程序結構與編碼方式保持一致"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"應用程序結構與編碼方式保持一致有助於提高其可讀性和可維護性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"嘗試制定編碼標準,這有助於保持編碼一致性。編碼標準應該與變量的命名規則一樣少。另一大問題是應用程序的結構,開發人員進行更改或添加新內容的地方應該很明顯。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3. 減少程序嵌套"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"if 裏面嵌套 if 會使得程序很混亂,代碼很難讀。在編寫代碼時可能無法繞開這些問題,但你需要經常查看代碼結構。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"else if 同樣如此,因此需要儘量避免嵌套。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一種有效的解決方法是衛語句:衛語句把複雜的條件表達式拆分成多個條件表達式。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不使用衛語句的編碼方式:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"if\nnull\nif\nnull\nif\n// term annually \nelse if (order.term == Term.Monthly) \n        \n// term monthly \nelse\nthrow\nnew\nnameof\nelse\nthrow\nnew\nnameof"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"使用衛語句的編碼方式:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"if\nnull\nthrow\nnew\nnameof\nif\nnull\nthrow\nnew\nnameof\nif\n// term annually (return here) \nif\n// term monthly (return here) \nthrow\nnew\nnameof"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"4. 瞭解全局很重要"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"瞭解全局有助處理較小的細節。一旦瞭解了全局,你就不會花很長的時間在小細節上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"5. 程序中的命名"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在編程中進行命名是最困難的事情之一,包括爲一個類、一個方法命名,甚至是爲變量命名。優秀的開發人員會花時間考慮相關的命名方式,這樣會增加程序的可讀性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"6. 減少技術負債"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"技術負債指開發人員爲了加速軟件開發,在應該採用最佳方案時進行了妥協,改用了短期內能加速軟件開發的方案,從而在未來給自己帶來的額外開發負擔。這種技術上的選擇就像一筆債務一樣,雖然眼前看起來可以得到好處,但必須在未來償還。軟件工程師必須付出額外的時間和精力持續修復之前的妥協所造成的問題及副作用,或是進行重構,把架構改善爲最佳實現方式。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於技術負債問題,提高預估時間有助於解決這類問題。儘自己最大的努力寫好代碼,否則你將不斷地進行代碼完善。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"7. 提高預估時間"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你會看到,高級開發人員總是給任務預留更多的時間,因爲他們知道完成任務所需的時間總是高於預期,而且在評估階段增加一個緩衝時間可以真正幫助你把事情做好。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這確實有助於解決技術負債問題。如果你低估了任務完成時間,你就可能會因爲時間不夠而寫出僅僅可以運行的代碼,簡潔性、可維護性就顧不上了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"8. 文檔和代碼註釋"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"文檔和代碼註釋有助於保存上下文和共享知識。你會聽到有經驗的人一直在說,我們是否可以記錄這個過程,或者代碼審查失敗,因爲對接口之類的內容沒有任何註釋。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"9. 刪除不需要的代碼"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"許多缺乏自信的開發人員會註釋掉大量的代碼塊,而不是選擇刪除。但是代碼版本控制是有目的的!優秀的開發人員會刪除應用程序中不好的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"10. 花時間進行代碼評審"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"優秀的開發人員會花更多的時間在代碼評審上,代碼評審的重要性包括:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更早地發現錯誤;"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"提高開發人員的技能,並讓團隊的其他成員參與到良好的實踐中;"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"共享知識;"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一致的設計和實現。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最好的代碼評審過程是:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於一個風險較小的任務,1 名開發人員評審就可以;中型 / 大型更改或者是有風險的更改,應由 3 名開發人員進行評審,其中須有一位是高級開發人員;風險極高的更改或者是正在開發的應用程序的新部分,應該安排一次會議,3 名開發人員中至少有一位是首席開發人員,他們一起完成每條線並提出觀點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"11. 編寫好的測試"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你會注意到經驗豐富、能力更強的開發人員花更多的時間編寫好的測試。擁有好的測試可以幫助你更有信心地擴展應用程序,並減少錯誤。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"12. 花時間設計程序"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在真正投入寫代碼之前,開發者會經過一番思考並將代碼分解成小塊。這有助於他們更好地將所有內容組合在一起並創建更清晰的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"13. 關注基礎原理,而不是語法"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更多地關注基礎原理,而不是語法,有助於開發者更快地發現問題,也能更好地理解問題並在搜索引擎上搜索解決方案。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"14. 讓搜索引擎成爲你最好的朋友"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高級開發者都是用搜索引擎來解決問題的專家。從上一條也可以看出,他們關注基礎原理而不是語法,因此知道要搜索的關鍵詞。如果你一直專注於語法,這將很難做到。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"15. 首先確保程序能運行,然後再完善"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你經常會看到一些相對較弱的開發人員,他們一開始花費大量的時間讓程序看起來漂亮,但之後發現,程序不能運行。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"優秀的開發人員會在更早的階段找到愉快的工作方式。在他們把事情做好之前,儘早發現問題。這可以幫助項目進行得更加順利。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"16. 風險管理和問題解決"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高級開發人員可以定義風險,能夠通過應用設計模式提煉出複雜的問題,並且能夠根據以往的經驗獨立解決不同的問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"17. 多提問"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高級開發人員什麼都想知道。他們不介意問問題,包括技術問題和業務問題,儘管這些問題聽起來非常簡單。理解業務需求有助於開發者編寫更好的代碼!他們不害怕問問題,因爲他們對自己的能力有信心。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"18. 儘可能將邏輯排除在數據庫之外"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這一點可以歸結爲你正在構建的應用程序的類型,並且僅當它不會影響性能時才適用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高級開發人員知道將數據庫查詢保留爲簡單的 CRUD 操作。CRUD 是指在做計算處理時的增加 (Create)、檢索(Retrieve)、更新(Update) 和刪除(Delete)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來,業務邏輯層應將 CRUD 操作整合在一起。這有助於開發人員瞭解在哪裏尋找業務邏輯。如果你在數據庫查詢和代碼中有邏輯,這會很快變得混亂!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"19. 保持代碼簡潔"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"保持代碼簡潔是最好的做法。即使這意味着要編寫更多行代碼。下面是相對較弱的開發人員編寫的單行代碼:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"return\nk =>\nx =>"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這樣的代碼雖然可以運行,但可讀性很低。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"看完三件事❤️"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:"}]},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"點贊,轉發,有你們的 『點贊和評論』,纔是我創造的動力。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"關注公衆號 『 Java鬥帝 』,不定期分享原創知識。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"同時公衆號內回覆“666”即可免費領取1000道互聯網面試題"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章