1. 程式人生 > >30 多年的編碼經驗濃縮成的 10 條最佳實踐

30 多年的編碼經驗濃縮成的 10 條最佳實踐

所以,如何寫出一手好程式碼?

良好的程式碼更易於閱讀、理解、除錯和修改,最重要的是它的缺陷也更少。顯然,編寫良好的程式碼需要更多的時間,但是從長遠來看,它也具有更多的價值,因為這降低了維護的成本,而且具有更好的可重用性。

事實上,我們可以將好的程式碼等同為可重用的程式碼,這也是本篇文章羅列的許多技巧背後的驅動原則。作為一個要實現特定功能的開發者,程式碼可以實現你的短期目標,但如果沒有其他人希望重用它(包括未來的自己),這些程式碼一定會缺失某些東西。無論它是太複雜,還是太具體,在不同情況下都有很大可能會出錯,或者不被其他開發者信任。

我發現,只要嘗試堅持將下面的最佳實踐應用於你編寫的所有程式碼(包括你的實驗和原型),無論你現在的經驗水平如何,都會編寫出更好的程式碼。

1. 遵循單一職責原則

函式是程式設計師的工具中最重要的抽象形式。它們能更多地被重複使用,你需要編寫的程式碼就越少,程式碼也因此變得更可靠。較小的函式遵循單一職責原則更有可能被重複使用。

2. 儘量減少共享狀態

你應該儘量減少函式之間的隱式共享狀態,無論它是檔案作用域的變數還是物件的成員欄位,這有利於明確要求把值作為引數。當能明確地顯示函式需要什麼才可以產生所需的結果時,程式碼會變得更容易理解和重用。

對此的一個推論是,在一個物件中,相對於成員變數,你更應該優先選擇靜態的無狀態變數 (static stateless variables)。

3. 將“副作用”區域性化

理想的副作用(例如:列印到控制檯、日誌記錄、更改全域性狀態、檔案系統操作等)應該被放置到單獨的模組中,而不是散佈在整個程式碼裡面。函式中的一些“副作用”功能往往違反了單一職責原則。

4. 優先使用不變的物件

如果一個物件的狀態在其建構函式中僅被設定一次,並且從不再次更改,則除錯會變得更加容易,因為只要構造正確就能保持有效。這也是降低軟體專案複雜性的最簡單方法之一。

5. 多用介面少用類

接收介面的函式(或 C++ 中的模板引數和概念)比在類上執行的函式更具可重用性。

6. 對模組應用良好的原則

尋找機會將軟體專案分解成更小的模組(例如庫和應用程式),以促進模組級別的重用。對於模組,應該遵循的一些關鍵原則是:

  1. 儘可能減少依賴
  2. 每個專案應該有一個明確的職責
  3. 不要重複自身

你應該努力使你的專案保持小巧和明確。

7. 避免繼承

在面向物件程式設計中,繼承 —— 特別是和虛擬函式結合使用時,在可重用性方面往往是一條死衚衕。我很少有成功的使用或編寫過載類的庫的經歷。

8. 將測試作為設計和開發的一部分

我不是測試驅動開發的堅定分子,但開始編碼時先編寫測試程式碼會使得程式碼十分自然地遵循許多指導原則。這也有助於儘早發現錯誤。不過要注意避免編寫無用的測試,良好的編碼實踐意味著更高級別的測試(例如單元測試中的整合測試或特徵測試)在揭示缺陷方面更有效。

9. 優先使用標準庫而不是手寫的

我經常看到更好版本的 std::vector 或 std::string,但這幾乎總是浪費時間和精力。一個明顯的事實是 —— 你正在為一個新的地方引入 bug,其他開發者也不太可能重用你的程式碼,因為沒有被廣泛理解、支援和測試。

10. 避免編寫新的程式碼

這是每個程式設計師都應遵循的最重要的教誨:最好的程式碼就是還沒寫的程式碼。你寫的程式碼越多,你將遇到的問題就越多,查詢和修復錯誤就越困難。

