V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
857681664
V2EX  ›  程序员

抱着想写好质量代码的心,然后遇到一个完全不管代码质量的人合作,真是糟心

  •  2
     
  •   857681664 ·
    zshnb · 227 天前 · 13280 次点击
    这是一个创建于 227 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目框架已经搭好用 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 弄稳妥就行。

    116 条回复    2024-05-14 10:51:06 +08:00
    1  2  
    jack778
        1
    jack778  
       227 天前
    和你的 lead 说, 让他提出来, 然后不要说是你告密的
    GeruzoniAnsasu
        2
    GeruzoniAnsasu  
       227 天前
    看你的描述,可能他根本就不咋会的可能性更大
    jianchang512
        3
    jianchang512  
       227 天前
    可能单打独斗惯了,主打一个随心所欲能跑就行
    857681664
        4
    857681664  
    OP
       227 天前
    @GeruzoniAnsasu 不知道啊,说是多年经验
    zhuangzhuang1988
        5
    zhuangzhuang1988  
       227 天前   ❤️ 8
    @jack778 想多了,很多时候 lead 技术也很差
    而且说不定 leader 还认为对方是对的。
    coderluan
        6
    coderluan  
       227 天前   ❤️ 1
    问题不是你遇到了个不管代码质量的人,而是你遇到了个不管代码质量的公司或者领导,这种情况下就别强求,早晚工期和任务也会让你也写出自己认为质量不行的代码,最重要但是做好分工,互相尽量不动对方的模块就行了,你的随便你写,他的随便他写,出了问题还不用扯皮。
    857681664
        7
    857681664  
    OP
       227 天前   ❤️ 3
    @coderluan 就怕哪天他糊的屎掉我手里,就更恶心了
    honkew
        8
    honkew  
       227 天前
    能跑就行
    GeekGao
        9
    GeekGao  
       227 天前   ❤️ 9
    写不好代码你有锅背吗,没有的话 “糟心” 是啥心态? 个体的完美主义+控制欲无法施加予外部,所以闹心?
    如果与自己的利益没啥关联,那么就别管那么多了,你糟心影响自己的心理健康,对方不以为然自得其乐…
    857681664
        10
    857681664  
    OP
       227 天前
    @GeekGao 就是不想看着一个好东西变烂的心情吧,利益冲突也没有,就是难免会用到他的代码
    blakezhaothinks
        11
    blakezhaothinks  
       227 天前   ❤️ 1
    代码质量管理这事,短期内看不到回报的,只能从上往下推,要大领导直接干预,基层再怎么抱怨没有用,也推不动。如果你们公司是业务导向的(大多数公司如此),而不是技术导向的,也无工程师文化,那就更不要想了,老实写好自己的代码吧。
    GeekGao
        12
    GeekGao  
       227 天前
    @857681664 以我的经验,这种事没办法,做好自己的那份工作就好(例如提前约定好接口、编写清楚文档),尽量避免接触对方代码的实现逻辑。
    857681664
        13
    857681664  
    OP
       227 天前
    @blakezhaothinks 很多时候比较着急写功能啥的都可以理解,只是我看到的这些情况让我感觉不应该是一个多年经验的工程师会做出的事,也可能是我之前从没遇到过类似的
    hellomsg
        14
    hellomsg  
       227 天前
    代码不一定按照你那样写才能运行。世界大了,放眼看世界。
    你需要的是团队有个规章制度约束大家,你一个人无能为力,提给 leader 吧。或者趁早跟他说明白,别自己郁闷内耗。
    hellomsg
        15
    hellomsg  
       227 天前
    凡事直接当面提出来比在网上吐槽有用
    potatowish
        16
    potatowish  
       227 天前 via iPhone
    要么转行过来的,要么就是新手
    Foxii
        17
    Foxii  
       227 天前
    Spring boot 项目 http 客户端现在可以用带 @HttpExchange 注释的 Java 接口,声明式地实现
    https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-http-interface
    KInG2
        18
    KInG2  
       227 天前
    @potatowish 还有就是产品恶心,随意添加需求,搞得没有时间和意愿给你好好写,在加上敏捷开发深入 lead 心理。
    KInG2
        19
    KInG2  
       227 天前
    @KInG2 leader ,打错字了,QAQ
    857681664
        20
    857681664  
    OP
       227 天前
    @hellomsg 我说了,建议他用我写的方法,他要么不回,要么就说哪有时间改之类的,也不是说一定都要按照我写的,都可以讨论,但至少不能用这么烂的方式去实现吧
    857681664
        21
    857681664  
    OP
       227 天前
    @Foxii 嗯嗯都可以,至少都是 springboot 提供的生态,而不是用裸的 Java httpclient
    qaqLjj
        22
    qaqLjj  
       227 天前
    劣币驱逐良币,这世界就是这样的,除非有外界力量干预
    ebushicao
        23
    ebushicao  
       227 天前
    这种问题很难搞,除非那人本身性格还比较好,你说他就能改(我遇到过这种,只是技术不太行写的差,但你跟他说他会很抱歉的马上改)。如果性格不好就麻烦了,不管是直接找他本人说,还是通过上一级管理进行沟通,都会产生冲突,遇到一些奇奇怪怪的人还会有很多恶心的事情。(参考一些同事之间投毒,背后捅刀之类的事件
    coolair
        24
    coolair  
       227 天前
    我同事也是,前端,代码写的一堆屎山,因为新来的领导一点也不懂开发,所以,他只要实现了需求就行了……
    很担心他走了,那一堆垃圾如果给我,该怎么维护……
    hefish
        25
    hefish  
       227 天前
    我觉着 OP 应该反省自己。 要严于律己,宽于待人。。。咳咳。。。
    Leon777
        26
    Leon777  
       227 天前
    就是这么个环境没办法,我是直接跟领导提自己单独负责一些模块,我不管别人怎么堆屎山别人也别在我这拉屎
    xxxccc
        27
    xxxccc  
       227 天前
    没有 code review 吗?如果很离谱的代码,review 的人肯定不能让代码合并的。
    fkdog
        28
    fkdog  
       227 天前   ❤️ 1
    你举得这些例子的确是他写的不够好。

    所以你发帖的诉求是什么?

    如果是来发泄吐槽的,我觉得并没有什么意义。你发完贴人家也不会改,该怎么怎么的,你也不会因此更好过。以后碰到水平差的也不止这么一两个人。

    如果你真觉得自己足够优秀,那以后尽量给自己争取一个都是优秀的同事的环境。
    guanzhangzhang
        29
    guanzhangzhang  
       227 天前
    如果你仓库权限比他高些,加下 ci 和代码扫描啥的,给他硬限制下。
    如果他比较听劝,他每次提 pr 的时候你 code review 下,同时让他封装一些工具类
    LiaoMatt
        30
    LiaoMatt  
       227 天前
    你们公司还招人不, 让我来吧, 这老哥的操作听起来就很迷, 很有必要做一下 codereview
    BeijingBaby
        31
    BeijingBaby  
       227 天前
    看起来应该是没有技术评审,代码规范吧,有的话可以杜绝这些,让和团队保持一致的节奏。
    oneisall8955
        32
    oneisall8955  
       227 天前 via Android
    代码写的比别人看明白已经算好了
    afxcn
        33
    afxcn  
       227 天前   ❤️ 7
    能体会你的感受,就像一个爱干净的人和一个不爱干净的人一起租房子一样。

    我们公司的代码规范是从下往上推动的,基本上统一了公司的代码风格。
    VPointer
        34
    VPointer  
       227 天前   ❤️ 2
    @fkdog 别人说出来让自己好过点就是意义,然后让大家看个乐子不也是意义?
    macaodoll
        35
    macaodoll  
       227 天前 via iPhone
    前面都对,但当你掏出 okhttp 的时候就变味了
    857681664
        36
    857681664  
    OP
       227 天前
    @ebushicao 性格好我就不吐槽了,跟他说了,先是不回复,然后直接说没时间改
    857681664
        37
    857681664  
    OP
       227 天前
    @d9e7381f 没啥 review ,而且让我 review 我得累死,问题多到爆炸,还不如重写了
    857681664
        38
    857681664  
    OP
       227 天前   ❤️ 2
    @fkdog 互联网嘛,没啥诉求,就是觉得看不下去给大伙吐槽看个乐子
    karnaugh
        39
    karnaugh  
       227 天前
    硬气点该摆的时候就摆,跟领导说,如果这种东西后续出问题,让你改,你就要求重写,需要时间,要不就别让你改,至于性能问题啥的,出问题了也是他的方法出的,一般上头找人负责也是先找的你领导,所以你就把自己一亩三分地管好就得了,你得习惯,有些人不用给好脸色
    iintothewind
        40
    iintothewind  
       227 天前
    代码风格就是团队里面话语权最大的人说了算的, 很难说绝对的谁好谁坏.
    比如你提到的数据库访问层实现, 可以选择 JPA, 可以选择 MyBatis, JOOQ, Jdbi, VertX 甚至 JdbcTemplate, 裸 JdbcPreparedStatement, 只是每个人的品味不同,
    比如你提到的 HTTP Client, 可以是 Rest Template, 可以是 Apache HttpClient, 可以是 Java 11 HttpClient, 可以是 OkHttp, Retrofit, 甚至可以是 VertX, 只是每个人的品味不同,

    只不过话语权最高的那个人说哪个好, 然后就得有人遵守, 仅此而已.

    代码品味有不同, 你个人可以喜欢或者不喜欢, 但是如果之前已经在系统里面的呢? 难道你要全部改掉?

    要能够接受一个系统就是多方面妥协的产物, 不是你要求完美, 它就能完美.

    要不然, 你接受不了的地方, 那可多着呢.
    sagaxu
        41
    sagaxu  
       227 天前 via Android   ❤️ 8
    说句扎心的,说不定你工资还没他高
    mobpsycho100
        42
    mobpsycho100  
       227 天前
    人和代码有一个能跑就行
    Pending
        43
    Pending  
       226 天前
    分清楚工作和个人爱好/喜欢。
    Pending
        44
    Pending  
       226 天前
    @Pending 喜欢 -> 喜好。
    cookii
        45
    cookii  
       226 天前 via Android
    工作就是工作,完成任务就好
    bmpidev2019
        46
    bmpidev2019  
       226 天前
    让他用 ChatGPT 重构代码,质量很容易提上来了
    dj721xHiAvbL11n0
        47
    dj721xHiAvbL11n0  
       226 天前   ❤️ 1
    @857681664 #4 可能是培训班的
    dj721xHiAvbL11n0
        48
    dj721xHiAvbL11n0  
       226 天前
    @coderluan 那他离职了之后呢
    DzwsGo
        49
    DzwsGo  
       226 天前
    @ebushicao 说了满口答应然后不改认为在找茬,后面就不管了,最近离职了,还得改他的屎
    ColdBird
        50
    ColdBird  
       226 天前
    关于代码质量可以跟 leader 商量一下引入 code review 机制,然后每两周阻止一次 review 复盘会复盘一下典型的代码,就比如你举得例子
    Jack66
        51
    Jack66  
       226 天前
    根据我的经历很正常,公司所谓的负责人什么全栈。代码屎山,什么全栈样样通样样松都是表扬的话。能给的建议是工作除了这点觉得满意就想想怎么做,或者找机会沟通
    chenPiMeiHaoChi
        52
    chenPiMeiHaoChi  
       226 天前
    恭喜你已经开始了思考职业生涯的第一个阶段,下个阶段你就会发现代码写的好坏和能赚到的钱并不完全是正相关,下下个阶段就该探索其他搞钱方向了
    123zouwen
        53
    123zouwen  
       226 天前
    项目有规范并且规范是什么不是你一个人能决定的, 是 lead 决定的,或者 lead 放权让你负责这一块.
    如果 lead 没有这个要求, 那每个人就会按照自己的风格来写, 应该还不会有 code review 了吧.
    gowk
        54
    gowk  
       226 天前   ❤️ 2
    可以看出 OP 是非常注重代码质量的,如果是我,我会非常喜欢和你这样的程序员共事,一起讨论代码和设计,一起推进项目做出让用户用起来感觉非常流畅和舒服的应用。但是往往事与愿违,由于各种原因,很多敷衍了事的代码会充斥在代码库里,确实看了很糟心,非常影响写代码的心情。没别的办法,努力提升自己,离开这个环境,进入更有素养更注重代码质量的团队。

    「凡是能真正把他人怎么阅读代码放在心上的软件工程师,即使一开始不具备非常好的设计技巧,随着时间的推移,也能很快学会这些技巧。心中有他人是非常重要的意识和素养。」——《软件设计:从专业到卓越》
    gitdoit
        55
    gitdoit  
       226 天前
    你俩分好工, 谁也别动谁的代码, 把他当黑盒子就行了. 两个人对接的时候做好防御; 其他的管那么多干嘛
    woodfizky
        56
    woodfizky  
       226 天前
    leader 的问题。

    如果找 leader 反馈能改善下,可以忍忍。

    如果不行或者没有 leader ,快跑,争取以后自己成为 leader 。
    aken29
        57
    aken29  
       226 天前
    @857681664 #10 同感
    hellomsg
        58
    hellomsg  
       226 天前
    @857681664 #20 那就是这种人没法合作。默默擦屁股吧
    akakidz
        59
    akakidz  
       226 天前   ❤️ 1
    很明显就是能力不行啊,不知道楼上为啥还要帮这种人讲话。如果是工作经验不足的新人,OP 可以指导一下,如果是三年五年的老人,尽快跟领导反馈吧,不然等他离职后这个屎山谁愿意接?
    echoZero
        60
    echoZero  
       226 天前
    能力的参差而已,我们公司很明显, 但是 leader 只要交付,不在乎这些。KPI 有重构这一项 只能说工作不饱和
    leiuu
        61
    leiuu  
       226 天前
    1. spring jpa 有时候用 native sql 还是很方便的,说实话简单命明了,不过多数用在复杂查询的场景。insert 方法用 native ,确实没见过...
    2. 使用 java11 的 native http client 没啥问题,他这里的问题是没有定义一个全局公用的 client
    3. 看起来你的同事代码习惯不太好,喜欢简单粗暴完成任务,追求短平快

    代码总体风格和质量控制,其实靠同事之间推动是有一点难度的。
    如果 leader 不重视这事儿,同事之间直接沟通,如果加上不能很好的把握沟通技巧(所谓低情商表达),其实很容易转化为同事矛盾。弥补认知差异是困难的。
    我前几年的时候,会直接提醒同事,但收效有时候并不大,后来想想其实没啥必要。
    仅仅是工作而已,如果测试和领导没反馈什么问题,那就没关系。
    等自己真正有话语权时再去控制也不晚(目前就这么做的)。
    iyiluo
        62
    iyiluo  
       226 天前
    没办法,工作中这样的事情是无法避免的,除非走代码 review 流程
    EndlessMemory
        63
    EndlessMemory  
       226 天前
    没人关心实际代码质量的
    yosoroAida
        64
    yosoroAida  
       226 天前
    这种人确实没法合作的,写的一坨屎,叫他改估计他还会逼逼赖赖,建议跟上级汇报,不然到时候自己去接这坨屎难受的只有自己
    blur1119
        65
    blur1119  
       226 天前
    @karnaugh 你这是给领导脸色看呢?
    gitlight
        66
    gitlight  
       226 天前
    防御型编程实战
    8355
        67
    8355  
       226 天前
    这种就是 springboot 不怎么熟悉吧。。。
    keepme
        68
    keepme  
       226 天前
    同遇到过,糟糕的是上级也不太管这个事,最后的结论就是代码能跑就行,慢慢的大家都摆烂了。
    GunsRose
        69
    GunsRose  
       226 天前
    我之前也遇到过,后面再 codeview 会议上还因为这个吵过架,结果领导也觉得没必要。后面就只能这样了,这种情况下,我劝楼主还是独善其身好,调用他的代码的时候注意下。
    shawnsh
        70
    shawnsh  
       226 天前 via Android
    如果公司没人管,你觉得忍受不了,就跳槽,跳到编码有要求有规范的公司。你的规范编码在这公司一文不值。还受损失。
    Kuribee
        71
    Kuribee  
       226 天前
    不要太有责任心,这世界就是一个巨大的草台班子。
    干了工作 > 完成工作 > 高质量完成工作,发工资就行,别的不要管。
    leaflxh
        72
    leaflxh  
       226 天前
    一起拉屎
    AmosLi
        73
    AmosLi  
       226 天前
    想一想对方是怎么存活在你们公司的? 我感觉这个问题数据团队管理问题。 你们公司是不是就不重视代码质量, 或者说重视代码质量的人不在重要位置上。如果是,那建议你向下兼容他
    0x90200
        74
    0x90200  
       226 天前
    @zhuangzhuang1988 赞同, 可能有些 lead 比他没有追求.
    wwnhahaxiao
        75
    wwnhahaxiao  
       226 天前
    我遇到的比你还糟心, 这个人还是 leader, 调用你写好的方法, 要求你加一堆他用的参数, 本来解耦的功能, 强行耦合到一起. 简直是被强行喂💩,目前想到的唯一解就是
    chemf
        76
    chemf  
       226 天前   ❤️ 1
    讲道理能理解,但没必要自我内耗
    kristofer
        77
    kristofer  
       226 天前
    @fkdog #28 当然是吐槽喽,吐槽出来,大家给 OP 一些情绪价值,OP 舒服了,这也是有价值的。
    fredweili
        78
    fredweili  
       226 天前
    发邮件把问题写清楚,做不做就管不着了
    857681664
        79
    857681664  
    OP
       226 天前
    @iintothewind 你说的 JPA ,Mybatis 这个我非常认同,对于这些技术选型我是很 open 的,大家决定啥我就用啥,但 httpclient 我真的无法认同他的做法,我认为最差的选择,也应该用 springboot 管理好 httpclient ,而不是直接在方法里每次 call 都 new 一个 httpclient ,从这点上我就能感觉他对代码的态度就是赶紧实现,能跑就行,不会思考更多如何合理组织,如何保持健壮性。
    857681664
        80
    857681664  
    OP
       226 天前
    @GunsRose 目前已经不管他的代码了,只要是他的代码出错扔给他就行 at 他让他自己解决,我才懒得管
    destiny0114
        81
    destiny0114  
       226 天前
    很好的 OP ,可是我 junior 遇不到像 OP 这样的程序员,我个人喜欢人家批评我的代码
    hakr
        82
    hakr  
       226 天前
    @macaodoll #35 哈哈哈哈笑死
    ExplodingFKL
        83
    ExplodingFKL  
       226 天前
    无所谓了,代码有提交记录,除了问题不被甩锅就行
    857681664
        84
    857681664  
    OP
       226 天前
    @destiny0114 我很乐意跟大伙讨论代码,包括团队里其他前端同事后端同事,沟通都挺愉快,有后端同事不太懂 JPA 的 entity ,我也会告诉他怎么写,用什么注解。
    而跟这个人甚至都无法好好沟通,跟他说了发邮件的部分我实现完了,让他把他分支的发邮件部分去掉,说了几遍都没明白我意思,然后一直让我把他分支代码拉下来去掉,我真是黑人问号。最后还把他的发邮件代码提交上去,跟我的还冲突了,我还得费劲把他用到发邮件的部分改一下。最绝的是他的邮件配置居然只写在了 dev 配置 yml ,线上配置 yml 里压根没有,这上线了不是也用不了吗
    SuperAllen
        85
    SuperAllen  
       226 天前
    本质就是草台班子么,组织推动标准和推动组织标准是两码子事,把自己的弄好别被甩锅就 o 了
    m319
        86
    m319  
       226 天前
    确实难受,但毕竟不在你权责范围内,强行掺和这事估计也推不动,说不定还会惹一身骚,别碰他的代码,做好自己的事情就行
    morgan1freeman
        87
    morgan1freeman  
       226 天前
    老板只为功能代码付款了,并没有为良好可阅读的代码 进行付费,领导不在乎的化,就这样吧,我们这边代码更乱,我直接在上面加更多的屎,反正后面谁改错了,炸了 关我屁事
    sunznx
        88
    sunznx  
       226 天前
    忍忍算了,每个人有自己的生活和想法,做好自己就行了。有些人想的自己工资就这么点,干嘛要卖力干活呢。人家这么想,也不算错。
    leojia
        89
    leojia  
       226 天前
    代入了一下,确实挺糟心的。跟 leader 说合并前先 code review 一下,要么就自己成为 leader 。
    uaoin
        90
    uaoin  
       226 天前
    就怕被同化了
    aw2350
        91
    aw2350  
       226 天前
    你是领导嘛?那你凭啥要求人家?
    morrieati
        92
    morrieati  
       226 天前
    “我本来的想法是用单独的表管理所有验证方式,比如注册验证邮件,改密码验证邮件,还有大概率手机验证,2FA 之类的,然后他直接把 token 和过期时间存 user 表里了”
    morrieati
        93
    morrieati  
       226 天前
    supabase 也是这么做的
    ma836323493
        94
    ma836323493  
       226 天前
    这个还好, 碰到傻缺产品,设计一坨大便,领导还支持, 你不得不开发大便才难受
    sherlockwoo
        95
    sherlockwoo  
       226 天前
    关于全局捕获异常也不设置 http 状态码

    除了 401 一般都是 200 吧,根据统一响应中的 code 判断
    857681664
        96
    857681664  
    OP
       226 天前
    @aw2350 你说的对,所以他的任何代码我都不看了
    857681664
        97
    857681664  
    OP
       226 天前
    @morrieati 那 user 表会不会有点膨胀了,而且也不好控制验证过期吧
    857681664
        98
    857681664  
    OP
       226 天前
    @sherlockwoo 我们定好的是 restful ,所以会希望有 200 ,400 ,401 ,403 这样的
    llllk
        99
    llllk  
       226 天前
    最难受的是你明知道他写的一坨答辩之后跑路了这坨大便要交到自己手上,但是却无能为力。。
    natamox
        100
    natamox  
       226 天前
    @coolair 你也走
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1073 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:10 · PVG 03:10 · LAX 11:10 · JFK 14:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.