敲代碼也要講「基本法」:程式設計師應該遵守的編碼原則

2020-12-03 讀芯術

全文共1662字,預計學習時長6分鐘

圖源:unsplash

怎樣才能算作是一名優秀的程式設計師?Martin Fowler如是說:「任何傻瓜都可以編寫計算機可以理解的代碼。優秀的程式設計師只編寫人類可以理解的代碼。」

能夠理解問題,以可行的方式向最終用戶展示解決方案,並團結協作共同實現這個最終目標,這才能算作是好的程式設計師。那麼問題來了,如何在人數眾多的情況下管理如此龐大的代碼呢?

這就要求大家去遵守一些原則,讓每個成員都編寫乾淨且易於維護的代碼。畢竟,敲代碼也得講「基本法」呀~

單一職責

編碼一段時間之後,你的代碼很可能會將變得笨拙,也許具有執行多種功能的類/模塊,最終你將得到成百上千行代碼的類。

單一職責就是針對這一問題——程序中的類或模塊應該只負責一個特定功能的任務,這有助於保持模塊最小且乾淨。

圖源:Mukesh Yadav

迪米特法則

當模塊相互依賴時,它們就變得緊密耦合,這意味著一個類將對其他模塊產生依賴關係。而緊密耦合降低了代碼的靈活性和可重用性。

迪米特法則是由伊恩·荷蘭(Ian Holland)1987年在東北大學首次提出。該原理總結如下:

· 每個單元對其他單元的了解應該有限:只了解與當前單元「緊密」相關的單元。

· 每個單元只能與朋友交談;不要跟陌生人說話。

· 只與直系朋友交談。

圖源:unsplash

該原理可以擁有獨立的類和代碼,因為依賴性較弱,其之間的關聯也更加鬆散,而你所做的任何更改都應反映在最直接的朋友身上。

乾淨的代碼比聰明的代碼好

一些程式設計師在寫代碼時會忍不住「炫技」,然而這種看起來很厲害的代碼比實際易懂的代碼更難理解。

這相當於對於讀者來說並不友好,相當於給他們出難題。事實上,只要代碼乾淨且易於理解,沒人會真正在乎代碼有多聰明。

例如,有些人想用三元運算來執行傳統的if-else語句。三元操作是標準編程操作,這當然沒問題,但問題出在嵌套三元語句時。

let A = 10;

let B = 3;

let C = 25;(A>B?A:B)// fine(A>B?(A>C?A:C):(B>C?B:C))//notfineif(A>B){

(A>C?A:C)

}else{

(B>C?B:C)

}//better

YAGNI(You Aren’t Gonna Need It)

生活中,人們做一件事時會提前計劃並做好準備。但這在編程中不是很適用。YAGNI原則就在談這一點,永遠不要為將來可能需要的功能編寫代碼。它很可能不需要,這是在在浪費時間。

你可以將這一條其視為對KISS原則的具體應用,同時也是對那些認真遵循DRY原則的人的回應。缺乏經驗的程式設計師通常會盡最大努力避免編寫最抽象和通用的代碼,避免使自己代碼變得笨拙。但是太多的抽象最終會導致無法維護的代碼膨脹。

你要做的是,只在看到需要抽象的代碼時才抽象代碼。相反,不要將DRY原則應用於將來可能會反覆編寫的代碼。

簡而言之,就是活在當下,而不是將來。

圖源:monkeyuser.com

用正確的工具去運用這些規則

有一些工具可以幫助更輕鬆地遵循這些原則,例如,前端開發人員使用像Bit.dev這樣的雲組件中心來發布獨立的組件。你需要去尋找這些工具。

那麼它們又是如何幫助程式設計師遵循這些原則的呢?

· 將組件構建為獨立的代碼段(旨在作為獨立代碼進行發布,重用和協作),自然使每個開發人員都更加注意單一職責原則。

· 從任何代碼庫發布組件的自由意味著可以共享和重用更多代碼,也免不了遵循DRY原則。這也意味著不會用從不使用的UI組件來構建完整的設計系統,而是遵循YAGNI原則,僅在需要時才構建和發布每個組件。

圖源:unsplash

編寫乾淨易懂的代碼聽起來簡單,實際做起來卻並不容易。如今,這已經成為一項必不可少的要求了。我們需要不斷實踐,必須慢慢改變處理問題的方式,並以一種清晰的方式得出解決方案。這不是一夜之間的過渡,而是需要幾個月和幾個項目的積累。

