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

忍者代码指南:防御性编程技巧保卫你的职业生涯

  •  
  •   ashin ·
    axiaoxin · 2024-03-25 09:26:11 +08:00 · 6515 次点击
    这是一个创建于 376 天前的主题,其中的信息可能已经有所发展或是发生改变。

    忍者代码

    在编程界,有一种神秘的艺术,那就是“Ninja Code”。这不是一种编程语言,而是一种编程风格,它的核心原则是让代码尽可能难以理解,从而确保你的岗位安全。毕竟,如果没有人能够读懂你的代码,那么也就没有人能够替代你。

    防御性编程技巧

    以下是一些精选的忍者代码技巧,它们将帮助你在编程的道路上隐身遁形:

    全文阅读: https://blog.axiaoxin.com/post/ninja-coder-skills/

    第 1 条附言  ·  2024-03-25 10:21:26 +08:00
    这是一篇讽刺性的文章,旨在通过展示如何编写糟糕的代码来教导我们如何编写好的代码。请务必以正确的方式理解和应用这些原则。
    第 2 条附言  ·  2024-03-25 15:46:22 +08:00
    [ [真] 防御性编程和进攻性编程]( https://blog.axiaoxin.com/post/defensive-coding/)
    54 条回复    2024-03-27 00:01:24 +08:00
    luzemin
        1
    luzemin  
       2024-03-25 09:29:21 +08:00   ❤️ 26
    不要再污染“防御性编程”词条了
    InDom
        2
    InDom  
       2024-03-25 09:30:11 +08:00
    这破工作一天都不想干了,要不是找不到新坑...
    terranboy
        3
    terranboy  
       2024-03-25 09:30:22 +08:00
    这跟防御性编程有啥关系
    chenliangngng
        4
    chenliangngng  
       2024-03-25 09:33:48 +08:00   ❤️ 5
    只要你的屎够臭,别人就不会进你茅坑对吧。可是你自己不觉得臭吗,现在在茅坑的是你自己
    matthewzhong
        5
    matthewzhong  
       2024-03-25 09:35:05 +08:00
    [ [真] 防御式编程指南]( https://mp.weixin.qq.com/s/n9Aw3VZ0uZlp1nGpxhe-Ww)
    xiangbohua
        6
    xiangbohua  
       2024-03-25 09:35:38 +08:00
    但凡有个 lead 看看代码都要把你开除
    Helsing
        7
    Helsing  
       2024-03-25 09:36:49 +08:00 via iPhone
    直接用 AI 优化一下就完事了,有卵用
    66beta
        8
    66beta  
       2024-03-25 09:38:59 +08:00   ❤️ 1
    招个人来重构一下就行了,为什么要留你的屎山
    tikazyq
        9
    tikazyq  
       2024-03-25 09:39:32 +08:00
    不怕暗器伤了自己么
    changnet
        10
    changnet  
       2024-03-25 09:45:17 +08:00
    自己不想干提离职就是了,别把别人带歪了。我做了这么多年,从来没见过有人因为代码写得难看被留下的
    ben666
        11
    ben666  
       2024-03-25 10:00:49 +08:00
    根据我多年的观察,能写出好代码的真人不多,follow 好的编码风格的人也不多,。


    多看看一些大牛是怎么写程序的,把心思放在怎么写出好代码上更值得。参考:
    1. linux kernel 规范: https://www.kernel.org/doc/html/v4.10/process/coding-style.html
    2. nginx 规范: https://nginx.org/en/docs/dev/development_guide.html#code_style
    3. deperf 风格 https://github.com/baidu/dperf/
    didyoudo
        12
    didyoudo  
       2024-03-25 10:02:41 +08:00
    这样编程代码 review 怎么过?谁能给你过?怕不是今天 review ,明天就拎包走人
    nenseso
        13
    nenseso  
       2024-03-25 10:05:16 +08:00
    大公司都有相应的编程规范,凡是不符合规范的都不能过 code review 的,小公司小业务线,都是整条整条的线嘎掉,跟编程防御没啥关系。
    xxlsize
        14
    xxlsize  
       2024-03-25 10:07:33 +08:00   ❤️ 11
    要裁你的人,都不看代码。
    Promtheus
        15
    Promtheus  
       2024-03-25 10:08:29 +08:00
    防御我觉得可以用复杂度上 ,比如超然的设计。很高级别人看不懂。这才叫防御,就像大神的代码很精巧很难一下子看懂,甚至不敢随便修改,但是却很稳很好用。而不是这种摆烂式的防御,这样的代码直接就是让领导赶紧优化掉你啊。连同事都会吐槽赶紧把这个人开了。防御个蛋。
    Sivan
        16
    Sivan  
       2024-03-25 10:09:47 +08:00   ❤️ 1
    我一般看到这种代码时就已经在想优化他的理由了。

    劝退差员工花的不是 Leader 的钱,但留下差员工一定会耽误 Leader 挣钱。
    jones2000
        17
    jones2000  
       2024-03-25 10:12:22 +08:00
    提升自己的能力才是最好的防御。
    test4zhou
        18
    test4zhou  
       2024-03-25 10:18:46 +08:00   ❤️ 2
    写垃圾就写垃圾,别污名防御性编程
    proxytoworld
        19
    proxytoworld  
       2024-03-25 10:19:18 +08:00
    什么杀软,你没有使用过 chatgpt 去混淆吗?

    javascript

    // 原始代码
    i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;

    // 修改后的代码
    let index;

    if (i === undefined) {
    index = 0;
    } else if (i < 0) {
    // 如果 i 是一个负数,那么它被认为是从数组末尾开始的索引
    index = Math.max(0, len + i);
    } else {
    index = i;
    }

    解释:

    我使用了一个更具描述性的变量名 index 来替代 i 。
    将原始代码分解成多个 if 语句,使逻辑更易读。
    添加了注释,解释了当 i 为负数时的处理逻辑。
    使用 === 和 undefined 来检查 i 是否存在,这比原始代码中的隐式类型转换更加清晰。

    修改后的代码保持了与原始代码相同的行为,但使用了更具描述性的变量名和注释,使逻辑更易理解。
    wusheng0
        20
    wusheng0  
       2024-03-25 10:19:27 +08:00 via Android
    没和同事协作过吗?
    wu67
        21
    wu67  
       2024-03-25 10:22:06 +08:00
    大可不必, 我只需要在写代码时不再关注代码质量、最佳实践等原则, 或者一句话能写完的东西, 我拆成几行甚至十多行, 写出来的玩意, 过了一周后连我自己都不一定看得懂了.
    fredweili
        22
    fredweili  
       2024-03-25 10:22:54 +08:00
    copilot ,不能 review 的东西给 merge ?
    lmshl
        23
    lmshl  
       2024-03-25 10:23:54 +08:00
    我们写函数式的,完全不需要“防御性编程”。
    我们就正常发挥,除了同门之外别人都看不懂我们 Pure FP 代码🐶。
    关键是,自己维护起来还超 tm 轻松。
    afantwtz
        24
    afantwtz  
       2024-03-25 10:30:47 +08:00
    @proxytoworld #19 大项目,你总不能所有文件一次扔给 GPT 吧?局部去混淆是可以的
    ashin
        25
    ashin  
    OP
       2024-03-25 10:31:13 +08:00
    > 我一般看到这种代码时就已经在想优化他的理由了。

    @Sivan 如果你是一个合格的领导,首先这样的人就不会被你筛选进来。因为你是领导你就可以想优化谁就优化谁,没毛病,但是都是打工人,劝你善待同事,线上你是上司,线下说不定你还得求他办事。多想想他为什么要写这样的代码,是不是你没给够下属安全感,不比只想着自己挣钱,争取多赢。
    wlfeng
        26
    wlfeng  
       2024-03-25 10:34:05 +08:00
    有毛用,直接重构了,我都遇到过不止一次遇到过了
    oneKnow
        27
    oneKnow  
       2024-03-25 10:35:42 +08:00   ❤️ 1
    就是说,有没有一种可能,其实大多数人正常发挥就已经是你说的这个防御性编程了
    ashin
        28
    ashin  
    OP
       2024-03-25 10:45:48 +08:00
    @oneKnow 其实都无所谓,只要业务好能挣钱,代码能跑就行,哪个老板关心你代码写得怎么样啊
    xFrye
        29
    xFrye  
       2024-03-25 10:47:12 +08:00
    别恶心人了
    icyalala
        30
    icyalala  
       2024-03-25 10:58:44 +08:00   ❤️ 1
    Sivan
        31
    Sivan  
       2024-03-25 11:01:32 +08:00   ❤️ 1
    @ashin 正是一个合格的领导,才更要把这种差员工尽快筛选出去。这是对公司里所有其它同事负责,也是工作的基本素养。
    如果是自己面试进来的,就及时止损减小错误。如果不是,那更责无旁贷。

    到你这,差员工一定是差领导自己面进来的,差员工之所以差一定是领导给的安全感少?好家伙,差就是差,这年头还有让别人当反思怪的。你咋不让 CEO 反思一下公司为啥不能永远养着差员工搞慈善?

    另外,裁掉差员工就叫「不善待同事」?因为线下我可能要求他办事?你的逻辑真的神奇,公私不分而且价值观雷人。
    wtf12138
        32
    wtf12138  
       2024-03-25 11:06:03 +08:00
    不评价,但是我无法说服自己写这种代码
    ashin
        33
    ashin  
    OP
       2024-03-25 11:07:50 +08:00
    @Sivan 大可不必如此激动。
    ashin
        34
    ashin  
    OP
       2024-03-25 11:08:57 +08:00
    文章结尾已经说了是讽刺性文章,原文结尾说了:

    > 上面的所有“建议”都是从真实的代码中提炼而来的……有时候,这些代码是由有经验的开发者写的。也许比你更有经验 ;)
    924412409
        35
    924412409  
       2024-03-25 11:17:22 +08:00
    应该叫攻击性编程吧
    vanityfairn
        36
    vanityfairn  
       2024-03-25 11:21:11 +08:00
    什么叫防御性编程技巧,知道么?
    DOLLOR
        37
    DOLLOR  
       2024-03-25 11:36:04 +08:00 via Android
    最后你会发现,什么“防御性编程”,只防自己不防 AI 。
    zoffy
        38
    zoffy  
       2024-03-25 11:47:31 +08:00
    很多人只要正常写代码,就已经够烂了。而且裁员很可能是商业模式的问题,跟代码关系不大
    zjp
        39
    zjp  
       2024-03-25 11:58:59 +08:00
    这才是高级的讽刺 https://github.com/trekhleb/state-of-the-art-shitcode/blob/master/README.zh-CN.md
    硬要扯上“防御性编程”“不可替代”只能让外行看个乐呵
    zjp
        40
    zjp  
       2024-03-25 12:01:34 +08:00
    @luzemin 从谷歌搜索来看已经污染了,特别是在非程序员社区
    pujx233
        41
    pujx233  
       2024-03-25 12:11:58 +08:00 via iPhone
    别恶心人,写这种代码给你同事喂屎?
    doommm
        42
    doommm  
       2024-03-25 12:20:18 +08:00
    几年前看到过一篇《如何编写无法维护的代码》

    原版: https://www.mindprod.com/jgloss/unmain.html
    翻译: https://coderlmn.github.io/frontEndCourse/unmaintainable.html
    proxytoworld
        43
    proxytoworld  
       2024-03-25 12:35:18 +08:00
    @afantwtz 啊?你自己写个混淆代码,你自己能跨很多库记住是什么意思吗?一个个函数去混淆就行了,你一个函数几万行是吗
    ashin
        44
    ashin  
    OP
       2024-03-25 13:27:12 +08:00
    @doommm @zjp 233 ,有点意思,要看过多少屎山才能写出这么多原则呀!心累史。链接已更新到文章里。
    clue
        45
    clue  
       2024-03-25 13:55:47 +08:00
    不要教坏小朋友, 世界是变化的, 不拥抱变化的人都会慢慢被淘汰
    somebody1
        46
    somebody1  
       2024-03-25 14:13:25 +08:00
    你所谓的防御性编程并不会保住你的饭碗,只是让公司替换你更加费劲而已,而大多数公司,往往决定了辞退一个人之后,所谓的代价大和代价小,只不过是日后评价你的手段。你的代码写的差劲,你的同事,你的领导是不可能给你重新推荐工作的,没有谁回去坑自己的朋友的。

    这是小的,如果这种行为变多了之后,就是现在女性就业市场的情况。女性就业经常会问婚育情况,因为很多人经历过或者看过女性入职就怀孕,休完假就辞职的事情,这种事情只会让女性就业更差劲。利益是短期的,但损害了整个行业就业现状!
    同样,程序员就业,可能会增加业务代码编写的步骤,或者对背调力度更大,总而言之,大公司有的是方法避免招聘到这种人,最后的结果只能是就业市场变的更加严格。
    keith233
        47
    keith233  
       2024-03-25 14:14:03 +08:00
    公司都要倒闭了,还能防谁啊
    FreshOldMan
        48
    FreshOldMan  
       2024-03-25 15:06:30 +08:00
    写垃圾代码只会浪费后面人的时间,不会有任何防御性
    lstz
        49
    lstz  
       2024-03-25 17:52:54 +08:00 via Android
    对绝大多数人来说,无需看指南,正常发挥就行了 doge
    wangtian2020
        50
    wangtian2020  
       2024-03-25 17:58:57 +08:00
    Mrun
        51
    Mrun  
       2024-03-25 18:00:07 +08:00
    这种除了坑接手的同事,不会有任何杀伤力。
    难道真的以为 leader 裁员的时候,会考虑代码的维护性?
    下一位牛马会自然解决屎山问题
    wangyuescr
        52
    wangyuescr  
       2024-03-25 22:24:41 +08:00
    @chenliangngng 可能是除了茅坑没有遮风挡雨的地方了吧,阳光开朗孔乙己。
    wm5d8b
        53
    wm5d8b  
       2024-03-26 07:58:46 +08:00 via Android
    我们现在安装的都是移动厕所,没有哪个坑位是焊在地上的,坑太臭了就连人带坑直接拉走,换个新坑位上去,再找个新人塞进去
    tengyuanOasis
        54
    tengyuanOasis  
       2024-03-27 00:01:24 +08:00
    是防御了,本来想以此拿捏老板给我加钱 , 结果老板等不到我拿捏提前通知我说公司不干了,项目直接送给兄弟公司也不用维护了,大家当场毕业🫡🫡🫡🫡🫡
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2326 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:19 · PVG 10:19 · LAX 19:19 · JFK 22:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.