如何防止代碼腐爛

很多團隊都有這個問題,一個項目的代碼本來開始設計得好好的,一段時間以后,代碼就會變得難以理解,難以維護,難以修改。為什么?我一直在思考這個問題。

  讓我們先看一個人的情況。

  1.?程序員的成長

  新手的代碼

  新手的代碼沒有經驗,基本不考慮代碼設計,代碼規模稍稍大一點則自己就亂了。

如何防止代碼腐爛

  進階者的代碼

如何防止代碼腐爛

  小規模的時候

如何防止代碼腐爛

  大規模的時候

  進階者已經知道如何設計代碼,懂得代碼規則,但一般局限于一個模塊。規模一大,模塊間的調用就會比較混亂,難以維護。

  有經驗者的代碼

如何防止代碼腐爛  有經驗者的代碼,模塊內部代碼整潔,模塊之間層次清晰,有設計模式,有成熟的體系。可以保持長期的代碼整潔。

  那么一個團隊里面會出現什么情況呢?似乎,我們只要讓一堆有經驗的人來開發,那么代碼必然不會出什么問題。可惜,事實不是這樣。

  2.?背景

  代碼風格的多樣性

  有這樣的。

如何防止代碼腐爛  也有這樣的

如何防止代碼腐爛

  放眼一看,會發現不同的代碼風格,不同的設計思想,不同的設計理念。每個程序員都有自己的代碼個性。

如何防止代碼腐爛

  團隊層次的差異

  一個團隊內部有新人,有熟手,有牛人。一個設計好的架構可能會變壞。

如何防止代碼腐爛

  3.?原因

  風格的融合

  當程序員A和程序員B在一起的時候,會有如下變化

如何防止代碼腐爛

  原本整潔的代碼變得不整潔了。

  進度的壓力

  進度導致了“飛線”的產生,未經設計的代碼在時間的借口下產生了。

  多個人修改一個模塊

如何防止代碼腐爛

  4.?本質

  所有代碼腐爛問題的本質是溝通問題。其表現又都可以統一為修改別人的代碼。

  當一個程序員在沒有溝通的情況下,修改另一個程序員的模塊的代碼的時候,他可能不理解此模塊的設計思路,代碼結構,邏輯結構,于是按自己的想法去修改,雖然看起來解決了眼前的問題。但是留下了一個不穩定因素。此因素可以通過重構來解決。但是,大家都非常的“忙”,誰也沒有空時間去 Review 代碼,去溝通我改了你的哪里的代碼。所以不穩定的因素越來越多,導致了代碼的腐爛。

  最快腐爛的代碼,一定是很多人在修改的代碼,相反,長期由一個人來維護的代碼,就不會那么容易腐爛。因為一個人不存在溝通的問題,他修改代碼的時候,明確的知道自己應該怎樣去修改,怎樣讓代碼更整潔。

  5. 解決

  就一個辦法,多溝通。

  當你工作的時候需要修改別人的代碼的時候,應該先找這個人溝通。說清楚需要改動的邏輯,然后盡量讓他來修改。這樣可以保證一塊代碼是由一個人維護,這樣成本最少。

  如果此人真的太忙,沒有時間,那么你必須說明你的計劃,讓他做一個建議,最好能讓他給你講講此模塊的設計思路,代碼設計,邏輯設計,現在的問題,以后的計劃。保證你修改的代碼都是合理的。

  最理想的狀態就是整個團隊的思想是高度統一的,N個人可以像一個人那樣去工作。這個需要團隊長期的磨合。

  你可以會想到,我們制定一個規范不就可以了么?紙面上的規范通常是不起作用的,成功團隊的規范是在整個團隊達到一個很高的水平以后總結的經驗。與其說執行規范,不如說是學習經驗。MFC 的代碼像是由一個人寫出來的,Office 所有產品都像是一個人做出來的。這就是高度的統一。我們把微軟的規范搬過來,不一定就有效果。

  代碼的腐爛都是由于沒有深入理解的情況下修改別人的代碼導致的。

  總結一下:

  • 解決的方法就是任何修改之前確保經過深入的溝通。
  • 簡單的規則是一個模塊僅允許一個人維護。
  • 理想的狀態是整個團隊思想高度統一。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451393.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451393.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451393.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是商業智能(BI),以及其與數據分析的區別?

BI(Business Intelligence)即商務智能,它是一套完整的解決方案,用來將企業中現有的數據進行有效的整合,快速準確地提供報表并提出決策依據,幫助企業做出明智的業務經營決策。它是一種產品/服務,…

php課程 4-15 數組遍歷、超全局數組、表單提交數據(多看學習視頻)

php課程 4-15 數組遍歷、超全局數組、表單提交數據(多看學習視頻) 一、總結 一句話總結:超全局數組特別有用,比如$_SERVER可以獲取所有的客戶端訪問服務器的情況。 1、數組遍歷三種方式(最不熟悉的那一種)…

git branch 分支

Git自學之路(四)- git branch 分支 幾乎所有的版本控制系統都以某種形式支持分支。 使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。 在很多版本控制系統中,這是一個略微低效的過程——常常需要完全創建一…

軟件工程師的十個“不職業”行為

職業化是軟件工程師的必然選擇。本文根據我在教學和軟件開發管理方面的實踐,列舉幾個軟件工程師“不職業”的行為或習慣,從另外一個側面進一步探討什么是真正的軟件工程師職業化。職業化之于軟件工程師非常重要。因為:軟件是看不見也摸不著的…

fn:substring()函數

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 fn:substring()函數返回字符串中指定開始和結束索引的子串。 語法 fn:substring()函數的語法如下&#xff1a; ${fn:substring(<s…

