首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

怎样才能把代码写成让接手的人维护不动?

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

    要走了,不玩了

    49 回复  |  直到 2019-06-13 00:04:24 +08:00
        1
    Jirajine   36 天前 via Android   ♥ 50
    来了来了,这篇文章我推荐每个 coder 都要认真阅读(逃
    coderlmn.github.io/frontEndCourse/unmaintainable.html
        2
    wly19960911   36 天前
    推荐一招,局部变量别写成局部,直接改成类的属性,随便调用,加上一个 function 上百行,我感觉这样就可以劝退一堆人了,别问为什么,我就是这样被劝退过。
        3
    babedoll   36 天前
    可以学我们部门一个老哥,函数名全英语翻译+拼音+数字乱凑。
    在函数里插入点莫名其妙又用不着的语句。
    完全违背面向对象原则,方法绝不复用。

    这样的代码可以 100%成 shit 山。
        4
    withoutconscious   36 天前
    @Jirajine 厉害了,我要好好拜读!
        5
    rrZ2C   36 天前
    @Jirajine #1 神文 神文,有术有道 真正的集大成者也!

    ----
    与他人共事之道

    老板才是真行家
    如果你的老板认为他 20 年的 FORTRAN 编程经验对于现代软件开发具有很高的指导价值,你务必严格采纳他的所有建议。投桃报李,你的老板也会信任你。这会对你的职业发展有利。你还会从他那里学到很多搞乱程序代码的新方法。

    沉默是金
    永远不要对下一个危机保持警觉。如果你预见到某个问题可能会在一个固定时间爆发,摧毁西半球的全部生命,不要公开讨论它。不要告诉朋友、同事或其他你认识的有本事的人。在任何情况下都不要发表任何可能暗示到这种新的威胁的内容。只发送一篇正常优先级的、语焉不详的备忘录给管理层,保护自己免遭秋后算账。如果可能的话,把这篇稀里糊涂的信息作为另外一个更紧急的业务问题的附件。这样就可以心安理得地休息了,你知道将来你被强制提前退休之后一段时间,他们又会求着你回来,并给你对数级增长的时薪!

    每月一书俱乐部
    加入一个计算机每月一书俱乐部。选择那些看上去忙着写书不可能有时间真的去写代码的作者。去书店里找一些有很多图表但是没有代码例子的书。浏览一下这些书,从中学会一些迂腐拗口的术语,用它们就能唬住那些自以为是的维护代码的程序员。你的代码肯定会给他留下深刻印象。如果人们连你写的术语都理解不了,他们一定会认为你非常聪明,你的算法非常深奥。不要在你的算法说明里作任何朴素的类比。
        6
    ghos   36 天前   ♥ 7
    我之前看过一个混淆器 把变量名都变成 l i 和 1 的组合 你试试 保证连自己都维护不了还可以加上叹号 就像这样 l!i1il1li1ll!il1ili!
        7
    Jirajine   36 天前 via Android
    @withoutconscious
    @rrZ2C
    真的推荐认真阅读,正着看能拿铁饭碗,反过来看也是一篇讲代码规范极好的文章。

    译者注:
    >作者黑的是那种以代码行数考核绩效的小作坊,加上写过 20 年 FORTRAN 代码的老古董领导,还有 JAVA 语言之类的。可能很多人没看出来这篇文章是反讽,意思是让读者避免这些问题,好好写代码。作者的写作风格非常幽默,这在程序员中是很难得的。已经有太多文章一本正经地告诫大家要如何写好代码,可能加起来都没有这篇反讽文章的影响力大。正着说反着说其实都是一个意思,就看读者从哪个方向去用它了。
        8
    wjfz   36 天前
    我司代码几乎就是文中所说。
        9
    abmin521   36 天前 via Android
    我劝你善良
        10
    jxf2008   36 天前
    具体什么语言
    c++的话把类的成员变量移出类定义,分散到各个文件,变成全局变量
        11
    anubu   36 天前   ♥ 14
    你就正常发挥就行。
        12
    amwyyyy   36 天前   ♥ 1
    保持正常水平就行了
        13
    yutou527   36 天前
    正常发挥+1
        14
    mwVYYA6   36 天前 via Android
    有一个可以简单又能实现的方法,就是不管干啥都抽成函数然后用最简洁而意思不明确的词起名字,并且散落在各个弱关联的文件里,这样就没人能维护了(某次改同事的代码头都要炸了 doge
        15
    Yiki   36 天前
    ……天哪多大仇
        16
    liaowy   36 天前
        17
    littleylv   36 天前
    是多大仇?
    我可以说楼主职业素养不行么?
        18
    tilv37   36 天前
    把注释都删了,方法名改成非自然语意就好,比如“ getPost ”改为“ dasdasxads ”
        19
    passerbytiny   36 天前
    那么,“所有代码有人能接手维护”作为交接标准的情况下,你准备怎么走。
        20
    JamesR   36 天前
    没必要,业务逻辑一复杂,注释一删,自然就没几个人能维护了。
        21
    cyssxt   36 天前 via iPhone
    注意素质
        22
    ac2sherry   36 天前
    曾就职的公司里经常会出现人名、拼音、拼错了的单词、拼错了的拼音、拼错了的人名(前后鼻音)命名的变量和函数。上古代码看着真是想死。
        23
    HuHui   36 天前 via Android
    混淆编译再反编译就 ok 了
        24
    strcmp   36 天前
    把版本控制捣毁就行了
        25
    mnzlichunyu   36 天前
    就正常写
        26
    Greendays   36 天前
    感觉不需要特意处理,因为一般情况下,楼主的编码水平不会有多高,接手的人也不会有多高(狗头
        27
    whp1473   36 天前
    一、混淆器
    1.方法、变量混淆,名字全会变成 a1、a2、a3,fun1 这样,所有方法名称和变量名都不会在遵循代码即是注释的良好习惯
    2.逻辑混淆,会增加不影响功能的额外逻辑
    3.结构混淆,可以把多个方法聚合成一个
    4.自动去除注释
    二、动态字节码技术
    关键的逻辑你可以转成文本文件(JVM 语言),在服务启动时往 JVM 中再加载,一堆类似汇编语言的脚本恶心死人。
    三、git 相关
    1.记得清除 git log 日志,这样找不到原来的注释
    2.git 绝对不打 tag,一堆 branch 绝不删,名字都是时间戳
    四、灵活运行 maven
    有些包可以手动引用一下就绝对不要用 maven,如果自己再把相关类库拆分成几个类库,打包到私服,那更改难度就翻倍玩上涨了,需要维护好几个项目
    五、绝对不要留文档,尤其是数据库设计、业务流程设计、项目结构架构设计文档、部署文档。
    六、不留单元测试,这样对方要重构的成本大大增加,同时更难理解业务
    七、单元测试不可重复执行,比如单元测试有清库的 SQL,但是不回滚,没法重复执行就意味着炸弹在里面

    好了,你已经是一名成熟的跑路开发了~
    (以上都是玩笑)
    这些不要去做或者反过来做,你就是一名有职业素养的优秀开发了(狗头)
        28
    javaWeber   36 天前
    自己已经受害了,何必再去迫害后面的兄弟?(来自一位接手屎山而痛苦不堪的码农)
        29
    hstdt   36 天前 via iPhone
    Emmm,那就只能祝你即将接手的项目没法维护了😎
        30
    otakustay   36 天前
    你就正常写,接手的人自然维护不动的,别太觉得自己很厉害
        31
    winterbells   36 天前 via Android
    @passerbytiny 交接一个月走人
        32
    sheeta   36 天前
    我劝你善良
        33
    mooncakejs   36 天前
    找个混淆工具混淆一下?
        34
    passerbytiny   36 天前
    @winterbells #27 如果你拒不配合交接或者交接不完整,即使你离职了,公司也可以告你。
        35
    glaucus   36 天前 via iPhone
    作为 Java 岗位开始用 Kotlin 重构代码
        36
    Yoefs   36 天前
    @mooncakejs 那太刻意了,容易看出来,就要像一楼兄弟所说杀人于无形 [doge]
        37
    coolair   36 天前 via Android
    何必呢?与人为善,与己为善。
        38
    GANLE   36 天前 via iPhone
    一楼笑尿
        39
    37Y37   36 天前
    我劝你善良
        40
    x7395759   36 天前
    一楼的这个文章太强了,我都没有勇气看完
        41
    fanyingmao   36 天前 via Android
    写让人难以维护的代码,摔锅是真的爽,可惜我都是接锅的,现最近接的几个锅写得什么烂代码。
        42
    shm7   36 天前 via iPhone
    你可曾想过人人这样,你也可能接人家的锅。走都走了,让人家看看你的技术多好吧。接锅的也是同事,不会是你不喜欢的老板吧。何苦难为自己人。
        43
    orzorzorzorz   36 天前
    一楼这个创造性的拼写错误实在是太毒了...
        44
    magic3584   36 天前
    ???没有版本控制么?
        45
    Takamine   36 天前
    没必要吧,难道是有什么深仇大恨吗 23333。
        46
    Takamine   36 天前
    @Jirajine code review 的时候,我怕是要被骂到死,然后自己也讲不出。:doge:
        47
    jerryrib   35 天前 via Android
    代码如狗屎,最怕关键位置不写注释
        48
    sonxzjw   35 天前
    @Jirajine ok...真心的觉得这文章厉害
        49
    flynaj   35 天前 via Android
    改用 perl 去写代码,保证过一段时间后连你 1 自己都搞不明白
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1006 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 19:08 · PVG 03:08 · LAX 12:08 · JFK 15:08
    ♥ Do have faith in what you're doing.