但她没有拆穿。拆穿意味著她承认自己知道这件事,承认她去找过周珩,承认她在乎。
“温姐,”宋晚晴凑过来,“下午那个参数优化你打算用什么方法?”
“梯度下降。”
“程顾问,你呢?你觉得用什么方法好?”宋晚晴的问题转得极其生硬。
程越看了一眼温以宁,像是在确认这个问题她允许他回答。
温以宁没有表示反对。
“梯度下降可以,但收敛速度不够快。”他说,“如果用共轭梯度法,配合量子态的几何结构,应该能快百分之二十左右。”
“那你来写。”温以宁把吃完的沙拉盒扔进垃圾桶,“下午三点之前给我。”
“好。”
宋晚晴在旁边张了张嘴,想说什么,最后什么也没说。
下午的进度比预想的快。程越的共轭梯度法实现得很干净,温以宁把量子态的几何结构参数整合进去之后,整个优化流程跑得比她预期的顺畅很多。两个人的代码在接口处对接的时候没有任何冲突——她写的输入格式刚好是他预期的输出格式,他写的数据结构刚好是她习惯调用的类型。
这种默契让温以宁很不舒服。
不是因为默契本身,而是因为它证明了某件事。五年的时间、五千公里的距离、无数次被删除和重新下载的论文——所有这些都没有改变一件事:他们写代码的方式是同步的。像两个被同一个时钟校准过的计时器,即使被分开很长时间,重新启动的时候走的还是同一个节拍。
这意味著什么?意味著他们从根本上用同一种方式思考问题?意味著这五年他在海外写的代码和她写的代码在某种深层结构上是互补的?还是意味著——他们从未真正分开过?
她拒绝想这个问题。
时间在键盘声中流逝。窗外的光线从刺眼的白变成温暖的橙,再从温暖的橙变成灰蓝色的暮色。研究员们一个一个下班走了。宋晚晴走的时候在门口站了一下,看了温以宁一眼,又看了程越一眼,然后什么也没说就走了。
八点。九点。十点。
实验室里只剩他们两个人。
温以宁正在跑最后一组测试数据,需要二十分钟才能出结果。她站起来,走到茶水间,给自己倒了一杯水。然后她看到咖啡机旁边的胶囊架子——整整齐齐摆著六种口味的咖啡胶囊,每一种都贴了标签。
她的手指停在其中一种上面。哥伦比亚豆,中度烘焙,酸度适中。
她记得这个口味。大学的时候程越只喝这种咖啡。她当时觉得他挑剔——学校咖啡厅只有三种豆子,他每次都选同一种,从不换。她问他为什么不试试别的,他说“找到了喜欢的就不需要换”。
温以宁拿了一颗胶囊,放进咖啡机,按下按钮。黑色的液体流进马克杯,香气在茶水间里散开。
她端著咖啡走回实验室,走到程越的工位旁边,把杯子放在他桌上。
“给你的。”
程越的手指停在键盘上。
他看著那杯咖啡,没有立刻拿。然后他抬起头,看她的眼睛。
“你还记得。”
这句话的重量让空气变了。
温以宁转身走回自己的工位,坐下,对著萤幕。萤幕上的测试数据还在跑,进度条显示百分之七十三。
“你工位旁边只有这个口味的胶囊。”她说,声音平得像在念说明书,“宋晚晴买的,她喜欢乱买东西。”
程越没有说话。
她听到他拿起杯子的声音,听到他喝了一口的声音。然后是沉默。
沉默太久了。
百分之八十一。百分之八十五。百分之九十。
“你在骗人。”程越的声音很低,从右边传来,像是怕被其他人听到——尽管这个实验室里没有其他人。
温以宁没有转头。
百分之九十四。百分之九十七。
“宋晚晴买的胶囊是六种口味。”程越说,“你偏偏选了这一种。”
百分之九十九。
测试跑完了。萤幕上跳出绿色的“PASS”字样,数据完美收敛。
温以宁看著那个绿色的字,没有动。
她知道他说得对。六种口味,她选了他喜欢的那一种。不是因为巧合,不是因为习惯,是因为她走进茶水间的时候,大脑在零点几秒内完成了一个决策——拿他喜欢的。这个决策快到她自己在行动之前都没有意识到,快到她在递出咖啡的那一瞬间才发现自己在做什么。
快到她的身体比她的理智早五年就原谅了他。
“测试数据收敛了。”她说,没有回答他的话。
程越没有追问。他端起咖啡又喝了一口,然后把杯子放在桌上,转回去继续写代码。
键盘声重新响起来。还是那个节奏,还是那个力度,空格键还是比其他键重一点。
温以宁盯著萤幕上那个绿色的“PASS”,手指放在键盘上,没有敲。
她想起大学时的一个晚上——也是在实验室,也是深夜,她也给他递了一杯咖啡。他接过去的时候碰到了她的手指,两个人都没有缩手。那个触感她记了五年:他的指尖比她的热,指腹的薄茧蹭过她的指甲边缘,像一种无声的确认——我在这里,你也在这里。
现在他又在这里了。坐在离她一臂的地方,喝她给他的咖啡,写她看得懂也喜欢看的代码。
她应该觉得高兴。或者应该觉得愤怒。或者应该觉得混乱。但她什么都感觉不到,只觉得累——一种从骨子里渗出来的、被压抑了五年的、终于找到出口的疲倦。
“程越。”她开口。
“嗯。”
“你的测试用例写了吗?”
“写了。在第二个文件夹里。”
“给我看看。”
“好。”
他把文件发给她。她打开,一行一行地看。注释写得很清楚,边界条件覆盖得很完整,异常处理也考虑到了。完美的工程习惯,和她记忆中一模一样。
她关掉文件,打开自己的代码,继续写。
两个人就这样坐著,隔著一臂的距离,各自对各自的萤幕,敲各自的键盘。没有对话,没有对视,没有任何多余的互动。只有键盘声、空调声、风扇声,三种频率叠在一起。
但这一次,温以宁不再觉得那个噪音里多了一个变量。
她觉得那个噪音完整了。
第二天早上,温以宁打开代码文件的时候,发现了一段她没写的注释。
不是程越新增的功能代码——她昨晚走之前把权限设定好了,他只能在特定模组里提交变更。但注释不在这个限制范围内。他在她写的一段量子态校正函数上面加了三行:
这个校正逻辑是对的
但效率可以再高一点
如果有人愿意改成迭代式就好了
温以宁盯著这三行注释看了五秒。
她在下面加了一行:
如果有人觉得效率不够高,可以自己改
储存。
上午十点,她打开同一个文件,发现多了四行:
我改了
效率提升百分之八
不客气
顺便修了一个边界条件的bug
她检查了一下代码。他真的改了。改动很小——把一个线性扫描换成了二分查找,把三个重复的条件判断合并成了一个。改动后的代码比她写的短了十二行,边界条件的处理也比原来更干净。
那个bug确实存在。她在心里承认了,但在注释里没有承认。
她在文件最底下加了一行:
边界条件的bug是我故意留的测试用例
储存。
中午吃饭的时候宋晚晴说:“温姐,你今天心情很好。”
“没有。”
“你在笑。”
“没有。”
“你从早上到现在嘴角一直是翘的。”
温以宁摸了一下自己的脸。没有翘。宋晚晴在胡说。
“你看错了。”
“好吧。”宋晚晴耸了耸肩,端著餐盘走了。走了三步又回头:“对了,今天晚上我组了个局,实验室聚餐,所有人都去。”
“我不去。”
“程顾问也去。”
“那更不去了。”
宋晚晴没理她,直接走了。
下午两点,温以宁打开另一个文件,发现程越在她写的随机数生成器上面加了一段很长的注释:
这个随机数生成器的熵源用的是系统时间
理论上够用了
但量子随机数生成器应该用真正的量子熵源
我知道你实验室有一台量子随机数发生器
为甚么不用?
她在下面回:
那台机器是测试用的,稳定性不够
而且你不会用
三分钟后,文件刷新。新的注释出现了:
我会用
说明书我读过了
昨天半夜读的
温以宁的手指停在键盘上。
昨天半夜。他昨天晚上几点走的?她走的时候是十一点,他还在。她不知道他甚么时候离开的,也不知道他离开之后又读了多久的说明书。
她回:
半夜读说明书不是值得炫耀的事
他回:
没在炫耀
只是在陈述事实
她回:
事实是你应该正常时间工作
他回:
你也是
她关掉文件,没有再回。
下午四点,宋晚晴出现在实验室门口。“温姐,晚上的聚餐,七点,老地方。”
“我说了我——”
“程顾问说了,你不去他也不去。”宋晚晴的语气像在转述一条气象预报,“所以如果你不去,整个实验室的聚餐就因为你取消了。你忍心吗?”
温以宁看向程越的工位。他没有抬头,但耳朵红了。
她在心里骂了一句。
“我去。”
老地方是一家湘菜馆,在研究院后面的巷子里,走路十分钟。实验室的传统聚餐地点,菜偏辣,味道重,价格便宜。温以宁每次来都只吃两道菜——清炒时蔬和西红柿鸡蛋汤。
她走进包厢的时候,所有人都已经坐好了。圆桌很大,十几个位置,程越坐在最里面靠墙的位置。她环视了一圈,发现只有他旁边是空的。