有些事情,我们不是不知道应该做。
恰恰相反。
我们知道得太清楚了。
知道应该早点处理,知道拖下去会越来越麻烦,知道它已经开始影响生活,甚至也知道解决它并没有想象中那么困难。
但就是一直没有动手。
一拖再拖。
最后,这件事情慢慢从“待办事项”,变成了生活的一部分。
我以前很少把这种状态叫作“技术债”。
后来我越来越觉得,它其实和软件系统里的技术债非常像。
代码可以先写一个临时方案。
架构可以先不重构。
测试可以先补一补。
文档可以以后再写。
只要系统还能跑,就很容易告诉自己:
“现在没必要动。”
人生也是一样。
只要日子还能正常运行,我们就很容易把那些没有解决的问题放到后台。
直到有一天,我突然发现:
原来我一直以为自己是在维持系统稳定,其实只是在不断推迟一次迟早要发生的重构。
有一笔账,我拖了很久
我现在越来越能够理解,为什么有些事情会拖这么久。
并不是因为它特别难。
很多时候,恰恰是因为它“不够紧急”。
工作上的事情,有明确的截止时间。
孩子的事情,有明确的时间节点。
客户的问题,有明确的反馈。
线上系统出了故障,更不用说。
但有些属于自己的事情,没有人催你。
没有 SLA。
没有告警。
没有负责人。
甚至没有一个明确的失败时间点。
于是它就一直待在那里。
今天不做,没关系。
明天不做,也没关系。
这个星期不做,好像也没关系。
于是一个星期变成一个月。
一个月变成一年。
最后甚至变成:
“这件事情我已经想了很久了。”
我后来发现,“想了很久”和“做了很久”,其实是完全不同的两回事。
有些事情,我以为自己已经思考得很深入。
但如果从结果来看,我只是把同一个问题在脑子里运行了很多遍。
输入没有变化。
代码没有变化。
输出当然也没有变化。
技术债最可怕的地方,不是它存在
做技术的人应该都知道。
技术债本身并不可怕。
真正可怕的是:
你开始习惯它。
一个临时方案用了三个月。
一个本来只应该存在几天的脚本,运行了几年。
一个没人敢动的老模块,最后变成了系统核心依赖。
一开始大家都知道它不合理。
后来大家开始绕着它写代码。
再后来,新人加入以后,甚至不知道为什么这里不能改。
于是技术债完成了一个很危险的过程:
从“异常”,变成了“现状”。
我觉得人生里的很多问题也是这样。
刚开始的时候,你很清楚:
“这里不太对。”
“我应该处理一下。”
“这种状态不能一直继续。”
但时间久了以后,你开始为它建立新的习惯。
为了适应一个问题,再增加一个 workaround。
为了躲避一个选择,再调整一下生活。
为了不面对某种不舒服,再把时间填满。
慢慢地,你甚至不再觉得这是一个问题。
你只是觉得:
“我的生活就是这样。”
这句话其实很危险。
因为它意味着:
你已经把一个需要解决的问题,写进了自己的默认配置。
我以前很容易把“忙”当成合理的解释
有一段时间,我经常觉得自己很忙。
工作很多。
事情很多。
家庭有很多事情需要处理。
还有很多想做的东西。
所以有些事情没有做,也很容易解释:
“最近确实没时间。”
这句话本身可能是真的。
但问题是:
如果一个事情连续几年都没有时间做,那它到底是真的没有时间,还是根本没有进入我的优先级?
这是两个完全不同的问题。
程序员很容易理解这一点。
一个任务如果永远排在 backlog 里,而且从来没有进入 sprint,它当然永远不会完成。
不是因为它没有价值。
而是因为系统从来没有给它分配资源。
我后来开始重新审视自己的时间。
发现很多时候,并不是我没有时间。
而是我的时间已经被那些“默认会发生的事情”占满了。
工作。
消息。
会议。
刷手机。
处理各种临时问题。
别人提出的需求。
各种看起来很紧急的小事情。
它们不断占用 CPU。
而真正重要、但没有立即反馈的事情,只能一直排队。
于是我开始意识到:
人生技术债,有时候不是能力问题,而是资源调度问题。
更麻烦的是:技术债会产生利息
以前我理解的技术债,是“以后要花更多时间重构”。
现在我觉得这个理解还不够。
人生里的技术债,真正昂贵的地方,是它会产生利息。
一件拖了很久没有解决的事情,成本并不会保持不变。
它可能会影响另外一件事情。
另外一件事情又影响第三件事情。
最后形成一条依赖链。
比如一个本来应该早点做的决定,因为迟迟没有决定,于是产生了焦虑。
焦虑让自己不断寻找更多信息。
信息越来越多,选择越来越复杂。
选择越复杂,越不敢做决定。
最后又回到原来的焦虑。
这其实已经不是一个问题了。
而是一组相互依赖的问题。
软件系统里面,一个小模块的技术债,可能最后扩散到整个架构。
人生也是一样。
一个长期不处理的问题,最终可能会变成一种生活方式。
这才是我现在觉得最值得警惕的地方。
我开始重新给自己的“账”分类
以前面对那些一直拖着的事情,我通常只有一种处理方式:
记住它。
但“记住”其实不是管理。
一个问题如果只是存在脑子里,它就会不断占用注意力。
你可能没有在处理它。
但它一直在后台运行。
所以最近我开始尝试做一件很简单的事情:
把那些长期拖着的事情真正写下来。
不是写成愿望。
也不是写成“以后有时间再做”。
而是把它们当成一笔笔技术债。
我开始问自己几个问题:
这笔债是什么?
我为什么一直没有还?
它现在每个月产生多少利息?
如果继续拖一年,会发生什么?
如果真的开始还,最小的一笔还款是什么?
最后这个问题对我帮助很大。
因为以前我经常犯一个错误:
一发现问题,就想一次性解决。
想重构,就想做完整的重构。
想改变,就想彻底改变。
想建立新的生活方式,就想一次把整个系统设计好。
结果就是:
方案越来越复杂。
行动越来越困难。
最后继续拖。
现在我开始接受一个事实:
偿还技术债,不等于一次性还清。
有时候,第一笔还款只是把问题从脑子里拿出来
我以前总觉得:
真正的改变应该是一个很大的动作。
后来发现不是。
很多时候,真正重要的第一步,只是:
把它从“模糊的烦恼”,变成“明确的问题”。
因为模糊的问题很难行动。
“我的人生好像有点不对。”
这个问题没办法执行。
但:
“我有一件事情拖了两年,一直没有处理。”
就不一样了。
它开始有边界。
有时间。
有原因。
甚至可以开始拆解。
我现在越来越喜欢工程思维里的一个习惯:
先观察系统,不急着修。
先把问题记录下来。
先确认现象。
先判断影响范围。
先找到依赖关系。
然后再决定:
到底是修复。
还是重构。
还是接受它暂时存在。
人生也是如此。
不是所有技术债都必须马上清掉。
真正重要的是:
你知道自己欠了什么。
有些债,甚至不是现在才欠下的
还有一个变化,是我最近才意识到的。
很多人生技术债,并不是最近产生的。
它可能来自很多年前的一个选择。
当时那个选择也许完全合理。
甚至可能是当时最优解。
只是环境变了。
自己的阶段变了。
需求变了。
系统已经升级了。
但是当年的代码还在运行。
这其实很像一个老系统。
它当年设计的时候,没有考虑今天这么大的用户量。
所以不能简单地说:
“当初为什么这么设计?”
因为站在当时的环境里,它可能就是合理的。
所以我现在越来越少去责怪过去的自己。
过去的自己,只是在当时的约束条件下做了一个决定。
真正需要做的,是今天的我终于发现:
这段代码已经不适合现在的系统了。
那就改。
不需要羞辱旧版本。
也不需要证明当年的自己错了。
只需要承认:
版本已经变了。
我开始接受:人生不是一次性重构
这可能是我最近最大的一个变化。
以前我总觉得,人生应该找到一个正确答案。
找到方向。
找到定位。
找到最适合自己的事情。
然后坚定地执行。
但40岁以后,我越来越不相信这种“一次设计完成”的人生。
因为现实本身就在变化。
行业在变化。
技术在变化。
家庭在变化。
自己的认知也在变化。
所以人生更像一个持续运行的系统。
你不可能永远停机重构。
你只能:
一边运行。
一边监控。
一边修复。
一边升级。
一边偿还技术债。
甚至有时候,还要允许自己保留一些暂时无法解决的问题。
这不是失败。
这是现实系统的运行方式。
现在,我更关心的是:哪些债正在偷偷变贵?
我以前很容易关注“今天要做什么”。
现在开始关注另外一个问题:
哪些事情如果今天不处理,明天会更贵?
这两个问题看起来很像。
其实完全不同。
“今天要做什么”,容易被紧急程度影响。
而“什么债正在变贵”,会让我重新看到长期成本。
一个能力长期不更新,债在增加。
一个重要关系长期不维护,债在增加。
一个身体问题长期忽略,债在增加。
一个一直不敢面对的选择,债在增加。
一个一直没有开始的小项目,债也可能在增加。
甚至一个一直没有说出口的话,也可能是一笔债。
它们不一定今天爆炸。
但它们一直在产生利息。
所以我现在开始给自己留一个很简单的检查:
这个月,我有没有偿还一笔真正重要的人生技术债?
不要求清零。
甚至不要求完成。
只要开始偿还。
我不知道这笔账什么时候能还完
其实我现在依然有很多没有解决的问题。
有些问题甚至不知道最终应该怎么解决。
但和以前不一样的是:
我不再假装它们不存在。
我开始把它们写下来。
开始观察。
开始拆解。
开始偿还那些可以偿还的部分。
有些债,可以通过一次行动解决。
有些债,需要持续几个月。
有些债,可能需要重新设计整个生活系统。
还有一些债,也许最终发现:
它根本不是债。
只是过去的自己留下的一段旧代码。
真正需要做的,是决定把它删除。
我现在越来越觉得:
人生重构,并不是把过去的自己全部推倒重来。
而是终于愿意打开那个运行了很多年的系统,
看看里面到底藏着什么。
哪些代码还在正常工作。
哪些模块已经过时。
哪些问题已经拖得太久。
哪些技术债正在产生利息。
然后一点一点处理。
今天还一点。
明天再还一点。
不追求一次清零。
只是不再继续逃避。
因为我终于明白:
真正让人生变得沉重的,未必是我们欠了多少债,而是我们明明知道自己欠着,却一直假装系统没有问题。
所以现在,如果让我重新给“人生技术债”下一个定义,我可能会这样写:
人生技术债,就是那些当下可以暂时不处理,却会让未来的自己付出更高代价的问题。
而我现在要做的事情,不是逼自己立刻成为一个全新的版本。
只是开始还账。
一笔一笔。
把那些拖了很久的账,慢慢还回去。
也许这就是40岁以后,一个成年人真正意义上的“系统维护”。
不是让人生从此没有Bug。
而是终于开始认真对待那些一直存在的Bug。
我是语霖。
执笔为语,心落成霖。
继续记录,一个40岁程序员重新设计自己人生系统的过程。
下一次,继续Debug。