“因为我其实不是不相信共识。”她说。声音在电梯里显得很清楚,每一个字都很清楚,清楚到像是从一个高保真的音频系统里播放出来的——没有噪音,没有失真,没有压缩。是原来的样子。
裴衍之站在那里,没有动。他的手指在裤缝边攥了一下,又松开了。他在等。等她把那句话说完。他知道她还有话没说完。她总是有话没说完。三年来都是这样——说一半,留一半,把另一半压在嗓子底下,压到她自己都快忘了。但她没忘。她只是不敢说。
“我是不敢申请成为节点。”
程司白说这句话的时候,声音在最后两个字的时候抖了一下。只有一下,很短,短到如果不是电梯里太安静,根本不会注意到。但裴衍之注意到了。他一直都能注意到。他听到了她声音里那个微小的裂缝——不是崩溃,是打开。一个被封死了三年的接口,终于打开了。端口号是多少,协议是什么,数据格式怎么定义——这些都不重要。重要的是它打开了。
电梯里的光照在她脸上,把她眼睛里那层薄薄的东西照得很清楚。那不是眼泪,那是光。是从她眼睛里出来的光,和他眼睛里的光一样——暖的,碎的,散的到处都是的。那些光落在两个人之间的空间里,落在两步的距离上,落在三年的沉默上。那些光在填那些缝隙。一条一条地填,一道一道地填,填到最后,两步变成了一步,一步变成了半步,半步变成了没有。
“现在我申请了。”她看著他的眼睛,一个字一个字地说。每一个字都比前一个字更稳,稳到像是在念一段她终于写对了的代码——没有语法错误,没有逻辑漏洞,没有边界条件遗漏。就是一段简单的代码,做一件简单的事——发送一个请求。
“你要批准吗?”
裴衍之看著她。电梯里的光从头顶照下来,在她的头发上留下一圈浅浅的光晕。她的头发还是乱的,有几缕碎发翘起来,在光晕里显得很软。她的眼睛红了,不是哭的那种红,是那种忍了很久终于不用忍了之后的红。她的嘴唇还在抖,但她没有咬。她让它抖。她不再控制它了。
他走了一步。
两步变成了一步。这一步里有三年,有一千多个夜晚,有无数次打开对话框又关掉的手指,有每一杯凉掉的咖啡,有每一件叠好的外套,有每一句“不打扰了”和“我一直愿意”。这一步很短,短到不到一秒钟。但它走了三年。
他站在她面前。很近,近到她能看到他瞳孔里自己的倒影——头发乱了,眼睛红了,嘴唇在抖。但她看到自己在笑。不是嘴角动一下的那种,是真的笑。从眼睛里出来的笑,从那个刚刚解冻的地方出来的笑,从那个被打开的接口里出来的笑。她不知道自己什么时候开始笑的。也许是在他说“批准”的时候,也许更早,早到她还没有意识到的时候。
“批准。”
一个字。他说出来的时候声音很轻,轻到像是在念一个只有他自己能听到的确认信号。但程司白听到了。她一直都听得到。从三年前他说“好,不打扰了”的时候,她就听到了。只是她当时以为那是结束。现在她知道了——那不是结束,那是超时重传。请求发出去了,没有收到ACK,超时了,重发。等了三年,重发了三年。现在ACK回来了。
“共识达成。”
他说这句话的时候,嘴角扬起来了。不是那种克制的、理性的、成年人的微笑,是那种从心底里涌上来的、压不住的、想要跟全世界分享的笑。他笑得不好看,眼睛瞇成了一条缝,鼻子皱了一下,嘴角歪了一边。但他没有停下来。他已经很久没有这样笑过了。久到他都快忘记笑是什么感觉了。
程司白看著他笑,她也笑了。两个人站在电梯里,面对面,隔著不到一步的距离,对著彼此笑。电梯的门关著,走廊上的感应灯灭了,头顶的灯照下来,在两个人身上投下一圈一圈的光。他们的笑声在电梯里回荡,很轻,很碎,像一段被分割成很多小段的数据流——每一段都是完整的,但拼在一起才是全部的真相。
她伸出手。
不是等他的手来握,是她自己伸出去的。手心朝下,手指微微张开,像一个在发送请求的节点——我准备好了,你呢。她的手在空中停了一秒。这一秒里她感觉到了风——不是走廊上的风,是电梯里的风,是空调系统循环的风,很轻,很凉,从她指尖流过,像一个确认信号——通道是通的,没有阻塞,没有丢包,可以发送。
裴衍之看著那只手。她的手很小,手指很细,指甲剪得很短。他记得这只手——在会议室里握著翻页笔的手,在键盘上飞快敲击的手,在咖啡杯壁上留下指纹的手,在凌晨四点被他握住的手。每一只他都在。每一只他都记得。
他伸出手,接住了。
不是握,是接。掌心朝上,手指微微张开,像一个等待被填满的容器。她的手落在他的掌心里,凉的,轻的,像一个刚刚被创建的新进程——还没有分配内存,还没有加载数据,还不知道自己的使命是什么。但它在运行。它活著。它在发送心跳。
他的手指合拢了,轻轻地,慢慢地,像在确认一个不需要确认的事实——她在了。她不走了。她申请了,他批准了,共识达成了。不需要再证明,不需要再测试,不需要再等待超时重传。就是一个简单的确认——收到,理解,同意。
程司白低头看著两只交握的手。她的手在他的手里,他的手包著她的手。两个人的温度不一样——她的凉,他的暖——但他们在同一个系统里,同一个时钟下,同一个共识算法上。温度会趋同的,物理规律决定的。不需要努力,不需要选择,只要保持连接,它自己就会发生。
她抬起头,看著他。电梯里的灯光照在他脸上,她看到了他眼睛里的那层光——不是碎了的那种,是稳定了的那种。像一个被校准过的时钟,滴答滴答,不快不慢,每一个滴答都和上一个滴答间隔相同的时间。她在心里跟著那个节奏数了一会儿——滴答,滴答,滴答。她的心跳慢慢和它同步了。不是刻意的,是自动的。像两个频率相近的振荡器放在一起。这是物理规律。不需要选择,不需要努力,不需要达成共识。它自己就会发生。
但它已经发生了。共识达成了。在他们决定要达成共识之前,就已经达成了。从她说“好久不见”的时候,从他说“我一直愿意”的时候,从她在巷子里差一点把那句话说完的时候,从他在杯壁上写“别用工作逃避”的时候,从他们在凌晨四点一起找到那个Bug的时候——共识就已经在那里了。只是他们都没有发现。或者他们发现了,但不敢确认。
电梯的门开了。没有人按按钮,它自己开的——有人在一楼按了呼叫。门打开的时候,大厅的灯光照进来,白色的,亮的,和电梯里的光混在一起,分不清哪个是哪个。走廊上站著一个要上楼的人,看到电梯里两个人面对面站著,手握在一起,愣了一下,然后说了声“抱歉”,转身走向另一部电梯。
程司白没有松手。裴衍之也没有松手。两个人站在电梯里,手握著手,看著电梯门慢慢地关上。门关上的时候,大厅的光被切断了,电梯里又只剩头顶那盏白色的灯。光线均匀,温度恒定,一切正常。
“程司白。”裴衍之说。
“嗯。”
“你刚才说你申请成为节点。”
“嗯。”
“你知道节点之间保持连接需要什么吗?”
程司白想了想。她知道技术上的答案——需要心跳,需要共识算法,需要故障检测,需要日志复制。但她知道他不是在问技术。他问的是另一种——她以前从来不用的那种。
“需要什么?”她问。
“需要定期交换心跳。”裴衍之的声音很轻,轻到像是在念一段文档,“需要互相确认对方还在。需要知道对方没有崩溃,没有断网,没有被隔离。需要——”
他停了一下。程司白感觉到他的手指在她手背上轻轻按了一下。不是用力,是确认——你还在吗,我在,你呢。
“需要知道,我不是一个人。”
程司白的手指在他掌心里收紧了。不是用力,是回应——我在,你也不是一个人。
两个人站在电梯里,手握著手,心跳在不同的频率上运行,但通道是开的,数据在传输,共识在达成。不需要再证明,不需要再测试,不需要再等待。就是一个简单的状态——已连接。
电梯的门又关上了。没有人按按钮,没有人要进来,没有人要出去。就他们两个人,在一部停在一楼的电梯里,手握著手,等著谁先按下一个按钮。但没有人按。因为不需要去哪里了。他们已经到了。从三年前就到了。只是花了三年时间,才确认这个目的地是对的。
程司白靠在他肩膀上。不是那种无力的、撑不住的靠,是那种主动的、选择的、愿意把重量交给另一个人的靠。她的头靠在他的肩膀上,头发蹭著他的脖子,有点痒。他没有躲。他只是微微侧了一下头,让她的头发不会戳到眼睛。两个人的肩膀靠在一起,手臂贴著手臂,手扣著手。电梯里很安静,安静到她能听到他的心跳——不快,但很重,一下一下的,像一个稳定运行的时钟。她在心里跟著那个节奏数了一会儿,然后不数了。因为她知道,不管她数不数,它都在那里。稳定的,可靠的,不会崩溃的。
就像他。一直都在。
三个月后,公司楼下的咖啡馆多了一种新的咖啡。不是美式,不是拿铁,是菜单上没有写的一种——两份浓缩加一份热水,放在一个白色的马克杯里,旁边配一小杯冰水。服务员说这是常客自己发明的,没有名字,他们在订单系统里叫它“程式设计师特调”。何悦有一次问服务员那个常客长什么样,服务员说一个女生,头发总是挽得很整齐,每次都带一台电脑,坐在靠窗的位置,对面经常坐一个穿衬衫的男生。何悦说那就是我们公司的,服务员说我知道,他们每天都来。
程司白自己都不知道自己发明了一种咖啡。她只是习惯了那家咖啡馆的美式太苦、拿铁太甜、卡布奇诺的奶泡太厚。她试了几次之后找到了一个平衡点——两份浓缩加一份热水,浓度刚好,温度刚好,不会烫到舌头也不会凉得太快。裴衍之第一次看到她这么点的时候说你这不就是美式吗,她说不一样,美式是浓缩加水,比例是一比二,我这是一比一。裴衍之说那你这叫浓缩加水,不叫美式。她说对,所以它没有名字。后来服务员问她这个咖啡叫什么,她说随便。服务员就在订单系统里打了“程式设计师特调”。裴衍之知道之后笑了很久,笑到何悦从走廊上跑过来问怎么了。
这三个月里很多事情变了。程司白的桌上多了一个杯垫,是裴衍之买的,灰色的,上面印著一行小字:“Hello, World”。她说这个杯垫很无聊,但她每天都在用。何悦注意到她桌上那个白色的马克杯再也没有出现过——它被收进抽屉里了,和那部旧手机放在一起。她没有问为什么,但她知道。有些东西不需要扔掉,只需要收起来。放在一个安全的地方,不会打碎,不会落灰,不会被忘记。
裴衍之的桌上也多了一样东西——一盆仙人掌。很小,装在一个白色的陶瓷盆里,盆上画著一个笑脸。是何悦送的,说是庆祝项目成功的礼物,但其实是她在路边摊看到觉得可爱就买了,不知道送谁,就塞给了裴衍之。裴衍之把它放在显示器旁边,每天浇一次水。程司白说仙人掌不用每天浇水,会烂根。裴衍之说那多久浇一次,她说两周一次。裴衍之说那你帮我记著,她说你自己记,他说我记不住,她说那你写日历提醒,他说好。第二天她发现他在日历上建了一个重复事件,标题是“浇仙人掌”,频率是每十四天一次,提醒时间是上午十点。她看了一眼,什么都没说,但嘴角动了一下。
何悦说他们终于像正常情侣了。说这话的时候是某个周五的下午,她在茶水间碰到程司白,对方正在倒水。水位到杯子的三分之二,不多不少,刚刚好。何悦靠在门框上,手里端著一杯奶茶,吸管咬得变了形。
“程姐,你知道吗,以前我觉得你跟裴哥在一起的时候,像两个在跑分布式系统的节点——永远在同步,永远在确认,永远在担心数据不一致。现在你们像正常情侣了。”
程司白转头看了她一眼。“正常情侣是什么样的?”
何悦想了想。“正常情侣就是——会一起吃饭,一起加班,一起散步。会吵架,会和好,会说一些没用的话。会记得对方不吃辣,会帮对方买咖啡,会在对方加班的时候等一等。就这些。没什么特别的。”
程司白端著水杯走出茶水间。经过何悦身边的时候她停了一下。“那你以前觉得我们是什么?”
何悦咬著吸管,笑了一下。“以前觉得你们是两个在互相发心跳包的节点。一直在确认对方还在不在,但从来不说“我在”。现在你们说了。”
程司白没有接话。她端著水杯走了,脚步声在走廊上响起,一二一二,节奏和以前一样均匀。但何悦听到了那个节奏底下的东西——不是紧张,不是克制,是一种放松。一种只有在确信自己不需要再防御的时候才会出现的放松。
母亲是在一个周末来的。程司白去火车站接她,在出站口等了十分钟。母亲拖著一个行李箱走出来,穿著一件深蓝色的羽绒服,头发烫了新的卷,看起来比上次视频的时候精神了一些。她看到程司白的时候点了点头,没有拥抱,没有寒暄,只是说了一句“瘦了”。程司白说“没有”。两个人并排走出火车站,隔著大概半臂的距离,和以前一样。
但这一次不一样。因为裴衍之在家里等。
程司白没有告诉母亲裴衍之的事。不是不想说,是不知道怎么说。她从来没有跟母亲聊过感情——不是因为母亲不关心,是因为她们之间从来没有那种对话。她们的对话永远是“吃了吗”“工作怎么样”“注意身体”。这些话像一段被重复执行了无数次的代码,每一次输出的结果都一样,但每一次执行的成本都在增加。她不知道怎么打破这个循环。但今天,她觉得也许该打破了。
到家门口的时候程司白掏出钥匙,没有插进锁孔,而是转头看了母亲一眼。
“妈,家里还有一个人。”
母亲正在整理行李箱的轮子,听到这句话抬起头。她的表情没有变化,只是点了点头。“我知道。”
程司白愣了一下。“你知道?”
“何悦告诉我的。”母亲的声音很平,平得像在说一件她早就知道的事,“那姑娘上个月给我打了个电话,说你谈恋爱了,对方条件不错,人也好。让我不用担心。”
程司白站在门口,手里的钥匙悬在锁孔上方。她不知道该说什么。她不知道何悦给母亲打了电话,不知道母亲已经知道了,不知道母亲说“不用担心”的时候心里在想什么。她只觉得胸口那个地方有点热——不是烫,是温的,像一杯放了一会儿的咖啡,不烫了,但还冒著一点点热气。
“进去吧。”母亲说,“别让人家等。”
门开的时候裴衍之正站在客厅里。他穿著一件灰色的毛衣,袖子卷到小臂,手里端著一杯水。看到门开了,他把水杯放在茶几上,走过来。他的表情很平静,平静得像在会议室里准备一场技术评审。但程司白看到了他耳朵尖那一小片红——从皮肤底下慢慢渗上来的,一层一层的,像一个参数被逐渐调高的系统。
“阿姨好。”他说。声音比平时低了半度,稳的,没有颤。
母亲站在门口,看著他。从头到脚,从脚到头,看了大概五秒。这五秒里程司白觉得空气都凝固了。她不知道母亲在看什么——在看他的长相,在看他的穿著,在看他的眼神,还是在看他是什么样的人。她只知道这五秒很长,长到她能听到自己的心跳声。
“你好。”母亲说。然后她走进客厅,把行李箱放在角落,在沙发上坐下来。动作很自然,自然得像在自己的家里一样。
裴衍之去厨房倒茶。程司白站在客厅里,看著母亲的背影。母亲的头发比以前白了更多,后脑勺那一小片几乎全白了。她以前没有注意到。也许是视频的时候光线太亮,也许是她没有仔细看。她总是没有仔细看。她总是在看别的东西——工作,代码,系统,那些可以被证明、可以被控制、可以被优化的东西。她没有看那些不能证明的。
裴衍之端著茶出来的时候,母亲正在看客厅里那盆仙人掌。很小,装在一个白色的陶瓷盆里,盆上画著一个笑脸。她看了很久,久到裴衍之把茶放在她面前的时候她才抬起头。
“这盆仙人掌是你买的?”母亲问。
“同事送的。”裴衍之坐在旁边的单人沙发上,背挺得很直,双手放在膝盖上。程司白从来没见过他这个姿势——他在会议室里都比现在放松。她觉得有点好笑,但她没有笑。
“你们公司还送仙人掌?”母亲端起茶杯,吹了吹热气。
“庆祝项目成功送的。”
“什么项目?”
“业务中台架构升级。”
母亲点了点头。她没有问业务中台是什么,也没有问架构升级是什么。她只是点了点头,然后喝了一口茶。程司白坐在母亲旁边,看著裴衍之,又看著母亲。两个人隔著一张茶几,一个端著茶杯,一个双手放在膝盖上,中间放著一盆画著笑脸的仙人掌。这个画面她从来没有想过。她从来没有想过裴衍之会坐在她家的客厅里,她母亲会喝他泡的茶,他们之间会隔著一盆仙人掌。她从来没有想过这些,因为她不敢想。她怕想了就会期待,期待了就会失望,失望了就会——她现在知道会怎么样了。不会怎么样。只是会疼一下。然后有人会接住。
“裴衍之。”母亲放下茶杯,叫了他的全名。
“阿姨。”他的背又挺直了一点。
“你做什么工作的?”
“软件工程师。和司白一样。”
“收入怎么样?”
“妈——”程司白开口。
“稳定。”裴衍之说。他的声音还是很稳,稳得像在回答一个技术问题——输入是什么,输出是什么,边界条件是什么。“不是很高,但够用。”
母亲看了他一眼。那一眼里有很多东西——审视,评估,计算。她是数学老师,一辈子都在做这些事。把复杂的问题拆解成简单的变量,把模糊的条件转化成精确的数字,把不可控的结果归结到可控的参数。但感情不是数学。她花了五十五年才明白这件事。
“你对司白好吗?”她问。声音比之前低了一些,低到像是在问一个只有她自己想知道答案的问题。
裴衍之沉默了一会儿。程司白坐在母亲旁边,手指攥著沙发垫的边缘。她知道这个问题不需要回答——不是因为没有答案,是因为答案太长了。长到要从三年前开始说,长到要说一千多个夜晚,长到要说每一杯咖啡、每一件外套、每一行“别用工作逃避”。这些话说不完的。它们太多了,太碎了,太不像一个能被说清楚的故事。
但他还是回答了。
“我试试。”他说。三个字,很轻,轻到差点被窗外的车声盖过去。但程司白听到了。她一直都听得到。
母亲看著他。看了大概三秒。这三秒里程司白觉得自己的心跳停了。不是因为紧张,是因为她在等一个她不知道会不会来的东西——母亲的点头,母亲的微笑,母亲说“那就好”。她等了二十五年,从她记事起就在等。等母亲说“你不用一个人扛”,等母亲说“你可以靠别人”,等母亲说“两个人也可以”。她以为永远等不到了。
母亲点了点头。只有一下,幅度很小,小到如果不是程司白在认真看,根本不会注意到。但那一下里有一种东西,一种她从来没有在母亲身上见过的东西。不是同意,不是认可,是放心。一种憋了二十五年之后终于可以放下来的放心。
“那就好。”母亲说。
程司白坐在沙发上,手指从垫子边缘松开了。她没有哭,没有笑,没有做任何特别的事情。她只是坐在那里,觉得胸口那个地方更热了。不是烫,是温的,像一杯刚刚好的咖啡——不烫嘴,不会凉,温度刚好让人觉得舒服。她不知道这种温度能维持多久。但她知道它现在在。这就够了。
母亲走的时候是第二天下午。程司白送她去火车站,裴衍之开车。三个人坐在车里,母亲在后座,程司白在副驾驶。车厢里很安静,没有开音乐,只有发动机的声音和风噪。窗外的路灯一盏一盏地往后退,从慢到快,从快到慢,像一段被压缩了的时间。
进站口人很多,母亲拖著行李箱排队安检。程司白站在旁边,裴衍之站在她身后半步。三个人没有说话,只是站著,像三个在不同的频率上运行的节点——没有同步,但都在线上。
安检口到了。母亲把行李箱放上传送带,转过身看著程司白。
“司白。”
“嗯。”
“妈妈以前跟你说,这世上能靠的只有自己。”
程司白没有说话。她知道这句话。这句话她记了二十五年。从母亲在厨房洗碗的那个下午开始,它就刻在她脑子里了,像一段被写入ROM的代码——不能删除,不能修改,只能执行。她执行了二十五年。
“这句话是对的。”母亲说。程司白的手指在口袋里攥紧了。不是因为冷,是因为她不知道母亲接下来要说什么。她怕母亲说“所以你不要靠别人”。她怕母亲说“所以你还是要一个人”。她怕母亲说“所以你不要太当真”。她怕了很多年。从第一次发现自己喜欢裴衍之的时候就开始怕,怕到分手,怕到重逢,怕到现在。
“但妈妈没有告诉你——”母亲的声音在这里断了一下。只有一下,很短,短到如果不是程司白在认真听,根本不会注意到。但那一下里有一种东西,一种她从来没有在母亲的声音里听到过的东西。不是教导,不是命令,不是审查。是道歉。一个憋了二十五年之后终于说出口的道歉。
“两个人,不一定更差。”
程司白站在安检口,周围是人来人往的旅客,有人在打电话有人在看手机有人在跟家人告别。所有的声音都变成了背景——模糊的,遥远的,像一段被压缩过的白噪音,只有频率,没有内容。她能听到的只有母亲的声音。那句话在她脑子里转了一圈,又转了一圈,然后停下来了。不是因为她不想再想了,是因为它不需要再想了。它已经被存储在一个安全的地方,一个她不会轻易删除的地方。
母亲拖著行李箱走进了安检通道,没有回头。她的背影在人群中越来越小,深蓝色的羽绒服被人流淹没,行李箱的轮子在地上滚动的声音也听不到了。程司白站在那里,看著母亲消失的方向,站了很久。久到裴衍之从后面走过来,站在她旁边。
“走吧。”他说。
程司白没有动。她站在那里,看著安检口的人流,进进出出,走走停停。每一个人都有自己的目的地,每一个人都有自己的速度,每一个人都有自己的理由。她以前觉得自己也是一样——一个人,一个目的地,一个速度,一个理由。不需要任何人,不被任何人需要。但现在她不确定了。不是因为她变弱了,是因为她发现——需要别人不是弱点。它是接口。一个让别人可以连接进来的接口。它一直都在那里,只是她用防火墙把它封死了。现在她把防火墙撤了。端口打开了,服务在运行,等待连接。
“裴衍之。”
“嗯。”
“你刚才听到了吗?”
“听到了。”