代码能跑就不要动,为什么我们都会有这样的想法?
大家好,我是辣条。
为什么程序员会有代码能跑就不要动的观点?
今天就和大家说说这个有趣的话题。
针对这个问题某乎上有个小哥讲了一个小故事,先分享给大家:
新来的程序员小哥觉得代码不规范,内存释放的模块很混乱。这可能有隐藏的风险。接下来,他做了整合,把内存释放进行了模块化,专门整好了。代码变的更优质了,对吧?到这里算是好的。
然后过几天,就出事了,生产出现重大故障。系统内存泄漏,系统崩了,影响客户使用。客户投诉,扣钱。然后整个项目组开始大排查。排查到最后,就是这个内存释放的优化,有个位置漏了,没改到。但是其他位置全改掉了。然后这个没改到的位置,内存长期不释放。好了,内存爆了,内存泄露,系统崩溃。就是这个优化,导致了重大故障。
然后全公司通报批评。要求项目组整改,并且出检讨,现在能理解了吗。代码能跑,就别改。
辣条对这个倒是没有太大感觉,也没有很多工作这块的经验,不过之前暑假实习,有位前辈和我聊过这个话题,他大致是这么看的:
很多中小型公司和一部分大公司对于代码质量、开发效率等基础设施建设没有什么追求。这些公司的商业模式侧重在业务逻辑方面。由于各种原因(比如垄断等),用户对于产品质量没有什么话语权,不得不容忍系统和应用的缺陷。这使得此类公司的技术团队从KPI的角度没有足够的动力去改良代码和系统的质量,除非这种改良可以直接带来商业利益。
具体来说,比如一个提供打车或者外卖服务的平台,它的商业收益主要来自于线下的用户行为。改善代码质量只有在用户数量增长需要扩容服务、提高性能的时候才有正的商业收益。除此之外,改善代码质量几乎没有可见的商业收益。这给中层管理者带来很大的挑战,因为他们需要去证明投入工程资源的产出。如果这种产出无法直接或间接地通过销售增长、用户增长等指标反映出来的话,中层管理者就不会愿意让自己管理的开发者去改善代码质量。
长此以往,代码库中会逐渐累积各种技术债和潜在的缺陷。随着时间的推移,重构代码的代价会越来越大,风险也越来越高。这种情况下从风险收益比来看,尽量不要改动能够运行的代码是一种局部最优的策略。
只有当代码质量严重影响了系统的稳定性以后,中层甚至高层管理者才会有动力去投入资源做大范围的重构和改良。而这种时候通常伴随着技术团队人员流动,很容易出现全部推翻重写的局面。
辣条个人认为倒也不是绝对的。这取决于你个人对整个项目的熟悉和理解程度。
可以动的情况如下:
- 你是项目的主要代码贡献者之一,你对每个模块做什么都有充分的理解,知道修改带来的影响。
- 项目成败责任在你,你需要判断某个模块如果不修改的风险,以及事故发生时会造成什么损失。
- 虽然之前的代码很乱但能跑起来,但项目还没上线,为了日后系统的稳健,你决定大动干戈,重构一下。
不要动的情况:
- 你往一个巨大的项目里面添加了小功能,为小功能而且修改已经存在很久的部分,风险是很大的,除非你有充分的理由。
- 项目bug很多,改了一个bug会有n个新bug出现。
- 项目已经上线,如果需要大改动,需要测试。
个人建议:
- 如果你的代码能跑,但你不知道它为啥能跑,你还是不要提交这种代码了,搞懂了再提交。
- 写单元测试,以后修改了跑一次全部测试,也知道修改带来了什么影响。
元芳,你是怎么看的呢?欢迎在评论中留言。
行业资料:添加即可领取PPT模板、简历模板、行业经典书籍PDF。
面试题库:历年经典,热乎的大厂面试真题,持续更新中,添加获取。
学习资料:含Python、爬虫、数据分析、算法等学习视频和文档,添加获取
交流加群:大佬指点迷津,你的问题往往有人遇到过,技术互助交流。
代码能跑就不要动,为什么我们都会有这样的想法?相关推荐
- html 语言 gif 动画,动效篇(1)--从简单CSS3动画片段代码,到生成gif动图~
简单css动画片段代码(最终效果 ) (一)请自行下载安装Dreamweaver 在Dreamweaver编写代码(如需参考请复制下列代码) (二)HTML CSS代码详解css代码(/*详解*/) ...
- yolov3网络结构图_目标检测——YOLO V3简介及代码注释(附github代码——已跑通)...
GitHub: liuyuemaicha/PyTorch-YOLOv3github.com 注:该代码fork自eriklindernoren/PyTorch-YOLOv3,该代码相比master分 ...
- .Net判断一个对象是否为数值类型探讨总结(高营养含量,含最终代码及跑分)...
前一篇发出来后引发了积极的探讨,起到了抛砖引玉效果,感谢大家参与. 吐槽一下:这个问题比其看起来要难得多得多啊. 大家的讨论最终还是没有一个完全正确的答案,不过我根据讨论结果总结了一个差不多算是最终版 ...
- 大疆 DJI mobile SDK系列详细教程——运行实例代码(跑通大疆官方提供Mobile SDK里的sample code)
大疆 DJI mobile SDK系列详细教程--运行实例代码(跑通大疆官方提供Mobile SDK里的sample code) 文章目录 一.官方文献与资源地址 二.操作步骤 提示:昨天在尝试跑通大 ...
- 用Python代码实现视频转gif动图
下面是一个使用 Python 代码实现视频转 gif 动图的简单示例: import imageio# 读取视频文件 video = imageio.get_reader('input.mp4')# ...
- C语言排序算法(十种排序代码可跑
C语言排序算法(十种排序代码可跑) 冒泡排序: 选择排序: 插入排序: 归并排序: 快速排序: 希尔排序: 堆排序: 计数排序: 桶排序: 基数排序: 以上就是所有代码,希望同学们好好学习!!! 冒泡 ...
- 《深度学习之pytorch实战计算机视觉》第8章 图像风格迁移实战(代码可跑通)
上一章<深度学习之pytorch实战计算机视觉>第7章 迁移学习(代码可跑通)介绍了迁移学习.本章将完成一个有趣的应用,基于卷积神经网络实现图像风格迁移(Style Transfer).和 ...
- (文末福利)如果代码莫名其妙跑起来了,就不要去动它了……吗?
- AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie
原文 Airbnb 发布的 Lottie 是一个面向 iOS.Android 和 React Native 的开源动画库. 简单来说,就是可以直接利用 AE 导出的 JSON 动画文件,将其解析为原生 ...
最新文章
- 实例讲解-单向列表的实现(1)
- maven配置国内阿里云镜像
- 空格的ascii码_美国信息交换标准代码ASCII
- 修改 jquery.validate.js 支持非form标签
- MarkDown语法, 快捷键,Dos命令
- 如何在没有Springockito的情况下模拟Spring bean
- extjs tree 遍历树节点并设置选中
- 微信小程序将于 2017 年 1 月 9 日正式开放
- iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
- posix是什么_什么是POSIX? 理查德·斯托曼(Richard Stallman)解释
- R语言:ggplot2精细化绘图——以实用商业化图表绘图为例
- 隔壁小孩也能看懂的面向对象(概念篇)
- ReportMachine 3.0技巧
- 15 个最佳开源设计工具
- 使用 Amazon Deep Learning AMI 快速实现 CUDA,cuDNN 和深度学习框架版本兼容
- 植物大战 C++ ——基础特性
- Rate Limiting Algorithms (限流算法)
- VUE系列之element表单el-form-item自定义label
- Scratch少儿编程案例-算法练习-实现加减乘除练习题
- java打桩_使用JUnit4与JMockit进行打桩测试