第5章 热修复与临时补丁
争吵后的第一周,房子安静得像开了降噪模式。
武康和艾馨儿依然住在同一个屋檐下,但交流精简到了极致。早晨,武康在卫生间洗漱,艾馨儿就等在卧室,听到水声停了才出来;晚上,武康在客厅加班,艾馨儿就把笔记本搬到餐桌,两人隔着五米远,像在两个不同的服务器。
唯一频繁互动的是Bug。这只橘猫敏锐地察觉到了气氛不对,开始担任起尴尬的传话员兼气氛调节器。
“Bug的猫粮快没了。”艾馨儿在餐桌上说,眼睛盯着屏幕。
“好,我下单。”武康在沙发上回应,手指没离开键盘。
五分钟后,Bug跳上沙发,用脑袋拱武康的手。武康低头,发现猫脖子上挂着一张便签纸,是艾馨儿的字迹:“要买海洋鱼口味,别买错了。”
武康撕下便签,揉了揉Bug的耳朵。猫发出满足的呼噜声,像是在说“我只能帮到这儿了”。
第二天的对话更短。
“水电费账单在鞋柜上。”
“嗯,我转你。”
“今晚加班。”
“好。”
第三天,武康回家时发现餐桌上摆着外卖盒,是他常点的黄焖鸡米饭,还是大份加辣。艾馨儿的房门关着,但门缝里透出光。
他对着那盒饭站了一会儿,最后坐下来默默吃完,把垃圾收拾干净,洗碗,擦桌子。整个过程行云流水,像在完成一套预设动作。
深夜两点,武康躺在床上盯着天花板。艾馨儿背对着他,呼吸均匀,但他知道她也没睡着——她睡着时会稍微蜷起来,现在却躺得笔直。
他想说点什么。脑子里过了几十个开场白:“那天是我不对”“你爸后来还生气吗”“我们能不能别这样了”。但每句话都像没通过编译的代码,在出口前就被判定为“有风险”。
最后他翻了个身,把脸埋进枕头。
第二周,武康决定行动。他不能忍受这种“进程挂起”的状态——要么正常执行,要么彻底终止,悬在半空算怎么回事?
他开始查资料,关键词从“见家长攻略”变成了“吵架后如何挽回”。知乎高赞回答第一条:制造浪漫惊喜,真诚道歉。
“浪漫惊喜……”武康对着屏幕皱眉。这比写分布式系统还难。
他想起艾馨儿提过喜欢某个牌子的香薰蜡烛,说烧起来有雨后的青草味。于是下单,收货,藏在衣柜最里面。又翻出艾馨儿收藏的美食视频,找到了一个“半小时搞定烛光晚餐”的教程。
周五晚上,他提前下班,对着视频手忙脚乱地煎牛排。第一次煎老了,第二次又太生,第三次终于勉强及格。摆盘时发现自己没有欧芹点缀,临时从阳台盆栽里掐了几片薄荷叶充数。
蜡烛点上,灯光调暗,背景音乐选了艾馨儿喜欢的游戏原声带。武康站在餐桌前检查了一遍:牛排、蜡烛、红酒(其实是葡萄汁,因为两人都不喝酒)、还有一张手写卡片。
卡片上的话他改了七遍。第一版太正式,第二版太肉麻,第三版又太敷衍。最后他写:“对不起,我在重新编译‘相处模块’。”
写完他就后悔了——怎么又是这种比喻?但他来不及重写了,因为门口传来钥匙转动的声音。
艾馨儿推门进来,愣了一下。
“这……”她放下包,目光从餐桌扫到武康脸上,“是什么?”
“晚饭。”武康干巴巴地说,“我做的。”
艾馨儿慢慢走过来,看了看牛排,又看了看蜡烛,最后拿起那张卡片。她看了很久,久到武康开始觉得后背冒汗。
“武康,”她终于放下卡片,拉开椅子坐下,语气平静,“你知道问题在哪吗?”
“我的表达方式太像机器?”武康站在桌子对面,像个等待答辩的学生。
“不完全是。”艾馨儿转动着蜡烛底座,看火苗摇晃,“问题在于,你连道歉都在‘按攻略操作’。香薰蜡烛、晚餐、卡片——这些都是标准流程里的‘和解道具’。我猜你还看了什么‘三步挽回感情’之类的文章,对吧?”
武康哑口无言。他确实看了,还做了笔记。
“但我要的不是这个。”艾馨儿抬起头看他,眼神复杂,有疲惫,有失望,还有一点点……心疼?“我要你真实的情感。哪怕笨拙、不完美、甚至错误。就像我们最初在游戏里那样。”
她顿了顿,声音轻下来:“你记得吗?有一次在《双人编程》里,你为了破解那个动态迷宫,写了段特别绕的代码。”
武康记得。那是三年前的事了。那个迷宫的规则会随时间变化,他试图用一套复杂的条件判断来应对所有可能,结果代码越写越长,最后把自己都绕晕了。运行时报错,关卡失败。
“但你当时在语音里笑了。”艾馨儿说,嘴角微微弯起,“你说‘这代码蠢得我自己都看不懂’。然后我们从头开始,用最笨的办法,一个格子一个格子试。”
武康也记得。那次他们花了四个小时,失败了十七次,最后通关时已经是凌晨五点。但整个过程里他们没有互相指责,没有焦虑,反而一直在笑——笑自己蠢,笑游戏设计者变态,笑天都快亮了还在跟一串虚拟代码较劲。
“那一刻我觉得特别真实。”艾馨儿的手指轻轻敲着桌面,“后来你越来越厉害,预判越来越准,代码越来越优雅。游戏里我们几乎不失败了,但你也越来越……不允许自己出错。现实里也是。”
武康拉开她对面的椅子坐下。牛排已经凉了,油脂凝固在盘子上,像一幅失败的艺术品。
“我害怕出错。”他终于说,声音低得像在自言自语,“游戏里出错可以重来,可以读档。但现实里……我怕一步走错,这个副本就崩了。我怕你说‘我们不合适’,怕你爸妈觉得我配不上你,怕我们像那些游戏里的NPC情侣一样,因为某个选项选错就走向坏结局。”
他说得很慢,每个字都像从很深的地方挖出来。这不是他擅长的表达方式——他擅长列数据、讲逻辑、分析概率。但此刻,那些东西都用不上。
艾馨儿静静听着,没有打断。
“小时候我爸妈总吵架。”武康继续说,眼睛盯着桌布上的花纹,“为钱,为家务,为我考了多少分。每次他们吵,我就躲在自己房间里打游戏。因为游戏世界有明确规则——你打怪,就能升级;你完成任务,就能拿奖励。只要你够强、够聪明,就一定能赢。”
他苦笑了一下:“后来我发现,我好像把这种思维带到生活里了。找工作,我研究面试攻略;追你,我查恋爱指南;见你爸妈,我准备话题库。我以为只要攻略够全,准备够充分,就能……就能通关。”
艾馨儿伸手,握住他放在桌上的手。她的手很暖。
“我也一样。”她说,“我前男友,分手时说我不像在谈恋爱,像在组队刷本。他说我太理性,遇到问题第一反应是分析,不是拥抱。”
武康抬头看她。
“他说的其实没错。”艾馨儿转开视线,看着跳动的烛火,“我们第一次吵架后,我第一反应是什么你知道吗?我在脑子里画流程图——‘矛盾触发-情绪分析-解决方案-预防机制’。我甚至想过要不要建个共享文档,记录我们的所有分歧和解决过程。”
武康愣住了,然后笑了。是那种无奈的、恍然大悟的笑。
“所以,”他说,“也许我们俩,都是把现实当游戏在玩的人。”
“但至少我们玩的是同一个副本。”艾馨儿也笑了,眼睛弯起来,那个酒窝又出现了,“而且现在我们知道问题在哪了。”
那晚他们没有吃那份冷掉的牛排,而是点了外卖,坐在茶几前吃麻辣烫。电视开着,放着没人看的综艺节目,只是当背景音。Bug跳上沙发,挤在他们中间,满意地咕噜着。
他们聊到很晚。没有用任何游戏比喻,没有讲任何攻略技巧。武康说起他爸妈后来离婚了,妈妈去了深圳,爸爸留在老家,他过年都不知道该回哪儿;艾馨儿说起她前男友其实人不错,只是他们想要的东西不一样,他想要轰轰烈烈,她想要细水长流。
“你想要什么?”武康问。
艾馨儿想了想:“我想要……不用时刻想着怎么‘通关’的生活。想要可以犯错,可以幼稚,可以偶尔摆烂的关系。”
“摆烂是指?”
“比如今天。”艾馨儿指了指茶几上的麻辣烫包装盒,“我们本来该严肃谈话,结果点了外卖,看无聊综艺,一句话都没聊正事。”
武康点点头:“这叫‘进程挂起’,不是摆烂。”
“看,你又来了。”
“对不起。”武康立刻说,但这次是笑着说的。
凌晨一点,他们收拾桌子。武康洗碗,艾馨儿擦灶台。水流声里,艾馨儿忽然说:“下周我爸妈要回老家了,走之前想再跟你吃顿饭。”
武康手里的盘子差点滑掉。
“别紧张。”艾馨儿用抹布擦掉溅出来的水,“这次不用攻略。你就……做你自己。说错话也没关系,我爸其实没那么小心眼,他只是有点老派。”
“那要是又说错呢?”
“那就错了呗。”艾馨儿耸耸肩,“最多被他念叨几句,又不会世界末日。”
武康把洗好的盘子放进沥水架,看着水珠顺着边缘滴落。他突然觉得,也许他们需要的不是一次完美的“版本更新”,而是一个可以容忍bug、接受补丁、偶尔需要重启的系统。
那晚睡觉时,艾馨儿没有背对他。她侧躺着,面对武康的方向,呼吸渐渐平稳。武康伸手,很轻很轻地碰了碰她的头发。
窗外又下雨了,淅淅沥沥的,像在给这个夜晚打上一串省略号。
他们以为这次谈话是彻底的版本更新。后来才明白,那只是一次临时的热修复——解决了眼前的崩溃,但底层的不兼容还在那里,像一颗埋在代码深处的定时炸弹。
只是当时,雨声太温柔,夜晚太安静,让人误以为所有问题都已经编译通过了。