每一座屎山代码背后,都藏着一堆熟读代码规范的研发

news2025/2/25 8:30:14

15e29ec0418a84a8a51d137d7da80621.png

5299ee53a8ab95804aa00de8b07682f2.gif

👉导读

韩寒在《他的国》中写道:“我们懂很多道理,却依然过不好这一生”,人们虽然知道很多道理,但并不一定能将这些道理应用到实际生活中。这种现象在生活中很常见,我们听了很多的成功学的道理,但实际上,成功和幸福不是仅仅靠这些道理就能实现的,需要不断地努力和实践,才能实现自己的目标。而在开发的过程中也会遇到类似的问题,明明熟读《代码整洁之道》,却依旧只能写低效代码,行业内经常调侃“一个优秀的程序员可以带动多人就业”,这些中间欠缺的是什么?如何快速落实?本文将从几个方面进行分析,欢迎阅读。

👉目录

1 时间压力

2 业务需求

3 自我驱动力

4 团队合作和沟通

5 技术债务

6 自动化工具和流程

7 反馈和改进机制

8 个人实施案例

01

时间压力

在开发的过程中,项目可能有紧迫的截止日期,需要在有限的时间内完成。这可能导致时间压力,同时在开发过程中,可能会遇到一些不可预见的延迟和问题,如技术难题、系统故障等,这会导致开发时间的压缩。使得开发者难以花费足够的时间来编写高质量的代码。

de90e0eb63bda6097613b528e2d31442.jpeg

解决办法:

▶︎ 合理规划和管理时间:在项目开始之前,制定详细的项目计划和时间表,并合理分配各个任务的时间。确保给自己足够的时间来编写高质量的代码。

▶︎ 优先级管理:根据任务的重要性和紧急程度,合理设置任务的优先级。将时间和精力集中在最重要的任务上,确保其优先完成。

▶︎ 寻求帮助和支持:如果时间压力过大,可以向上级或团队领导寻求帮助和支持。他们可能会提供额外的资源或调整项目计划,以减轻开发者的压力。

▶︎ 自我管理和调整:开发者需要学会自我管理和调整,合理安排工作和休息时间。避免过度工作和疲劳,保持身心健康,提高工作效率。

▶︎ 寻找时间优化的机会:在开发过程中,寻找可以优化时间的机会。例如,使用代码模板、重用已有的代码、利用开源库等,可以减少开发时间。

02

业务需求变更

在软件开发过程中,业务需求可能没有被充分明确或者变化频繁。这可能导致开发者需要频繁修改代码,而没有足够的时间来重构和优化代码质量。

af8dea380a71cbe1e15386b1e36ee301.png


解决办法:

▶︎ 加强需求分析和明确:与客户或项目经理密切合作,确保需求被充分分析和明确。通过详细的需求文档、用户故事、原型等方式,减少需求模糊性,降低需求变更的频率。

▶︎ 频繁沟通和反馈:与客户或项目经理保持频繁的沟通和反馈。及时更新项目进展,让客户或项目经理了解开发进度和可能的影响。这样可以减少需求变更的频率,并及时调整开发计划。

▶︎ 敏捷开发方法:采用敏捷开发方法,如 Scrum 或 Kanban,可以更好地应对需求变更。通过迭代开发和短周期的发布,可以及时响应需求变更,并减少时间压力。

▶︎ 需求变更管理:建立良好的需求变更管理机制。对需求变更进行评估和优先级排序,确保只有真正重要和紧急的变更才会被接受,并及时更新开发计划。

▶︎ 风险管理和缓冲时间:在项目计划中,考虑到需求变更的风险,并为此留出一定的缓冲时间。这样可以应对可能的变更,减少时间压力。

03

自我驱动力

尽管开发者知道代码整洁和代码质量的重要性,但他们可能缺乏自我驱动力来主动提高自己的编码水平。他们可能更关注完成任务而忽略了代码质量。

ced39dd1e1f63846c2a2ed01ca152a8a.png