在寫一行程式碼之前先問一問自己,有沒有一個工具、函式或者庫已經實現了你所需要的功能?你真的需要自己實現這個功能,而不是呼叫一個已經存在的功能嗎?

寫在最後的話

我發現程式設計是一門與學習藝術或運動非常相似的技能,你通過刻意的練習和從別人的經驗中學習會得到更好的結果。不斷提升你產出的程式碼質量有助於你成為更優秀的程式設計師。

相關推薦

評:30 多年編碼經驗濃縮10 最佳實踐

文章 30 多年的編碼經驗濃縮成的 10 條最佳實踐 原文出自 10 Tips for Writting Better Code。我認為這 10 條原則挺有幫助,所以本文想對這些原則做一些評價,說說我的看法,可以的話順便給一些例子。建議看這篇文章之前先閱讀原文。 事實上,我們可以將好的程式碼等同為 可重用

30 多年編碼經驗濃縮10 最佳實踐

所以,如何寫出一手好程式碼? 良好的程式碼更易於閱讀、理解、除錯和修改,最重要的是它的缺陷也更少。顯然,編寫良好的程式碼需要更多的時間,但是從長遠來看,它也具有更多的價值,因為這降低了維護的成本,而且具有更好的可重用性。 事實上,我們可以將好的程式碼等同為可重用的

兩年摸爬滾打 Spring Boot,總結了這 16 最佳實踐

選項 long 只需要 它的 之一 全局異常處理 obj 單個 https 前言 Spring Boot是最流行的用於開發微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業開發中使用Spring Boot所采用的最佳實踐。這些內容是基於我的個人經驗和一些熟

編寫 Node.js Rest API 的 10最佳實踐

Node.js 除了用來編寫 WEB 應用之外,還可以用來編寫 API 服務,我們在本文中會介紹編寫 Node.js Rest API 的最佳實踐,包括如何命名路由、進行認證和測試等話題,內容摘要如下: 正確使用 HTTP Method 和路由 正確的使用 HTTP 狀態碼 使用 HTTP H

Java 程式設計中關於異常處理的10最佳實踐

        異常處理是Java 開發中的一個重要部分。它是關乎每個應用的一個非功能性需求,是為了處理任何錯誤狀況,比如資源不可訪問,非法輸入,空輸入等等。Java提供了幾個異常處理特性,以try,catch 和 finally 關鍵字的形式內建於語言自

規模化敏捷開發的10最佳實踐(上)

【編者按】軟體開發和採購人員經常會對現有軟體開發方法、技巧和工具產生一些疑問。針對這些疑問,Kevin Fall 整理了五個軟體方面的話題:Agile at Scale,Safety-Critical Systems,Monitoring Software-In

Apache Kafka:優化部署的 10最佳實踐

本文要點 Kafka 低開銷和友好水平擴充套件的設計使它可以使用廉價的日用硬體仍能保持成功執行。 使用最好的磁碟、分別儲存日誌、隔離 ZooKeeper 程序,以及禁用交換以減少延遲,從而為 ZooKeeper 提供強大的網路頻寬。 將 Kafka 的預設複

幫助企業成功遷移到雲的 7 最佳實踐

“生命是一場旅程。如果停下腳步,就無法看到新的風景。”-Pope Francis 去年十二月,我在一篇文章中提到雲將成為新常態,並將成熟企業採用雲的過程比作一場旅程。這場旅程是一個需要時間的迭代過程。在那篇文章中,我列出了企業雲之旅中常見的幾個階段。在去年的十一月份,我還寫了

前端Tips#2 - 將 arguments 轉換Array的最佳實踐

