这周进了一个新项目,接受了以前同事遗留的代码。我所接手的代码都是一些简单的业务操作,比如账单的生成、合同的签订等。这些代码包含但不限于以下特征,让我读起来非常挠头:
- 一个方法 1000 多行
- if else 套了不下 7 层
- 前辈致力于在一个方法里写下所有业务逻辑
- 有部分错误注释
。。。
是你的话该如何读这些代码呢?
我曾经试着让 chatgpt 帮我阅读梳理,可能我的 prompt 写的有问题,他也很难帮我将整体逻辑梳理清楚。
请问您有什么好的建议或者 prompt ?
这周进了一个新项目,接受了以前同事遗留的代码。我所接手的代码都是一些简单的业务操作,比如账单的生成、合同的签订等。这些代码包含但不限于以下特征,让我读起来非常挠头:
。。。
是你的话该如何读这些代码呢?
我曾经试着让 chatgpt 帮我阅读梳理,可能我的 prompt 写的有问题,他也很难帮我将整体逻辑梳理清楚。
请问您有什么好的建议或者 prompt ?
|
swuzjbOct 17, 2023
1
能不读就不读。
|
|
2
听起来像是一份年薪百万的工作
|
|
KMpAn8Obw1QhPoEPOct 17, 2023 via Android
3
我目前的感受就是没办法 六字真言贴显示器旁边 然后硬着头皮一点点 debug 一点点看 尤其是祖传 Java 屎山表达能力差得一比 写了十来行只干了一件事 大部分 if 都在判断空指针 但凡用一下 optional 和 stream 也不至于那么恶心的 就是没有 就硬 for each+if
|
|
wwlzzOct 17, 2023
4
不用全部理解,按需求/bug 来,加断点调试,添加日志,测试用例等
|
|
5
还有一个问题,有些接口的入参能有 100 多个
|
|
KMpAn8Obw1QhPoEPOct 17, 2023 via Android
6
@jokechen 真猛 突然觉得我手头的屎山靓丽了许多
|
|
zzNuckerOct 17, 2023
7
100 多个入参也太离谱了
|
|
KirscheisOct 17, 2023
8
我这有一堆前辈留下的无文档 LabView 程序,目前谁都看不懂,所以我选择整个封装当盲盒用,新需求另建山头。。。
|
|
zjpOct 17, 2023
9
看正文感觉还好啊,硬看就是了
看到#5 ,对不起,超出能力范围了 |
|
sadfQED2Oct 17, 2023 via Android
10
断点调试,一行一行的跟一遍就懂了。
|
|
darkengineOct 17, 2023
11
不要读懂他, 要改的时候各种绕路, 例如在上边包一层, 这样就能得到一个更大的屎山了.
|
|
NothingExistOct 17, 2023
12
删库重写:)
|
|
KMpAn8Obw1QhPoEPOct 17, 2023 via Android
14
@sadfQED2 调用栈太深的断点调试其实也不理想 复杂点的只过一遍肯定不够 正手来一个 step over 可能一下子跳了一大段逻辑 反手 step into 个几次回来都找不到北
|
|
16
|
|
v2ebOct 17, 2023
17
先理解业务吧, 有流程图啥的就好了。
|
|
x86Oct 17, 2023
18
这种写法叫人工混淆加密,一般公司顶梁柱才写的出,优点是别人难以看懂接盘顶替自己...
|
|
KMpAn8Obw1QhPoEPOct 18, 2023 via Android
19
@x86 有没有另外的可能 比如他自己都维护不下去 只好先甩手跑路了…
|
|
zhangjuanziOct 18, 2023
20
不会仔细读,大概了解一下,碰到需求再定位到要改的地方改了就完事了,也不会想着去优化。而且我也挺喜欢这种代码的,在这种代码上做需求一般会给的时间多点,自己快速做完剩下的时间就做别的。
|
|
21
用常规运行结果反推,不要读全部,以最小的改动代价完成本次需求,能不动就不动。
|
|
ytmsdyOct 18, 2023
22
不看!反正看了也看不懂,就算看懂了也不敢去改。
把业务了解清楚就好了,如果出现 bug ,直接 debug 进入调试模式。针对 bug 的场景用 if 特殊处理,其他部分不动! 处理屎山项目的原则就是,能不动就不动,就算要动也只加,不删除。 |
|
adimnOct 18, 2023
23
抽丝剥茧慢慢来, 前人为了省事打了各种补丁, 我视情况而定, 要有工匠精神
|
|
COOOOOOdeOct 18, 2023
24
不读, 当成黑盒。
|
|
nensesoOct 18, 2023
25
我觉得要有能力改屎山代码,首先要对业务非常熟悉。
|
|
xxiaowangwangOct 18, 2023
26
只要钱到位,屎壳郎就是我。
|
|
NilusOct 18, 2023 via iPhone
27
我也一样 虽然没你手里这么屎 不过我太菜了 也是几个同事断断续续的写了好几年 一行注释都没有 而且之前写这个的人已经离职的差不多了 一点都不想看 摆烂了
|
|
ZGameOct 18, 2023
28
厌恶屎山,接受屎山,理解屎山,成为屎山
|
|
NilusOct 18, 2023 via iPhone
29
@haitaoli 而且交给我活的时候 也没有需求 之前这一块是和另一个功能耦合在一块的 现在让我从里面解出来 差不多就是重写一遍吧 现在直接卡在读代码这一步 读不懂代码 就不知道需求 不知道需求 就没法写
|
|
zw1oneOct 18, 2023
30
告诉领导和产品,这玩意儿看不了,一改全是坑,挖坑的人全跑了,重写吧。
|
|
bfdhOct 18, 2023
32
目前没有这个烦恼,因为我就是那个写屎山代码,然后交给同事的人。
回到楼主问题,我的做法一般是先问清楚业务,从业务反推代码。 |
|
33
@bfdh 比较麻烦的就是懂业务的人也全跑了,也就是说我们这边好多产品经理都是新接手的。昨天产品经理有一个需求不太明白,找到我说“兄弟,你从代码里帮我看下,这部分需求实现过没?”
--- 今天我已经有些佛性了,因为开始慢慢的有测试找我提一些问题了。 这样我能跟着测试的逻辑一起熟悉代码。。。。 |
|
beisiluOct 18, 2023
34
理论上跑起来加断点慢慢来是可以熟悉的。
但是实际情况是跑都跑不起来 |
|
iOCZOct 18, 2023
35
@jokechen 提交表单是字段比较多的一种可能,但是要填 100 多个字段也是没有用户体验了。假如说要上报设备信息,字段很多,那完全可以一个 JSON 字段搞定。
|
|
sankoocOct 18, 2023
36
我以前接手过一个 callback 地狱的项目 那一个酸爽
|
|
imqiyueOct 18, 2023
37
边骂边看…
|
|
BornThisWayOct 20, 2023
38
之前接过的无非就是东拆西拆让它的可读性变强 可以复用
动里面逻辑那是万万不敢的 最多就是继续加 ifelse |
|
unregisterNov 21, 2023
39
我的工资就是我的精神损失费
|