lpf0309

写代码一定要防御性编程

  •  
  •   lpf0309 · 2 days ago · 9469 views

    最近因为五一拒绝加班得事情,和组长闹得不太愉快,组长让我教另一个合作的同事我写得代码。这个同事经常白天摸鱼,晚上加班,自己做项目做不出来,派我过来帮忙才把这个项目得主要难题给解决了。本来我都把大部分功能都写好了,然后我又重新改了下,故意用错误得方案,把性能改差,主要功能具备,表面上看不出问题。这个同事稍微一改代码,运行出来就有问题,排查问题一时半会儿也找不到,我也说不知道。什么时候这项目我单独负责了,我再把代码改回来,不然有他们费劲的。以后写代码,自己写好以后,把注释给改一下,然后把逻辑给弄混乱点,代码写的太好,AI 也能理解,其他同事也能接手,对我们而言,没一点好处。

    98 replies    2026-05-16 09:02:44 +08:00
    HENQIGUAI
        1
    HENQIGUAI  
       2 days ago   ❤️ 10
    没啥意义,AI 分分钟把问题清理完
    GeruzoniAnsasu
        2
    GeruzoniAnsasu  
       2 days ago
    没啥意义,AI 连 copy fail 都能挖出来,你埋的 business fail 怕不是分分钟
    Aaron01
        3
    Aaron01  
       2 days ago via iPhone
    成长了
    giter
        4
    giter  
       2 days ago   ❤️ 2
    没意义了,你的小思路在 Vibe Coding 面前不值一提,AI 能瞬间理清项目逻辑
    wfg
        5
    wfg  
       2 days ago via iPhone   ❤️ 18
    请不要误用防御性编程这个短语,最起码加个引号
    fkdtz
        6
    fkdtz  
       2 days ago   ❤️ 1
    回头 AI 分分钟解完,还会锐评一下你的代码,那画面简直了
    evill
        7
    evill  
       2 days ago   ❤️ 1
    不仅在 AI 时代没用
    而且在有一定规模的公司,code review 也过不去
    boogo
        8
    boogo  
       2 days ago
    没意义,即便是写成屎山在 AI 面前也能捋的明明白白的
    jsrunner
        9
    jsrunner  
       2 days ago
    中小公司还有用的
    94
        10
    94  
       2 days ago
    希望你当接盘侠接盘项目的时候,接盘到这样的“防御性编程”心态也可以像现在这样。
    上不上裁员名单并不是看你的项目代码是不是容易被其他人接手,而是看项目的重要性。
    Moonkin
        11
    Moonkin  
       2 days ago via Android
    五一不是轮流值班么?真加班应该可以要求三倍加班费?
    zhang666
        12
    zhang666  
       2 days ago via iPhone
    恐怕封二进制库都没办法了,ai 出来,整个 codeing 行业算是完了
    miku999
        13
    miku999  
       2 days ago
    可以尝试将一些必要的信息扔到远程的配置文件上、结合你公司的一些登录系统, 给 AI 制造一些卡点, 让 AI 读不到全部的上下文, 就不好解决问题
    0x663
        14
    0x663  
       2 days ago   ❤️ 3
    古法编程吗?有点意思
    xFrye
        15
    xFrye  
       2 days ago
    错用「防御性编程」这个词,而且大人时代变了,你耍那么点古法编程小聪明 ai 面前简直小菜一碟
    tanrenye
        16
    tanrenye  
       2 days ago
    现在防御编程已经没有多大意义了,AI 都能理解
    yxc246800
        17
    yxc246800  
       2 days ago
    这是啥防御性防御,防御同事那种防御吗

    我还以为是 c/c++那种遇到指针使用必检查,遇到关键变量必检查的写法。
    potatowish
        18
    potatowish  
       2 days ago
    格局小了,还是古法编程年代的思维
    6581
        19
    6581  
       2 days ago
    没意义,拥抱 AI 吧
    kinkin666
        20
    kinkin666  
       2 days ago   ❤️ 1
    这个也叫防御性编程么,

    我以为的防御性编程是那种带兜底的,不能把服务给炸了的那种
    A555
        21
    A555  
       2 days ago   ❤️ 1
    也不要太迷信 ai
    屎山代码,事务里加了一个异步线程去数据库读取主线程的新增数据,gpt5.5 找不出来,还是古法编程加日志找出来的
    orion1
        22
    orion1  
    PRO
       2 days ago
    没用的,AI 把大家的经验水平都拉倒了一个极高且统一的水平
    changnet
        23
    changnet  
       2 days ago   ❤️ 5
    这个问题说了一百遍了,一点意思都没有,误人误已。

    你代码里有问题,别的同事知道了,就是你的问题,就是你水平不行。这个同事不是你的组长,不是你那个垃圾同事,而是另外一些优秀的。你在圈子里的水平和人品就固定了,后续有机会别人想带你都带不起。

    水平垃圾的同事,正常教他,他都学不会搞不定,没必要使绊子。就正常跟他说这样搞那样搞。至于他搞不定那就不关我事了,我可不帮他。

    如果自己有更好的地方去,尽早走人离开这种环境。如果没有,那就完成任务了事,其他不搞。

    有没有可能,正常的管理者会把你俩一起换掉,而不是说非得让另一个同事负责,他负责不了就留着你。更不要说现在有 AI 可以做很多事,随便招个正常水平的人就把问题解决了。
    jackOff
        24
    jackOff  
       2 days ago
    只要让我知道有这号人,想办法清除你
    tiaod
        25
    tiaod  
       2 days ago
    没意义。你倒不如折腾 AI 工具,把工作效率拉满,把同事卷死
    Navee
        26
    Navee  
       2 days ago
    重要的不是防御,是甩锅能力
    只要你甩锅能力强,调用对方报错是对方的锅,跟你没关系,对方调用你报错是对方没处理报错,跟你没关系
    loading
        27
    loading  
       2 days ago
    没用。

    我昨天用 Ai 写一个简单的单片机,就一个让 LED 闪烁的几行代码,编译完烧进去就是没运行起来。我一直让 Ai 改,它直接分析到编译后的 elf 文件,一个个字节按汇编给我反推对比,我一看过程都傻了,虽然它路子错了,最后我感觉 token 烧得多了,就自己重新装了下环境。

    都到这种程度了,你怎么防御。
    akakidz
        28
    akakidz  
       2 days ago   ❤️ 7
    有用,但不要停留在“代码写乱一点”这种级别,我已经被同事上过一课了,真正有效的是“运行时系统”+“系统复杂度”。

    1 、把业务慢慢做成配置化、插件化、工作流化
    代码里别直接写死逻辑,而是通过配置、插件、runtime 去驱动。

    时间长了以后:
    一个配置影响多个系统
    同一个字段在不同地方含义不一样
    配置互相依赖
    功能动态注册

    后面接手的人能看懂代码,但根本理不清系统到底怎么跑的。

    2 、核心能力做成自己的私有包
    业务仓库只是壳,真正核心逻辑在内部 SDK 、私有包、runtime 里。
    线上跑的是编译后的版本,源码和完整构建链路自己维护,保持自己手里的版本永远比线上版本高。

    同事接手后经常会出现:
    本地能跑线上不一样
    改一个地方别的项目炸了
    某些功能不知道从哪来的
    升级版本后各种兼容问题

    文案我优化了一下,场景为真实发生在公司的事件,领导还不好说啥,美名曰快速响应需求变动。
    imagecap
        29
    imagecap  
       2 days ago   ❤️ 3
    AI 都正确搞定的话,你就没有存在的必要了,搞不定出问题锅还得你背。不知道这些 AI 吹咋想。
    xiangran0028
        30
    xiangran0028  
       2 days ago
    你写的混不混乱对 AI 来说没有区别。
    yetAnotherJoe
        31
    yetAnotherJoe  
       2 days ago via iPhone
    把“故意写错写乱”叫防御性编程。没法评。
    0x0x
        32
    0x0x  
       2 days ago via Android
    真有意思,不累么每天都要计较这些
    guanhui07
        33
    guanhui07  
       2 days ago
    没意义了,AI 时代
    jimrok
        34
    jimrok  
       2 days ago
    AI 不会改你的代码的,要是我直接弄清需求,然后让 AI 做个分析报告,指出现在代码的问题,跟领导汇报一下,然后直接重新做一版平替掉。
    someonelikeyouah
        35
    someonelikeyouah  
       2 days ago
    感觉 AI 也需要马圣人的第一性原理,如果你同事能清晰的描述问题,只是不会写代码的话,现在 AI AGENT 已经能很大程度做到替代了,要是我遇到了这种情况多少都让 ai 翻一下你的 git 记录,然后分分钟给你回滚,前提是我知道你在使坏的话,归因的能力在现在感觉非常重要,输出代码反而不重要了
    Mcler
        36
    Mcler  
       2 days ago
    除非你的代码时混淆过后的,否则没有任何意义。
    66beta
        37
    66beta  
       2 days ago
    是你同事太傻不会用 AI ,不然 5 分钟就给优化好了
    Rehtt
        38
    Rehtt  
       2 days ago via Android
    @loading 但是反过来想,以前是增加人的心智负担,就算逻辑再怎么绕还是能分析出来,只是人要燃尽了。而现在 ai 时代就是增加 token 的消耗量,结果还是一样可以捋出来,但是 token 消耗得大,让钱包燃尽🤣
    Rehtt
        39
    Rehtt  
       2 days ago via Android   ❤️ 1
    前 ai 时代防御性编程重点是增加人的心智负担,而 ai 时代的重点是拉长上下文增加 token 的消耗
    shyrock2026
        40
    shyrock2026  
       2 days ago
    @A555 #21 连加日志排错都不会,你这个 gpt5.5 怕不是中转站注水的。。。
    qa2080639
        41
    qa2080639  
       2 days ago
    明确业务逻辑就行了 让 AI 重构
    charlie21
        42
    charlie21  
       2 days ago
    以前,会批判这种行为,因为损人不利己

    现在嘛,无法代理给 ai 做的工作量是越多越好,这样能提现出人类的意义

    以前和现在有什么不同?以前你会嫌工作量太多了 任何增加额外工作量的事情都是可鄙的。现在你会嫌 ai 抢活儿抢得太厉害了 任何增加 ai 无法抢走的工作的工作量的事情都是可感谢的

    代码侠,谢谢你,人类大上分了
    -
    winnerczwx
        43
    winnerczwx  
       2 days ago
    你把这种话烂在肚子里还有用, 你把这种话说出来, 慢慢的就是在潜移默化淘汰打工人.

    你干的没 AI 快 没 AI 好, 还全是自己的小巧思, 你这种人不就是妥妥需要被资深工程师+AI Agent 替代的对象吗
    moooooooo
        44
    moooooooo  
       2 days ago
    奇葩....
    uGRiPVk3vSJ
        45
    uGRiPVk3vSJ  
       2 days ago
    @94 #10 你的说法适用于批量裁员,OP 的情况是他已经和领导产生矛盾了,还是加班这种哈气龇牙不服拴的立场问题
    stabc
        46
    stabc  
       2 days ago   ❤️ 1
    我觉得你是纯坏
    clemente
        47
    clemente  
       2 days ago
    没有意义 对你个人也没有好处 人活这一辈子没必要
    icyalala
        48
    icyalala  
       2 days ago
    防御性编程是防范外部错误输入,防御内部异常,是保证健壮性的良好习惯
    不是 TMD 防同事!!
    xubeiyou
        49
    xubeiyou  
       2 days ago
    现在防御性编程 真意义不大
    94
        50
    94  
       2 days ago
    @uGRiPVk3vSJ #45 ,如果有矛盾,那就更要被裁了。“防御性编程” 只是恶心后继的接盘侠而已(包括半年一年以后重构时的自己)。
    作为管理,除非没有人用了,不然是不会考虑 A 走了之后 B 是不是能接盘,B 接不了还有 C 还有 D (但这都是 A 走了之后的事情)。以前就是这样了,现在有 AI 之后就更加了。
    kulove
        51
    kulove  
       2 days ago via Android
    没职业道德
    zsc8917zsc
        52
    zsc8917zsc  
       2 days ago
    感觉就好比盖房子,然后偷工减料
    naythefirst01
        53
    naythefirst01  
       2 days ago
    防个锤子,现在 Ai 连专业的混淆代码都能处理一些,你能防到什么程度?
    root71370
        54
    root71370  
       2 days ago via Android
    还在古法编程呢
    PrtScScrLk
        55
    PrtScScrLk  
       2 days ago
    没意义都是牛马,防不防御都改变不了牛马属性。
    cwliang
        56
    cwliang  
       2 days ago
    最近两年很少听到“防御性编程”了,就像 stackoverflow 死了一样,在 AI 面前都是小儿科
    imokkkk
        57
    imokkkk  
       2 days ago
    安排上 claude-opus-4.7 都老实了
    zhengwenk
        58
    zhengwenk  
       2 days ago
    你这是埋坑式编程 谈不上防御
    A555
        59
    A555  
       2 days ago
    @shyrock2026 从来不用任何中转站
    Felldeadbird
        60
    Felldeadbird  
       2 days ago
    防错了,防的是在公司不可代替性。换掉你的成本大于 AI 、请人。
    nc
        61
    nc  
       2 days ago
    码农互害,有什么意义吗
    nmap
        62
    nmap  
       2 days ago
    古法编程时代这个有用,现在 AI 分分钟重构一个更好的版本
    kristofer
        63
    kristofer  
       2 days ago
    底层天真码农是这样的。
    ovovovovo
        64
    ovovovovo  
       1 day ago
    我现在用最真诚,最直接,最不绕弯子的方式告诉你,没啥用
    qping
        65
    qping  
       1 day ago via iPhone
    @akakidz 看起来你们公司没有上 cocd
    qping
        66
    qping  
       1 day ago via iPhone
    cicd ,sorry
    huangmingyou
        67
    huangmingyou  
       1 day ago
    比如这样吗; #define _ -F<00||--F-OO--;
    int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
    {
    _-_-_-_
    _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_
    _-_-_-_
    }
    meteora0tkvo
        68
    meteora0tkvo  
       1 day ago
    一般公司都是有代码规范的,不允许你这么胡来。
    Mandelo
        69
    Mandelo  
       1 day ago
    “防御性编程”仅在段子中见过
    soouu
        70
    soouu  
       1 day ago
    没意义 在狗屎的代码在 ai 面前都不是问题
    loading
        71
    loading  
       1 day ago
    @huangmingyou #67
    >>
    这段代码是 C 语言中一个非常经典的“π 计算混淆代码”(属于国际 C 语言混乱代码大赛 IOCCC 的常见风格)。它通过极其晦涩的宏定义和变量名,巧妙地利用几何面积公式计算出了圆周率 π 的近似值。
    为了让你看清它的真面目,我们来一步步拆解这段代码的“伪装”:

    点完发送就返回了。。。
    wysnxzm
        72
    wysnxzm  
       1 day ago
    没水平的正常写他也看不懂,厉害的看一眼就知道你什么水平
    Arrowing
        73
    Arrowing  
       1 day ago
    重新定义防御性编程
    poet00
        74
    poet00  
       1 day ago
    IOCCC: 都是我玩剩下的
    voidmnwzp
        75
    voidmnwzp  
       1 day ago via iPhone
    你这什么烂公司 内网外包还是什么 用豆包 coding 吗但凡用点靠谱的 ai 分分钟给你理清楚,
    SWALLOWW
        76
    SWALLOWW  
       1 day ago
    万一你同事因为这个会用 ai 了,那不更完了
    cmlx1014
        77
    cmlx1014  
       1 day ago
    看不到 git 记录?
    xiangbohua
        78
    xiangbohua  
       1 day ago
    小聪明玩的溜,你同事看不出来,最后领导看出来了,人家怎么评价你:技术菜还是人心坏?
    hullhutt
        79
    hullhutt  
       1 day ago
    公司裁员时,不会管后来人好不好接的
    teaguexiao
        80
    teaguexiao  
       1 day ago
    Vibe Coding 时代这个思路真的过时了,投入尌贵时间尼不如把同样时间用来弹复业务理解能力。真正复杂的项目里 AI 读不懂的䭔能就是业务上下文缺失,不是主动缾下去的混乱逻辑。
    prosgtsr
        81
    prosgtsr  
       1 day ago
    @akakidz 我确实见过这种代码,整个运行逻辑都在配置文件里,是一个几百行的 json ,每次看都看的头皮发麻。
    shitcode
        82
    shitcode  
       1 day ago
    今夕是何年
    vopin
        83
    vopin  
       1 day ago
    #28
    28 楼说得太对咯! SDK 和把业务写 config 里才是更高级的混淆,给 claude 读不一定都理得清,起码花大几百刀 token
    kkbblzq
        84
    kkbblzq  
       1 day ago
    不存在你说的因为”写的太好“ai 才能理解,你太低估现在的 ai 了
    molvqingtai
        85
    molvqingtai  
       1 day ago
    vibe 的时候最怕 ai 总是写防御代码,各种 fallback
    bowencool
        86
    bowencool  
       1 day ago via iPhone
    你用过好的 ai 模型吗?我都怀疑。
    Tarek911
        87
    Tarek911  
       1 day ago
    Tag 了:自曝代码架构埋雷的坏逼
    James369
        88
    James369  
       1 day ago
    你不要把别人看得太轻,也不要把自己看得太重。AI 分分钟教你做人。
    1OF7G
        89
    1OF7G  
       1 day ago
    拿人钱财,替人消灾。没必要这样,多余的活可以不干,没必要故意埋坑,该干干嘛干嘛。
    TsubasaHanekaw
        90
    TsubasaHanekaw  
       1 day ago
    没意义,我光靠着 10 组 输入输出,让 codex 逆向了 c++的字节码,复刻了功能
    tonytonychopper
        91
    tonytonychopper  
       1 day ago via iPhone
    不要再污名化防御性编程了……
    v1
        92
    v1  
       1 day ago
    @akakidz 再补充一点,超级恶心人的办法,固定标准库特定版本,把标准库拉下来配合项目需求改一改,重新编译然后替换
    EricSTG
        93
    EricSTG  
       1 day ago
    大公司要 review 的,你到时候过不了的话 打回去优化
    supuwoerc
        94
    supuwoerc  
       1 day ago
    AI 连 linux 十多年的 bug 都能找出来...
    Eba
        95
    Eba  
       1 day ago
    @fkdtz wc ,有画面了 哈哈
    weiqipeng
        96
    weiqipeng  
       20h 50m ago
    @akakidz 你也太恶心了把,把核心功能做成私有包
    akakidz
        97
    akakidz  
       20h 29m ago
    @weiqipeng 是的,气得我直接找上级领导了,恶心死我了
    diudiuu
        98
    diudiuu  
       6h 28m ago
    不妨同事,还不如让问题暴漏出来
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2990 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 245ms · UTC 07:30 · PVG 15:30 · LAX 00:30 · JFK 03:30
    ♥ Do have faith in what you're doing.