解决办法:

▶︎ 找到工作的意义和价值:深入思考开发工作的意义和价值,明确自己的职业目标和发展方向。通过理解工作的重要性,能够激发自我驱动力去追求高质量的代码。

▶︎ 设定明确的目标和计划:制定明确的目标和计划,将开发过程分解为小的可管理的任务。通过逐步完成这些任务,逐渐提高代码质量,增强自我驱动力。

▶︎ 增强自信心:通过不断学习和提升自己的技术能力,增强自信心。参加培训、读书、参与开源项目等方式,能够提高自己的专业知识和技能,从而有信心写出高质量的代码。

04

团队合作和沟通

在一个团队中,如果没有共同的代码整洁标准和代码质量意识,开发者可能很难在项目中保持一致的代码质量。缺乏有效的沟通和合作也会影响代码整洁的实施。

7d491a8fecd4abaca2b3eb3244c4a293.jpeg

解决办法:

▶︎ 制定统一的代码整洁标准:项目组应该制定统一的代码整洁标准,明确代码的命名规范、代码风格、注释规范等。可以参考行业的最佳实践和代码规范,如 Google 的编码规范、Clean Code 等。

▶︎ 建立代码审查机制:在项目中引入代码审查机制,通过对代码的检查和评审,及时发现和纠正代码质量问题。可以通过代码审查工具或人工的方式进行代码审查。

▶︎ 建立知识分享和交流机制:建立一个开放的知识分享和交流平台,让开发者可以互相学习和交流经验。可以组织技术分享会、团队建设活动等,促进开发者之间的合作和学习。

▶︎ 奖励和认可优秀的代码质量:对于在项目中表现出色的开发者,可以给予奖励和认可,激励他们保持高质量的代码。这可以是一种激励机制,促使开发者提高代码质量意识。

05

技术债务

在开发过程中,由于一些原因,开发者可能会采取一些权宜之计,暂时牺牲代码质量以满足需求。这些权宜之计可能导致技术债务的积累,随着时间的推移,代码变得越来越难以维护和改进。如下所示:

int x = 10;
int y = 0;
int result = x / y; 
// 上面代码显然没有考虑处理除以 0 的情况,这种类似的情况还有很多。


// 改进思路:
int x = 10;
int y = 0;
if (y != 0) {
    int result = x / y; // 添加条件判断,避免除以 0 的错误
} else {
    // 错误处理逻辑,如输出错误信息或者抛出异常
}

a2a42ea70d5049cd467bab64c733b856.jpeg

改进方法和思路:

▶︎ 分阶段交付和迭代开发:将项目分解为多个阶段,每个阶段都有明确的交付目标。通过迭代开发的方式,及时交付部分功能,减轻时间压力,避免牺牲代码质量。

▶︎ 技术债务管理:及时识别和记录技术债务,将其纳入项目的规划和管理中。在后续的开发过程中,逐步还清技术债务,提高代码质量。

▶︎ 技术选型和技术评估:在项目开始之前,进行充分的技术选型和技术评估,选择适合项目需求的技术栈。避免因技术选型不当导致后期维护困难。

▶︎ 代码审查和重构:定期进行代码审查,及时发现和纠正代码质量问题。在项目后期,可以考虑进行代码重构,改善代码的可读性、可维护性和可扩展性。

06

自动化工具和流程

缺乏自动化工具和流程可能使得代码整洁和代码质量的检查变得困难。开发者可能需要手动进行代码审查和测试,增加了工作量和错误的可能性。

90b189b3c604f6bced878acb7d891294.jpeg

解决办法:

▶︎ 使用自动化工具:选择适当的自动化工具来辅助代码整洁和代码质量的检查。例如,使用静态代码分析工具(如 SonarQube、ESLint、PMD 等)来检查代码规范和潜在的问题。使用单元测试框架(如 JUnit、pytest 等)来自动化测试代码。这些工具可以帮助开发者减少手动工作,提高代码质量。

