MadSix

同事防御性编程影响项目怎么办

  •  1
     
  •   MadSix · Apr 17, 2024 · 25465 views
    This topic created in 929 days ago, the information mentioned may be changed or developed.

    背景如下: 我们有多个组,我带组 1. 同事 A 不在我的组,属于组 2. 现在同事 A 正在开发一个新项目,他是目前的主力,我安排人配合他一起完成,但目前开发内容上交集很少,拆的比较开。

    问题如下: 1.目前已经明确,这个项目开发完之后,全权移交给我组负责后续开发维护,我是第一责任人。 2.最近组里兄弟跟我反馈,这哥们的代码,太过防御性了点,代码几乎是不可维护的。干什么都是梭哈,除了他自己没人看得懂写的是什么。我稍微看了一眼,想在他的代码上加功能我看了都满头大汗,无从下手。 3.这个系统其实有个前身,后来他介入之后,也是这套打法。到后来成功的没办法继续维护了,只能推倒重做一套,继续放任,就是历史重演。

    我很想提这个问题,但他又不归我管。他防御性编程其实我不是很在意,别人自有维护饭碗的方式,但是影响到我后续开发了,我就很难受。

    现在最困难的是: 这个项目并不是由组 2 的组长带的,而是一个技术老大亲自带的,所以找组 2 组长沟通没用。 至于这个技术老大。emm 说实话不太管事,只管下任务,也不关心代码质量和项目细节,所以跟他反馈等于没说。平时开发告诉他做完了就行,代码 review 他都不做,要不然也不能让这哥们毫无心里负担得这么干。奈何技术老大位高权重资历深厚,咱们也没什么办法。

    我现在很想跟上面反馈一下这个问题,但是我这种跨管辖范围的做法总是不太好,而且也不知道提了有没有用。难道就这么把这口屎吃下来不成。

    V 友们给出出主意。

    Supplement 1  ·  Apr 17, 2024
    感觉大家关注的焦点变成了
    “防御性编程”的概念用的不对。
    谢谢各位的科普,这东西什么意思我是懂的,确实如某一层朋友所说,这是我“爱重新定义老词语”的臭毛病。
    接受批评。
    大家就先暂时不要关注字词解释了,我下次一定改
    Supplement 2  ·  Apr 29, 2024
    感谢大家的建议和批评
    最终还是决定从我这拉一个人出来把他换过来,以后打算安排他专职维护这一块了
    123 replies  •  2024-04-18 15:59:31 +08:00
    1  2  
    ❮ ❯
    MillaMaxwell
    MillaMaxwell
    Apr 17, 2024❤️9
    1
    只能在他的代码旁边再拉一坨大的了
    IMelon
    IMelon
    Apr 17, 2024
    2
    防御性的代码看起来是什么样的?
    yangzzzzzz
    yangzzzzzz
    Apr 17, 2024
    3
    直接和他明说啊 不改像上面汇报呗。就说以后代码我这边维护不了 别怪我了。
    MadSix
    MadSix
    OP
    Apr 17, 2024
    4
    @miraumr 拉完还是我自己擦啊,后续开发维护我是第一责任人
    ltyj2003
    ltyj2003
    Apr 17, 2024 via Android
    5
    让他提供开发文档,对程序代码进行说明。
    kera0a
    kera0a
    Apr 17, 2024 via iPhone❤️53
    6
    能不能把这哥们请来 V 站开个讲座?
    MadSix
    MadSix
    OP
    Apr 17, 2024
    7
    @IMelon 代码不方便贴
    怎么说呢,基本就是
    1.跟已有项目开发习惯相背,大家什么框架或者方法用的最多,他就不用什么。大家什么写法最多,就不写什么。
    2.不拆分不抽象,逻辑一把梭哈,强强耦合,要改个功能得瞻前顾后,牵一发动全身
    3.变量名+没注释,懂得都懂
    emSaVya
    emSaVya
    Apr 17, 2024
    8
    代码重构列入 kpi 安排工时呗。这不是常规方案吗?
    qinfengge
    qinfengge
    Apr 17, 2024
    9
    @MadSix #7 能这么写那该说不说也挺牛逼的
    MadSix
    MadSix
    OP
    Apr 17, 2024
    10
    @emSaVya 他的 KPI 不归我定
    至于我自己安排人重构。。。这口屎吃的风险太大了,不是他自己来,重构一下总担心出问题。
    这哥们最骚的操作是好多判断他交给前端去做,他就在万千返回值中给几个意义不明的 0123.
    MrYELiex
    MrYELiex
    Apr 17, 2024
    11
    可能单纯是菜 或者觉得不配用脑子想怎么抽象 写完就完事了
    uiosun
    uiosun
    Apr 17, 2024❤️4
    12
    @IMelon 举个例子:

    OOP 的话,一个 class 三千多行甚至更多,我见过两万多行的(纯代码,不带空行的计算),没有一行注释,message 缩写成 msg 都是奇迹,往往会写成 m 或者 xx (消息的拼音打头)。

    这个 m 在不同的行效果是不同的,这会儿是 message ,过几百行是 minute ,等下又变成了 meter 。

    里面一部分方法有,一部分方法没有:事务、参数校验、直接抛异常、抛错误代码等等等,不一而足,全凭当时的心情。

    说好听点叫防御性代码,说难听点他自己都不一定维护的起来……好代码都长得类似,这种代码那就各有各的风味了……
    mrliusg
    mrliusg
    Apr 17, 2024
    13
    “又不是不能用”
    MadSix
    MadSix
    OP
    Apr 17, 2024
    14
    @qinfengge
    @mrliusg

    如果我也是看戏的,我也能说一句那确实牛逼。但我这下真有一头牛了,这口屎我吃下去怎么受得了
    MadSix
    MadSix
    OP
    Apr 17, 2024
    15
    @uiosun
    “说好听点叫防御性代码,说难听点他自己都不一定维护的起来……”
    快问我这个项目为什么重做
    wusheng0
    wusheng0
    Apr 17, 2024❤️28
    16
    防御性编程是专门的名词吧,你们这么用现在都变成反义词了,后面怎么正常交流

    > 防御性编程( Defensive programming )是防御式设计的一种具体体现,它是为了保证,对程序的不可预见的使用,不会造成程序功能上的损坏。
    > 它可以被看作是为了减少或消除墨菲定律效力的想法。 防御式编程主要用于可能被滥用,恶作剧或无意地造成灾难性影响的程序上。
    MadSix
    MadSix
    OP
    Apr 17, 2024
    17
    @wusheng0 下次加上引号
    devilte
    devilte
    Apr 17, 2024
    18
    @uiosun #12 假设真看到这样的代码 我都要纠结一下是作者真实水平烂还是作者刻意为之,毕竟刻意写成这样都是反第一反应的 会增加一定的心智负担,真的有人在写防御性代码吗😂
    qianckjuan
    qianckjuan
    Apr 17, 2024❤️1
    19
    项目要过来自己人全写,或者把项目推出去
    Patrick6
    Patrick6
    Apr 17, 2024
    20
    原来这个是日经贴啊,代码和人有一个能跑就行
    handpr
    handpr
    Apr 17, 2024
    21
    @MadSix #10 和我现在上手的项目一样.举个例子.之前的后端让前端自己写死控制哪个按钮显示不显示
    fredweili
    fredweili
    Apr 17, 2024
    22
    强化 code review ,不允许随便 merge
    yangxiaopeipei
    yangxiaopeipei
    Apr 17, 2024
    23
    code review 怎么过的
    FrankAdler
    FrankAdler
    Apr 17, 2024 via Android
    24
    原来代码写的烂还有这么一个高大上的名字
    whoosy
    whoosy
    Apr 17, 2024❤️2
    25
    我认为只是单纯的水平菜,身边技术稍微强点的基本上对代码都有洁癖
    RightHand
    RightHand
    Apr 17, 2024 via Android
    26
    拆分,推出去
    7h3d4wn
    7h3d4wn
    Apr 17, 2024
    27
    把这个人要到你组里来负责后续维护
    你的核心问题是以后维护麻烦,那就人跟着项目走
    其他没什么更好办法了
    Bubbless
    Bubbless
    Apr 17, 2024
    28
    能不能反噬一下他自己?这个项目维护归属 op 看看能不能换成他,自己种的果子自己吃吧~
    MadSix
    MadSix
    OP
    Apr 17, 2024
    29
    @yangxiaopeipei 描述里说过了
    这项目负责人是个万年老大哥,人不做代码 review 而且他位高权重的咱也管不着
    casatAway
    casatAway
    Apr 17, 2024
    30
    现在有 ai 了,感觉问题不是很大,让 ai 基于他的代码转化成可维护的,不断校验每步的输出。
    foxkiller
    foxkiller
    Apr 17, 2024
    31
    你们不 Code Review 啊?
    7h3d4wn
    7h3d4wn
    Apr 17, 2024
    32
    换句话说,是系统性问题,或者说,管理问题造成了你当下的 dilemma
    你又改变不了整个管理风格,那你基本就只能成全这哥们儿的防御性
    yanw
    yanw
    Apr 17, 2024
    33
    可能单纯就是菜
    MadSix
    MadSix
    OP
    Apr 17, 2024
    34
    @foxkiller
    描述里说过了
    我们的其他开发都是做的,但这个项目是技术老大哥“亲自”负责。人不怎么管事,代码 review 也不做。位高权重我们也管不着
    sparklee
    sparklee
    Apr 17, 2024
    35
    我所理解的 防御性编程 是提前返回, 考虑到各种异常情况提前 return, 减少 else 减少条件判断嵌套的写法
    chocolate518
    chocolate518
    Apr 17, 2024
    36
    这不叫防御性编程吧,没有代码规范就是这样了 如果不想操心就是反正也不是不能跑的心态,如果觉得别扭就推动代码规范
    wanguorui123
    wanguorui123
    Apr 17, 2024
    37
    在包一层外壳继续拉💩💩💩
    DawnMoon
    DawnMoon
    Apr 17, 2024❤️13
    38
    禁止污染“防御性编程”词条
    mansurx
    mansurx
    Apr 17, 2024
    39
    交叉管理确实没什么办法了,但可以把情况先写在周报里,避免锅从天上来。

    后面维护可以考虑引入 ai 解释/重构这段代码……专门克制这种“防御性编程”
    S9Yh4wIFsBG7jnE4
    S9Yh4wIFsBG7jnE4
    Apr 17, 2024
    40
    世界是一个草台班子 这话没错的
    me1onsoda
    me1onsoda
    Apr 17, 2024
    41
    你跟你技术老大多学学吧,他怎么就 cover 住了呢,带着这么“祸害”走了这么多年?
    CJ2r4u3EH4lrM7aR
    CJ2r4u3EH4lrM7aR
    Apr 17, 2024
    42
    直接跟上级表明,自己组做耗时耗力需要增加大量工时,安排那个人做成本更低。为了避免公司利益损失,请领导出面指明让他维护。
    zhao8681286
    zhao8681286
    Apr 17, 2024
    43
    我以为是正常逻辑写完了花了 20%的代码其他 80%的用来处理异常情况的防御性编程呢,结果不就是只有自己能看懂的屎山代码吗?
    alexsz
    alexsz
    Apr 17, 2024
    44
    @h272377502 我也觉得应该让 AI 解释代码
    MadSix
    MadSix
    OP
    Apr 17, 2024❤️1
    45
    @me1onsoda 跟他学不来,人家根基深厚位高权重。有问题向下施压或者要求公司调动资源重做项目就行了。上一个就这么黄的。人自己又不干活,不用吃屎。
    我算哪根葱跟他学,学完就废了
    icyalala
    icyalala
    Apr 17, 2024
    46
    这是防御性编程的概念: https://zh.wikipedia.org/zh-cn/防御性编程
    这是好事
    k9982874
    k9982874
    Apr 17, 2024❤️2
    47
    你们这流程有问题,接收前拉个验收会,叫上相关负责人和技术主管,一个模块一个模块的过,列出来哪些系统问题和需求问题需要改,说明质量不行拒绝接收。

    话说“防御性编程”现在已经是指在项目里拉屎,增加维护难度了么?
    bianhui
    bianhui
    Apr 17, 2024
    48
    没有改不了的代码,只有改不了的人。在软件工程还没有普及的时候,大家的开发都是一把梭哈
    nthin0
    nthin0
    Apr 17, 2024
    49
    理解岔了,我看到的第一反应也是:防御性编程难道不是好事吗😂
    sofukwird
    sofukwird
    Apr 17, 2024 via Android❤️1
    50
    对领导说这位同事的代码水平过高,自己维护不了他的代码
    uiosun
    uiosun
    Apr 17, 2024
    51
    @wusheng0 不,大佬你这是“防御性编程”,我们不考虑编程,单纯的“防御性代码”

    还是有区别的,虽然扣文字很无聊,但楼主遇到的这种人,连代码都没写好,更别提编程/软件工程了……
    junkk
    junkk
    Apr 17, 2024❤️4
    52
    防御性编程是防御式设计的一种具体体现,它是为了保证,对程序的不可预见的使用,不会造成程序功能上的损坏。

    不是防御开除式编程,拉屎就拉屎,不要重新定义老的词语,什么毛病。
    hahiru
    hahiru
    Apr 17, 2024
    53
    应该是菜。
    我指的是公司。
    如果是国企当我没说。
    F7TsdQL45E0jmoiG
    F7TsdQL45E0jmoiG
    Apr 17, 2024❤️1
    54
    这种代码往往能顺利的通过 sonar 的扫描
    MadSix
    MadSix
    OP
    Apr 17, 2024
    55
    @hahiru 一针见血,很到位,我的互联网嘴替
    ooee2016
    ooee2016
    Apr 17, 2024
    56
    @IMelon #2 遇到过所有的方法参数定义都是 void Fun(string a1, string a2, string a3, string a4, string a5);
    rehoni
    rehoni
    Apr 17, 2024❤️2
    57
    "我现在很想跟上面反馈一下这个问题,但是我这种跨管辖范围的做法总是不太好,而且也不知道提了有没有用。难道就这么把这口屎吃下来不成。"
    现状是
    1. 你是第一责任人,到时候维护他没事,你背锅
    2. 你已经在吃屎了
    我觉得 OP 也别管那么多了,他这种行为已经深刻影响了你的利益,不想沦落到代码和你只有一个能跑的话。就低情商,就把事情办得难看,让大家都挂不住面子,当个刺猬。
    yuwangG
    yuwangG
    Apr 17, 2024
    58
    卷起来
    ersic
    ersic
    Apr 17, 2024
    59
    也许他就是这么菜呢
    cathub86
    cathub86
    Apr 17, 2024
    60
    一模一样了 2 月 20 接受了 一个屎山 要把底层的 es 换成 ck 代码没注释 问他还爱答不理
    组长: 有这么难么 就换个组件 不是很简单么
    我: 我要理清楚业务流程才能改 代码没注释
    组长:那你问啊 人就在你旁边
    cathub86
    cathub86
    Apr 17, 2024
    61
    @cathub86 更骚的是 有很多功能是半成品 就提交了 我问他 他说 那你改一下行了 不是很简单么
    Jiajin
    Jiajin
    Apr 17, 2024
    62
    还得是 AI 解释代码。
    dog82
    dog82
    Apr 17, 2024❤️1
    63
    楼主曲解防御性编程的意思了
    防御性编程是指编写更稳定更健壮的代码
    而不是编写别人看不懂的代码
    MadSix
    MadSix
    OP
    Apr 17, 2024
    64
    @dog82 感谢指出 请看附言
    iphantom
    iphantom
    Apr 17, 2024
    65
    从根本解决呗,找组 2 要这个人到你的组后续他维护被,或者让你组的小弟和他互换。你们两个组可以沟通那没问题,不行就找老大协调呗,把人要回来吧~
    cominghome
    cominghome
    Apr 17, 2024
    66
    到底是防御性编程还是人菜,要先搞清楚
    MadSix
    MadSix
    OP
    Apr 17, 2024❤️2
    67
    @iphantom 其实我也知道这是最佳方案,我只是不愿意面对。
    甚至老大都找我沟通过了,我如果想换人他是能过来的。不过这么个祖宗我内心不情愿放过来。
    要知道这个项目总有没活的时期,到时候不能让他闲着吧?一旦把他放到我其他项目里去了,这玩意就跟传染一样,沾一个染一个
    tkHello
    tkHello
    Apr 17, 2024
    68
    保护自己的代码: 在将来的工作中,采取一些防御性编程的措施来保护自己的代码。例如,使用代码水印技术、定期进行代码审查、在代码中添加详细的注释和文档等。
    tkHello
    tkHello
    Apr 17, 2024
    69
    采用代码水印技术: 在代码中嵌入独特的标识符或水印,以标记代码的所有者。这样即使代码被剽窃,也可以通过检测水印来识别代码的来源。
    chiu
    chiu
    Apr 17, 2024❤️1
    70
    所以说 reviewer 是代码库的一道防线
    PN27149
    PN27149
    Apr 17, 2024
    71
    想学学怎么写防御性代码,哈哈
    codermz
    codermz
    Apr 17, 2024
    72
    @mrliusg 罗.jpg
    pqlamz
    pqlamz
    Apr 17, 2024
    73
    那他自己怎么维护的啊?看起来,像是源代码自带混淆,无需 proguard/obfuscator 。读源码就是做逆向的感觉吗?
    QingXuJiaZhi
    QingXuJiaZhi
    Apr 17, 2024
    74
    老大不急,你急啥,慢慢干呗。

    把你遇到的情况详细记录,说明影响工作进度,以能保留证据的形式向上级报告,剩下的事情你就不用管了。
    skymei
    skymei
    Apr 17, 2024
    75
    上家有个同事就是这样,改他的代码真的火大,各种脱裤子放屁,最后加上公司氛围确实不好,我早早的就撤了
    QingXuJiaZhi
    QingXuJiaZhi
    Apr 17, 2024❤️1
    76
    另外,他不受你管,你可以架空他,他提交的代码你一个字别动,只在外面加 wrapper 来调用,实在不行就自己重写,备注里说明重写的原因,备注里指名道姓批评他。
    version
    version
    Apr 17, 2024❤️1
    77
    直接搞成微服务.提供接口文档.字段注解.管他内部怎么实现..接口性能可以监测...想重构谁的业务.也是很简单的..
    QingXuJiaZhi
    QingXuJiaZhi
    Apr 17, 2024
    78
    @MadSix 能把人调过来,你是老大,还怕小弟?制定一个一视同仁的规定,他的代码不符合要求他重写,屡教不改就可以依法辞退了。
    MadSix
    MadSix
    OP
    Apr 17, 2024
    79
    @cmdOptionKana #78 都是打工的,何苦相互为难,什么老大不老大的。我没兴趣去“矫正”别人,只要不影响到我就行。
    如果不是没得选的情况,谁想主动要个祖宗过来还得跟他斗智斗勇。省点心不好么。
    ren5ren6
    ren5ren6
    Apr 17, 2024❤️1
    80
    能和他一对一的谈一次么?请吃饭或拉到没人办公室。直接说他不归你管但需要你今后擦屁股的心中隐忧,谈时不要迂回,开诚布公、直接明了,但,一定一定态度和善诚恳。看他当时怎么说、之后怎么做,你自己需要做些什么不就是一定的了吗?
    chaos93
    chaos93
    Apr 17, 2024
    81
    扔给 GPT
    zgl263885
    zgl263885
    Apr 17, 2024 via iPhone
    82
    目前我接手的项目有个方法 1500 多行代码。但资本家没有少发钱,默默吃着了。
    991547436
    991547436
    Apr 17, 2024
    83
    写得好又不会加工资,你不能维护关他什么事,除非加钱
    littlewing
    littlewing
    Apr 17, 2024
    84
    不是我理解的 防御性编程,我以为是做了太多 check 影响性能了
    MadSix
    MadSix
    OP
    Apr 17, 2024
    85
    @991547436 写的好会加的
    kneo
    kneo
    Apr 17, 2024
    86
    为什么这种人在你们公司成了主力?
    lategege
    lategege
    Apr 17, 2024
    87
    防御性编程最新释义:编写只有自己能懂的代码来预防被公司优化。
    7VO54YYGvw3LOF9U
    7VO54YYGvw3LOF9U
    Apr 17, 2024 via iPhone
    88
    @miraumr 拉个更牛逼的
    MadSix
    MadSix
    OP
    Apr 17, 2024
    89
    @kneo 要是有人能代我去问问老板这个问题就好了 我是不敢问
    wolfan
    wolfan
    Apr 17, 2024
    90
    错误作法:V 站求意见。
    正确作法:写邮件上报。
    MadSix
    MadSix
    OP
    Apr 17, 2024
    91
    @lategege 请见附言
    calano
    calano
    Apr 17, 2024
    92
    扔给 copilot 让优化结构,我用下来发现拆的方法有点过于细了
    gesse
    gesse
    Apr 17, 2024
    93
    huruwo
    huruwo
    Apr 17, 2024
    94
    既然有防御式编程,我想知道进攻式编程是什么样子。

    你用你的进攻式编程来突破他的防御式编程不就行了。
    gkiwi
    gkiwi
    Apr 17, 2024
    95
    我以为的防御式编程,是过度的判断非空,喜欢到处 trycatch...
    SSSensational
    SSSensational
    Apr 17, 2024
    96
    uniswap 的前端代码是防御性编程的典例
    iphantom
    iphantom
    Apr 17, 2024
    97
    @MadSix 你本质上是不希望他给你埋坑么 但是现在来看坑肯定有的 那你现在的期望更多是别让自己背锅么 那你现在只能先确认下这个锅让谁来背锅。 所以肯定是这哥们要来背最好。
    关于这哥们后续的安排,其实也很明显啊,就是去做对接或者支持类的工作,比如你们组总有一些要支持其他团队的时候,就让他去吧,这样其他组看到这个熊样,为了防止自己背锅,大概率也会重复你的操作,把他要回去,大概就是这哥们就成流水的兵了吧····
    FantaMole
    FantaMole
    Apr 17, 2024
    98
    大伙儿都不知道你这个项目是怎么样的,技术栈是什么,项目结构是什么样的。大家就算有解决方案,也跟你看屎山代码一样不知道怎么入手,思路只能是在人事安排或者工作职责上想想办法

    我提个思路吧,如果不想碰狗屎的话,我假设这个项目是个微服务项目,且开发完成之后改动不会很频繁,然后你说你们项目组之间开发的功能耦合不强,那你现在就要做两个事情:

    1. 多 push 测试,趁这个同事还在开发这个项目,尽量多测试,让问题多多暴露出来,让他改好

    2. 做项目拆分,把那个同事所有开发的屎山代码都拆分出来,单独成为一个服务,下沉这个服务作为基础服务,没有特殊情况不做修改。以后有功能上的修改或者业务上的变更,调用这个基础服务,在服务接口返回结果的基础上做功能拓展或者业务变更

    你说性能问题,牙医 shake it ,代码都成了这个样子

    如果实在不行的话,前几年有个很火的折磨游戏,叫做 “和 Bennett Foddy 一起攻克难关”,那你也可以 “和 OpenAPI 一起翻越屎山”
    Hyakutake
    Hyakutake
    Apr 17, 2024
    99
    问题很明确,拦不住创建屎山的人,并即将接手屎山。
    1. 先试试拦着拉屎的人。向技术老大汇报,让对应组的人改掉,验收后在接。
    2. 拦不住就考虑不接。如果没得选择,那看看能不能提前接,在还是一个屎堆的时候就重构了。
    3. 接下来,如果想维护好,分两种,屎上雕花或者直接推倒重来。
    4. 屎上雕花,就是后续的功能,按规范开发,尽量不动之前的东西。看过了就补一点注释。
    5. 直接推倒重来,有资源就把接口在写一遍,没资源扔给 gpt 读代码,然后再重构吧。
    dumbass
    dumbass
    Apr 17, 2024❤️1
    100
    "防御性编程"指防止他人参与的编程
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5332 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 199ms · UTC 01:24 · PVG 09:24 · LAX 17:24 · JFK 20:24
    ♥ Do have faith in what you're doing.