主頁 > 軟體工程 > 20 年老程式員告訴你的 20 條編碼原則

20 年老程式員告訴你的 20 條編碼原則

2022-08-25 08:33:29 軟體工程

我從 1999 年就開始了編程生涯,到今年已經有 20 多年了,我先是從 Basic 開始,很快轉到了 Pascal 和 C 語言,然后又學習了面向物件編程語言 Delphi 和 C++,2006 年,我開始使用 Java,2011 年開始使用 JavaScript,我參與過各個行業的軟體開發,從機器人、金融科技、醫療到媒體和通信,我還擔任過研究員、CTO、TPM(技術產品經理)、老師、系統架構師和技術負責人,但不管怎樣,我一直都在編程,

在我參與過的專案當中,有些為數百萬人提供服務,有些在發布之前就宣告失敗,我做過咨詢顧問,還創辦過自己的公司,我在開源專案、閉源專案和內部開源專案上花了很多時間,從微控制器到移動應用、桌面應用,再到云服務和無服務器架構,

我把過去 20 年積累的一些最為重要的編程原則總結如下,

  1. 不要糾結于開發工具——不管是庫、編程語言還是平臺,盡可能使用原生的構件,不要歪曲技術,也不要歪曲了問題本身,為要解決的問題選擇合適的工具,否則你要為你所選擇的工具重新安排你的作業,

  2. 你寫的代碼不是給機器看的,而是給你的同事和未來的你看的(除非你寫的是一次性代碼或匯編代碼),寫代碼的時候要考慮一下初級開發者,他們會把你的代碼作為參考,

  3. 優秀的軟體是協作開發的結果,高效溝通,進行開放式的協作,信任他人,并讓他人也信任你,尊重他人勝過尊重代碼,以身作則,把你的追隨者變成領導者,

  4. 分而治之,為分離的關注點開發單獨的低耦合模塊,進行單獨的模塊測驗和集成測驗,盡可能按照實際情況測驗,同時也要測驗到各種邊界情況,

  5. 不要把自己與代碼捆綁在一起,要想辦法讓其他人也能修改你的代碼或者添加新的功能,這樣你才能更容易脫身去參與其他專案,或者去其他公司,不要捆綁自己,否則你很難成長,

  6. 安全性是分層的,每一層需要進行單獨的評估,同時又與整體相關,風險是一個業務決策,與脆弱性和概率有直接的關系,每一個產品或組織都有不同的風險偏好(為了獲得更大的收益,他們愿意承擔風險),通常這三個關注點之間存在相互沖突:用戶體驗、安全性和性能,

  7. 要意識到每一行代碼都有其生命周期,它們最終都會死掉,有時候,一些代碼會在發布之前就死掉,所以要學會放手,代碼可以分為三種:一種是核心代碼,就像汽車的引擎,沒有了它,產品就毫無意義;一種是必要的代碼,就像是汽車的備胎,平時用得少,但一旦需要,它決定了系統的成敗;一種是增值的代碼,就像汽車的杯托,如果有那是再好不過,但如果沒有也不會影響產品,

  8. 不要把你的個人標識融入到代碼里,人和代碼應該是分離的,不要把其他人對代碼的評價與你自身聯系到一起,在評價他人的代碼時也要十分謹慎,

  9. 技術債務就像快餐一樣,偶爾欠下一點技術債務是可接受的,但如果你習慣了這樣,它會毀掉你的產品(而且是以讓你措手不及的方式),

  10. 在尋找解決方案時,請按照這樣的優先級進行決策:安全性 > 可用性(可訪問性和用戶體驗)> 可維護性 > 簡單性(開發者體驗)> 簡潔性(代碼量)> 性能,但不能盲目照搬,而是要根據產品的特點進行取舍,你積累的經驗越多,就越是能夠在這些因素之間做出權衡,例如,在設計游戲引擎時,性能享有最高的優先級,但在開發銀行應用程式時,安全性則最為重要,

  11. 拷貝粘貼是滋生 bug 的溫床,對你所拷貝或匯入的東西加以審查,bug 一般會藏身在復雜性中,依賴項復雜沒有關系,但不能讓它存在于代碼中,

  12. 不要只顧著寫正常的代碼,處理例外的代碼也要好好寫,讓人們明白為什么會發生例外、如何檢測到的以及怎樣解決,對所有的系統輸入(包括用戶輸入)進行驗證:盡早失敗,并盡可能從錯誤中恢復,我們要假設用戶手里握著一把槍:你努力讓用戶輸入一些其他的東西,而不是讓他們的子彈射在你的腦門上,

  13. 不要使用依賴項,除非使用它們的成本比你自己寫代碼的成本低很多,因為使用依賴項要匯入、維護、處理 bug,在必要的時候還要進行重構,這些都是成本,

  14. 遠離“炒作驅動開發”,但你要去了解它們,做一些嘗試,

  15. 走出舒適區,每天都要學習,把學到的東西分享出來,如果你以大師自居,就不是在學習,接觸更多的編程語言、技術、文化,保持一顆好奇心,

  16. 好代碼不需要注釋,而優秀的代碼提供了良好的注釋,可以讓任何一個原先沒有參與代碼演進、試錯和需求程序的人更容易閱讀、修改它,

  17. 盡量避免使用多載、繼承和隱式的智能特性,使用純函式,它們更容易測驗和診斷,否則的話就使用類,實作不同功能的函式要使用不同的名字,

  18. 在徹底了解問題之前不要急著寫代碼,花在傾聽和了解問題上的時間通常比花在寫代碼上的時間要多,在寫代碼之前要先了解問題域,問題就像迷宮一樣,你要循序漸進,反復進行“編碼 - 測驗 - 改進”,直到把問題解決為止,

  19. 不要嘗試去解決不存在的問題,不要進行投機性編程,只有在確定代碼確實需要具備擴展性之后才讓代碼具備可擴展性,通常情況下,當代碼被擴展之后,你會發現問題會變得與原先認為的不一樣了,

  20. 大家一起開發軟體會更加有趣,建立可持續發展的社區,傾聽,激發靈感,學習,分享,

我并不是軟體開發方面的權威,但這些都是我一路走來總結出來的原則,我相信,20 年后,這些原則會發生變化,會變得更加成熟,

 

作者丨Alex Ewerl?f

本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/20-coding-principles-told-by-20-year-old-programmers.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/502669.html

標籤:其他

上一篇:不要讓“Clean Code”更難維護,請使用“Rule of Three”

下一篇:不要讓“Clean Code”更難維護,請使用“Rule of Three”

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more