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

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

  •  
  •   ashin ·
    axiaoxin · 277 天前 · 6291 次点击
    这是一个创建于 277 天前的主题,其中的信息可能已经有所发展或是发生改变。

    忍者代码

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

    防御性编程技巧

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

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

    第 1 条附言  ·  277 天前
    这是一篇讽刺性的文章,旨在通过展示如何编写糟糕的代码来教导我们如何编写好的代码。请务必以正确的方式理解和应用这些原则。
    第 2 条附言  ·  277 天前
    [ [真] 防御性编程和进攻性编程]( https://blog.axiaoxin.com/post/defensive-coding/)
    54 条回复    2024-03-27 00:01:24 +08:00
    luzemin
        1
    luzemin  
       277 天前   ❤️ 26
    不要再污染“防御性编程”词条了
    InDom
        2
    InDom  
       277 天前
    这破工作一天都不想干了,要不是找不到新坑...
    terranboy
        3
    terranboy  
       277 天前
    这跟防御性编程有啥关系
    chenliangngng
        4
    chenliangngng  
       277 天前   ❤️ 5
    只要你的屎够臭,别人就不会进你茅坑对吧。可是你自己不觉得臭吗,现在在茅坑的是你自己
    matthewzhong
        5
    matthewzhong  
       277 天前
    [ [真] 防御式编程指南]( https://mp.weixin.qq.com/s/n9Aw3VZ0uZlp1nGpxhe-Ww)
    xiangbohua
        6
    xiangbohua  
       277 天前
    但凡有个 lead 看看代码都要把你开除
    Helsing
        7
    Helsing  
       277 天前 via iPhone
    直接用 AI 优化一下就完事了,有卵用
    66beta
        8
    66beta  
       277 天前   ❤️ 1
    招个人来重构一下就行了,为什么要留你的屎山
    tikazyq
        9
    tikazyq  
       277 天前
    不怕暗器伤了自己么
    changnet
        10
    changnet  
       277 天前
    自己不想干提离职就是了,别把别人带歪了。我做了这么多年,从来没见过有人因为代码写得难看被留下的
    ben666
        11
    ben666  
       277 天前
    根据我多年的观察,能写出好代码的真人不多,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  
       277 天前
    这样编程代码 review 怎么过?谁能给你过?怕不是今天 review ,明天就拎包走人
    nenseso
        13
    nenseso  
       277 天前
    大公司都有相应的编程规范,凡是不符合规范的都不能过 code review 的,小公司小业务线,都是整条整条的线嘎掉,跟编程防御没啥关系。
    xxlsize
        14
    xxlsize  
       277 天前   ❤️ 11
    要裁你的人,都不看代码。
    Promtheus
        15
    Promtheus  
       277 天前
    防御我觉得可以用复杂度上 ,比如超然的设计。很高级别人看不懂。这才叫防御,就像大神的代码很精巧很难一下子看懂,甚至不敢随便修改,但是却很稳很好用。而不是这种摆烂式的防御,这样的代码直接就是让领导赶紧优化掉你啊。连同事都会吐槽赶紧把这个人开了。防御个蛋。
    Sivan
        16
    Sivan  
       277 天前   ❤️ 1
    我一般看到这种代码时就已经在想优化他的理由了。

    劝退差员工花的不是 Leader 的钱,但留下差员工一定会耽误 Leader 挣钱。
    jones2000
        17
    jones2000  
       277 天前
    提升自己的能力才是最好的防御。
    test4zhou
        18
    test4zhou  
       277 天前   ❤️ 2
    写垃圾就写垃圾,别污名防御性编程
    proxytoworld
        19
    proxytoworld  
       277 天前
    什么杀软,你没有使用过 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  
       277 天前 via Android
    没和同事协作过吗?
    wu67
        21
    wu67  
       277 天前
    大可不必, 我只需要在写代码时不再关注代码质量、最佳实践等原则, 或者一句话能写完的东西, 我拆成几行甚至十多行, 写出来的玩意, 过了一周后连我自己都不一定看得懂了.
    fredweili
        22
    fredweili  
       277 天前
    copilot ,不能 review 的东西给 merge ?
    lmshl
        23
    lmshl  
       277 天前
    我们写函数式的,完全不需要“防御性编程”。
    我们就正常发挥,除了同门之外别人都看不懂我们 Pure FP 代码🐶。
    关键是,自己维护起来还超 tm 轻松。
    afantwtz
        24
    afantwtz  
       277 天前
    @proxytoworld #19 大项目,你总不能所有文件一次扔给 GPT 吧?局部去混淆是可以的
    ashin
        25
    ashin  
    OP
       277 天前
    > 我一般看到这种代码时就已经在想优化他的理由了。

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

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

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

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

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

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