▶︎ 持续集成和持续交付:引入持续集成和持续交付的流程,自动化构建、测试和部署过程。通过自动化的流程,可以及时发现和修复代码质量问题,减少手动工作和错误的可能性。

07

反馈和改进机制

如果开发者没有及时获得代码质量的反馈和改进机会,他们可能无法意识到自己的问题,并且无法改进自己的编码水平。

006143238f5378bccebd78bce6f3af14.jpeg

▶︎ 代码质量评估和反馈:建立起代码质量评估和反馈机制,定期对开发者的代码进行评估,并及时提供反馈。可以使用静态代码分析工具、代码审查等方法来评估代码质量,并向开发者提供改进建议和指导。

▶︎ 学习和培训机会:提供学习和培训机会,帮助开发者提升自己的编码水平。可以组织内部培训、技术分享会等活动,让开发者学习和分享最佳实践和经验。

▶︎ 导师制度:建立导师制度,为开发者提供指导和支持。经验丰富的开发者可以担任导师角色,与新手开发者进行合作和交流,帮助他们提升编码水平。

▶︎ 代码评审和团队合作:建立起代码评审和团队合作的机制,通过代码评审和团队讨论,开发者可以相互学习和改进。可以定期进行代码评审会议,让开发者分享自己的代码,并接受其他开发者的评审和建议。

▶︎ 提供挑战和机会:给开发者提供挑战和机会,让他们参与复杂和有挑战性的项目。通过参与这样的项目,开发者可以学习和成长,提升自己的编码水平。

08

个人实施案例

那是毕业后来到的第二家公司,接手了离职同事的“屎山代码”,整个项目只有一句注释,“佛祖保佑,永无 bug”。代码没有一点规范,变量命名清一色的 aabb,领导让我抓紧给个排期,项目要上线,我心想“我赶紧跑路的好!”,我直截了当说道:“这个项目整体没用规范,他可能都看不懂,我更看不懂”,后面还是勉强上线了,但问题较多,我的绩效一塌糊涂。我就在思考如何高效地开发代码和定位问题?并在我所在的这个项目中快速实施。

94d1fd3231383d88816ca04e1fe990a6.png

▶︎ “屎山一样的代码”我不可能一点点修复规范问题,有没有合适的工具可以提醒你呢,哪里问题较多,在我用了多个工具之后,我发现 CheckStyle 是我用过最好的代码规范检查工具,里面用了 sun 的规范。(后面在其他同事的协助下,共同搞定了一版公司自身的规范)。

▶︎ 后面慢慢的我定位问题和开发代码的质量越来越高,绩效也好了很多,在一些分享会中,我提了自己的建议,领导针对这些成果也是比较认可,最后成立了“代码规范小组”,定了一些规范制度:

  • 开发人员互相 review 代码,不少于两个人看过之后才可以合并主线。

  • 提出问题的人可以得到奖励。“开发问题代码”的会受到惩罚(在两个月后开始执行)。

  • 你也可以对其他项目提出问题(背景:公司较小,项目又比较多和杂。这个的奖励是比较多的,对自己的个人时间占用较多,取舍全靠自己,没有硬性要求)。

  • 导师制度:带的新入职的员工如果近期发起的代码质量优秀或者取的了好绩效,导师会得到奖励。

  • 分享会:开发人员会找轮流进行分享,找一些开源代码或者经典案例进行解读。

经历了大概一年的时间的迭代,低质量代码逐渐消失了。后续我复盘这个过程,我发现有些运气的成分,遇见了一个很好的领导,一群优秀的同事,当然也和自身的努力分不开,如果自己没有想着去提升自己的代码规范从而快速地解决问题,就不会被领导看见代码规范的重要性,更不会去推动团队代码规范建设。

最后,我想告诉大家,当我们看到这些“屎山代码”的时候,我们应该偷偷地笑,先恭喜自己取得高绩效,根据实际情况并结合上述分析去推动团队制定代码规范和有效措施。投入实践,具体落实。希望每个人都能被看见。

-End-

原创作者|孔垂航

cd5389f1cc42c73b6380ea6b027fa97f.png

那么为什么要有代码规范呢?你对代码规范有什么样的看法?欢迎分享。我们将选取1则最有意义的评论,送出腾讯云开发者-编写通勤袋1个(见下图)。9月13日中午12点开奖。

49bad43a594a7c66d00520a0513686b4.png

📢📢欢迎加入腾讯云开发者社群,社群专享券、大咖交流圈、第一手活动通知、限量鹅厂周边等你来~

c85cc9b585387e0b27ea934c516be277.png

(长按图片立即扫码)

e130846163bf0b9a35270a67a837661f.png

3135fcf724c916605c3def5c0df07046.png

32f5efece81f452feec9ccd63bd10876.png

1323af494aad4a65714f238e15ac1881.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/982198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接入 NVIDIA A100、吞吐量提高 10 倍!Milvus GPU 版本使用指南

Milvus 2.3 正式支持 NVIDIA A100! 作为为数不多的支持 GPU 的向量数据库产品,Milvus 2.3 在吞吐量和低延迟方面都带来了显著的变化,尤其是与此前的 CPU 版本相比,不仅吞吐量提高了 10 倍,还能将延迟控制在极低的水准。…

ChatGLM2-6B 部署

引言 这是ChatGLM2-6B 部署的阅读笔记,主要介绍了ChatGLM2-6B模型的部署和一些原理的简单解释。 ChatGLM-6B 它是单卡开源的对话模型。 充分的中英双语预训练 较低的部署门槛 FP16半精度下,需要至少13G的显存进行推理,甚至可以进一步降低…

罕见病 对称性脂肪瘤(MSL) 马德龙病

