周日晚上十点半,实验楼的灯一盏盏熄灭,只剩下三楼尽头那扇窗户还亮着。
实验室里,顾辰和林微微盯着屏幕上的错误提示,已经沉默了五分钟。
“第七次了。”林微微揉着太阳穴,声音里有罕见的疲惫,“同样的内存溢出错误,同样的崩溃点。”
顾辰靠在椅背上,眼睛布满血丝。他们已经连续工作了十二个小时,从上午九点到此刻,中间只吃了一顿简餐。原本计划今天完成演示原型的完整测试,但一个顽固的BUG让所有进展停滞不前。
“我检查了每一行代码。”顾辰的声音沙哑,“内存管理没问题,数据结构没问题,算法逻辑没问题。但就是会在运行到47%时崩溃。”
“可能是硬件问题。”林微微看向那台服务器,“或者编译器优化导致的隐藏错误。”
“也可能是我们太累了,错过了什么明显的错误。”顾辰叹了口气,站起身,“休息吧。继续硬撑只会让错误更糟。”
林微微看了眼时间:“食堂应该已经关门了。”
“后街那家便利店24小时营业,可以去买点东西。”顾辰拿起外套,“走吧,我需要离开这个房间一会儿,换个思路。”
秋夜的校园很安静,只有路灯在湿漉漉的石板路上投下昏黄的光晕。下午下过一阵小雨,空气里有泥土和落叶的味道。
便利店很小,货架挤得满满当当。顾辰拿了两个饭团和两瓶功能饮料,林微微则选了一盒牛奶和一小包饼干。
结账时,店员是个中年阿姨,正打着哈欠看手机。看见他们,她笑了笑:“又是你们两个啊。这么晚还在实验室?”
顾辰有些意外:“阿姨认识我们?”
“经常看见你们一起从实验楼出来,有时候深更半夜的。”阿姨麻利地扫码,“年轻真好啊,为了梦想熬夜。不过要注意身体,我看你们最近越来越瘦了。”
林微微低头看了看自己——她确实没注意体重变化。
走出便利店,两人站在屋檐下。雨虽然停了,但风有点凉。
“回实验室?”林微微问。
顾辰摇头:“换个地方。我知道一个地方,适合深夜思考问题。”
他带着她穿过几条小路,来到一栋老旧建筑的后门。门没锁,推开门,是一个小小的厨房。
“这里是...”林微微环顾四周。厨房很旧但干净,灶台上还冒着热气,空气中弥漫着淡淡的食物香气。
“教职工食堂的后厨。”顾辰轻车熟路地走进去,“王师傅值班,他允许我偶尔来这里煮个面什么的。算是...特权。”
话音刚落,一个穿着白色厨师服的老头从里间走出来,看见顾辰,笑了:“小顾啊,又熬夜?这次还带了个小姑娘。”
“王师傅,打扰了。”顾辰很恭敬,“这是我同学林微微,我们在做一个项目,遇到点问题,想借您的地方坐会儿。”
王师傅打量了一下林微微,点点头:“好孩子,看着就聪明。坐吧坐吧,我刚好炖了鸡汤,给你们盛两碗。”
“不用麻烦了...”林微微想推辞。
“麻烦什么!你们这些孩子,整天就知道工作,不好好吃饭。”王师傅已经拿出两个碗,“我这鸡汤可是真材实料,老母鸡炖了六个小时,补得很。”
两碗热腾腾的鸡汤放在桌上,金黄的油花浮在表面,几颗枸杞和红枣点缀其间,香气扑鼻。
“谢谢王师傅。”顾辰真诚地说。
“喝吧喝吧,喝完再去想问题。”王师傅摆摆手,回里间去了。
厨房里安静下来,只有灶上鸡汤咕嘟咕嘟的微弱声响。林微微端起碗,小心地喝了一口——温暖,鲜美,带着药材淡淡的甘苦,从喉咙一直暖到胃里。
“怎么样?”顾辰看着她。
“很好喝。”林微微又喝了一口,“比我煮的好。”
“你会做饭?”顾辰有些意外。
“基本的会。一个人生活,必须会。”林微微说,“但很少做汤,太费时间。”
顾辰沉默地喝了几口汤,然后说:“我也是。母亲身体不好后,我开始学做饭。一开始做得很难吃,她总是笑着说好吃,但我知道她在勉强。”
“后来呢?”
“后来就慢慢学会了。”顾辰笑了笑,“现在我的拿手菜是红烧排骨和清蒸鱼。母亲说我做的比餐厅还好吃。”
林微微想象着那个画面——顾辰系着围裙在厨房忙碌,生病的母亲坐在餐桌前等待。温馨,但也心酸。
“你父亲呢?”她问完就后悔了,“抱歉,不该问这个。”
“没关系。”顾辰放下碗,“父亲...再婚后有了新家庭,很少联系。只有过年时会打个电话,问问我成绩和公司情况。很客套,像在询问一个商业伙伴。”
林微微想起自己的父亲。也是客套,也是疏远,也是用学术讨论代替情感交流。
“有时候我觉得,”她轻声说,“成年人的世界,充满了这种礼貌的疏离。他们用工作、成就、责任来填补情感的空白,然后告诉孩子:这才是成熟。”
顾辰看着她:“你也是这样?”
“我...”林微微停顿了一下,“我想成为天体物理学家,一部分是因为母亲的遗愿,一部分是因为...那是一个足够大的目标,可以让我不用去面对那些太小、太近的困惑。比如,为什么父亲再也不笑了,为什么家变得那么安静,为什么我总觉得...孤独。”
这些话她说得很轻,几乎被鸡汤的香气淹没。但顾辰听得很清楚。
“我也是。”他回应,“创业,打球,弹琴,把所有时间填满,这样就不用去想为什么父亲选择离开,为什么母亲深夜哭泣,为什么我总觉得...要证明什么才值得被爱。”
两人对视。厨房昏暗的灯光下,彼此的轮廓都显得柔和。
“我们很像。”林微微说。
“嗯。”顾辰点头,“都聪明,都孤独,都用专业来逃避情感。”
“但我们现在在谈论情感。”林微微指出。
“是啊。”顾辰笑了,“这算是一种进步吗?”
“算吧。”林微微也笑了,“至少我们承认了问题的存在。”
喝完汤,身体暖和了,脑子也清醒了些。顾辰拿出笔记本电脑,但没打开,只是看着屏幕上映出的自己的倒影。
“那个BUG,”他突然说,“会不会不是技术问题?”
“什么意思?”
“程序在47%崩溃,每次都一样。这太规律了,不像是随机错误。”顾辰的手指在桌面上敲击,“像是有个隐藏的计数器,到达某个阈值就触发终止。”
林微微思考着:“我们的模拟是迭代过程,47%大约对应...第三轮引力相互作用计算。那里有什么特别吗?”
“边界条件处理。”两人异口同声。
顾辰立刻打开电脑,调出代码。林微微凑过去,两人的头几乎靠在一起。
“这里,”林微微指着屏幕,“在多体系统中,当两个以上天体的引力相互作用需要考虑相对论修正时,我们用了近似公式。但如果在特定质量分布下...”
“近似失效,导致数值溢出。”顾辰接着说完,“不是内存问题,是数值稳定性问题。”
“需要换成更精确但更耗时的算法。”林微微说。
“但计算时间会增加三倍,我们来不及。”顾辰皱眉。
两人沉默。问题找到了,但解决方案不可行。
厨房里只有电脑风扇的声音。王师傅从里间探出头:“还没解决?要不要再来碗汤?”
“不用了,谢谢王师傅。”顾辰说,突然想起什么,“等等...如果我们不追求完全精确,而是在那个临界点附近,用混合方法呢?”
“什么意思?”
“平时用近似,检测到可能溢出时,切换到精确算法计算几步,然后再切回来。”顾辰的眼睛亮了,“像自动驾驶,平时巡航,遇到复杂路况才启用全传感器模式。”
林微微快速心算:“这样计算量增加大约30%,可以接受。但需要精确判断切换时机。”
“用误差估计器。当两个连续迭代的结果差异超过阈值,就触发切换。”顾辰已经开始敲代码,“我们可以用前几轮迭代的数据训练一个简单的分类器...”
接下来的一个小时,厨房变成了临时实验室。顾辰写代码,林微微推导数学保证,两人偶尔交换意见,效率惊人。
王师傅中间出来过一次,看见他们专注的样子,笑了笑,又端来两杯热茶,轻轻放在桌角。
凌晨一点,新算法写完。顾辰连接实验室服务器,远程启动测试。
进度条开始移动:10%...20%...30%...
两人屏住呼吸。
40%...45%...47%...
电脑发出轻微的运算声,但没有崩溃。进度条平稳地滑过47%,继续向前。
“成功了。”顾辰轻声说,声音里有释然,也有骄傲。
林微微看着屏幕上平稳上升的曲线,突然感到一阵强烈的疲惫——不是身体的累,是那种长期紧张后突然放松的虚脱。
她靠在椅背上,闭上眼睛。
“累了?”顾辰问。
“嗯。但值得。”
顾辰保存所有数据,合上电脑。厨房里重新安静下来,只有墙上老式时钟的滴答声。