很多团队都有这个问题,一个项目的代码本来开始设计得好好的,一段时间以后,代码就会变得难以理解,难以维护,难以修改。为什么?我一直在思考这个问题。
让我们先看一个人的情况。
1. 程序员的成长
新手的代码
新手的代码没有经验,基本不考虑代码设计,代码规模稍稍大一点则自己就乱了。
进阶者的代码
小规模的时候
大规模的时候
进阶者已经知道如何设计代码,懂得代码规则,但一般局限于一个模块。规模一大,模块间的调用就会比较混乱,难以维护。
有经验者的代码
有经验者的代码,模块内部代码整洁,模块之间层次清晰,有设计模式,有成熟的体系。可以保持长期的代码整洁。
那么一个团队里面会出现什么情况呢?似乎,我们只要让一堆有经验的人来开发,那么代码必然不会出什么问题。可惜,事实不是这样。
2. 背景
代码风格的多样性
有这样的。
也有这样的
放眼一看,会发现不同的代码风格,不同的设计思想,不同的设计理念。每个程序员都有自己的代码个性。
团队层次的差异
一个团队内部有新人,有熟手,有牛人。一个设计好的架构可能会变坏。
3. 原因
风格的融合
当程序员A和程序员B在一起的时候,会有如下变化
原本整洁的代码变得不整洁了。
进度的压力
进度导致了“飞线”的产生,未经设计的代码在时间的借口下产生了。
多个人修改一个模块
4. 本质
所有代码腐烂问题的本质是沟通问题。其表现又都可以统一为修改别人的代码。
当一个程序员在没有沟通的情况下,修改另一个程序员的模块的代码的时候,他可能不理解此模块的设计思路,代码结构,逻辑结构,于是按自己的想法去修改,虽然看起来解决了眼前的问题。但是留下了一个不稳定因素。此因素可以通过重构来解决。但是,大家都非常的“忙”,谁也没有空时间去 Review 代码,去沟通我改了你的哪里的代码。所以不稳定的因素越来越多,导致了代码的腐烂。
最快腐烂的代码,一定是很多人在修改的代码,相反,长期由一个人来维护的代码,就不会那么容易腐烂。因为一个人不存在沟通的问题,他修改代码的时候,明确的知道自己应该怎样去修改,怎样让代码更整洁。
5. 解决
就一个办法,多沟通。
当你工作的时候需要修改别人的代码的时候,应该先找这个人沟通。说清楚需要改动的逻辑,然后尽量让他来修改。这样可以保证一块代码是由一个人维护,这样成本最少。
如果此人真的太忙,没有时间,那么你必须说明你的计划,让他做一个建议,最好能让他给你讲讲此模块的设计思路,代码设计,逻辑设计,现在的问题,以后的计划。保证你修改的代码都是合理的。
最理想的状态就是整个团队的思想是高度统一的,N个人可以像一个人那样去工作。这个需要团队长期的磨合。
你可以会想到,我们制定一个规范不就可以了么?纸面上的规范通常是不起作用的,成功团队的规范是在整个团队达到一个很高的水平以后总结的经验。与其说执行规范,不如说是学习经验。MFC 的代码像是由一个人写出来的,Office 所有产品都像是一个人做出来的。这就是高度的统一。我们把微软的规范搬过来,不一定就有效果。
代码的腐烂都是由于没有深入理解的情况下修改别人的代码导致的。
总结一下:
- 解决的方法就是任何修改之前确保经过深入的沟通。
- 简单的规则是一个模块仅允许一个人维护。
- 理想的状态是整个团队思想高度统一。
分享到:
相关推荐
力扣热题Python源代码 题目994. 腐烂的橘子 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上...
文章目录腐烂的橘子题目解题思路代码实现实现结果 腐烂的橘子 题目来源:https://leetcode-cn.com/problems/rotting-oranges 题目 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 ...
通过rDNA-ITS分析,鉴定了导致华东地区杭州市苹果货架期腐烂的主要病原体。 还比较了它们的致病性和胁迫耐受性。 结合疾病症状,菌落表型和菌丝显微形态,将真菌分别确定为扩展青霉菌,灰霉菌,灰霉病菌,菜豆夜蛾,...
它可能不会坚持下去构建最小可行产品测试版 API 在没有过期检测机制的情况下发送易腐烂的代码是软件开发膨胀的一个秘诀; 未在现实世界中使用的过期代码是未检测到的错误的巢穴; 维护过期代码是一种没有人应该支付...
matlab光照模型代码人脸地标检测基准 人脸标志(基准点)检测评估。 名称 腐烂。 经验值 郎郎 Doc。 不 不 C 是的 ? ? ? ? ? ? ? ? 指标: "The average point-to-point Euclidean error normalized by the ...
专业提示:在花盆底部钻孔以排出进来的水,否则根部可能会腐烂。 第 2 部分 - 湿度传感器 将湿度传感器与同包中的 LM393 芯片连接。该传感器具有模拟(0 表示湿,1023 表示干)和数字(LOW 表示湿,HIGH 表示干)...
StardewHack 一堆严重依赖IL代码修改的Stardew Valley mod。 为此,它使用 。 部分支持Android。 由于android的库存屏幕完全不同,因此android仅支持mods Wear More Rings和Bigger Backpack。概述:使地图滚动到地图...
•不惧怕重构代码库以防止位腐烂•您知道何时代码可以很好地执行,以及代码的哪些部分可能无法正常工作,但是您还知道何时开始进行优化还为时过早。 •您愿意自由共享信息,指导其他初级开发人员并编写文档。 •您...
传统开发方式 传统开发方式主要使用MVC框架,... 4、逻辑混乱,最终造成代码腐烂 前后端分离 为了解决以上问题,降低耦合,出现了一种新的开发方式:前后端分离。 半分离时代 前后端半分离,前端负责开发页面,通过接
我们添加了小的移位和腐烂增强,可将结果提高到HPatches上的1mAP点。 它位于HardNet.py中,通过--augmentation = True打开。 所有重量将很快更新。 正在对Brown + HPatches + PS数据集进行培训的版本正在开发中,敬...
更新了现代库的代码和依赖关系-代码腐烂是真实的,伙计们 添加了将生成的图像设置为墙纸的选项-恐怕目前仅Windows支持,仅在Windows计算机上工作,因此,如果要其他平台支持,请随意编写几行代码并发送拉请求! 从...
腐烂围绕着你; 恐惧在各个角落等着你。 当您穿越庇护的无尽走廊时,令人不安的监禁感逐渐蔓延到您身上…… 庇护是由Senscape推出的心理恐怖冒险游戏,灵感来自HP Lovecraft,该游戏设在一个大型精神病院中,远远...
7)保存因水而腐烂的计划。 介绍: 在这个项目中,我们谈论的是一个包括整个浇水系统的自动化系统。 自动浇水系统就是这样一种系统,通过土壤湿度传感器测量土壤湿度,开始浇灌植物。我们不需要控制浇水,因为设备会...
至少每周一次应重新开发/合并develop ,以防止发生腐烂。 如果有必要,开发人员可以从这些分支分支到自己的个人<username>/XXX分支,然后合并到运行时间更长的分支中。 develop :我们的主要开发/集成部门。 它...
高级java笔试题 构建可信软件系统 或许是软件正在吞噬世界,或许是软件不断被重写,越来越多的架构师、...架构的腐烂来自于代码的坏味道,而代码的坏味道则是属于技术债务,于是乎技术债务的无力偿还才是代码质量背后的
Lucid体系结构是一种软件体系结构,它可以随着应用程序的扩展(从不堪重负到处理)扩展到合并代码库维护,使我们摆脱了腐烂的代码,这些代码后来又变成了遗留代码,并翻译了诸如Feature和服务成实际的物理代码。...
清醒的体系结构是一种软件体系结构,它在应用程序扩展时从不堪重负到处理,巩固了代码库维护,使我们摆脱了腐烂的代码,这些代码后来变成了遗留代码,并转换了诸如Feature和服务成实际的物理代码。 阅读有关更多...
腐烂13;RSA 密码;RSA 分解;RSA 密钥生成器;随机移位密码;简单的关键字密码;简单替换密码;特拉菲德密码;换位密码;转置密码加密解密文件;维杰尼尔密码;异或密码。 课程设计 在密码学中,密码(英语:cipher,或...
该代码是[6]的官方PyTorch实现,以及可以为链接预测任务训练的多个最新KG嵌入模型。 Tensorflow实现也可以在以下 获得: : 图书馆概况 此实现包括以下模型: 复杂的嵌入: 复杂[1] 复合物-N3 [2] RotatE(无自我...
我认为最好将这些链接放在这里给每个人,而不是让它们在我以前错综复杂的文件夹层次结构中腐烂。 内容 这不是毫无意义的。 帮助你学习。 对于程序员。 可能对您有所帮助的资源。 我觉得必不可少的。 我不知道如何...