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

如果代码没有 bug、也没有性能问题,是否还会为了其他目标来优化重构?

  •  
  •   d119 · 2022-10-14 10:19:13 +08:00 · 4474 次点击
    这是一个创建于 805 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,如果代码没有 bug ,也没有性能问题,是否为了追求代码的优雅、格式、项目结构的优化而去调整重构代码呢?

    53 条回复    2022-10-16 00:28:48 +08:00
    frank1256
        1
    frank1256  
       2022-10-14 10:22:27 +08:00   ❤️ 1
    会,总有人不喜欢屎的味道(闲下来的时候)
    zwdsix
        2
    zwdsix  
       2022-10-14 10:25:01 +08:00   ❤️ 3
    我就说一句,程序员其实往往不懂自己说的“优雅”是什么意思。甚至不知道“重构”的定义。
    lmshl
        3
    lmshl  
       2022-10-14 10:26:16 +08:00   ❤️ 4
    我做过,算是提升可读性吧。
    把整个系统的异步模型从 Future 迁移到纯函数的 IO Monad ,重构过程中发现了一堆小 Bug ,只是运气好没走到这个分支。以及重构完了还发现访问量高于半年前但 CPU 降到原来 1/10 的样子,也是重构的小惊喜。
    kaz10025
        4
    kaz10025  
       2022-10-14 10:27:36 +08:00
    小项目调整无所谓 屎山你改的动?
    panlatent
        5
    panlatent  
       2022-10-14 10:28:18 +08:00
    自己的会。公司的以前也许会,现在不会。
    s524256521
        6
    s524256521  
       2022-10-14 10:30:13 +08:00 via Android
    个人猜测,优化重构的根本原因是客户需求在不断升级,代码本身有没有问题不是关键,所以很多时候为了增强竞争力,会把没有 bug 和性能问题的代码重构上云,或者优化算法来降低成本。
    wr410
        7
    wr410  
       2022-10-14 10:30:40 +08:00
    不会,这是一个大工程,牵涉人员众多,不是你自己的东西想改就能改的
    god7d
        8
    god7d  
       2022-10-14 10:33:08 +08:00
    不会,能跑就行,直到有一天实在是无法维护了才会考虑重构
    darkengine
        9
    darkengine  
       2022-10-14 10:33:11 +08:00
    会为了其他目标(可读性,可维护性)局部优化代码。至于大范围重构,最好要有充分的理由和评估。
    xianyv
        10
    xianyv  
       2022-10-14 10:37:20 +08:00
    自己写的代码还有点动力,别人交到自己手上的没啥兴趣给重构
    god7d
        11
    god7d  
       2022-10-14 10:39:36 +08:00   ❤️ 1
    @s524256521 是的,一般代码有 bug 或者是写的不优雅很少会成为进行重构的动力,一般都是项目的不断迭代更新,原先的架构无法再加入新的功能或适应现有的业务模式,才会被迫进行重构。一般有经验的架构师会早早的预测到这类情况的到来,所在在项目之初就会在架构上做出预先设计。很多公司的软件 leader ,会有第一版“先完成再说,等后面用不了了大不了重构嘛”的想法,他们的重构频率会相对较快,但是这种一种错误想法,本质上也是架构师经验不足的表现。因为频繁重构严重加大开发、测试人员的工作量,也使得软件的稳定性下降,同时也可能会增加客户的学习成本(如果重构引起客户察觉的话)。
    c8c
        12
    c8c  
       2022-10-14 10:58:03 +08:00
    看情况吧。
    举例:
    如果扩展性不够好,而业务量增加,需要扩展,就需要重构啊。
    如果 Ops 很重,也会重构,简单结构,减少 Ops 。
    d119
        13
    d119  
    OP
       2022-10-14 10:58:34 +08:00
    我初入门的时候,带我的一个前辈,就花了很多时间在重构上,那时候还不流行微服务这种模式,是面向对象开发模式的的中大型项目,我很清楚的记得,他每隔一段时间,(并不是一定闲下来的时候),他就重构(当然在那种项目里面,重构是要花很多时间的,因为重构是逐渐逐渐的,不可能一下就优化重构到很好),他重构到了什么地步呢,我也清除记得:一个不会写代码的项目经理,经常站在他旁边看,而且说,看他的代码跟看书一样,很明白这段代码是什么作用和意义。
    garlics
        14
    garlics  
       2022-10-14 11:00:14 +08:00
    感觉大规模的重构最主要的目的还是空降的领导想控制代码
    ericgui
        15
    ericgui  
       2022-10-14 11:01:22 +08:00
    当然 TMD 要重构了,你都不知道,一个 react class component , 在我老东家, 能有 1300 行,我以为这就够屎了,新东家 1800 行,怎么样?

    不是没有 bug ,而是你没测出来罢了
    janus77
        16
    janus77  
       2022-10-14 11:02:13 +08:00
    kpi
    westoy
        17
    westoy  
       2022-10-14 11:05:16 +08:00
    没 BUG 和性能问题的重构一下

    可能就有了.........
    lujiaosama
        18
    lujiaosama  
       2022-10-14 11:10:42 +08:00
    不是技术驱动型的公司有哪个天天给你重构,能跑起来的代码就算再烂也是经过生产环境检验的。重构还得把之前跑过的流程全部来一遍,哪里只是改改代码的事情。
    infun
        19
    infun  
       2022-10-14 11:13:54 +08:00
    会的,我之前对接的开发团队,为了可读性和扩展会做比较多的重构
    和他们合作比较愉快
    alen0206
        20
    alen0206  
       2022-10-14 11:23:12 +08:00
    自己不接手的一般不改
    d119
        21
    d119  
    OP
       2022-10-14 11:26:57 +08:00
    如果是为了提高可读性作为目的,那起码代码需要有其他人读吧,如果就只是自己维护,别人根本看都不看,或者没机会看,你还重构吗
    dvsilch
        22
    dvsilch  
       2022-10-14 12:13:48 +08:00
    @d119 我个人倒是更愿意重构自己的代码...因为别人的业务代码,在不清楚具体业务逻辑的情况下,很容易牵一发而动全身。
    但是自己的代码会有自己看得懂的注释,即使放了一段时间再回头看也能很快读懂当时的思路,并且结合当前的理解写出语法更优雅、性能更好的代码。
    zwdsix
        23
    zwdsix  
       2022-10-14 12:14:06 +08:00
    重写就重写吧,重构啥呀。这楼里有人能说出重构名录里的任意一个重构手法叫什么?
    zwdsix
        24
    zwdsix  
       2022-10-14 12:17:18 +08:00
    所以他们总是会说“重构”这事“很费时”,“没时间做”,“引入更多 bug”。请问重构和 bug 、性能有啥必然关系?
    fox0001
        25
    fox0001  
       2022-10-14 12:17:51 +08:00 via Android
    自己的代码,会。公司的项目,一般就算了,除非有要求。重构完还得重新测试、改 bug ,一堆麻烦事。
    kujio
        26
    kujio  
       2022-10-14 12:23:41 +08:00
    有,不断尝试用新技术替代老技术,然后根据新技术尝试写一个简化版的
    xuanbg
        27
    xuanbg  
       2022-10-14 13:33:59 +08:00
    现在不会。因为现在只可能需要升级,绝对不需要重构。
    aguesuka
        28
    aguesuka  
       2022-10-14 13:51:12 +08:00
    @zwdsix rewriting 和 refactoring 和 <<Refactoring>> 完全是三回事
    shenlanAZ
        29
    shenlanAZ  
       2022-10-14 14:31:56 +08:00
    不会,可能会把更好的设计思想来做下个项目。

    没有性能问题优化重构和浪费时间没区别了。
    296727
        30
    296727  
       2022-10-14 15:17:27 +08:00
    不会,做的好了不一定有奖励,做的差了一定有批评
    andyJado
        31
    andyJado  
       2022-10-14 15:37:08 +08:00
    @zwdsix
    重写可以不重构, 重构必然要写新的.
    karott7
        32
    karott7  
       2022-10-14 16:11:06 +08:00
    小项目会,大项目就算了
    aonshuy
        33
    aonshuy  
       2022-10-14 16:32:57 +08:00
    重构是为了引入 bug 和性能问题吗
    lcbp
        34
    lcbp  
       2022-10-14 17:51:28 +08:00
    无情重构
    IsaacYoung
        35
    IsaacYoung  
       2022-10-14 17:52:27 +08:00
    不会
    sadfQED2
        36
    sadfQED2  
       2022-10-14 17:55:13 +08:00 via Android
    编程第一原则:只要项目还能跑,那就不要动他
    编程第二原则:如果项目烂得没法跑了,那你人就赶紧跑
    mazai
        37
    mazai  
       2022-10-14 18:00:12 +08:00
    会,代码的第一要务就是保证看你代码的人能看懂
    xiangchen2011
        38
    xiangchen2011  
       2022-10-14 18:13:32 +08:00
    会,增加扩展性和可读性
    dolphintwo
        39
    dolphintwo  
       2022-10-14 18:31:09 +08:00
    面向工资编程,哪来的重构,代码和程序员有一个能跑就行了
    golangLover
        40
    golangLover  
       2022-10-14 18:41:21 +08:00 via Android
    @lmshl 你好像是 scala 大神。对你很有印象
    lmshl
        41
    lmshl  
       2022-10-14 19:00:48 +08:00   ❤️ 1
    @golangLover 😊
    https://www.bilibili.com/video/BV1Qa4y1L7dj
    3:07:00 开始是我,就是从 Future 迁移 IO Monad 后做的社区分享。
    RicardoY
        42
    RicardoY  
       2022-10-14 19:26:47 +08:00
    重构这个词被滥用的太多了,可以去翻翻书,上面有清晰的定义和什么时候应该重构的指南。重构不是为了解决程序 Bug 和提升性能...
    RicardoY
        43
    RicardoY  
       2022-10-14 19:30:33 +08:00
    楼上这么多人,对重构的理解好像跟 Martin Fowler 都不太一样...
    zhuweiyou
        44
    zhuweiyou  
       2022-10-14 19:46:43 +08:00
    别人写的,不会.
    自己写的,会.
    golangLover
        45
    golangLover  
       2022-10-14 20:28:08 +08:00
    @lmshl 感谢你的分享!
    kongkongye
        46
    kongkongye  
       2022-10-14 20:34:56 +08:00 via iPhone
    个人的开源或长期维护项目就会重构,为了后面维护与扩展更容易,但公司的项目,又不是一个人的代码,就没有重构的想法,而且你想重构上级也不支持,重构了还是那个功能,并没有效益的提升,重构不好出 bug 还要你背锅,不重构老是出各种 bug 问题反而能体现你的价值,造成一直很忙的假象。没办法,上级跟更上级领导不懂技术只能这样,环境如此。
    kkbblzq
        47
    kkbblzq  
       2022-10-14 20:56:59 +08:00
    看情况,如果需求刚好改到了相关代码,我觉得需要重构,在影响范围 /时间花费可控在一定范围内的情况下我会做小规模的重构;影响较大的,工期影响比较多的,根据当时需求量和测试资源,有空余的话我会去争取 PM 支持,实在没操作空间的话那就先挂起;

    重构更多的是提供可读性、可维护性、可扩展性等等,如果是自己参与长期维护的代码,合理的重构是可以降低不少维护成本的,也可以提高自己对项目代码的掌控性;

    说实话,真堆屎山到堆不上去再来搞,那时候只能追求:代码和人有一个能跑就行了😂
    yxzblue
        48
    yxzblue  
       2022-10-14 23:14:22 +08:00
    没有 bug 和性能问题,就不要重构,甚至都不用改,改好了不会多你一毛钱,改烂了擦屁股擦不完
    zwdsix
        49
    zwdsix  
       2022-10-14 23:25:43 +08:00   ❤️ 1
    @aguesuka 来,你来详细展开。我看你能说出啥。
    iceheart
        50
    iceheart  
       2022-10-15 07:33:39 +08:00 via Android
    测试同意么?
    justin2018
        51
    justin2018  
       2022-10-15 08:38:45 +08:00
    重构 怎么说咧 屎山代码不重构可以正常跑 重构后各种 Bug

    年轻的时候 不懂事 见到屎山代码 就想重构 结果重构后 业务出问题了~~~

    现在转眼看 自己也代码也堆成山了 正常运行了好几年

    又不是不能跑 重构自己给自己找事儿做
    techon
        52
    techon  
       2022-10-16 00:17:08 +08:00
    没性能问题是暂时的,没 bug ?怎么可能! 除非是 helloword 。。。
    secondwtq
        53
    secondwtq  
       2022-10-16 00:28:48 +08:00
    也可能是为了搞千年大计,减少未来可能的 bug ...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   956 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:30 · PVG 04:30 · LAX 12:30 · JFK 15:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.