代码腐烂

从虚拟机到双系统:手把手教你为Gromacs搭建最强Linux环境(含WSL2、Ubuntu22.04配置) 本文详细指导如何在Windows系统下为Gromacs分子动力学模拟搭建高性能Linux环境,涵盖WSL2和Ubuntu22.04双系统配置。通过对比虚拟机、WSL2和原生Linux的性能数据,提供GPU加速、内存优化等实用技巧,帮助科研人员提升计算效率。 阅读详情

        代码是程序员的一切,让我们快乐,让我们忧愁。看着优雅的代码,赏心悦目,看到恶心的代码,痛苦不堪。那么,是什么让代码变得恶心呢?


         网上有如下解释:架构不合理,需求变更,进度压力…… 首先,我觉得任何架构都是合理的,也都是不合理的。一个基本架构,能够完成现有的功能,效率上也说得过去,那么,它就是一个合理的架构。任何一个架构,都会不断的经受需求变更的挑战,没有任何人可以一开始就设计出完美的架构。所以流传着很广的一句话:好的架构,是改出来的。其次,需求变更时必然的,如果没有需求变更,就是要求设计师一开始就设计出完美的产品,就等于一开始就要求你设计出完美的架构,你做得到吗?最后,进度压力面前,就有理由让你写垃圾代码?时间一紧,领导一催,你就慌得向兔子?


        从我自己的经历来理解,人员变动和项目管理才是代码变烂的两大主要原因。君不见,一个经历一年的项目,第一批程序员完成第一期,第二批程序员完成第二期……,其实第二批程序员都还没有完全把控第一期的代码。第一批程序员的很多设计想法,第二批程序员都不知道,然后第二批程序员就按照自己的方式,开始在代码中搞东搞西。最后就出现了做同样一件事情,项目中出现N种解决方式(刚毕业的大学生进入这种项目组就爽了,做一个项目,收获多个项目的项目经验)……  项目管理:为了完成一个功能,很多团队的做法是:那个谁谁谁,你可以完成吗?谁谁谁说:可以。然后就开始搞,搞好了,测试随便点几下,做了一个简单的用户测试,ok,这个功能就完成了,试问,这样怎么保证代码质量呢?



***********************************************************************************************************************************************


下面附录一篇相关的文章,分析的比我好,写的也比我好:


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

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


1.程序员的成长


新手的代码

  

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


进阶者的代码

     小规模的时候

大规模的时候

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


有经验者的代码


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

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


2.背景


代码风格的多样性

  有这样的。

  也有这样的

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


团队层次的差异

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


3.原因


风格的融合

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

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


进度的压力

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


多个人修改一个模块


 


4.本质

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

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

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

 

5.解决

  就一个办法,多沟通。

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

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

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

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

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

  总结一下:

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

ROS从入门到精通0-1:教程导读 ROS概念太多太复杂?ROS从入门到精通系列订阅必看 阅读详情

相关推荐

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

如何防止代码腐烂

转自:http://djt.open.qq.com/article-14-1.html 很多团队都有这个问题,一个项目的代码本来开始设计得好好的,一段时间以后,代码就会变得难以理解,难以维护,难以修改。为什么?我一直在思考这个问题。 让我们先看一个人的情况。 1. 程序员的成长 新手的代码 新手的代码没有经验,基本不考虑代码设计,代码规模稍稍大一点则自己就乱了。 进阶者...

weixin_30535167的博客 109

【三维重建】基于多视角图像的三维重建

基于多视角图像的三维重建》

m0_64446860的博客 8758

【笔记】编程的原则:改善代码质量的101个方法

代码必然被修改 KISS原则 DRY 性能调优的箴言 一步一步走 布鲁克斯法则 防御性编程 破窗效应 熵增原理 80-10-10原则 第二系统综合征 重新发明车轮 给牦牛剃毛

绿龙术士的专栏 4390

基于gem5模拟trace的cache模拟器的实现

在做计算机体系结构的时候,模拟器是一个重要且又有效的工具。其中gem5集成了gem和m5的优点,使用起来比较简单和方便。其中包括了se模式和fs模式,se模式是在gem5运行我们已经编译好的程序,可以获取cache,cpu状态等数据,fs模式下可以模拟操作系统,我们可以将我们自己修改的linux内核加载到哥们上运行。下面介绍了使用gem5的se模式,运行编译好的ARM可执行文件。获取访存的trac

gaoxiang的专栏 8891

【已验证】基于STM32F407与AD9833的幅频特性测试装置设计与实现

