维护自己以前写的代码时,会不会想抽自己一巴掌? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
allen945
V2EX    程序员

维护自己以前写的代码时,会不会想抽自己一巴掌?

  •  
  •   allen945 2018-12-22 11:02:20 +08:00 7053 次点击
    这是一个创建于 2486 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每次维护项目的时候最怕的是对一些已有的功能进行升级改造,因为常常出现看不懂以前写的代码...

    然后先开始找以前的思路,找到思路后才敢修改代码.

    若是找不到思路,推翻重写... 每次遇到这种情况时,都想抽自己一巴掌,这 TM 写得什么鬼呀?

    不知道大家有没有过这种经历?

    来自一枚入门级菜鸟 web 开发者的心声~

    tips:

    上面指的是自己的个人项目,非公司或其他商业项目。

    71 条回复    2018-12-26 18:14:08 +08:00
    wly19960911
        1
    wly19960911  
       2018-12-22 11:29:56 +08:00 via Android   17
    比起抽自己一把,我更喜欢的是反思,为什么会出现这种情况,业务无关逻辑代码能不能封装掉,怎么精简业务逻辑代码才是最优选择。我现在也在学习拆分逻辑和业务代码,尽量做到业务只调用逻辑方法,表面上业务代码做到最精简的行数,但是逻辑清晰,就算注解不明确也可以更快上手。

    如果有人能一开始就做一个完整精简的东西,这个才恐怖。
    allen945
        2
    allen945  
    OP
       2018-12-22 11:37:27 +08:00
    @wly19960911 学习了
    lizhenda
        3
    lizhenda  
       2018-12-22 11:37:39 +08:00
    写注释,好记性不如烂笔头,工作时间越长这一点越明显
    HENQIGUAI
        4
    HENQIGUAI  
       2018-12-22 11:42:16 +08:00
    会,写得什么玩意儿
    codermagefox
        5
    codermagefox  
       2018-12-22 11:42:16 +08:00   1
    不止想抽一巴掌...想一刀捅死....
    likuku
        6
    likuku  
       2018-12-22 11:43:27 +08:00 via iPhone
    单元测试重要性体现出来了,注释与文档重要性也体现出来了
    leavic
        7
    leavic  
       2018-12-22 11:46:02 +08:00   18
    不,我经常看着以前的代码感叹:

    这 tm 是我写的?写的太好了,现在我都写不出来这么好的代码,你看看这行,太巧妙了,我真佩服当时的我,一定是某大神上身写的。
    allen945
        8
    allen945  
    OP
       2018-12-22 11:47:17 +08:00
    @lizhenda 有写注释,但是不敢写多,看起来很乱
    allen945
        9
    allen945  
    OP
       2018-12-22 11:48:04 +08:00
    @codermagefox ???这是我写的吗?~
    SatanFu
        10
    SatanFu  
       2018-12-22 11:48:16 +08:00
    不是应该高兴吗?说明自己有进步了啊!
    allen945
        11
    allen945  
    OP
       2018-12-22 11:49:04 +08:00
    @likuku 确实是
    mseasons
        12
    mseasons  
       2018-12-22 11:49:33 +08:00
    这话说得,什么叫维护的时候,一个工程自己写两周,第二周看前一周的代码就想砍死自己。
    duzhihao
        13
    duzhihao  
       2018-12-22 11:50:33 +08:00
    有这个想法就是进步。
    allen945
        14
    allen945  
    OP
       2018-12-22 11:50:57 +08:00
    @leavic 自己都不敢相信能写出这样的代码
    sammo
        15
    sammo  
       2018-12-22 11:51:34 +08:00
    就当作是隔壁二狗子写的
    allen945
        16
    allen945  
    OP
       2018-12-22 11:53:18 +08:00
    @SatanFu 嗯,是这样的,看出了自己以前的不足
    xuanwu
        17
    xuanwu  
       2018-12-22 11:53:58 +08:00
    改用中文命名试试
    allen945
        18
    allen945  
    OP
       2018-12-22 11:54:13 +08:00
    @duzhihao 学习了,谢谢
    allen945
        19
    allen945  
    OP
       2018-12-22 11:54:32 +08:00
    @mseasons 哈哈哈哈哈哈哈哈哈哈
    allen945
        20
    allen945  
    OP
       2018-12-22 11:55:46 +08:00
    @xuanwu 不加个狗头吗
    4DAX07B8Kle4Dm6T
        21
    4DAX07B8Kle4Dm6T  
       2018-12-22 12:00:51 +08:00
    这谁写的 jb 代码,神魔恋。
    卧槽这好像是我自己写的...
    xuanwu
        22
    xuanwu  
       2018-12-22 12:08:52 +08:00
    @allen945 不加. 搜"中文代码示例之 Spring Boot 1.3.3 演示", java+mysql 中文命名
    royzxq
        23
    royzxq  
       2018-12-22 12:12:38 +08:00 via iPhone
    某个人真的魔怔了,代码写的乱和中英文有什么关系,傻了吗
    wemore
        24
    wemore  
       2018-12-22 12:17:16 +08:00
    有时候会真的抽自己一巴掌,给后面的自己挖坑。
    dfourc
        25
    dfourc  
       2018-12-22 12:19:09 +08:00
    @leavic 您一定是高手
    wly19960911
        26
    wly19960911  
       2018-12-22 12:20:58 +08:00   1
    @allen945 #2 不过这也只是自己的体会,业务代码真的不能写长,也最好避免回调函数过深,逻辑方法名长和多根本不是问题,反正我只用 interface 里面的东西,能传参数就是参数传,业务方法一写长,各种参数乱飞下来很痛苦的。

    业务代码有个注释也没用,只是告诉你干什么的(毕竟你改的就是业务代码),过程还得你自己看,而且业务代码也不可能一行行注释告诉你这个为什么这么做。逻辑代码就该怎么写注释就怎么写。

    其实 jQuery 是一个很好的逻辑封装的例子,里面根本不会理会你到底干什么,就只提供功能,从来都不用 this。我看了下前端的话,我推荐你去试试 ts 语言的框架,最近 vue 也要上 ts 了,因为面向对象的语言真的有很多学习的地方。

    说了正面例子我来说个反例。就以 vue 当例子说明,vue 可以调用 this 来修改 data。但是 this 用多了问题也出来了,逻辑代码各种调用 this,我在查 bug 的时候,发现每处都有 this.data 去修改值,而且回调初始化调用的方法非常多,这时候就需要我一个个排查究竟是谁去修改 data 了,从那时候开始我基本就只有 event 和 生命周期 才会修改 data 的值,其他地方只提供逻辑上的功能。
    wly19960911
        27
    wly19960911  
       2018-12-22 12:23:06 +08:00
    说起来我又突然想到一个东西了。同事曾经认为 精简代码 = 好代码,减少行数代表你能写出更好的代码。我是有点不敢苟同。现在有些情况让他们多定义几个 model,都有点不肯。
    yhxx
        28
    yhxx  
       2018-12-22 12:23:19 +08:00
    不会
    因为我这种过了一年也没什么进步的再写一次也并不会比之前好到哪里去。。。
    wmhx
        29
    wmhx  
       2018-12-22 12:25:19 +08:00
    2 年前接了个私活, 就是把 excel 的数据导入 mysql 然后给个界面做修改再统计的过程,excel 的行和列是不固定的, 我如何在 web 界面上展示还能修改,还要不影响统计功能. 当时想破了头写的代码, 如今真是完全看不懂了, 为什么要把 excel 的数据映射成一个类,然后再转成 json 存数据库里面, ztn 的是个人才啊,
    Mac
        30
    Mac  
       2018-12-22 12:44:27 +08:00 via Android
    并没有,反而佩服自己脑力强大,居然能拐这么多弯把问题解决了
    leavic
        31
    leavic  
       2018-12-22 12:57:48 +08:00 via Android
    @galikeoy 不是吹牛不是扯淡,只是后来很少写底层驱动了,以前的技能就有点丢失了,这其实很正常。
    zhm1620
        32
    zhm1620  
       2018-12-22 13:01:59 +08:00
    想抽死说明有进步啊
    alakey1989
        33
    alakey1989  
       2018-12-22 13:09:28 +08:00
    @yhxx 可爱
    PP
        34
    PP  
       2018-12-22 13:09:55 +08:00 via iPad
    Only God knows 即视。
    sunnyadamm
        35
    sunnyadamm  
       2018-12-22 13:20:54 +08:00
    关键点一定要写注释,不然。。。Only God knows
    blacklee
        36
    blacklee  
       2018-12-22 13:24:21 +0800
    入行 12 年+了,手头一个项目是 4 年前写的。我自己看着感觉还好,有时能看到有些优化空间,但不会觉得写的差了。
    当然了,回忆 6 年前看 8 年前写的东西时,有时会想骂自己傻叉。
    armoni
        37
    armoni  
       2018-12-22 13:31:22 +08:00
    感叹当时的自己太厉害了,现在写不出来了
    f278478529
        38
    f278478529  
       2018-12-22 13:54:54 +08:00
    想重构框架,升级 JDK。
    chanchan
        39
    chanchan  
       2018-12-22 14:01:01 +08:00
    注释是不可能注释的,我宁愿多花点时间让自己的代码更易懂 更“声明式”。
    yuanfnadi
        40
    yuanfnadi  
       2018-12-22 14:02:03 +08:00 via iPhone
    测试覆盖率 100% 随便怎么改,只要能跑过测试就可以了。
    BetterManIsMe
        41
    BetterManIsMe  
       2018-12-22 14:04:27 +08:00
    一巴掌够吗
    OMGZui
        42
    OMGZui  
       2018-12-22 14:05:57 +08:00 via Android
    很好的重构机会:doge
    32
        43
    32  
       2018-12-22 14:36:56 +08:00
    比起改别人的,我更喜欢维护自己的代码.最起码自己的一直恪守规范, 业务逻辑会有注释.
    yuandfish
        44
    yuandfish  
       2018-12-22 14:40:52 +08:00
    其实挺有意思,可以看到自己的不足,每次维护自己的代码都会微调一下把它改得更好 :)
    allen945
        45
    allen945  
    OP
       2018-12-22 14:40:58 +08:00
    @wly19960911 非常感谢!现在一直在用 vue 开发,vue 的组件化开发蛮好的,代码可读性和简洁性很高。
    zmj1316
        46
    zmj1316  
       2018-12-22 14:41:46 +08:00
    这说明相比之前,技术水平有进步了,好事
    allen945
        47
    allen945  
    OP
       2018-12-22 14:46:06 +08:00
    @yhxx 说到点痛点了!!!
    connection
        48
    connection  
       2018-12-22 14:46:42 +08:00
    善于分层
    数据流管控好
    代码只做当前要做的事情,拒绝过度设计。
    digimoon
        49
    digimoon  
       2018-12-22 15:16:48 +08:00
    两巴掌
    kidlj
        50
    kidlj  
       2018-12-22 15:31:18 +08:00 via iPhone
    // You ’ re not expected to understand this.
    des
        51
    des  
       2018-12-22 15:37:05 +08:00 via Android
    @leavic 然后想了老半天才
    des
        52
    des  
       2018-12-22 15:37:52 +08:00 via Android
    @leavic
    然后想了老半天才想出来是自己从某个地方抄来的
    SeaRecluse
        53
    SeaRecluse  
       2018-12-22 15:46:36 +08:00
    不会,因为那是那时的我的全力了,没必要懊悔。
    ershisi
        54
    ershisi  
       2018-12-22 16:02:40 +08:00
    我说实话,看我以前的代码以后我只有一个想法,不重构了重写吧。
    eslizn
        55
    eslizn  
       2018-12-22 16:05:18 +08:00
    小改小修,大改重构。。。
    passerbytiny
        56
    passerbytiny  
       2018-12-22 16:15:26 +08:00
    每次写完代码,以 100%覆盖率为目标,亲手写单元测试代码,保证你大脑正常时永远看得懂自己写过的代码。代价是,工作时间至少翻倍,要是写的不好,翻几倍都有可能。
    crazybinggan
        57
    crazybinggan  
       2018-12-22 16:41:16 +08:00
    有时候会惊叹于自己怎么写出怎么漂亮的代码,但是看不懂啊,现在写的跟之前的一个天一个地,屎一样。
    myhot21
        58
    myhot21  
       2018-12-22 16:41:47 +08:00 via Android
    每次看以前写的代码,一般都会想起,‘‘靠,这个 BUG 真的是我写的吗?为什么有 BUG,以前从不出问题。’’
    snowspace
        59
    snowspace  
       2018-12-22 16:48:50 +08:00
    想把 auther 改成别人
    Aixtuz
        60
    Aixtuz  
       2018-12-22 17:37:23 +08:00
    抽完了,现在打算向 #1 学习~
    huobazi
        61
    huobazi  
       2018-12-22 18:13:08 +08:00 via iPhone
    用了 ruby 我看自己以前写的 C# 觉得好傻,写那么多设计模式,又没啥用
    wolfie
        62
    wolfie  
       2018-12-22 18:43:47 +08:00
    这不是好事吗?
    所以各种规范文档越早看完越好。
    Visionhope
        63
    Visionhope  
       2018-12-22 19:01:05 +08:00 via Android
    @leavic #7 我有时候也会有这样的感觉,感觉以前的自己写的代码也不错。
    mocxe2vwww
        64
    mocxe2vwww  
       2018-12-22 19:05:12 +08:00 via iPhone
    @Mac 哈哈,深以为然。
    kelvinblood
        65
    kelvinblood  
       2018-12-22 22:50:48 +08:00 via iPad
    有的,16 年的时候把自己 14 年的代码重构之后,加功能再也不揪心。

    早期的代码是以完成任务为主,新功能扩展要命。

    重构的时候都是把通用的功能往 model 里塞,相互调用尽量走广播。从此之后开发新功能就很顺利了。
    t6attack
        66
    t6attack  
       2018-12-22 22:54:18 +08:00
    技术退步的人表示:以前写的代码,已经看不懂了。尴尬
    MonoLogueChi
        67
    MonoLogueChi  
       2018-12-22 23:50:01 +08:00 via Android
    现在看以前自己写的代码的感觉是,这 tm 太乱了吧,不行不行,我要重构一下
    bmy
        68
    bmy  
       2018-12-23 11:08:55 +08:00
    houshuu
        69
    houshuu  
       2018-12-23 12:45:57 +08:00
    现在养成习惯了,稍微复杂点的逻辑就写点注释,确保以后的自己能看懂。
    但是随着自己语言理解的加深,总是忍不住去重构一次又一次。
    ttvast
        70
    ttvast  
       2018-12-23 22:35:29 +08:00
    数年前写的软件,现在想升级一下,发觉自己根本看不懂,现在根本没有能力写出这样的代码
    Ritr
        71
    Ritr  
       2018-12-26 18:14:08 +08:00
    我刚上班的时候会这样,不过现在不会了。
    现在写代码比较严谨,扩展性也比较好,以至于有几个变更需求我都很开心,因为没几分钟就搞定了,由此产生的愉悦感无法言说。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2672 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 03:25 PVG 11:25 LAX 20:25 JFK 23:25
    Do have faith in what you're doing.
    ubao 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