大家好,我是辣条。

为什么程序员会有代码能跑就不要动的观点?

今天就和大家说说这个有趣的话题。

针对这个问题某乎上有个小哥讲了一个小故事,先分享给大家:

新来的程序员小哥觉得代码不规范,内存释放的模块很混乱。这可能有隐藏的风险。接下来,他做了整合,把内存释放进行了模块化,专门整好了。代码变的更优质了,对吧?到这里算是好的。

然后过几天,就出事了,生产出现重大故障。系统内存泄漏,系统崩了,影响客户使用。客户投诉,扣钱。然后整个项目组开始大排查。排查到最后,就是这个内存释放的优化,有个位置漏了,没改到。但是其他位置全改掉了。然后这个没改到的位置,内存长期不释放。好了,内存爆了,内存泄露,系统崩溃。就是这个优化,导致了重大故障。

然后全公司通报批评。要求项目组整改,并且出检讨,现在能理解了吗。代码能跑,就别改。

辣条对这个倒是没有太大感觉,也没有很多工作这块的经验,不过之前暑假实习,有位前辈和我聊过这个话题,他大致是这么看的:

很多中小型公司和一部分大公司对于代码质量、开发效率等基础设施建设没有什么追求。这些公司的商业模式侧重在业务逻辑方面。由于各种原因(比如垄断等),用户对于产品质量没有什么话语权,不得不容忍系统和应用的缺陷。这使得此类公司的技术团队从KPI的角度没有足够的动力去改良代码和系统的质量,除非这种改良可以直接带来商业利益。

具体来说,比如一个提供打车或者外卖服务的平台,它的商业收益主要来自于线下的用户行为。改善代码质量只有在用户数量增长需要扩容服务、提高性能的时候才有正的商业收益。除此之外,改善代码质量几乎没有可见的商业收益。这给中层管理者带来很大的挑战,因为他们需要去证明投入工程资源的产出。如果这种产出无法直接或间接地通过销售增长、用户增长等指标反映出来的话,中层管理者就不会愿意让自己管理的开发者去改善代码质量。

长此以往,代码库中会逐渐累积各种技术债和潜在的缺陷。随着时间的推移,重构代码的代价会越来越大,风险也越来越高。这种情况下从风险收益比来看,尽量不要改动能够运行的代码是一种局部最优的策略。

只有当代码质量严重影响了系统的稳定性以后,中层甚至高层管理者才会有动力去投入资源做大范围的重构和改良。而这种时候通常伴随着技术团队人员流动,很容易出现全部推翻重写的局面。

辣条个人认为倒也不是绝对的。这取决于你个人对整个项目的熟悉和理解程度。

可以动的情况如下:

  • 你是项目的主要代码贡献者之一,你对每个模块做什么都有充分的理解,知道修改带来的影响。
  • 项目成败责任在你,你需要判断某个模块如果不修改的风险,以及事故发生时会造成什么损失。
  • 虽然之前的代码很乱但能跑起来,但项目还没上线,为了日后系统的稳健,你决定大动干戈,重构一下。

不要动的情况:

  • 你往一个巨大的项目里面添加了小功能,为小功能而且修改已经存在很久的部分,风险是很大的,除非你有充分的理由。
  • 项目bug很多,改了一个bug会有n个新bug出现。
  • 项目已经上线,如果需要大改动,需要测试。

个人建议:

  • 如果你的代码能跑,但你不知道它为啥能跑,你还是不要提交这种代码了,搞懂了再提交。
  • 写单元测试,以后修改了跑一次全部测试,也知道修改带来了什么影响。

 元芳,你是怎么看的呢?欢迎在评论中留言。

行业资料:添加即可领取PPT模板、简历模板、行业经典书籍PDF。
面试题库:历年经典,热乎的大厂面试真题,持续更新中,添加获取。
学习资料:含Python、爬虫、数据分析、算法等学习视频和文档,添加获取
交流加群:大佬指点迷津,你的问题往往有人遇到过,技术互助交流。

