我努力工作是为了逃避工作——我对重构的看法
“我是个相当懒惰的人,为了逃避工作,我愿意付出巨大的努力。”——马丁·福勒
这对我来说再合适不过了。我一直努力减少工作量😝
对我来说,实现这一目标的最佳工具之一就是重构。不仅仅是重构,而是让重构成为一种习惯,并将这种习惯融入到我的工作中。
什么是重构?
我猜你们大多数人已经对重构有了很好的理解,不过如果你们不理解的话,我还是会解释一下。维基百科是这样解释的:
重构是在不改变外部行为的情况下重组现有代码的过程。重构旨在改进软件的设计、结构和/或实现(其非功能性属性),同时保留其功能(更多)。
我的看法
我喜欢维基百科的描述,尽管它缺少一个重要的概念,在我看来,这是重构最重要的事情之一。那就是“时间”。
对我来说,重构是一种随着时间推移而不断改进的功能(R = I/T
)。重构会随着时间的推移而发生,通过一次又一次的迭代来不断改进,确保整个过程中不会出现任何问题。
这就是为什么我把重构变成一种习惯,而不是每几周或几个月才做一次。事实证明,这对我来说非常有效(重点在于我,因为我相信你们每个人都有自己的方法)。
我也有意将重构作为开发周期的一部分,它并不局限于日常习惯或定期重构。重构通常是在开发周期的最后阶段,在最初的、略显幼稚且可能并非最简洁的解决方案之后。但最终的解决方案确实有效,并让我通过了所有测试并满足了所有需求。
在有了可行的解决方案之后,我做了几次重构,主要关注 DX(开发人员体验),使代码尽可能清晰和简单。
我的观点是什么?
我的意思是,我已经把重构变成了一种日常习惯,而且效果很好。作为开发者,习惯是我们最重要的工具之一,它可以确保我们不会犯错,或者通过强化良好的行为习惯,让我们的生活随着时间的推移变得更轻松。但是,习惯也可能是坏事,它会强化不良的行为或做事方式(是的,我说的就是你,那个在 JS 中习惯将字符串转换为数字的人+
)……
对我来说,养成重构的习惯是减少工作量最有效的方法之一。我开始努力工作,持续改进项目,并将精力集中在减少工作量上。结果,代码库变成了一个非常舒适的工作和维护环境。
我已经连续四年坚持做这件事了。以下是我做的一些事情:
- 重新组织代码,使其尽可能清晰
- 重命名一些东西,让它们更有意义(希望如此,因为我的命名很糟糕)
- 将怪物函数的部分内容提取为单独的函数
- 将相关的东西放在一起,将不相关的东西分开
- 删除我同事的丑陋代码,然后......咳嗽......对不起,我的意思是,庆祝我同事的代码,是的。
- ...
与所有可能的改进相比,这是一个相当短的列表。
让我用另一句引言来结束它
这句话我想是出自 FunFunFunction 的主持人 Mattias 之口(如果我说错了,请告诉我)。它大致是这样的:
记住,让代码在你身边比你发现时更好
出于某种原因,这句话一直萦绕在我的心头,我尽可能多地运用它,大概 4 年之后,它已经成为一种习惯,我甚至没有意识到自己这样做了,直到我回顾我的 PR 或其他东西。
所以,也许这对你有用。采用这种方法,你做的改进和重构应该很小,以减少损害/副作用(如果你做得正确,希望损害/副作用最小)。一年下来,每周每天的小改变就能带来相当大的改进。
这次我写了一篇短文,简要解释了我对重构的想法和方法。