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

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

  •  
  •   huoguodiliao · 2019-06-11 10:43:18 +08:00 · 6696 次点击
    这是一个创建于 2000 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要走了,不玩了

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

    这样的代码可以 100%成 shit 山。
    withoutconscious
        4
    withoutconscious  
       2019-06-11 10:55:50 +08:00
    @Jirajine 厉害了,我要好好拜读!
    rrZ2C
        5
    rrZ2C  
       2019-06-11 11:11:29 +08:00
    @Jirajine #1 神文 神文,有术有道 真正的集大成者也!

    ----
    与他人共事之道

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

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

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

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

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