重构屎山的痛。我已经坚持了三四天了,必须要在这里发泄下,不然会炸。

293 天前
 villivateur

因产品整合需求,要把一个 C++ Qt 写的上位机软件重构到 PyQt 中。主管不同意用现有框架直接包装原有的 Qt 程序,要我直接按需求重构。(可能主管也早就意识到了这个屎山迟早会炸)

这个屎山有多屎呢:

  1. 十年前的老代码,经手过无数人
  2. 编译一下,平均一个文件十个 warning ,不乏长度为 9 的数组访问第 9 个变量这种奇葩事
  3. 变量名潇潇洒洒,驼峰的,下划线的,大写的,小写的,混合的
  4. 真正实现了“低内聚,高耦合”,三个线程,几十个函数,共用一个一百多行的结构体……
  5. 有个功能是初始化两个设备(互相独立),两个设备各要执行几个函数,结果代码里面,是 A 设备先执行两个函数,B 再执行两个,再执行 A 的……不懂的人还以为这两个设备有啥奇妙的联系。
  6. 驱动模块和业务模块居然用 extern 来共享一个变量……

还有很多……

给大家欣赏一下屎山的一角:

scanThreadData->mcuFirmWare_path = "";    //清空 mcu 固件路径
scanThreadData->mcuFirmWare_path = ScanFirewareBin(IS_NGFDFILE, ProductCodeStr);

这个 mcuFirmWare_path 是个 string 类型的数据,我 TM 谢谢他先给我清空,还煞有其事地写个注释。

看这个代码,每看一行我都要理一下自己的脾气。

12018 次点击
所在节点    程序员
102 条回复
IBN5100
293 天前
还有注释 还不感恩戴德
ma836323493
293 天前
哈哈,这有啥, 当年我重构了 一条 50kb 的 sql
James2099
293 天前
写代码的最高境界就是屎上雕花,屎山不是一日建成的,加油,奥利给
ryd994
293 天前
@villivateur #10 你是什么时候产生了能成功的错觉?这种症状多久了?

不是代码写完就完事的啊,之后 debug 才是大坑。自己跑通了之后还得联合上下游组件调试。内部调试完之后还要上线。上线折腾个十天半个月的很正常。最怕是上完线了,一周之后,某个没人知道的 corner case 炸了。

Linus:If it's a then it's not a bug, it becomes a feature. You can't just fix the bug and say that's undefined behavior.
ryd994
293 天前
Linus:If it's a bug that people rely on, then it's not a bug, it's a feature.

<amp-youtube data-videoid="Pzl1B7nB9Kc" layout="responsive" width="480" height="270"></amp-youtube>
iweus
293 天前
这有啥,14 年前的代码依然在维护,只要不崩就没事
xiangyuecn
293 天前
钱到位,屎珍香😅
cy18
293 天前
具体情况不清楚,不过上位机是屎山,下位机的代码估计也好不了,大概率有很多莫名其妙的逻辑是用来上下位机配合的,搞不好还需要通过软件处理什么硬件 bug...
祝 LZ 好运...
villivateur
293 天前
@dog82
@dif
因为业务需要重构
Valid
293 天前
自由代码,没有任何约束
CodeGou
293 天前
前辈不写出还能跑的屎山,哪来的后代能换钱的工作内容。这是大树好乘凉啊~
EEEEx
293 天前
能跑的代码就是好代码
yyysuo
293 天前
屎山真的不是问题,重构大概率出 bug ,才是大问题。
TArysiyehua
293 天前
你主管有不懂技术,自己包装一下就说是重构了呀?这么老实,工资一定涨得很慢吧。(阴险脸)
SeanTheSheep
293 天前
我装了一个周的 vb6, 我放弃了,直接写个新的拉倒
clino
293 天前
正在重构重写多年以前的 perl 代码,还好现在有 AI 辅助,读和写代码的效率高很多,否则 t*d 要憋屈死
yishuiliunian
293 天前
只要人和代码有一个能跑就行
lakehylia
293 天前
只要算 KPI 那就重构呗,拿钱办事没毛病
Justin13
293 天前
还行吧,我现在在给 ios 的项目的一个核心部分加功能
大部分代码至少都有 10 年的,说至少是因为当初迁移到 git 就是 10 年前
里面充斥着各种重复,错误,无用,特殊的代码
而我是一个写 js 的前端,之前没有接触过任何苹果相关技术
现在每天大概三分之一时间在看代码和逻辑,三分之一学习语言和 UI 库,剩下的时间在骂娘。。
至于原来维护的人呢?写前端去了。。
zhuangzhuang1988
293 天前
用 Pyqt 后会更加屎了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/973749

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX