怎样才能把代码写成让接手的人维护不动? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huoguodiliao
V2EX    问与答

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

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

    要走了,不玩了

    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
    U7Q5tLAex2FI0o0g
        17
    U7Q5tLAex2FI0o0g  
       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
    你就正常写,接手的人自然维护不动的,别太觉得自己很厉害
    300
        31
    300  
       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 重构代码
    ech2o
        36
    ech2o  
       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
    我劝你善良
    quickma
        40
    quickma  
       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
    一楼这个创造性的拼写错误实在是太毒了...
    rrubick
        44
    rrubick  
       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     Solana     869 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:59 PVG 05:59 LAX 13:59 JFK 16:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86