編程是一項團隊合作任務,項目成功與否很大程度上取決於團隊表現。在爭取不做「豬隊友」的基礎上,努力去做那個帶飛團隊的大神吧!

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 每個優秀程式設計師都應遵循的代碼原則和規範
    什麼是優秀的程式設計師?首先我們會先提出這個問題,如果你向10個人問這個問題,儘管可能答案不同,但是少有一點應該是一致的。而對我個人而言,一個優秀的程式設計師應該是一個能夠充分理解需求,並能提出可行性解決方案通過團隊協作向最終用戶展示成果。而說到團隊協作,就涉及到代碼的可維護性,那麼你該如何管理龐大的代碼庫?
  • 每個優秀程式設計師都應遵循的代碼原則和規範
    什麼是優秀的程式設計師?首先我們會先提出這個問題,如果你向10個人問這個問題,儘管可能答案不同,但是少有一點應該是一致的。而對我個人而言,一個優秀的程式設計師應該是一個能夠充分理解需求,並能提出可行性解決方案通過團隊協作向最終用戶展示成果。而說到團隊協作,就涉及到代碼的可維護性,那麼你該如何管理龐大的代碼庫?
  • KISS、DRY和需要遵守的編碼原則
    你的代碼應該從普通的功能代碼發展為簡潔、高效、可理解且可維護的代碼。這才是開發人員面臨的真正挑戰。本文將會介紹助你實現超級代碼狀態的5個原則。1.代碼一目了然程序的大小增加時,代碼的複雜性也會隨之增加。代碼也會變得很難調試,因為調試複雜的代碼是一項可怕的任務。沒有人喜歡維護複雜的代碼。這個原則指出應該始終保持代碼的簡單性。如果代碼複雜,請努力將其分解成更小、更易維護的代碼。
  • Java程式設計師應該了解的10個面向對象設計原則
    甚至還有經驗豐富的Java程式設計師沒有聽說過OOPS和SOLID設計原則,他們根本不知道設計原則的好處,也不知道如何依照這些原則來進行編程。眾所周知,Java編程最基本的原則就是要追求高內聚和低耦合的解決方案和代碼模塊設計。查看Apache和Sun的開放原始碼能幫助你發現其他Java設計原則在這些代碼中的實際運用。
  • 我從高級開發者身上學到的19條編碼原則
    在這篇文章中,一位全棧首席開發者總結了高級開發人員的 19 個編碼原則,可以幫助新手少踩些坑。進行軟體開發,整天敲代碼、好不容易調試成功,但是代碼的質量堪憂,可讀性不是很高,反過頭來還得對代碼進行完善。也許這不是你的編碼能力問題,很有可能在你進行代碼編寫時,一些看似不重要的編碼注意事項沒有遵守。
  • Typing Practice:模擬程式設計師敲代碼練打字
    與普通的打字練習工具不同的是,Typing Practice上的練習內容都是一些代碼。沒錯!這就是一個針對程式設計師開發的練習打字工具。通過讓用戶模擬程式設計師敲代碼的過程來練習打字!該網站有多種豐富的程式語言內容供用戶練習,每種都有10-20個關卡,每關結束後還會有專業的評測報告。程式設計師們都樂此不疲的用它來PK誰敲代碼更快。當然,不是程式設計師的你也一樣可以練習。
  • 同樣是敲代碼,為什麼人們崇拜黑客,程式設計師卻總是被黑?
    敲代碼的在外行人眼裡分為兩種人:一種是超級厲害的黑客,就像電影裡演的那樣,可以靠一臺電腦,敲幾個字符就能讓整個網絡系統出現大規模的癱瘓,侵入到各種高大上的機構網絡中,來去自如,看別人的電腦秘密如探囊取物一般;另一種是苦哈哈的程式設計師,每天坐在工位上,噼裡啪啦敲著一行行的代碼
  • 5位會敲代碼的明星告訴你,高情商的程式設計師到底多可怕!
    敲代碼的人在很多人眼裡都有點「不一樣」,外行人對程式設計師都貼上了『說話少、頭髮少、情商低、工資高』的標籤,其實作為一個門檻比較高的行業,程式設計師的智商和情商都不會低,只是作為一個技術工作,能拼智商的絕對不會去拼情商,但一旦碰上要拼情商的時候,程式設計師也不會落於下風。
  • 12位中年程式設計師:代碼一敲十年,收入雖高前途搖擺
    曾經夢想著用技術改變世界的程式設計師們,又是如何看待自己的職業規劃和人生價值? 穿越喧囂,我們採訪了12位中年程式設計師,聽聽他們的故事和人生。 要點速覽: 我們被固定在「敲代碼」的坑裡,一幹就是10年,再幹別的早已不會。敲代碼已經成了一項流水線般的工作,就像搬磚工一樣。
  • 菜鳥程式設計師寫代碼如何避免錯誤?
    每個程式設計師都要經歷「菜鳥」這個階段,那麼,在菜鳥階段,程式設計師是怎麼寫代碼的呢?下面12大瞬間,能否找到你當初的影子?,寫代碼時靈光乍現,為了保證在靈感消逝前敲出更多代碼,敲代碼速度飛快,當然命名就顯得很隨意了。
  • 照著這些方法敲代碼必廢無疑
    用手機寫編碼,絕對不用電腦編碼。電腦可以用的為什麼手機不能用?即使運行不了,你也不要在電腦上寫代碼,這樣你的代碼才能變成垃圾代碼。,你應當利用更多的時間敲垃圾代碼。如果IDE的搜索停止,而你無法找到所需的文件或函數時,應該:一個文件中10000行代碼是OK的。一個函數體1000行代碼是OK的。處理許多服務(第三方和內部,也有一些工具、資料庫手寫ORM和jQuery滑塊)在一個' service.js ' ?這是OK的。
  • [評論]為什麼谷歌要執行嚴格的代碼編寫規範
    譯文來自外刊IT評論《為什麼谷歌要執行嚴格的代碼編寫規範》。本篇是谷歌是如何做代碼審查的的續篇。文章內容如下:當你發現只通過看程序的基本語法結構就能讀懂一段代碼,這種時間上的節省不能不讓人震撼!反對編碼規範的人很多,下面是一些常見的理由,對於這些理由,我以前是深信不疑。這是浪費時間!我是一個優秀的程式設計師,我不願意浪費時間幹這些愚蠢的事。我的技術很好,我可以寫出清晰的、易於理解的代碼。為什麼我要浪費時間遵守這些愚蠢的規範?
  • 對於初學編程的未來程式設計師6個極好的編碼建議
    您正在學習大量信息,但是到了一天結束時,您感覺自己離成為程式設計師的步伐越來越近。這表明您在學習編碼時犯了一些錯誤。1.花大量時間在技術研究上,而不是實際編寫代碼我應該選擇學習哪種程式語言或框架?我應該選擇學習哪個資料庫?
  • 商品條碼三大編碼原則,您知道嗎?
    物品編碼與自動識別技術已廣泛應用於零售、製造、物流、電子商務、移動商務、電子政務、醫療衛生、產品質量追溯、圖書音像等國民經濟和社會發展的諸多領域。當產品準備上市銷售前,企業會對其產品進行編碼,此時務必要了解商品條碼的三大編碼原則,即唯一性、穩定性和無含義性原則。它們分別具有什麼特點呢?
  • 程式設計師在火車站候車室寫代碼畫面曝光,網友:程式設計師的悲哀
    比如下面這位,一名程式設計師網友正在火車站候車室候車,無意中看到一名同行在電腦上「奮筆疾書」,緊張地寫著代碼,聽鍵盤的節奏估計是線上出現了bug,不然也不會急成這樣,於是乎發帖感慨。如下便是這名網友曝光的畫面,在候車室裡,這名程式設計師大哥正全神貫注在敲代碼,絲毫不受外界影響。
  • 學會面向對象要知道的五大原則
    面向對象設計原則是OOPS編程的核心,但大多數Java程式設計師熱心於像Singleton (單例) 、 Decorator(裝飾器)、Observer(觀察者) 等設計模式,而沒有把足夠多的注意力放在學習面向對象的分析和設計上面。
  • 南京北大青鳥:程式設計師能有多浪漫?代碼敲出櫻花綻放!
    程式設計師能有多浪漫宅?不修邊幅?不解風情?很多人心中對程式設計師存在著這樣的刻板印象武漢大學的同學們表示一萬分的不服氣這不,這些固執又嚴謹的邏輯思維傢伙決定用行動傳達浪漫、表達愛意用一行行代碼敲出「櫻花綻放」櫻花綻放春意盎然放大細節,你會驚喜地發現每個像素的都是「武漢加油」這個作品,是武漢大學信管學院朱永春同學用
  • 程式設計師遭辭退,卻被前領導命令回去講代碼,員工:幫忙要收費
    很多程式設計師在年僅30歲的時候就遭遇了中年危機,導致被裁員,而在完成工作交接離職之後,員工更是與前公司再無任何關係。但是也有程式設計師在離職之後遭到了前公司領導的頻繁聯繫,比如說接下來這位網友。
  • 程式設計師的自我修養:作為一名合格的程式設計師,你應該具備哪些能力?
    只會編碼的人僅僅只是碼農而已,全面發展才是硬道理。我們常常看到招聘信息中包含以下信息:精通某某語言、具備某某行業經驗、具有生產環境調試經驗、熟悉Linux、Windows開發甚至是領導過幾人以上的團隊等等。所以作為一名程式設計師,你不應該僅僅懂得編碼就心滿意足了。
  • 程式設計師在火車站候車室寫代碼畫面曝光!網友:程式設計師的悲哀
    比如下面這位,一名程式設計師網友正在火車站候車室候車,無意中看到一名同行在電腦上「奮筆疾書」,緊張地寫著代碼,聽鍵盤的節奏估計是線上出現了bug,不然也不會急成這樣,於是乎發帖感慨。如下便是這名網友曝光的畫面,在候車室裡,這名程式設計師大哥正全神貫注在敲代碼