他的系统垮过一次。是在分手之后的第八个月,凌晨三点,他一个人在租来的办公室里改一个项目的架构方案。改到一半的时候需要写一段关于共识机制的说明,他打开文档,手指放在键盘上,打了“共”字。然后停了。他看著那个字,看了大概十秒。十秒之后他把文档关了,没有保存。他靠在椅背上,看著天花板上那盏日光灯。灯管有点旧了,光线不均匀,中间亮两边暗。他盯著那盏灯,觉得自己就像那根灯管——看起来还在亮,但里面已经坏了。有一段灯丝断了,电流过不去,光线不均匀,随时会彻底灭掉。他没有灭。他坐起来,重新打开文档,打了“一致性协议”四个字。然后继续写。写完的时候天亮了,他把文档发给客户,关掉电脑,躺在办公室的沙发上。沙发很旧,弹簧塌了,躺上去的时候整个人陷进去,像被什么东西接住了。他闭上眼睛,睡了四个小时。没有做梦。或者做了,但他不记得了。
公司被收购的时候他二十九岁。收购方是一家大公司,技术总监看了他的程式码之后说了一句话:“你这个人写代码很有结构感,但缺乏野心。你明明可以做得更好,为什么总是在安全区里打转?”他没有回答。他不能回答。他总不能说——因为我走出安全区的时候,被一个人说太感性了。因为我靠近别人的时候,被推开了。因为我以为自己可以做得更好的时候,被证明了不够好。他说不出口。这些话在他嗓子底下压了两年,压成了一个硬块,吞不下去也吐不出来。他只是点了点头,说“我会改进的”。技术总监看了他一眼,没有再问。
回归职场之后他进了现在这家公司。业务中台,应用层,不碰架构,不碰底层,不碰那些需要共识算法的东西。他把自己放在一个安全的、可控的、不会触发任何异常的位置上。每天早上九点到公司,晚上九点离开,写代码,开会,修Bug。周末有时候加班,有时候不加班。不加班的周末他会去跑步,沿著公司旁边那条河,从这座桥跑到下一座桥,再跑回来。五公里,三十分钟,配速稳定,心率稳定,一切都稳定。他把自己活成了一个单节点系统——独立运行,不依赖任何外部资源,不与任何其他节点交换信息。优点是稳定,缺点是孤独。但他觉得孤独也没什么不好。孤独至少不会被拒绝。孤独至少不会在凌晨三点醒来的时候,发现自己在翻一个不会再有新消息的对话框。孤独至少不需要绕过那八个字母。因为在你的系统里,根本没有那八个字母。
然后她来了。
项目评审通知发到他邮箱的时候,他正在改一个业务逻辑的程式码。邮件的标题是“业务中台架构升级项目评审会通知”,发件人是唐嘉树。他点开邮件,往下拉,看到参会人员名单里有一个名字。程司白。三个字。他盯著这三个字看了大概五秒。这五秒里他的系统在崩溃——日志爆炸,记忆体泄漏,所有的进程都在报错。然后他关掉邮件,打开方案文档,开始改。他改了三天,每天改到凌晨两点。他把每一个可能被质疑的细节都补上了证明和数据,附录加了七页,测试报告写了一万两千字。他告诉自己这是因为他想要方案通过。但他知道不是。他是不想让她觉得,这两年他一点进步都没有。
评审会那天他穿了那件浅蓝色的衬衫。不是刻意选的,是衣柜里只剩这件干净的了。他在镜子前面站了一会儿,把领口的扣子扣到最上面一颗,想了想,又解开了一颗。到了会议室的时候她已经在了。坐在靠窗的位置,面前摊著笔记本,旁边放著一台笔记型电脑。她的头发挽得很整齐,西装外套的袖口拽到手腕,露出一小截细细的骨头。她没有看他。她在看他的方案文档,手指按在页面边缘,拇指来回摩挲著纸张的表面。那是她的习惯——紧张的时候会这样。他知道。
他演示方案的时候声音很稳。每一个字都说得很清楚,清楚得像在念一份他准备了很久的台词。但他没有准备台词,他准备的是方案。方案他改了三天,每一个细节都烂熟于心。他可以不用看文档,从第一章讲到第十章,从架构设计讲到部署方案。他讲到最后一页的时候,她说“我有问题”。声音不大,但很清晰。他转头看著她,她的目光越过会议桌上散落的笔记型电脑和矿泉水瓶,直直落在他脸上。他在那一瞬间想起了很多事情。想起她说“裴衍之,你知道吗,这是我进公司以来最开心的一天”,想起她说“你的代码写得很好”,想起她说“晚安”。想起她说“我们不合适”。他把这些事情压回去了,压到嗓子底下那个硬块的旁边。然后说“请说”。
会议结束之后他在电梯里碰到了她。不是刻意的,是去电梯的路上他一直在想该走楼梯还是等下一班,想著想著就走到了电梯门口。门开了,她在里面。他走进去的瞬间闻到了她身上的味道——洗衣液,干净的,凉的,和三年前一模一样。电梯门关上,开始下降。两个人都没有说话。电梯里只有机械运转的声音,低沉的,均匀的,像一段没有感情的白噪音。然后她开口了。
“好久不见。”
他沉默了三秒。这三秒里他在做一件事——把嗓子底下那个硬块往下压。压到更深的地方,压到不会被任何人看到的地方。压好之后他说:“好久不见。”声音比他预期中平静,平静得像在确认一个无关紧要的事实。电梯到了一楼,她走出去,脚步声在大理石地面上响起,一二一二,节奏均匀。他站在电梯里,手指按在开门键上,看著她的背影消失在走廊尽头。他松开按键,电梯门缓缓关上。他靠在电梯的墙上,闭了一下眼睛。嗓子底下那个硬块碎了一点点。只有一点点,很小,小到如果不是他一直在压著它,根本不会注意到。但它碎了。那里面有一些东西流出来,流到喉咙里,咸的,涩的,像眼泪的味道。但他没有哭。他已经很久没有哭了。上一次哭是分手那天,他在客厅里坐了一整夜,天亮的时候发现脸上湿了,他用手背擦了一下,然后去洗脸。洗脸的时候水很凉,凉到他觉得自己可能根本没有哭过。只是水龙头的水溅到脸上了。只是这样。
后来他们开始合作。每天开会,讨论方案,交换数据。她还是那样,说话的时候不看他,写笔记的时候字迹工整得像打印体,喝咖啡的时候只喝美式不加糖不加奶。她也变了一些。头发比以前短了一点,说话的时候语速更快了,技术能力比三年前强了很多。她做了很多他做不到的事情——重构了序列化模块,优化了动态超时窗口,把Raft变体的吞吐量提升了百分之二十。他看著她做的这些事情,心里有一个声音在说:你看,她一个人也可以。她不需要你。她把这个声音压下去了,压到嗓子底下那个硬块的旁边。硬块变大了。
他开始给她带咖啡。第一天是美式,放在她桌上,没有留名字。第二天她没有喝,他看到了,那杯咖啡在她桌角放了一整天,凉透了,杯壁上凝著一层水珠。第三天他换了拿铁,加了两份浓缩。他知道她不太喝拿铁,但他记得她以前试过一次,说太甜了。他加了两份浓缩,想让它不那么甜。她喝了。他看到的时候觉得自己的心跳漏了一拍,然后他把它压下去了。他把所有的东西都压下去了——想问她好不好喝,想问她今天几点走的,想问她有没有吃早饭。他把这些问题压成一行字,写在杯壁上:“别用工作逃避。”写完之后他觉得自己很蠢。她不会因为一行字就不逃避了。她逃避了三年,从他们分手的那天就在逃避。她逃避依赖,逃避脆弱,逃避需要别人。他也在逃避。他逃避靠近她,逃避告诉她他还在,逃避承认自己从来没有走开过。两个人在同一条路上朝著相反的方向跑,跑得越快,离得越远。但他不想跑了。他停下来了。站在那条路上,等她停下来。他不知道她会不会停。他只是站在那里。像一个超时重传的请求——不知道对方会不会收到,不知道对方会不会回复,但他还是发出去了。然后等待。超时,重发。再等待。再超时,再重发。
那天晚上她在巷子里打电话。他站在巷口,手里夹著一根烟。他已经戒了两年了,但那天他又买了一包。不是因为想抽,是因为需要手里拿著点什么,才能站在那里不走开。他听到了她说的话。每一个字都听得很清楚。她说“我一个人很好”,说“我不想因为害怕一个人就随便找一个人”,说“我不想像你一样”。她的声音在巷子里显得很孤单,像一个没有其他节点的网络——只有她自己,没有心跳,没有确认,没有共识。他把烟摁灭了,走进巷子。她转头看到他的时候,眼睛里有光。不是那种碎的、散的、到处都是的光,是那种被压在水面下的、挣扎的、想要浮上来的光。她说“你偷听”。他说“我不是故意的”。这是实话。他不是故意的。他只是站在那里,听到了一个他等了三年才听到的东西——她不是不想靠近,她是不敢。她不是不需要,她是不敢需要。她不是不喜欢他,她是不敢喜欢任何一个人。因为她怕被剩下。他站在巷子里,看著她的眼睛,说了一句话。那句话在他嗓子底下压了三年,压成了一个硬块,硬到他以为永远都说不出来了。但他说出来了。
“你妈说得不对。一个人也可以很好,但两个人不一定更差。”
她没有回答。她走了。脚步声在巷子里响起,一二一二,节奏和往常一样均匀。但他听到了那个节奏底下的东西——不是拒绝,是犹豫。一个从来不允许自己犹豫的人,犹豫了。他站在巷子里,看著她的背影消失在巷口。风吹过来,十一月的风,冷的。他把手插进口袋里,摸到了那包烟。他拿出来看了看,捏扁了,扔进垃圾桶。然后他拿出手机,打开跟她的对话框。对话框里还是那条他发了很久的消息——“不是要证明自己。是我怕你的方案出问题,你又会像三年前一样,把所有责任扛在自己身上。”她没有回。他打了几个字:“烟扔了。”看了两秒,删掉了。又打了几个字:“你刚才没说完的话——”没有打完。他把手机放回口袋,走出巷子。抬头的时候看到十五楼的灯还亮著。她回去了。他也该回去了。不是因为工作,是因为她在那里。
后来的事情他记得不太清楚了。不是因为不重要,是因为太多了。多到像日志文件里的那些记录,每一条都很重要,但你没有办法一条一条地记住。你只能记住那个模式——她在会议室里说“谢谢”的时候声音里有一个微小的停顿,她在走廊上走过他身边的时候脚步会慢一点点,她在电梯里靠在他肩膀上的时候呼吸会变得均匀。这些模式他花了三年才读懂。三年里他学会了很多事情。学会了不打扰,学会了不追问,学会了把所有的东西压在嗓子底下。学会了用理性代替感性,用克制代替靠近,用安全区代替那条她不敢走的路。他以为这就是她想要的。一个够理性的人,一个不会让她觉得危险的人,一个不会让她害怕被剩下的人。他把自己变成了这样的人。
但她说:“我不确定我喜欢理性的你。”
说这话的时候他们在团建的基地,阳光透过树叶照下来,在她身上投出一片一片的光斑。她看著他,眼睛里有那种被压在水面下的光。不是碎的,是整的。不是散的,是聚的。不是要沉下去的,是要浮上来的。她在那一刻选择了不压。他看著她的眼睛,觉得嗓子底下那个硬块又碎了一点。这一次碎得比之前多,多的那些东西流出来,不是咸的,不是涩的,是另一种味道。是她在巷子里说“我不想像你一样”的时候有的那种,是她在会议室里说“谢谢你”的时候有的那种,是她在电梯里说“我留下”的时候有的那种。是甜的。他等了三年才等到这个味道。
她在电梯里说“我申请成为节点”的时候,他觉得自己的系统重启了。所有的进程都被杀掉了,所有的缓存都被清空了,所有的日志都被轮转了。然后一个新的进程启动了,只有一个,很轻,很小,占用很少的资源。它不做别的事情,只发送心跳。滴答,滴答,滴答。每一个滴答都在说一句话。那句话不是“我喜欢你”,不是“我需要你”,不是“请你不要走”。那句话是“我在”。程司白,你说我不够理性。但你不知道,我的理性,都是你教会的。你教会我克制,教会我体面,教会我不打扰。你教会我一个人也可以很好。但你没有教会我一件事——你没有教会我怎么忘记你。所以我没有忘记。我把你放在记忆体里一个不会被覆盖的位址,把指针指向那里,然后告诉系统:这个位址正在使用,不要分配给其他进程。系统接受了。三年来,那个位址一直为你保留著。数据没有丢失,没有损坏,没有被覆盖。它在等一个读取请求。等了三年。现在请求来了。读取成功。数据完整。一致性确认。共识达成。
辞职的决定是程司白先提出来的。那天晚上两个人坐在客厅里,各自对著电脑。她在看一篇关于分布式存储的论文,他在改一个开源项目的代码。窗外在下雨,雨声很大,噼噼啪啪地打在空调外机上,像一段没有规律的随机信号。她突然合上论文,转头看著他。
“裴衍之,我们开家公司吧。”
他的手指在键盘上停了。不是因为惊讶,是因为他在等这句话。等了多久他不知道,也许从她说“我留下”的时候就在等,也许更早,早到她还没有意识到自己会留下的时候。他把电脑合上,转头看著她。客厅里只开了一盏落地灯,光线是暖黄色的,照在她脸上,把她下巴的线条照得很柔和。她的头发比两年前长了一些,披在肩膀上,发尾有一点点自然卷。她没有挽头发了。不知道从什么时候开始,她不再把头发挽得整整齐齐。她让它乱著,散著,被风吹到脸上也不去拨。她变得没那么整齐了。但他觉得她更好看了。
“叫什么名字?”他问。
程司白想了很久。久到雨声从大到小,从小到几乎听不见。窗外的路灯透过雨幕照进来,在地板上投下一片模糊的光斑。她看著那片光斑,想起两年前她在这间客厅里坐著,手里拿著一个写著“别用工作逃避”的咖啡杯。那时候她不知道自己在逃避什么。现在她知道了。她逃避的不是工作,是那种不需要证明就能得到的东西。是信任,是连接,是有人会一直在的确定性。她逃避了三年,然后花了一年学会接受,又花了一年学会给出。现在她想把这种东西放进一家公司里。不是放在产品里,不是放在技术栈里,是放在公司的名字里。
“共识实验室。”她说。
裴衍之看著她。落地灯的光照在她眼睛里,把那里面那种稳定的、持续的、不间断的光照得很清楚。那种光从两年前就开始了,从她说“我留下”的时候开始,从她说“谢谢你”的时候开始,从她在巷子里差一点把那句话说完的时候开始。它一直在。只是以前她把它压在水面下,压到看不见,压到她自己都以为没有了。现在它浮上来了。
“好。”他说。