lpf0309

写代码一定要防御性编程

  •  
  •   lpf0309 · 1 day ago · 8854 views

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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