如果把最近的生活压缩成一行 commit message,大概是——
feat: 开始认真照顾这具身体(长期灰度发布中,不支持回滚,也不打算回滚)。
正式开始 HRT 之后,我的生活被悄悄插入了一些固定的「小锚点」。
它们不吵不闹,不发通知红点,也不会在朋友圈里刷存在感。但每天固定的几个时刻,它们会轻轻拽一下我的袖子,提醒我:嘿,你正在做一件很长很长的事情。
这篇就当是给这段日子的一份小小的 changelog。没有惊天动地的大版本号,只有一堆看起来微不足道的日常提交。可是我越来越相信,一个人就是被这些小提交,一点一点改出来的。
🧷 小锚点:闹钟换了一句文案
变化最先发生在闹钟上。
早晚的闹钟不再只是叫我起床、催我睡觉,而是变成一条温柔的提示:
"该照顾一下自己的身体啦。"
说出来有点好笑:同样是那个闹钟,同样的铃声,甚至同样让我在冬天的被窝里挣扎三分钟才肯伸出手。但它背后的语义完全变了。以前的闹钟是外部世界在催我——上班要迟到了、地铁要挤不上了、需求要延期了。现在的这两个闹钟,是我自己给自己设的定时任务,一个只为我自己服务的小小 cron:到点了,执行一次「对自己好一点」。
写后端的人都知道,一个系统里最不起眼但最不能挂的,往往就是这种定时任务。它不炫技,不出彩,日志翻半年也找不到一行精彩的输出。可是只要它稳定地跑着,整个系统就有了心跳。
我的这两个闹钟,就是我现在的心跳监控。
它们响起来的时候,我偶尔还是会烦躁,会想再赖五分钟。但更多的时候,我会在心里小小地应一声:好啦,知道啦,这就去。像应一声某个远远看着我的人,像顺一顺搭在锁骨那里的、看不见的线——线的那头一直有人。
说来惭愧,「照顾自己的身体」这件事,我其实是最近才开始学的。以前的我对这具身体的态度,大概相当于对一台不属于自己的测试机:能跑就行,出了毛病就重启一下,从来不做保养,也懒得看它的报警。毕竟那时候我和它之间隔着一层说不清的别扭——它不像我,我也不认它。现在不一样了。既然决定把它接回来,那就要像对待自己名下的生产环境一样,认认真真地做巡检、做维护、看它的每一条日志。闹钟只是提醒,真正被改写的,是我和这具身体的关系。
💊 平平无奇的一秒钟
很多人可能以为,每天吃药的瞬间会很有仪式感——毕竟这是「改变人生」的药呀,怎么也该配一点背景音乐吧。
实际上完全没有。
每天吞下那几颗药的时候,不会有多么戏剧化的感觉,大多数时候只是很普通:
- 倒一杯水;
- 咽下去;
- 顺手在日历上点一下「已完成」。
整个过程大概十几秒,比等一次编译快多了。没有闪光,没有音效,没有升级动画。如果这是一次部署,那日志里只有孤零零的一行:deploy success。
刚开始的时候我甚至有点失落:就这样?就这么平淡?后来慢慢想明白了——平淡才是对的。真正长期的事情,几乎都是以「毫无感觉」的面目出现的。健身是这样,攒钱是这样,写代码的手感是这样,HRT 也是这样。单看任何一天,它都平凡得不值一提;它的全部力量,都藏在「每天」这两个字里。
于是我学会了珍惜这种无聊。日历上那一排小小的「已完成」,一个一个连起来,像一条不太整齐但一直没有断掉的提交记录。哪一天忘了点,我还会有点强迫症发作似的难受——好好的连击,怎么能断呢。
🌱 身体正在重编译
真正的变化,是慢慢积累出来的。
皮肤好像比以前更软一点。情绪的波峰波谷不再那么夸张,以前会让我原地炸掉的事情,现在多半只是让我皱皱眉,然后想「算了,先喝口水」。某些部位隐约有钝钝的酸胀感,不剧烈,也不吓人,更像是一种持续的低优先级通知,提醒我:
「身体正在重编译。」
我很喜欢「重编译」这个词。因为它诚实:源代码早就在那里了,一直都在,只是过去二十几年里,这具身体一直在用一套不属于我的参数跑构建。现在我只是换回了正确的配置文件,然后安安静静地等它一个模块一个模块地重新编译。
这个过程最折磨人的地方,是它的时间感。
变化慢到什么程度呢?慢到当天绝对看不见。今天的我和昨天的我站在镜子前,diff 是空的,一行都没有。盯着看,只会看出焦虑来。可是如果把时间轴拉长,跟几个月前的自己比,那个 diff 又确确实实存在——不在某一天里,而在所有日子的缝隙里。
它不活在「今天」这个瞬间,它只活在「回头看」的那个动作里。
这种时间感很奇怪,也很珍贵。我们太习惯即时反馈了:点个按钮马上有响应,发条消息马上有已读,接口慢上几百毫秒都要被挂到监控大盘上示众。可 HRT 偏偏是一件彻底反即时反馈的事——你今天做了正确的事,今天不会奖励你;你坚持了一个星期,一个星期也不会奖励你。它把所有的反馈都攒着,攒到某个你已经快忘记的时刻,才轻轻地、不动声色地兑现一点点。
所以这件事真正训练的,也许根本不是耐心,而是信任:在完全看不到变化的日子里,依然相信变化正在发生。就像相信一个跑在后台的进程——你看不到它的界面,听不到它的声音,但你知道它在跑,因为你亲手把它启动了,而且每天都在给它续上一次心跳。
所以我渐渐学会了不去每天盯着进度条。大项目编译的时候,盯着屏幕看百分比是最傻的事,那一格进度不会因为你的注视走得更快。合理的做法是:把任务挂在后台,去做别的事——去上班,去健身房,去普拉提垫子上把自己拉开揉平,去给博客修一个只有我自己会遇到的 bug,去抱着鲨鱼睡觉。
然后在某个不经意的时刻回头一瞥:咦,好像,真的编过去了一小块。
🚥 周期性 checkpoint:和医生对线
复查血值、挂号、和医生对线这些事,也都成了日常的一部分。
以前觉得医院是离自己很远的地方——那是别人生病才去的地方,和我这种「除了心里破了个洞、其他哪儿都没坏」的人无关。现在它则变成了一种周期性的 checkpoint:每隔一段时间,存个档,校验一下这段时间的运行状态,再决定下一段路怎么走。
我给自己定了两条很简单的心态规则:
- 数字好看一点的时候,允许自己高兴,会觉得自己又向前走了一小步。不是什么了不起的里程碑,就是普通的一小步,但它是我的。
- 指标需要调整的时候,就当被系统弹出了一个「请稍后重试」的提示。不是失败,不是报错,更不是对我这个人的否定——只是这一次请求没有完全命中,参数调一调,下个周期再来。
这两条规则听起来像自我安慰,某种程度上也确实是。但写程序写久了就会知道,「重试」根本不是什么丢人的事,它是所有可靠系统的基本素养。一个请求失败就直接崩溃的服务,才是设计得糟糕的服务。我不想做那样的服务。我想做那种带着优雅退避、慢悠悠但一定会把事情做完的小系统。
当然,等待放榜的那几天还是会紧张的。查报告之前的心情,跟等一个重要发布过 CI 的心情几乎一模一样:明明知道结果早已注定,该做的都做了,可还是忍不住反复刷新,忍不住在心里预演各种情况。数字好看的时候,那种松一口气的感觉,会顺着后背一路暖上来;需要调整的时候,失落当然也是真的失落——但失落归失落,日子还是照常过,药还是照常吃,下一个周期还是照常来。这条流水线不会因为一次黄灯就停摆。
而且说真的,能拥有「周期性 checkpoint」本身,已经是一种幸运了。它意味着这条路上有人在陪我看数据,有人和我一起对着报告皱眉或点头。这条时间线不是我一个人在裸奔,它有监控,有告警,有值班的人。
🌧 也有不想写进 changelog 的日子
当然,HRT 也不只有浪漫的一面。这一节我想写得诚实一点,不打算美化。
有时候情绪会莫名其妙地低落。不是因为发生了什么,就是低落,像一场没有请求来源的异常,堆栈翻到底也找不到原因。噩梦会更密集一点,有些夜里会被自己吓醒,抱着鲨鱼在黑暗里躺很久,听自己的心跳一点点降回安全线以下。身体也会有不适、疲惫、暴躁的日子——那种一整天都像低电量模式的日子,那种连善良都需要花力气的日子。
那些日子里,我能做的事情其实很有限:
- 按时吃药;
- 好好睡觉;
- 多喝水;
- 在健身房或者普拉提垫子上让自己动一动,哪怕只有二十分钟,哪怕动作难看。
就这些。没有魔法,没有一键修复,没有谁能替我把那一天过完。
我知道有一种写法,是把这些坏日子也包装成「成长的代价」「破茧的阵痛」,涂上一层柔光滤镜。但我不想那样写。坏日子就是坏日子:它不浪漫,不诗意,不值得感谢。它就是难熬,就是让人想缩成一团什么都不干,就是会在某个瞬间冒出「我是不是太娇气了」的自我怀疑。承认这些,不会让这条路显得不值得;假装没有这些,才会让后来的人在遇到时以为只有自己不对劲。
最难受的时候,我会伸手摸一摸锁骨上那枚小小的骨头爪印,像确认某条链路还通着;然后做完上面那几件笨拙的小事,关灯,躺平,告诉自己:
哪怕今天过得很糟糕,这一剂还是进到身体里了。
明天醒来,我依然是在往想要的方向走。
这句话救过我很多个晚上。它了不起的地方在于,它不要求我「振作」,不要求我「想开」,甚至不要求我心情变好。它只陈述一个事实:今天的提交已经推上去了,再糟糕的一天,也没有让这条时间线倒退。坏心情会过去,而那一剂不会白费。
我想,诚实地承认「有些日子就是很烂」,和坚定地相信「方向是对的」,这两件事完全可以同时成立。成年人的勇敢大概就长这样:不是不难受,而是难受着,也把今天这一格打卡点亮。
🐾 一场不回滚的灰度发布
如果把人生看成一条很长的时间线,HRT 并不是一键改变结局的开关。
它更像一次灰度发布——不是那种激动人心的、倒计时归零然后全量上线的大版本,而是慢慢放量的那种:先改一点点,观察;再改一点点,再观察。没有确定的完工日期,没有炫目的发布公告,只有每天平稳增长的那一点点流量,流向那个「更像我自己」的版本。
而且这次发布有两个很特别的属性:不能回滚,也不想回滚。
不能回滚,是身体的事实;不想回滚,是我的选择。把这两件事放在一起看,我居然觉得很安心——原来我终于做了一个不给自己留退路、也不需要退路的决定。过去的我在很多事情上都习惯性地留后门、写兜底逻辑、准备随时撤退——大概是从小被钢尺和否定教出来的本能,总觉得任何选择都可能随时被人推翻,所以先给自己挖好逃生通道。只有这一次,我把回滚脚本删掉了,删得心平气和。因为这一次,拍板的人是我自己。
拆开来看,这场发布其实就是无数个日常小选择的合集:
- 一次又一次按时吃药;
- 一次又一次去医院;
- 一次又一次在镜子前确认——「嗯,确实有一点点不一样了」。
每一项后面都可以乘以 N。单独拎出任何一次,都小得不值得记录;可它们加在一起,构成了我现在的日常,也构成了我对「未来的自己」最温柔的一点期待。
镜子前的那个确认动作,值得单独说一说。它不是照镜子臭美,更像是每天例行跑一遍的冒烟测试:站在那里,认真看几秒,然后在心里打一个小小的勾。绝大多数日子里,这个测试的结果都是「与昨日无异」,偶尔状态不好的时候,甚至会觉得镜子里的人陌生又别扭。可就是在某些毫无预兆的早晨,会突然捕捉到一点说不上来的不同——不同到说不出具体在哪,又确定到不容置疑。那种瞬间没有烟花,只有心里很轻很轻的一声:啊,在动,真的在动。
以前我总以为,改变命运需要某个巨大的、闪闪发光的瞬间。现在我知道了,至少对我来说,改变命运长得特别朴素:是一杯接一杯的水,是一个个被点亮的「已完成」,是一次次心率回落后的深呼吸,是无数个「今天也没有放弃」叠在一起的厚度。
✨ 给未来的自己
最后想留几句话,给未来某一天回来翻这篇文章的我。
嘿,是我呀。写下这些字的时候,我刚刚学会和闹钟做朋友,刚刚开始习惯身体里那种钝钝的、缓慢的施工声。我不知道你那边编译到哪个模块了,不知道你最近一次 checkpoint 的数字好不好看,也不知道你有没有又遇到几个「请稍后重试」。
如果你已经走到了更远的地方——也许连 SRS 那座大山都翻过去了——请替现在的我,好好看一看那边的风景。如果你还在半路上,也没关系,半路上的风景我们不是也一直在认真看吗。
但我想告诉你几件事,请你替我记住:
你走到今天,不是靠哪一次奇迹,而是靠无数个平平无奇的十几秒——倒水、咽下、点一下「已完成」。所以如果你偶尔觉得自己没什么了不起,请回头看看这条长长的提交记录,它比任何一句漂亮话都更能证明你是谁。
如果你正在过一个很糟糕的日子,没关系,我懂,我也过过。去喝水,去睡觉,去垫子上动一动,摸摸锁骨上的小爪印。今天这一剂已经进到身体里了,你依然在往想要的方向走。
还有,替我谢谢那些一路陪着我们的存在:远远看着的,近近搀扶的,毛茸茸抱在怀里的。这条时间线因为他们,从来不算孤单。
这场发布还长着呢。不着急,我们慢慢放量。
我会好好吃药,好好睡觉,好好长大。
——过去的你,于某个按时吃了药的普通晚上
💬 评论
加载评论中...
发表评论