本文同步自 JSCON簡時空 - 技術部落格,點選閱讀 視訊講解 文字講解 1、先講結論 有很多種方式將 arguments 轉換成陣列,那麼哪一種方式是最優的? 為節約大夥兒的時間,這裡先說一下結論:如果你想將 arguments 轉換成陣列,最好的方式是使用 rest 引數轉換的方式(即使用 ...

30多年程式設計師生涯經驗總結【轉】

在我30多年的程式設計師生涯裡,我學到了不少有用的東西。下面是我這些年積累的經驗精華。我常常想,如果以前能有人在這些經驗上指點一二,我相信我現在會站得更高。 1.客戶在接觸到產品之後,才會真正明白自己的需求。 這是我在我的第一份工作上面學來的。只有當

Android視音頻編碼器(2)——cameraYUV、AudioRecordPCM分別編碼後muxermp4

效率 androi mar 視音頻 pop 采集 con 文章 cpu 參考下面這篇文章: http://blog.csdn.net/a992036795/article/details/54286654 一、前言 上一篇文章我講到,我用libx264對視頻

數據庫查詢前10數據

font sql color oracl logs rom from code oracle Oracle中查詢 select * from table where rownum<=10; DB2中查詢 select * from table

或許你不知道的10SQL技巧

提高效率 經驗 查詢 中國 nbsp 結果集 復雜 移動 前綴 這幾天在寫索引,想到一些有意思的TIPS,希望大家有收獲。 一、一些常見的SQL實踐 (1)負向條件查詢不能使用索引 select * from order where status!=0 and st

2017-7-18-每日博客-關於Linux下的鮮為人知的10命令.doc

nano you rand systems sel 表示 pts direct racer 這篇文章的目的是介紹一些少有人知的Linux命令,它們一定會高效地幫你管理你的桌面/服務器。 1. sudo !!命令 沒有特定輸入sudo命令而運行,將給出沒有權限的錯誤。那麽,你

有1千萬有重復的短信,以文本文件的形式保存,一行一,也有重復,用5分鐘時間找出重復出現最多的前10短信。

ascii碼 宋體 哈希表 文本 深度 pan 進行 span 二次 1,哈希表法   分成若幹組,進行掃描。相同記錄只加1次,重復次數加1,之後進行第二次掃描,得出重復次數的前十名。 2,從小到大排序(我覺得最好不用這種方法,準確性不高) 3,內存映射(建議)   對每條

無我編程的 10 戒律

tar 問題 utf8 重寫 尊敬 代碼 com 理解 內部 在《The Psychology of Computer Programming | 程序開發心理學》書中,溫伯格首次提出了無我編程十誡。本文則是 Stack Overflow 聯合創始人 Jeff Atwood

你不了解的10交互設計原則

交互設計 原型設計 產品經理 UX設計師 用戶體驗 交互設計,又稱互動設計,(英文:Interaction Design, 縮寫 IxD ), 是定義、設計人造系統的行為的設計領域。以人的需求為導向,理解用戶的期望、需求,理解商業、技術以及業內的機會與制約。基於以上的理解,創造出形式

做軟件測試,想薪資過萬? 送你10秘籍!【附圖】

缺陷報告 包括 培訓 問題解決 成長路線 目標 還要 這也 別人 很多軟件測試人員的薪資都卡在6k-9k這個階段,很想過萬卻始終邁不過去這個坎。 出現這個問題的原因一方面是自己的認知和思維出現了瓶頸,另一方面就是自己的能力在一些關鍵節點上有很大的缺失,但是自己覺察不到。

Mysql入門的10語句

char arc scrip 簡單 create show 刪除數據庫 修改表名 data 1.查看當前服務器下面,有那些庫(database)?答: show databases;2.如何創建一個數據庫?答 : create database 最後面在寫數據庫名;分號結束

NASA的10代碼編寫原則

width 高級 con 互斥 軟件項目 代碼分析 上一頁 check 改善代碼 NASA的10條代碼編寫原則作者: Gerard J. Holzmann 來源: InfoQ 原文鏈接 英文原文:NASA’s 10 Coding Rules for Writing Sa