背景如下: 我们有多个组,我带组 1. 同事 A 不在我的组,属于组 2. 现在同事 A 正在开发一个新项目,他是目前的主力,我安排人配合他一起完成,但目前开发内容上交集很少,拆的比较开。
问题如下: 1.目前已经明确,这个项目开发完之后,全权移交给我组负责后续开发维护,我是第一责任人。 2.最近组里兄弟跟我反馈,这哥们的代码,太过防御性了点,代码几乎是不可维护的。干什么都是梭哈,除了他自己没人看得懂写的是什么。我稍微看了一眼,想在他的代码上加功能我看了都满头大汗,无从下手。 3.这个系统其实有个前身,后来他介入之后,也是这套打法。到后来成功的没办法继续维护了,只能推倒重做一套,继续放任,就是历史重演。
我很想提这个问题,但他又不归我管。他防御性编程其实我不是很在意,别人自有维护饭碗的方式,但是影响到我后续开发了,我就很难受。
现在最困难的是: 这个项目并不是由组 2 的组长带的,而是一个技术老大亲自带的,所以找组 2 组长沟通没用。 至于这个技术老大。emm 说实话不太管事,只管下任务,也不关心代码质量和项目细节,所以跟他反馈等于没说。平时开发告诉他做完了就行,代码 review 他都不做,要不然也不能让这哥们毫无心里负担得这么干。奈何技术老大位高权重资历深厚,咱们也没什么办法。
我现在很想跟上面反馈一下这个问题,但是我这种跨管辖范围的做法总是不太好,而且也不知道提了有没有用。难道就这么把这口屎吃下来不成。
V 友们给出出主意。
1
MillaMaxwell 248 天前 9
|
2
IMelon 248 天前
防御性的代码看起来是什么样的?
|
3
yangzzzzzz 248 天前
直接和他明说啊 不改像上面汇报呗。就说以后代码我这边维护不了 别怪我了。
|
5
ltyj2003 248 天前 via Android
让他提供开发文档,对程序代码进行说明。
|
6
kera0a 248 天前 via iPhone 53
能不能把这哥们请来 V 站开个讲座?
|
7
MadSix OP @IMelon 代码不方便贴
怎么说呢,基本就是 1.跟已有项目开发习惯相背,大家什么框架或者方法用的最多,他就不用什么。大家什么写法最多,就不写什么。 2.不拆分不抽象,逻辑一把梭哈,强强耦合,要改个功能得瞻前顾后,牵一发动全身 3.变量名+没注释,懂得都懂 |
8
emSaVya 248 天前
代码重构列入 kpi 安排工时呗。这不是常规方案吗?
|
10
MadSix OP @emSaVya 他的 KPI 不归我定
至于我自己安排人重构。。。这口屎吃的风险太大了,不是他自己来,重构一下总担心出问题。 这哥们最骚的操作是好多判断他交给前端去做,他就在万千返回值中给几个意义不明的 0123. |
11
MrYELiex 248 天前
可能单纯是菜 或者觉得不配用脑子想怎么抽象 写完就完事了
|
12
uiosun 248 天前 4
@IMelon 举个例子:
OOP 的话,一个 class 三千多行甚至更多,我见过两万多行的(纯代码,不带空行的计算),没有一行注释,message 缩写成 msg 都是奇迹,往往会写成 m 或者 xx (消息的拼音打头)。 这个 m 在不同的行效果是不同的,这会儿是 message ,过几百行是 minute ,等下又变成了 meter 。 里面一部分方法有,一部分方法没有:事务、参数校验、直接抛异常、抛错误代码等等等,不一而足,全凭当时的心情。 说好听点叫防御性代码,说难听点他自己都不一定维护的起来……好代码都长得类似,这种代码那就各有各的风味了…… |
13
mrliusg 248 天前
“又不是不能用”
|
16
wusheng0 248 天前 28
防御性编程是专门的名词吧,你们这么用现在都变成反义词了,后面怎么正常交流
> 防御性编程( Defensive programming )是防御式设计的一种具体体现,它是为了保证,对程序的不可预见的使用,不会造成程序功能上的损坏。 > 它可以被看作是为了减少或消除墨菲定律效力的想法。 防御式编程主要用于可能被滥用,恶作剧或无意地造成灾难性影响的程序上。 |
18
devilte 248 天前
@uiosun #12 假设真看到这样的代码 我都要纠结一下是作者真实水平烂还是作者刻意为之,毕竟刻意写成这样都是反第一反应的 会增加一定的心智负担,真的有人在写防御性代码吗😂
|
19
qianckjuan 248 天前 1
项目要过来自己人全写,或者把项目推出去
|
20
Patrick6 248 天前
原来这个是日经贴啊,代码和人有一个能跑就行
|
22
fredweili 248 天前
强化 code review ,不允许随便 merge
|
23
yangxiaopeipei 248 天前
code review 怎么过的
|
24
FrankAdler 248 天前 via Android
原来代码写的烂还有这么一个高大上的名字
|
25
whoosy 248 天前 2
我认为只是单纯的水平菜,身边技术稍微强点的基本上对代码都有洁癖
|
26
RightHand 248 天前 via Android
拆分,推出去
|
27
7h3d4wn 248 天前
把这个人要到你组里来负责后续维护
你的核心问题是以后维护麻烦,那就人跟着项目走 其他没什么更好办法了 |
28
liyanan 248 天前
能不能反噬一下他自己?这个项目维护归属 op 看看能不能换成他,自己种的果子自己吃吧~
|
29
MadSix OP @yangxiaopeipei 描述里说过了
这项目负责人是个万年老大哥,人不做代码 review 而且他位高权重的咱也管不着 |
30
h272377502 248 天前
现在有 ai 了,感觉问题不是很大,让 ai 基于他的代码转化成可维护的,不断校验每步的输出。
|
31
foxkiller 248 天前
你们不 Code Review 啊?
|
32
7h3d4wn 248 天前
换句话说,是系统性问题,或者说,管理问题造成了你当下的 dilemma
你又改变不了整个管理风格,那你基本就只能成全这哥们儿的防御性 |
33
yanw 248 天前
可能单纯就是菜
|
35
sparklee 248 天前
我所理解的 防御性编程 是提前返回, 考虑到各种异常情况提前 return, 减少 else 减少条件判断嵌套的写法
|
36
chocolate518 248 天前
这不叫防御性编程吧,没有代码规范就是这样了 如果不想操心就是反正也不是不能跑的心态,如果觉得别扭就推动代码规范
|
37
wanguorui123 248 天前
在包一层外壳继续拉💩💩💩
|
38
villivateur 248 天前 13
禁止污染“防御性编程”词条
|
39
mansurx 248 天前
交叉管理确实没什么办法了,但可以把情况先写在周报里,避免锅从天上来。
后面维护可以考虑引入 ai 解释/重构这段代码……专门克制这种“防御性编程” |
40
S9Yh4wIFsBG7jnE4 248 天前
世界是一个草台班子 这话没错的
|
41
me1onsoda 248 天前
你跟你技术老大多学学吧,他怎么就 cover 住了呢,带着这么“祸害”走了这么多年?
|
42
Jame00001 248 天前
直接跟上级表明,自己组做耗时耗力需要增加大量工时,安排那个人做成本更低。为了避免公司利益损失,请领导出面指明让他维护。
|
43
zhao8681286 248 天前
我以为是正常逻辑写完了花了 20%的代码其他 80%的用来处理异常情况的防御性编程呢,结果不就是只有自己能看懂的屎山代码吗?
|
44
alexsz 248 天前
@h272377502 我也觉得应该让 AI 解释代码
|
45
MadSix OP @me1onsoda 跟他学不来,人家根基深厚位高权重。有问题向下施压或者要求公司调动资源重做项目就行了。上一个就这么黄的。人自己又不干活,不用吃屎。
我算哪根葱跟他学,学完就废了 |
46
icyalala 248 天前
这是防御性编程的概念: https://zh.wikipedia.org/zh-cn/防御性编程
这是好事 |
47
k9982874 248 天前 2
你们这流程有问题,接收前拉个验收会,叫上相关负责人和技术主管,一个模块一个模块的过,列出来哪些系统问题和需求问题需要改,说明质量不行拒绝接收。
话说“防御性编程”现在已经是指在项目里拉屎,增加维护难度了么? |
48
bianhui 248 天前
没有改不了的代码,只有改不了的人。在软件工程还没有普及的时候,大家的开发都是一把梭哈
|
49
nthin0 248 天前
理解岔了,我看到的第一反应也是:防御性编程难道不是好事吗😂
|
50
sofukwird 248 天前 via Android 1
对领导说这位同事的代码水平过高,自己维护不了他的代码
|
51
uiosun 248 天前
|
52
junkk 248 天前 4
防御性编程是防御式设计的一种具体体现,它是为了保证,对程序的不可预见的使用,不会造成程序功能上的损坏。
不是防御开除式编程,拉屎就拉屎,不要重新定义老的词语,什么毛病。 |
53
hahiru 248 天前
应该是菜。
我指的是公司。 如果是国企当我没说。 |
54
F7TsdQL45E0jmoiG 248 天前 1
这种代码往往能顺利的通过 sonar 的扫描
|
56
ooee2016 248 天前
@IMelon #2 遇到过所有的方法参数定义都是 void Fun(string a1, string a2, string a3, string a4, string a5);
|
57
rehoni 248 天前 2
"我现在很想跟上面反馈一下这个问题,但是我这种跨管辖范围的做法总是不太好,而且也不知道提了有没有用。难道就这么把这口屎吃下来不成。"
现状是 1. 你是第一责任人,到时候维护他没事,你背锅 2. 你已经在吃屎了 我觉得 OP 也别管那么多了,他这种行为已经深刻影响了你的利益,不想沦落到代码和你只有一个能跑的话。就低情商,就把事情办得难看,让大家都挂不住面子,当个刺猬。 |
58
yuwangG 248 天前
卷起来
|
59
ersic 248 天前
也许他就是这么菜呢
|
60
cathub86 248 天前
一模一样了 2 月 20 接受了 一个屎山 要把底层的 es 换成 ck 代码没注释 问他还爱答不理
组长: 有这么难么 就换个组件 不是很简单么 我: 我要理清楚业务流程才能改 代码没注释 组长:那你问啊 人就在你旁边 |
62
Jiajin 248 天前
还得是 AI 解释代码。
|
63
dog82 248 天前 1
楼主曲解防御性编程的意思了
防御性编程是指编写更稳定更健壮的代码 而不是编写别人看不懂的代码 |
65
iphantom 248 天前
从根本解决呗,找组 2 要这个人到你的组后续他维护被,或者让你组的小弟和他互换。你们两个组可以沟通那没问题,不行就找老大协调呗,把人要回来吧~
|
66
cominghome 248 天前
到底是防御性编程还是人菜,要先搞清楚
|
67
MadSix OP @iphantom 其实我也知道这是最佳方案,我只是不愿意面对。
甚至老大都找我沟通过了,我如果想换人他是能过来的。不过这么个祖宗我内心不情愿放过来。 要知道这个项目总有没活的时期,到时候不能让他闲着吧?一旦把他放到我其他项目里去了,这玩意就跟传染一样,沾一个染一个 |
68
tkHello 248 天前
保护自己的代码: 在将来的工作中,采取一些防御性编程的措施来保护自己的代码。例如,使用代码水印技术、定期进行代码审查、在代码中添加详细的注释和文档等。
|
69
tkHello 248 天前
采用代码水印技术: 在代码中嵌入独特的标识符或水印,以标记代码的所有者。这样即使代码被剽窃,也可以通过检测水印来识别代码的来源。
|
70
chiu 248 天前 1
所以说 reviewer 是代码库的一道防线
|
71
PN27149 248 天前
想学学怎么写防御性代码,哈哈
|
73
pqlamz 248 天前
那他自己怎么维护的啊?看起来,像是源代码自带混淆,无需 proguard/obfuscator 。读源码就是做逆向的感觉吗?
|
74
cmdOptionKana 248 天前
老大不急,你急啥,慢慢干呗。
把你遇到的情况详细记录,说明影响工作进度,以能保留证据的形式向上级报告,剩下的事情你就不用管了。 |
75
skymei 248 天前
上家有个同事就是这样,改他的代码真的火大,各种脱裤子放屁,最后加上公司氛围确实不好,我早早的就撤了
|
76
cmdOptionKana 248 天前 1
另外,他不受你管,你可以架空他,他提交的代码你一个字别动,只在外面加 wrapper 来调用,实在不行就自己重写,备注里说明重写的原因,备注里指名道姓批评他。
|
77
version 248 天前 1
直接搞成微服务.提供接口文档.字段注解.管他内部怎么实现..接口性能可以监测...想重构谁的业务.也是很简单的..
|
78
cmdOptionKana 248 天前
@MadSix 能把人调过来,你是老大,还怕小弟?制定一个一视同仁的规定,他的代码不符合要求他重写,屡教不改就可以依法辞退了。
|
79
MadSix OP @cmdOptionKana #78 都是打工的,何苦相互为难,什么老大不老大的。我没兴趣去“矫正”别人,只要不影响到我就行。
如果不是没得选的情况,谁想主动要个祖宗过来还得跟他斗智斗勇。省点心不好么。 |
80
ren5ren6 248 天前 1
能和他一对一的谈一次么?请吃饭或拉到没人办公室。直接说他不归你管但需要你今后擦屁股的心中隐忧,谈时不要迂回,开诚布公、直接明了,但,一定一定态度和善诚恳。看他当时怎么说、之后怎么做,你自己需要做些什么不就是一定的了吗?
|
81
chaos93 248 天前
扔给 GPT
|
82
zgl263885 248 天前 via iPhone
目前我接手的项目有个方法 1500 多行代码。但资本家没有少发钱,默默吃着了。
|
83
991547436 248 天前
写得好又不会加工资,你不能维护关他什么事,除非加钱
|
84
littlewing 248 天前
不是我理解的 防御性编程,我以为是做了太多 check 影响性能了
|
86
kneo 248 天前
为什么这种人在你们公司成了主力?
|
87
lategege 248 天前
防御性编程最新释义:编写只有自己能懂的代码来预防被公司优化。
|
88
7VO54YYGvw3LOF9U 248 天前 via iPhone
@miraumr 拉个更牛逼的
|
90
wolfan 248 天前
错误作法:V 站求意见。
正确作法:写邮件上报。 |
92
calano 248 天前
扔给 copilot 让优化结构,我用下来发现拆的方法有点过于细了
|
93
gesse 248 天前
|
94
huruwo 248 天前
既然有防御式编程,我想知道进攻式编程是什么样子。
你用你的进攻式编程来突破他的防御式编程不就行了。 |
95
gkiwi 248 天前
我以为的防御式编程,是过度的判断非空,喜欢到处 trycatch...
|
96
SSSensational 248 天前
uniswap 的前端代码是防御性编程的典例
|
97
iphantom 248 天前
@MadSix 你本质上是不希望他给你埋坑么 但是现在来看坑肯定有的 那你现在的期望更多是别让自己背锅么 那你现在只能先确认下这个锅让谁来背锅。 所以肯定是这哥们要来背最好。
关于这哥们后续的安排,其实也很明显啊,就是去做对接或者支持类的工作,比如你们组总有一些要支持其他团队的时候,就让他去吧,这样其他组看到这个熊样,为了防止自己背锅,大概率也会重复你的操作,把他要回去,大概就是这哥们就成流水的兵了吧···· |
98
FantaMole 248 天前
大伙儿都不知道你这个项目是怎么样的,技术栈是什么,项目结构是什么样的。大家就算有解决方案,也跟你看屎山代码一样不知道怎么入手,思路只能是在人事安排或者工作职责上想想办法
我提个思路吧,如果不想碰狗屎的话,我假设这个项目是个微服务项目,且开发完成之后改动不会很频繁,然后你说你们项目组之间开发的功能耦合不强,那你现在就要做两个事情: 1. 多 push 测试,趁这个同事还在开发这个项目,尽量多测试,让问题多多暴露出来,让他改好 2. 做项目拆分,把那个同事所有开发的屎山代码都拆分出来,单独成为一个服务,下沉这个服务作为基础服务,没有特殊情况不做修改。以后有功能上的修改或者业务上的变更,调用这个基础服务,在服务接口返回结果的基础上做功能拓展或者业务变更 你说性能问题,牙医 shake it ,代码都成了这个样子 如果实在不行的话,前几年有个很火的折磨游戏,叫做 “和 Bennett Foddy 一起攻克难关”,那你也可以 “和 OpenAPI 一起翻越屎山” |
99
Hyakutake 248 天前
问题很明确,拦不住创建屎山的人,并即将接手屎山。
1. 先试试拦着拉屎的人。向技术老大汇报,让对应组的人改掉,验收后在接。 2. 拦不住就考虑不接。如果没得选择,那看看能不能提前接,在还是一个屎堆的时候就重构了。 3. 接下来,如果想维护好,分两种,屎上雕花或者直接推倒重来。 4. 屎上雕花,就是后续的功能,按规范开发,尽量不动之前的东西。看过了就补一点注释。 5. 直接推倒重来,有资源就把接口在写一遍,没资源扔给 gpt 读代码,然后再重构吧。 |
100
bojackhorseman 248 天前 1
|