本文详细介绍了基于STM32F407微控制器和AD9833 DDS芯片的低成本幅频特性测试装置设计与实现方法。通过扫频原理,该装置能自动生成正弦波信号,测量滤波器等电路的输出幅度变化,并在LCD屏幕或示波器上绘制幅频特性曲线。文章提供了从硬件选型、CubeMX工程配置、关键驱动代码编写到数据处理与可视化的完整教程,帮助电子爱好者与工程师快速搭建实用的滤波器测试工具。

weixin_35649491的博客 120

逆向思考:如何写出烂代码

做一个烂程序员,写出烂代码。加油,只要按照下面的去做,就一定可以写烂代码。

qq_40454111的博客 398

手把手教你学simulink(44.1)--串励直流电动机场景示例:基于Simulink开发一个串励直流电动机电压控制仿真模型

高启动转矩:由于励磁绕组和电枢绕组串联连接,电机在启动时可以产生较大的转矩。速度随负载变化:由于励磁电流和电枢电流是同一电流,电机的速度会随着负载的变化而显著变化。适用于重载启动:适合用于需要高启动转矩的应用,如起重机、牵引系统等。

MHD0815的博客 339

每日一学:如何写出让人抓狂的代码?

点击上方“优快云精品课”,选择“置顶公众号”第一时间获取精品编程教程大家好,我是苏三,又跟大家见面了。前言今天跟大家聊一个有趣的话题:如何写出让人抓狂的代码?大家看到这个标题,第一印象觉...

sinat_32849897的博客 568

基于大模型最大化电力交易收益(策略与代码实践)

新一代电力交易系统正借助大型语言模型(LLM)实现智能化转型。面对可再生能源占比提升带来的市场波动性加剧,传统交易策略已难以应对。LLM通过多模态能力,能够实时处理海量异构数据,包括政策公告、设备检修信息、天气报告等非结构化数据,构建更精准的电力市场预测模型。智能交易系统主要包含三大核心模块:市场情报感知与理解器、融合LLM的短期电价预测模型和自适应交易策略生成器。这些模块协同工作,可在几分钟内完成事件分析、价格预测和策略生成,显著提升交易效率。系统还能实现跨市场套利和动态风险管理,但需注意数据质量、模型验

专注AI大模型,软件混淆,授权 1254

Open3D 高斯牛顿法优化的ICP点云配准

本文介绍了基于高斯牛顿法的ICP点云配准算法。算法通过最小化源点云与目标点云之间的误差函数,求解最优的刚性变换参数(平移向量和欧拉角)。核心内容包括:1)建立误差函数和目标函数;2)推导雅可比矩阵计算,特别是旋转导数的李代数近似;3)详细阐述高斯牛顿法的迭代流程,包括变换计算、最近邻搜索、参数更新等步骤;4)分析算法的优缺点,指出其具有二阶收敛速度但可能陷入局部最优。最后给出了完整的数学推导过程,包括误差函数的泰勒展开和目标函数的近似优化。该算法适用于三维点云配准任务,但需要良好的初始位姿以避免局部收敛问题

点云侠的博客 128

【无标题】腐烂的代码

软件工程的内部质量标准有:可维护性,灵活性,可移植性,可重用性,可测试性,可理解性 。不符合以上标准都可以称之为代码腐化,形象的理解就是一个苹果,从内部开始烂了,烂到原本应该负责内部代码的程序员拒绝去维护了。...

产业互联网&消费类电子 588

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

代码腐烂可以避免吗?

一个苹果放在桌子上不理它,它会慢慢地变坏。代码也跟苹果一样,会发生代码腐烂。坏的代码就跟坏的苹果一样,会更容易发生腐烂、腐烂得更快。工作时间久了,关注的角度从个人变成了团队整体。我就会想:...

陈树义 245

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

代码是何时开始腐烂的

    有一分部程序员看到不符合自己愿意的代码就任为是糟糕的代码,喊着并想尽办法人管理给出时间去重构。因为我也做过过样的事情,一分部原因切确想把所有代码变成心中有'树'。二是也是出于对未知代码的恐惧,这样的程序员一部分藏私一分部也是于责任心,所以做法是否正确,阁下自已断定。    腐烂的代码是审查不严谨,人员流动大,人员能力一般又迫于实现、认知有限等。什么东西都可能成为腐烂的原因。但他的触发机制只...

闲云野鹤你来 787
上一篇: 仿写 微信 界面
下一篇: svn 上传 过滤
coding_or_coded
博客等级 码龄16年 216粉丝 115原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值