如何防止代码腐烂

很多团队都有这个问题,一个项目的代码本来开始设计得好好的,一段时间以后,代码就会变得难以理解,难以维护,难以修改。为什么?我一直在思考这个问题。

  让我们先看一个人的情况。

  1. 程序员的成长

  新手的代码

  新手的代码没有经验,基本不考虑代码设计,代码规模稍稍大一点则自己就乱了。

如何防止代码腐烂

  进阶者的代码

如何防止代码腐烂

  小规模的时候

如何防止代码腐烂

  大规模的时候

  进阶者已经知道如何设计代码,懂得代码规则,但一般局限于一个模块。规模一大,模块间的调用就会比较混乱,难以维护。

  有经验者的代码

如何防止代码腐烂  有经验者的代码,模块内部代码整洁,模块之间层次清晰,有设计模式,有成熟的体系。可以保持长期的代码整洁。

  那么一个团队里面会出现什么情况呢?似乎,我们只要让一堆有经验的人来开发,那么代码必然不会出什么问题。可惜,事实不是这样。

  2. 背景

  代码风格的多样性

  有这样的。

如何防止代码腐烂  也有这样的

如何防止代码腐烂

  放眼一看,会发现不同的代码风格,不同的设计思想,不同的设计理念。每个程序员都有自己的代码个性。

如何防止代码腐烂

  团队层次的差异

  一个团队内部有新人,有熟手,有牛人。一个设计好的架构可能会变坏。

如何防止代码腐烂

  3. 原因

  风格的融合

  当程序员A和程序员B在一起的时候,会有如下变化

如何防止代码腐烂

  原本整洁的代码变得不整洁了。

  进度的压力

  进度导致了“飞线”的产生,未经设计的代码在时间的借口下产生了。

  多个人修改一个模块

如何防止代码腐烂

  4. 本质

  所有代码腐烂问题的本质是沟通问题。其表现又都可以统一为修改别人的代码。

  当一个程序员在没有沟通的情况下,修改另一个程序员的模块的代码的时候,他可能不理解此模块的设计思路,代码结构,逻辑结构,于是按自己的想法去修改,虽然看起来解决了眼前的问题。但是留下了一个不稳定因素。此因素可以通过重构来解决。但是,大家都非常的“忙”,谁也没有空时间去 Review 代码,去沟通我改了你的哪里的代码。所以不稳定的因素越来越多,导致了代码的腐烂。

  最快腐烂的代码,一定是很多人在修改的代码,相反,长期由一个人来维护的代码,就不会那么容易腐烂。因为一个人不存在沟通的问题,他修改代码的时候,明确的知道自己应该怎样去修改,怎样让代码更整洁。

  5. 解决

  就一个办法,多沟通。

  当你工作的时候需要修改别人的代码的时候,应该先找这个人沟通。说清楚需要改动的逻辑,然后尽量让他来修改。这样可以保证一块代码是由一个人维护,这样成本最少。

  如果此人真的太忙,没有时间,那么你必须说明你的计划,让他做一个建议,最好能让他给你讲讲此模块的设计思路,代码设计,逻辑设计,现在的问题,以后的计划。保证你修改的代码都是合理的。

  最理想的状态就是整个团队的思想是高度统一的,N个人可以像一个人那样去工作。这个需要团队长期的磨合。

  你可以会想到,我们制定一个规范不就可以了么?纸面上的规范通常是不起作用的,成功团队的规范是在整个团队达到一个很高的水平以后总结的经验。与其说执行规范,不如说是学习经验。MFC 的代码像是由一个人写出来的,Office 所有产品都像是一个人做出来的。这就是高度的统一。我们把微软的规范搬过来,不一定就有效果。

  代码的腐烂都是由于没有深入理解的情况下修改别人的代码导致的。

  总结一下:

  • 解决的方法就是任何修改之前确保经过深入的沟通。
  • 简单的规则是一个模块仅允许一个人维护。
  • 理想的状态是整个团队思想高度统一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.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;即你不能修改元组。 元组通过圆括…