项目框架已经搭好用 springboot3 和 JPA ,然后他居然在 repository 里写了个 insert 方法,而且还是用 nativeSQL ,当然可能人家没用过 JPA ,那也算了。
然后一个发邮件的功能,他说调试了一天才搞定,然后我一看他的代码,在发邮件的函数里用 java 自带的 http client ,每发一封就 new 一个,就算不用 sprigbooot 的 rest template ,好歹也用一下 okhttpclient 吧,而且也不用 bean 管理一下。然后发邮件有个验证码机制,有有效期之类的,我本来的想法是用单独的表管理所有验证方式,比如注册验证邮件,改密码验证邮件,还有大概率手机验证,2FA 之类的,然后他直接把 token 和过期时间存 user 表里了。
还有很多小细节,比如全局捕获异常也不设置 http 状态码,直接默认都 200 (项目定的 rest 风格),有 loback 也不用,异常直接 printstack ,也从不管已经存在的代码,比如已经有 util 包和 Util 类了,还要新建 utils 包和 Util 类,异常码也是,明明有个 user_not_found 了,还要在一个他写的重复判断用户是否存在的逻辑里加一个 no_email 的错误码,反正我也不想管了,把我负责的 api 弄稳妥就行。
1
jack778 193 天前
和你的 lead 说, 让他提出来, 然后不要说是你告密的
|
2
GeruzoniAnsasu 193 天前
看你的描述,可能他根本就不咋会的可能性更大
|
3
jianchang512 193 天前
可能单打独斗惯了,主打一个随心所欲能跑就行
|
4
857681664 OP @GeruzoniAnsasu 不知道啊,说是多年经验
|
5
zhuangzhuang1988 193 天前 8
@jack778 想多了,很多时候 lead 技术也很差
而且说不定 leader 还认为对方是对的。 |
6
coderluan 193 天前 1
问题不是你遇到了个不管代码质量的人,而是你遇到了个不管代码质量的公司或者领导,这种情况下就别强求,早晚工期和任务也会让你也写出自己认为质量不行的代码,最重要但是做好分工,互相尽量不动对方的模块就行了,你的随便你写,他的随便他写,出了问题还不用扯皮。
|
8
honkew 193 天前
能跑就行
|
9
GeekGao 193 天前 9
写不好代码你有锅背吗,没有的话 “糟心” 是啥心态? 个体的完美主义+控制欲无法施加予外部,所以闹心?
如果与自己的利益没啥关联,那么就别管那么多了,你糟心影响自己的心理健康,对方不以为然自得其乐… |
11
blakezhaothinks 193 天前 1
代码质量管理这事,短期内看不到回报的,只能从上往下推,要大领导直接干预,基层再怎么抱怨没有用,也推不动。如果你们公司是业务导向的(大多数公司如此),而不是技术导向的,也无工程师文化,那就更不要想了,老实写好自己的代码吧。
|
13
857681664 OP @blakezhaothinks 很多时候比较着急写功能啥的都可以理解,只是我看到的这些情况让我感觉不应该是一个多年经验的工程师会做出的事,也可能是我之前从没遇到过类似的
|
14
hellomsg 193 天前
代码不一定按照你那样写才能运行。世界大了,放眼看世界。
你需要的是团队有个规章制度约束大家,你一个人无能为力,提给 leader 吧。或者趁早跟他说明白,别自己郁闷内耗。 |
15
hellomsg 193 天前
凡事直接当面提出来比在网上吐槽有用
|
16
potatowish 193 天前 via iPhone
要么转行过来的,要么就是新手
|
17
Foxii 193 天前
Spring boot 项目 http 客户端现在可以用带 @HttpExchange 注释的 Java 接口,声明式地实现
https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-http-interface |
18
KInG2 193 天前
@potatowish 还有就是产品恶心,随意添加需求,搞得没有时间和意愿给你好好写,在加上敏捷开发深入 lead 心理。
|
20
857681664 OP @hellomsg 我说了,建议他用我写的方法,他要么不回,要么就说哪有时间改之类的,也不是说一定都要按照我写的,都可以讨论,但至少不能用这么烂的方式去实现吧
|
22
qaqLjj 193 天前
劣币驱逐良币,这世界就是这样的,除非有外界力量干预
|
23
ebushicao 193 天前
这种问题很难搞,除非那人本身性格还比较好,你说他就能改(我遇到过这种,只是技术不太行写的差,但你跟他说他会很抱歉的马上改)。如果性格不好就麻烦了,不管是直接找他本人说,还是通过上一级管理进行沟通,都会产生冲突,遇到一些奇奇怪怪的人还会有很多恶心的事情。(参考一些同事之间投毒,背后捅刀之类的事件
|
24
coolair 193 天前
我同事也是,前端,代码写的一堆屎山,因为新来的领导一点也不懂开发,所以,他只要实现了需求就行了……
很担心他走了,那一堆垃圾如果给我,该怎么维护…… |
25
hefish 193 天前
我觉着 OP 应该反省自己。 要严于律己,宽于待人。。。咳咳。。。
|
26
Leon777 193 天前
就是这么个环境没办法,我是直接跟领导提自己单独负责一些模块,我不管别人怎么堆屎山别人也别在我这拉屎
|
27
xxxccc 193 天前
没有 code review 吗?如果很离谱的代码,review 的人肯定不能让代码合并的。
|
28
fkdog 193 天前 1
你举得这些例子的确是他写的不够好。
所以你发帖的诉求是什么? 如果是来发泄吐槽的,我觉得并没有什么意义。你发完贴人家也不会改,该怎么怎么的,你也不会因此更好过。以后碰到水平差的也不止这么一两个人。 如果你真觉得自己足够优秀,那以后尽量给自己争取一个都是优秀的同事的环境。 |
29
guanzhangzhang 192 天前
如果你仓库权限比他高些,加下 ci 和代码扫描啥的,给他硬限制下。
如果他比较听劝,他每次提 pr 的时候你 code review 下,同时让他封装一些工具类 |
30
LiaoMatt 192 天前
你们公司还招人不, 让我来吧, 这老哥的操作听起来就很迷, 很有必要做一下 codereview
|
31
BeijingBaby 192 天前
看起来应该是没有技术评审,代码规范吧,有的话可以杜绝这些,让和团队保持一致的节奏。
|
32
oneisall8955 192 天前 via Android
代码写的比别人看明白已经算好了
|
33
afxcn 192 天前 7
能体会你的感受,就像一个爱干净的人和一个不爱干净的人一起租房子一样。
我们公司的代码规范是从下往上推动的,基本上统一了公司的代码风格。 |
35
macaodoll 192 天前 via iPhone
前面都对,但当你掏出 okhttp 的时候就变味了
|
39
karnaugh 192 天前
硬气点该摆的时候就摆,跟领导说,如果这种东西后续出问题,让你改,你就要求重写,需要时间,要不就别让你改,至于性能问题啥的,出问题了也是他的方法出的,一般上头找人负责也是先找的你领导,所以你就把自己一亩三分地管好就得了,你得习惯,有些人不用给好脸色
|
40
iintothewind 192 天前
代码风格就是团队里面话语权最大的人说了算的, 很难说绝对的谁好谁坏.
比如你提到的数据库访问层实现, 可以选择 JPA, 可以选择 MyBatis, JOOQ, Jdbi, VertX 甚至 JdbcTemplate, 裸 JdbcPreparedStatement, 只是每个人的品味不同, 比如你提到的 HTTP Client, 可以是 Rest Template, 可以是 Apache HttpClient, 可以是 Java 11 HttpClient, 可以是 OkHttp, Retrofit, 甚至可以是 VertX, 只是每个人的品味不同, 只不过话语权最高的那个人说哪个好, 然后就得有人遵守, 仅此而已. 代码品味有不同, 你个人可以喜欢或者不喜欢, 但是如果之前已经在系统里面的呢? 难道你要全部改掉? 要能够接受一个系统就是多方面妥协的产物, 不是你要求完美, 它就能完美. 要不然, 你接受不了的地方, 那可多着呢. |
41
sagaxu 192 天前 via Android 8
说句扎心的,说不定你工资还没他高
|
42
mobpsycho100 192 天前
人和代码有一个能跑就行
|
43
Pending 192 天前
分清楚工作和个人爱好/喜欢。
|
45
cookii 192 天前 via Android
工作就是工作,完成任务就好
|
46
bmpidev2019 192 天前
让他用 ChatGPT 重构代码,质量很容易提上来了
|
47
dj721xHiAvbL11n0 192 天前 1
@857681664 #4 可能是培训班的
|
48
dj721xHiAvbL11n0 192 天前
@coderluan 那他离职了之后呢
|
50
ColdBird 192 天前
关于代码质量可以跟 leader 商量一下引入 code review 机制,然后每两周阻止一次 review 复盘会复盘一下典型的代码,就比如你举得例子
|
51
Jack66 192 天前
根据我的经历很正常,公司所谓的负责人什么全栈。代码屎山,什么全栈样样通样样松都是表扬的话。能给的建议是工作除了这点觉得满意就想想怎么做,或者找机会沟通
|
52
chenPiMeiHaoChi 192 天前
恭喜你已经开始了思考职业生涯的第一个阶段,下个阶段你就会发现代码写的好坏和能赚到的钱并不完全是正相关,下下个阶段就该探索其他搞钱方向了
|
53
123zouwen 192 天前
项目有规范并且规范是什么不是你一个人能决定的, 是 lead 决定的,或者 lead 放权让你负责这一块.
如果 lead 没有这个要求, 那每个人就会按照自己的风格来写, 应该还不会有 code review 了吧. |
54
gowk 192 天前 2
可以看出 OP 是非常注重代码质量的,如果是我,我会非常喜欢和你这样的程序员共事,一起讨论代码和设计,一起推进项目做出让用户用起来感觉非常流畅和舒服的应用。但是往往事与愿违,由于各种原因,很多敷衍了事的代码会充斥在代码库里,确实看了很糟心,非常影响写代码的心情。没别的办法,努力提升自己,离开这个环境,进入更有素养更注重代码质量的团队。
「凡是能真正把他人怎么阅读代码放在心上的软件工程师,即使一开始不具备非常好的设计技巧,随着时间的推移,也能很快学会这些技巧。心中有他人是非常重要的意识和素养。」——《软件设计:从专业到卓越》 |
55
gitdoit 192 天前
你俩分好工, 谁也别动谁的代码, 把他当黑盒子就行了. 两个人对接的时候做好防御; 其他的管那么多干嘛
|
56
woodfizky 192 天前
leader 的问题。
如果找 leader 反馈能改善下,可以忍忍。 如果不行或者没有 leader ,快跑,争取以后自己成为 leader 。 |
59
akakidz 192 天前 1
很明显就是能力不行啊,不知道楼上为啥还要帮这种人讲话。如果是工作经验不足的新人,OP 可以指导一下,如果是三年五年的老人,尽快跟领导反馈吧,不然等他离职后这个屎山谁愿意接?
|
60
echoZero 192 天前
能力的参差而已,我们公司很明显, 但是 leader 只要交付,不在乎这些。KPI 有重构这一项 只能说工作不饱和
|
61
leiuu 192 天前
1. spring jpa 有时候用 native sql 还是很方便的,说实话简单命明了,不过多数用在复杂查询的场景。insert 方法用 native ,确实没见过...
2. 使用 java11 的 native http client 没啥问题,他这里的问题是没有定义一个全局公用的 client 3. 看起来你的同事代码习惯不太好,喜欢简单粗暴完成任务,追求短平快 代码总体风格和质量控制,其实靠同事之间推动是有一点难度的。 如果 leader 不重视这事儿,同事之间直接沟通,如果加上不能很好的把握沟通技巧(所谓低情商表达),其实很容易转化为同事矛盾。弥补认知差异是困难的。 我前几年的时候,会直接提醒同事,但收效有时候并不大,后来想想其实没啥必要。 仅仅是工作而已,如果测试和领导没反馈什么问题,那就没关系。 等自己真正有话语权时再去控制也不晚(目前就这么做的)。 |
62
iyiluo 192 天前
没办法,工作中这样的事情是无法避免的,除非走代码 review 流程
|
63
EndlessMemory 192 天前
没人关心实际代码质量的
|
64
yosoroAida 192 天前
这种人确实没法合作的,写的一坨屎,叫他改估计他还会逼逼赖赖,建议跟上级汇报,不然到时候自己去接这坨屎难受的只有自己
|
66
gitlight 192 天前
防御型编程实战
|
67
8355 192 天前
这种就是 springboot 不怎么熟悉吧。。。
|
68
keepme 192 天前
同遇到过,糟糕的是上级也不太管这个事,最后的结论就是代码能跑就行,慢慢的大家都摆烂了。
|
69
GunsRose 192 天前
我之前也遇到过,后面再 codeview 会议上还因为这个吵过架,结果领导也觉得没必要。后面就只能这样了,这种情况下,我劝楼主还是独善其身好,调用他的代码的时候注意下。
|
70
shawnsh 192 天前 via Android
如果公司没人管,你觉得忍受不了,就跳槽,跳到编码有要求有规范的公司。你的规范编码在这公司一文不值。还受损失。
|
71
Kuribee 192 天前
不要太有责任心,这世界就是一个巨大的草台班子。
干了工作 > 完成工作 > 高质量完成工作,发工资就行,别的不要管。 |
72
leaflxh 192 天前
一起拉屎
|
73
AmosLi 192 天前
想一想对方是怎么存活在你们公司的? 我感觉这个问题数据团队管理问题。 你们公司是不是就不重视代码质量, 或者说重视代码质量的人不在重要位置上。如果是,那建议你向下兼容他
|
74
0x90200 192 天前
@zhuangzhuang1988 赞同, 可能有些 lead 比他没有追求.
|
75
wwnhahaxiao 192 天前
我遇到的比你还糟心, 这个人还是 leader, 调用你写好的方法, 要求你加一堆他用的参数, 本来解耦的功能, 强行耦合到一起. 简直是被强行喂💩,目前想到的唯一解就是
|
76
chemf 192 天前 1
讲道理能理解,但没必要自我内耗
|
78
fredweili 192 天前
发邮件把问题写清楚,做不做就管不着了
|
79
857681664 OP @iintothewind 你说的 JPA ,Mybatis 这个我非常认同,对于这些技术选型我是很 open 的,大家决定啥我就用啥,但 httpclient 我真的无法认同他的做法,我认为最差的选择,也应该用 springboot 管理好 httpclient ,而不是直接在方法里每次 call 都 new 一个 httpclient ,从这点上我就能感觉他对代码的态度就是赶紧实现,能跑就行,不会思考更多如何合理组织,如何保持健壮性。
|
81
destiny0114 192 天前
很好的 OP ,可是我 junior 遇不到像 OP 这样的程序员,我个人喜欢人家批评我的代码
|
83
ExplodingFKL 192 天前
无所谓了,代码有提交记录,除了问题不被甩锅就行
|
84
857681664 OP @destiny0114 我很乐意跟大伙讨论代码,包括团队里其他前端同事后端同事,沟通都挺愉快,有后端同事不太懂 JPA 的 entity ,我也会告诉他怎么写,用什么注解。
而跟这个人甚至都无法好好沟通,跟他说了发邮件的部分我实现完了,让他把他分支的发邮件部分去掉,说了几遍都没明白我意思,然后一直让我把他分支代码拉下来去掉,我真是黑人问号。最后还把他的发邮件代码提交上去,跟我的还冲突了,我还得费劲把他用到发邮件的部分改一下。最绝的是他的邮件配置居然只写在了 dev 配置 yml ,线上配置 yml 里压根没有,这上线了不是也用不了吗 |
85
SuperAllen 192 天前
本质就是草台班子么,组织推动标准和推动组织标准是两码子事,把自己的弄好别被甩锅就 o 了
|
86
m319 192 天前
确实难受,但毕竟不在你权责范围内,强行掺和这事估计也推不动,说不定还会惹一身骚,别碰他的代码,做好自己的事情就行
|
87
morgan1freeman 192 天前
老板只为功能代码付款了,并没有为良好可阅读的代码 进行付费,领导不在乎的化,就这样吧,我们这边代码更乱,我直接在上面加更多的屎,反正后面谁改错了,炸了 关我屁事
|
88
sunznx 192 天前
忍忍算了,每个人有自己的生活和想法,做好自己就行了。有些人想的自己工资就这么点,干嘛要卖力干活呢。人家这么想,也不算错。
|
89
leojia 192 天前
代入了一下,确实挺糟心的。跟 leader 说合并前先 code review 一下,要么就自己成为 leader 。
|
90
uaoin 192 天前
就怕被同化了
|
91
aw2350 192 天前
你是领导嘛?那你凭啥要求人家?
|
92
morrieati 192 天前
“我本来的想法是用单独的表管理所有验证方式,比如注册验证邮件,改密码验证邮件,还有大概率手机验证,2FA 之类的,然后他直接把 token 和过期时间存 user 表里了”
|
93
morrieati 192 天前
supabase 也是这么做的
|
94
ma836323493 192 天前
这个还好, 碰到傻缺产品,设计一坨大便,领导还支持, 你不得不开发大便才难受
|
95
sherlockwoo 192 天前
关于全局捕获异常也不设置 http 状态码
除了 401 一般都是 200 吧,根据统一响应中的 code 判断 |
98
857681664 OP @sherlockwoo 我们定好的是 restful ,所以会希望有 200 ,400 ,401 ,403 这样的
|
99
llllk 192 天前
最难受的是你明知道他写的一坨答辩之后跑路了这坨大便要交到自己手上,但是却无能为力。。
|