大數據分析如何創建最佳的移動應用用戶體驗

2019獨角獸企業重金招聘Python工程師標準>>> 如今&#xff0c;越來越多的人使用移動應用程序。而移動應用將在未來成為一個價值數十億美元的產業。大數據可以幫助企業構建最佳的用戶體驗。 多年來&#xff0c;開發移動應用程序的技術一直在不斷發展&#xff0c;這實…

C語言自學的方法

一、C語言入門的基本學習方法 《C語言》的內容很豐富&#xff0c;有的部分涉及到的細節很多&#xff0c;如硬件知識和數據結構知識等&#xff0c;自學時不可能面面俱到&#xff0c;否則必然會顧此失彼&#xff0c;反而抓不住主要矛盾。筆者認為對初學C語言的考生&#xff0c;開…

CAP原理簡單理解

C&#xff1a;集群中所有機器狀態是一致的。 A&#xff1a;客戶端訪問集群中任意一個節點&#xff0c;總能得到"處理成功"的結果。 假設有五個節點&#xff1a;n1~n5 &#xff0c;出現網絡分區被分成兩組&#xff1a;[n1~n2]和[n3~n5]&#xff0c;那么當n1出來客戶端…

Jstorm+Spring+mybatis整合

在現有的jstorm框架下&#xff0c;有一個需求&#xff1a;jstorm要對接mysql數據庫的實時讀取數據&#xff0c; 通過bolt處理&#xff0c;可能要調用service層的框架&#xff0c;最后保存到數據庫。 在網上尋找了一下&#xff0c;發現storm集成spring的資料非常少&#xff0c;有…

無限享受百度文庫,財富值無視

相信大家在百度上找東西時&#xff0c;遇到有的文庫需要財富值&#xff0c;可是自己又沒有&#xff0c;是不是很頭疼啊。請看&#xff1a; 找到自己要的文庫&#xff0c;如我找的文庫鏈接為&#xff1a;http://wenku.baidu.com/view/7db6 ... html?l5.1.5.1&&#xff08;…

JavaScript onerror 事件( window.onerror = )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 使用 onerror 事件是一種老式的標準的在網頁中捕獲 Javascript 錯誤的方法。 實例 onerror 事件 如何使用 onerror 事件捕獲網頁中的錯誤…

上海云棲:金融政企行業的CDN最佳實踐

2019獨角獸企業重金招聘Python工程師標準>>> 摘要&#xff1a; 在剛剛結束的上海云棲大會飛天技術匯分論壇上&#xff0c;阿里云視頻云產品架構師羅小飛進行了《阿里云CDN——面向金融政企的CDN最佳實踐》主題分享&#xff0c;為上海的嘉賓介紹CDN的解決方案與技術服…

lunix基本命令

安裝lunix 批量創建文件 whoami查看當前用戶 sudo adduser lilei創建用戶 groups lilei 查看用戶所屬用戶組 sudo usermod -G root lilei 賦予root權限 sudo deluser lilei --remove-home ls -l 顯示目錄的文件 ls -a 顯示隱藏文件 PWD 獲取當前目錄 cd .. 返回上層目錄 cd 進入…

開啟Swarm集群以及可視化管理

為什么80%的碼農都做不了架構師&#xff1f;>>> 在搭建的兩臺coreos服務器上開啟swarm集群 前置條件&#xff1a; docker均開啟2375端口同一個局域網內主服務器上安裝Portainer容器安裝Portainer容器執行&#xff1a; docker run -d -p 9000:9000 --restartalways …

python基本語法:序列

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 序列的基本操作&#xff1a; 2.用例&#xff1a; 3.序列包含字符串、元組、列表。

移動互聯網開始降溫:“人才熱”退燒

去年的瘋狂搶人變成了今年的裁員甚至關門歇業&#xff0c;漫天要價變成了工作難找&#xff0c;移動互聯網市場正回歸理性 工作不好找了。 “去年這個時候&#xff0c;一個剛畢業的Android開發工程師&#xff0c;就能輕松拿到七八千一個月&#xff0c;而今年&#xff0c;很難找到…

MAP存儲數據

map可以裝多種類型的值&#xff0c;當然鍵不能重復&#xff0c;值可以重復。可以使用多種類型的父類&#xff0c;來指定值的類型。比如Object是其他類的父類。例如&#xff1a;HashMap<Object,Object>&#xff0c;它的鍵和值都可以存儲多種類型&#xff0c;反正都是Objec…

IMDb、爛番茄、MTC、各種電影行業評分名字整理

這篇不是技術文章&#xff0c;就是對總是看到但是不知道具體是什么的一些電影名詞、評分、來源&#xff0c;學習一下。 IMDb 互聯網電影資料庫&#xff08;Internet Movie Database&#xff0c;簡稱IMDb&#xff09;是一個關于電影演員、電影、電視節目、電視明星和電影制作的在…

iOS應用:成功就像中彩票,大半開發者虧本

移動是座大金礦&#xff0c;從來都不乏一飛沖天的成功故事&#xff08;Draw Something、憤怒的小鳥等&#xff09;。但是大家往往只看到光鮮的一面&#xff0c;對于移動開發者來說&#xff0c;現實是殘酷的&#xff0c;根據市場營銷機構App Promo的一項調查&#xff0c;絕大多數…

python基本語法:元組

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 元組說明&#xff1a; 元組和列表類似&#xff0c;只不過元組和字符串一樣是不可變的&#xff0c;即你不能修改元組。 元組通過圓括…