如果你体内脂肪瘤分布大致如下 而且个数不断增多 这篇文章适合你 症状 脂肪瘤个数一直增加 而且很对称 比如: 左手臂一个 右手臂一个 别名 多发性对称性脂肪增多症 Multiple symmetric lipomatosis (MSL) 多发性对称性脂肪瘤(MSL) 脂肪瘤 马德龙病(…

大场景的倾斜摄影三维模型OBJ格式轻量化处理处理关键处理技术分析

大场景的倾斜摄影三维模型OBJ格式轻量化处理处理关键处理技术分析 大场景的倾斜摄影三维模型是指通过航空或地面摄影获取的大范围、高分辨率的地理环境数据。为了在虚拟环境中加载和渲染这些模型,需要对其进行OBJ格式的轻量化处理。本文将分析大场景的倾斜摄影三维模…

SSRF漏洞实战

文章目录 SSRF概述SSRF原理SSRF 危害PHP复现SSRF漏洞检测端口扫描内网Web应用指纹识别攻击内网应用读取本地文件 Weblogic SSRF--Getshell复现SSRF攻击Redis原理漏洞检测端口扫描复现翻车,请看官方复现教程注入HTTP头,利用Redis反弹shell SSRF防御过滤输…

软路由的负载均衡设置:优化网络性能和带宽利用率

在现代网络环境中,提升网络性能和最大化带宽利用率至关重要。通过合理配置软路由IP的负载均衡设置,可以有效地实现这一目标,并提高整体稳定性与效果。本文将详细介绍如何进行软路由IP的负载均衡设置,从而优化网络表现、增加带宽利…

软件架构设计(六) 软件架构风格-MDA(模型驱动架构)

概念 模型驱动架构MDA, 全称叫做Model Driven Architecture。 Model:表示客观事物的抽象表示Architecture:表示构成系统的部件,连接件及其约束的规约Model Driven: 使用模型完成软件的分析,设计,构建,部署和维护等 开发活动MDA起源于分离系统规约和平台实现的思想。之前…

Python入门学习13(面向对象)

一、类的定义和使用 类的使用语法: 创建类对象的语法: ​​​​​​​ class Student:name None #学生的名字age None #学生的年龄def say_hi(self):print(f"Hi大家好,我是{self.name}")stu Student() stu.name &q…

软件系统平台验收测试报告

验收测试 一、验收测试 软件项目验收测试依据招投标文件以及相关行业标准、国家标准、法律法规等对软件的功能性、易用性、可靠性、兼容性、维护性、可移植性和用户文档等进行检测,对软件项目的质量进行科学的评价,为项目验收提供依据。 1、服务内容 …

成功解决OSError: [WinError 1455] 页面文件太小,无法完成操作

最近写了个训练文件,昨天在运行的时候都是好好的,今天一运行就报错了,不得不说,有点点奇怪。 OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading "D:\AI\Anaconda\anaconda3\envs\torch1.8\li…

嵌入式学习笔记(16)反汇编工具objdump

2.4.1反汇编的原理&为什么要用反汇编 arm-linux-objdump -D led.elf > led_elf.dis objdump是gcc工具链中的反汇编工具,作用是由编译链接好的elf格式的可执行程序反过来得到汇编源代码 -D表示反汇编 > 左边的是elf可执行程序(反汇编的源&am…

Linux RPM JDK升级

以JDK1.8升级JDK17为例 上传jdk17安装包到linux服务器 检查jdk版本 rpm -qa|grep jdk 删除查询到的jdk rpm -e --nodeps jdk1.8-1.8.0_201-fcs.x86_64 删除完毕后安装新的jdk rpm -ivh jdk-17_linux-x64_bin.rpm 检查jdk版本 java -version

Matlab信号处理3:fft(快速傅里叶变换)标准使用方式

Fs 1000; % 采样频率 T 1/Fs; % 采样周期:0.001s L 1500; % 信号长度 t (0:L-1)*T; % 时间向量. 时间向量从0开始递增,0s~1.499sS 0.7*sin(2*pi*50*t) sin(2*pi*120*t); % 模拟原信号 X S 2*randn(size(t)); …

jenkins快速跑通helloworld任务

jenkins新建helloworld示例 左上角“新建任务” 输入名称,选择第一个创建: 可以选择众多执行脚本,这里选择shell: 随后弹出一个窗口,将下面脚本填入: #!/bin/bashecho start... for i in {1..10}doecho $i…

什么是混合项目管理模式,以及价值

随着工作环境的不断变化,传统的项目管理方法(如瀑布模型)已经不能满足当前的需要,这也引发了对敏捷和瀑布式两种方法论之间优劣的新一轮讨论。瀑布模型是一种较为传统和结构化的项目管理方法,主要用于项目管理和软件开…

CH06_第一组重构(上)

提取函数(Extract Function |106) 曾用名:提炼函数(Extract Function) 反向重构:内联函数(115) 示例代码 function printOwing(invoice) {printBanner();let outstanding calcul…

git撤销还未push的的提交

怎样撤销掉上图中的提交呢 使用以下代码即可提交 git reset --soft HEAD^

如何在Ubuntu 20.04|18.04上安装 FreeSwitch

如何在Ubuntu 20.04|18.04上安装FreeSwitch 什么是 FreeSwitch PBX?FreeSwitch PBX 系统有哪些功能?开始部署部署前准备开始安装freeswitch 安装完成错误及问题FAQ常见配置文件及说明修改默认端口:防火墙配置账号密码配置/添加新用户freeswit…

如何在JavaScript中实现继承?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 原型链继承⭐ 借用构造函数继承(构造函数继承)⭐ 组合继承⭐ 原型式继承⭐ 寄生式继承⭐ 寄生组合式继承⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本…

Java+Swing+mysql高校教材管理系统

JavaSwingmysql高校教材管理系统 一、系统介绍二、功能展示1.用户登陆2.主页3.教材库管理4.出版社管理5.订单管理6.入库管理7.领书管理 三、系统实现1.salary.java 四、其它系统五、获取源码 一、系统介绍 1.实现出版社、教材类型等的管理; 2.实现教材的订购管理&…