跳到主要内容
阅微漫记
返回

重构 vs 打补丁:有些问题,不是修一下就好了

有一段时间,我经常陷入一种矛盾。

我知道自己正在面对一些问题。

但又说不上来,这些问题到底严重到什么程度。

比如:

工作越来越忙。

但是成长感越来越弱。

每天解决很多事情。

但是回头看,却发现没有留下多少属于自己的东西。

我也会想:

是不是应该学习新的技术?

是不是应该换一个方向?

是不是应该彻底改变现在的状态?

可是另一方面。

现在的一切,也并没有糟糕到需要马上推翻。

工作还在继续。

经验还在积累。

很多能力依然有价值。

于是我经常问自己:

到底什么时候应该改变?

什么时候只是需要调整?

后来我想到程序开发中的一个问题:

一个系统出现问题的时候。

到底应该:

修复一个 Bug?

还是:

重新设计整个架构?

这个问题,其实和人生非常像。

01 很多年的代码,为什么最后会变成”技术债”

程序员都经历过维护老系统。

刚开始的时候。

代码通常很简单。

需求明确。

架构清晰。

每个人都知道系统怎么运行。

但是随着时间过去。

需求不断增加。

业务不断变化。

为了快速交付。

我们开始增加一些临时方案。

这里加一个判断。

那里增加一个特殊逻辑。

先解决问题再说。

这些选择在当时没有错。

因为当时的目标是:

让系统快速运行。

但是几年之后。

问题开始出现。

新人不敢修改。

老员工不敢重构。

一个小需求改动。

可能影响整个系统。

这些过去为了快速解决问题的方法。

最后变成了:

技术债。


02 我发现,人生里也有很多”临时代码”

后来我开始检查自己的人生系统。

发现其实很多选择。

和软件系统非常相似。

年轻的时候。

我们也写了很多”临时代码”。

为了进入更好的公司。

接受高强度工作。

为了证明自己的价值。

不断承担更多责任。

为了完成目标。

牺牲自己的时间。

这些选择,当时都有合理性。

它们帮助我:

获得经验。

积累能力。

走到今天。

所以我并不认为过去的选择错了。

但是问题是:

有些临时代码。

运行了十几年。

却从来没有重新审视。

03 最大的问题:把架构问题,当成普通 Bug 修

这是我后来意识到比较深的一件事情。

很多时候。

我们一直在解决表面问题。

比如:

感觉职业发展停滞。

于是:

学习更多技术。

感觉竞争压力增加。

于是:

投入更多时间。

感觉未来不确定。

于是:

继续努力工作。

这些动作有没有价值?

有。

但是它们可能只是:

增加系统资源。

而没有改变系统设计。

就像一个程序:

运行越来越慢。

你不断给服务器加内存。

短期有效。

但是如果根本问题是:

架构设计不合理。

那么增加资源,只是在延缓问题。

人生也是一样。

有些问题。

不是努力程度的问题。

而是:

系统设计的问题。

04 我开始区分:哪些问题应该修复,哪些问题需要重构

后来,我尝试给自己做了一次分类。

第一类:局部 Bug,可以修复

比如:

表达能力不足。

可以练习。

比如:

某项技能落后。

可以学习。

比如:

管理经验不足。

可以积累。

这些问题影响系统。

但不会改变整体方向。

像软件里的一个功能缺陷。

修复即可。


第二类:架构问题,需要重构

比如:

所有价值都绑定在一个岗位上。

比如:

十几年经验,没有形成自己的方法论。

比如:

每天很忙,但没有产生长期资产。

这些问题不是靠增加努力解决的。

因为:

底层结构已经限制了上层发展。

这时候继续打补丁。

只会让系统越来越复杂。

05 我最大的误区:以为”坚持”可以解决所有问题

过去很多年。

我其实非常相信坚持。

遇到困难。

继续努力。

遇到问题。

继续优化。

这个习惯帮助我解决了很多问题。

但是后来我发现:

坚持是一种优秀品质。

但坚持不一定等于正确方向。

如果系统方向错了。

运行时间越长。

可能离目标越远。

一个错误的架构。

维护十年。

并不会自动变成正确架构。

06 但是,重构也不是逃避现实

后来我又发现另外一个问题。

很多人喜欢把”重构人生”理解成:

离开现在。

推翻过去。

重新开始。

其实这也是一种误区。

优秀工程师不会轻易重写系统。

因为:

旧系统里有大量已经验证过的能力。

人生也是一样。

过去十几年的经历。

不是废代码。

项目经验。

行业理解。

解决问题的能力。

这些都是已经存在的资产。

真正的重构。

不是删除过去。

而是:

重新组织过去。

07 我现在更相信:人生重构,是一次架构升级

以前我认为:

改变人生。

意味着成为另一个人。

现在我觉得:

不是。

更像软件版本升级。

保留:

已经验证有效的模块。

优化:

影响未来发展的部分。

增加:

适应新环境的新能力。

比如:

过去:

我靠技术解决问题。

未来:

我希望增加系统设计能力。

过去:

经验主要服务于公司。

未来:

希望把经验沉淀成自己的资产。

过去:

解决别人定义的问题。

未来:

尝试参与定义问题。

这不是推翻过去。

而是升级架构。

08 我开始接受:人生需要持续重构,而不是一次完成

以前做项目。

总希望有一个最终版本。

但是后来发现:

软件没有最终版本。

只有持续迭代。

人生也是。

不同阶段。

面对的问题不同。

20岁:

建立能力。

30岁:

扩大边界。

40岁:

重新设计系统。

每个阶段。

都需要重新理解:

什么应该保留。

什么应该删除。

什么应该新增。

写在最后

最近重新回看自己的经历。

我发现:

很多问题,并不是突然出现的。

它们只是长期积累之后。

终于暴露出来。

就像一个运行多年的系统。

真正的问题。

往往隐藏在那些没人关注的地方。

所以现在,我不再急着问:

“我要不要彻底改变?”

我更愿意先问:

这个问题。

到底是一个 Bug?

还是一个架构问题?

如果只是 Bug。

修复它。

如果是架构问题。

重新设计。

重要的不是:

永远不犯错。

而是:

保持检查自己系统的能力。

因为一个真正成熟的系统。

不是从来没有问题。

而是:

知道什么时候修复。

什么时候重构。

我是语霖。

执笔为语,心落成霖。

希望用文字和声音,记录一个40岁程序员重新设计人生系统的过程。

我们下一篇继续聊。


分享这篇文章:

上一篇
依赖注入:谁在替你的系统兜底?你有没有把人生交给了错误的依赖?