代码能跑就不要动,为什么我们都会有这样的想法?相关推荐

  1. html 语言 gif 动画,动效篇(1)--从简单CSS3动画片段代码,到生成gif动图~

    简单css动画片段代码(最终效果 ) (一)请自行下载安装Dreamweaver 在Dreamweaver编写代码(如需参考请复制下列代码) (二)HTML CSS代码详解css代码(/*详解*/) ...

  2. yolov3网络结构图_目标检测——YOLO V3简介及代码注释(附github代码——已跑通)...

    GitHub: liuyuemaicha/PyTorch-YOLOv3​github.com 注:该代码fork自eriklindernoren/PyTorch-YOLOv3,该代码相比master分 ...

  3. .Net判断一个对象是否为数值类型探讨总结(高营养含量,含最终代码及跑分)...

    前一篇发出来后引发了积极的探讨,起到了抛砖引玉效果,感谢大家参与. 吐槽一下:这个问题比其看起来要难得多得多啊. 大家的讨论最终还是没有一个完全正确的答案,不过我根据讨论结果总结了一个差不多算是最终版 ...

  4. 大疆 DJI mobile SDK系列详细教程——运行实例代码(跑通大疆官方提供Mobile SDK里的sample code)

    大疆 DJI mobile SDK系列详细教程--运行实例代码(跑通大疆官方提供Mobile SDK里的sample code) 文章目录 一.官方文献与资源地址 二.操作步骤 提示:昨天在尝试跑通大 ...

  5. 用Python代码实现视频转gif动图

    下面是一个使用 Python 代码实现视频转 gif 动图的简单示例: import imageio# 读取视频文件 video = imageio.get_reader('input.mp4')# ...

  6. C语言排序算法(十种排序代码可跑

    C语言排序算法(十种排序代码可跑) 冒泡排序: 选择排序: 插入排序: 归并排序: 快速排序: 希尔排序: 堆排序: 计数排序: 桶排序: 基数排序: 以上就是所有代码,希望同学们好好学习!!! 冒泡 ...

  7. 《深度学习之pytorch实战计算机视觉》第8章 图像风格迁移实战(代码可跑通)

    上一章<深度学习之pytorch实战计算机视觉>第7章 迁移学习(代码可跑通)介绍了迁移学习.本章将完成一个有趣的应用,基于卷积神经网络实现图像风格迁移(Style Transfer).和 ...

  8. (文末福利)如果代码莫名其妙跑起来了,就不要去动它了……吗?

  9. AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie

    原文 Airbnb 发布的 Lottie 是一个面向 iOS.Android 和 React Native 的开源动画库. 简单来说,就是可以直接利用 AE 导出的 JSON 动画文件,将其解析为原生 ...

最新文章

  1. 实例讲解-单向列表的实现(1)
  2. maven配置国内阿里云镜像
  3. 空格的ascii码_美国信息交换标准代码ASCII
  4. 修改 jquery.validate.js 支持非form标签
  5. MarkDown语法, 快捷键,Dos命令
  6. 如何在没有Springockito的情况下模拟Spring bean
  7. extjs tree 遍历树节点并设置选中
  8. 微信小程序将于 2017 年 1 月 9 日正式开放
  9. iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
  10. posix是什么_什么是POSIX? 理查德·斯托曼(Richard Stallman)解释
  11. R语言:ggplot2精细化绘图——以实用商业化图表绘图为例
  12. 隔壁小孩也能看懂的面向对象(概念篇)
  13. ReportMachine 3.0技巧
  14. 15 个最佳开源设计工具
  15. 使用 Amazon Deep Learning AMI 快速实现 CUDA,cuDNN 和深度学习框架版本兼容
  16. 植物大战 C++ ——基础特性
  17. Rate Limiting Algorithms (限流算法)
  18. VUE系列之element表单el-form-item自定义label
  19. Scratch少儿编程案例-算法练习-实现加减乘除练习题
  20. java打桩_使用JUnit4与JMockit进行打桩测试

热门文章

  1. 如何 配置apache 读取php模块中的 配置文件
  2. 脚本学习python和linux-shell和jQuery(javascript)
  3. [译]Perl中的数组
  4. PKM2数据导出的xml显示用的XSL
  5. js中top,left,height,width相关参数的解析和实例
  6. 纯js代码生成可搜索选择下拉列表
  7. html图片上传阅览并且点击放大
  8. 细说Activity与Task(任务栈)
  9. POJ 3159 Candies 差分约束dij
  10. 引用类型和值类型学习笔记