重新在一起后的日子,像把调试好的代码放进了稳定运行的环境里,没有惊天动地的改动,却在每一行日常里,藏着熨帖的默契。
周景恒的工位旁多了个抽屉,钥匙由陈颂保管。里面常年放着两罐东西:陈颂总忘记带的胃药,和周景恒戒不掉的薄荷糖。有次新来的实习生借剪刀,拉开抽屉时“呀”了一声——胃药的锡箔板上,每个药格旁都写着“饭后吃”,是陈颂的字迹;薄荷糖的铁盒里,垫着张周景恒画的简笔画,歪歪扭扭的两个小人,在服务器机房前比耶。
周末去超市采购,陈颂推着购物车在零食区流连忘返,手里攥着的清单是周景恒写的:“牛奶(低脂)、面包(全麦)、薯片(番茄味——陈颂限定)”。周景恒跟在后面,把他扔进车里的可乐又放回去,换来一句“就一罐”的嘟囔,最后却还是乖乖换成了苏打水。收银时,陈颂掏钱包的动作总慢半拍,周景恒已经扫码付了钱——就像大学时在食堂,他总抢在陈颂前面刷饭卡,说“你那点生活费留着买篮球鞋”。
晚上加班累了,陈颂会趴在周景恒的办公桌上打盹,后脑勺抵着对方的胳膊。周景恒敲代码的动作会放轻,时不时侧头看一眼,替他把滑下来的眼镜推回去。有次陈颂迷迷糊糊抓住他敲键盘的手,含混着说“这个变量名太长了”,周景恒停下动作,听着他均匀的呼吸声,忽然在屏幕上敲下一行注释:“当前进程:守护模式(优先级最高)”。
跨年夜公司放了假,两人窝在陈颂家的沙发上看老电影。窗外的烟花炸开时,陈颂突然转头,在周景恒嘴角啄了一下,像按了个温柔的回车键。周景恒愣了愣,伸手把人往怀里带,闻到他发间的洗发水味,和大学时宿舍楼下的玉兰花香,奇妙地重合在了一起。
“其实有件事没告诉你,”陈颂的声音埋在他颈窝,“当年你妈住院,我托人转了笔钱过去,没留名字。”
周景恒的手顿住,想起那段最艰难的日子,医院账户里突然多出的款项,解了燃眉之急。他一直以为是公司的补助,原来……
“你怎么知道卡号?”
“你当年填的紧急联系人表格,我偷偷记了医院的账户。”陈颂笑了笑,“别多想,就当……提前投资未来合伙人了。”
周景恒没说话,只是把人抱得更紧。电视里的台词还在响,烟花还在窗外明灭,可世界好像突然安静下来,只剩下两人的心跳声,在客厅里轻轻共振,像两段完美同步的代码。
第二天早上,周景恒在陈颂的电脑里,发现了一个新建的文件夹,命名是“余生项目开发日志”。点开第一份文档,开头写着:“项目成员:周景恒、陈颂。启动时间:2024年冬。核心需求:把错过的四年,拆成每天的24小时,慢慢补。”
文档最后,附着一行注释:“本项目无终止时间,BUG共同修复,进度共同推进。”
阳光从窗帘缝里钻进来,落在屏幕上,把字迹照得发亮。周景恒拿起键盘旁的红笔,在文档末尾加了一句:“已确认,终身维护。”
厨房传来陈颂煎蛋的声音,带着点焦糊味,像极了当年在实验室微波炉里烤坏的面包。周景恒笑着起身,走向那个飘着烟火气的方向——原来最好的代码,从不是写在屏幕上的,而是藏在早餐的温度里,藏在共享的抽屉里,藏在每个抬头就能看见对方的日常里,一行行,写满了“在一起”的注释。
周景恒在“余生项目开发日志”里加的那句“终身维护”,被陈颂用荧光笔标成了亮黄色。第二天周景恒打开文档时,看见下面多了一行小字:“维护内容包括但不限于:每日早餐的蜂蜜燕麦、代码评审时的红笔批注、冬夜散步时的围巾共享。”
他失笑,转头看向陈颂的工位。那人正对着屏幕皱眉,指尖在触控板上快速滑动,阳光落在他微蹙的眉峰上,像落了层细雪。周景恒忽然想起大学时,陈颂也是这样,对着复杂的算法模型愁眉苦脸,却在他递过一杯热可可时,瞬间眉眼舒展。
“卡壳了?”周景恒走过去,手里端着刚泡好的茶——陈颂最近胃不太舒服,他换成了温性的熟普,茶汤在玻璃杯里泛着琥珀色。
陈颂抬头,接过茶杯时指尖碰了碰杯壁:“用户反馈有个界面加载延迟,查了半小时日志,没找到根因。”
周景恒俯身看屏幕,肩膀几乎贴着陈颂的肩。他的呼吸扫过陈颂耳尖,对方的耳尖几不可察地红了红,却没躲开。“看网络请求时间戳,”周景恒指着某行数据,“这里有个300ms的跳变,可能是CDN节点缓存的问题。”
陈颂眼睛一亮,指尖在键盘上敲得飞快。周景恒没起身,就站在旁边看着,看他熟练地调出节点监控,看他把查到的问题点用红笔标在打印稿上,连标重点的符号都和当年一样,是个小小的箭头,指向最关键的那句代码。
“搞定!”陈颂敲下最后一个回车键,转头时鼻尖差点撞到周景恒下巴,“还是你厉害。”
“彼此彼此。”周景恒笑了笑,视线落在他摊开的笔记本上——封面上贴着张便利贴,是他昨天写的“记得带胃药”,被陈颂画了个笑脸,贴在了最显眼的位置。
下午部门开技术分享会,陈颂上台讲数据库优化方案,PPT的最后一页突然跳出张老照片:是大学时两人在实验室的合影,周景恒举着刚写完的代码,陈颂趴在旁边比耶,背景里的服务器还在闪着指示灯。
台下哄笑起来,总监打趣:“原来两位大神当年就这么默契。”
陈颂站在台上,目光穿过人群落在周景恒身上,笑得坦荡:“那时候周工总说我代码写得像打草稿,现在……还是没改过来。”
周景恒坐在第一排,看着他眼里的光,忽然觉得这张照片放得真好。有些记忆不必藏着,就该像这样,大大方方地亮出来,像代码里的注释,清晰地告诉世界:这段逻辑,从很久之前就开始了。
晚上下班,两人去超市买酸奶。陈颂在冷柜前挑了半天,拿了两盒草莓味的——是周景恒爱吃的。周景恒伸手换了一盒原味,塞进他手里:“你胃不好,少吃太酸的。”
陈颂嘟囔着“就想吃点甜的”,却乖乖把草莓味放回冷柜。结账时,周景恒的手机响了,是母亲打来的视频电话。他接起来,镜头里的母亲笑着说:“景恒啊,阿颂什么时候带回来看看?”
周景恒愣了愣,陈颂在旁边听见了,突然凑过来,对着镜头笑:“阿姨好,等项目不忙了,我跟景恒一起回去看您。”
电话那头的母亲愣了两秒,随即笑开了花:“好好好,阿姨给你们做红烧肉!”
挂了电话,周景恒看着陈颂,眼里带着点无奈,又有点藏不住的暖意:“谁让你乱答应。”
“不行嘛。”陈颂拎着购物袋往前走,脚步轻快,“总不能让阿姨一直猜。”
晚风穿过老街区的巷子,吹得路灯轻轻摇晃。陈颂的围巾又松了,周景恒伸手替他系好,指尖划过他颈后的皮肤,触到一点温热。“其实我妈早就知道,”周景恒轻声说,“当年她住院,总问我‘那个送钱的孩子怎么样了’。”
陈颂的脚步顿住,回头看他。路灯的光落在他眼里,像落了两颗星星。“那她肯定不知道,”他笑着说,“她儿子当年总躲在实验室,偷偷看我的篮球比赛。”
周景恒没反驳,只是握紧了他的手。购物袋在两人之间轻轻晃着,里面的酸奶碰撞出细微的声响,像在为这段迟来的坦诚,打着温柔的节拍。
走到陈颂家楼下时,周景恒忽然从口袋里掏出个东西,是枚新配的钥匙,上面挂着那个磨得发亮的篮球钥匙扣。“给你的,”他把钥匙塞进陈颂手心,“以后不用总等我敲门了。”
陈颂捏着钥匙,金属的凉意混着钥匙扣的温度,在掌心漫开。他忽然踮脚,在周景恒唇上轻轻啄了一下,像在确认什么。“那我可就不客气了,”他笑着说,“明天早上七点,我去你家煎蛋。”
周景恒看着他跑上楼的背影,手里还攥着陈颂刚才塞给他的酸奶——是那盒他爱吃的草莓味,被悄悄换了回来。
楼道的灯一层层亮起来,直到三楼的灯稳定地亮着。周景恒站在楼下,看着那扇窗,忽然觉得“终身维护”这四个字,从来不是什么承诺,而是自然而然的日常——就像他会记得陈颂胃不好,陈颂会记得他爱吃草莓味,就像他们的代码总会在同一个逻辑里交汇,他们的日子,也会在这些细碎的懂得里,一天天,稳稳地运行下去。
陈颂第二天果然七点准时出现在周景恒家门口。钥匙插进锁孔转了半圈,门“咔嗒”开了时,正撞见周景恒举着锅铲从厨房探出头,额前的碎发沾着点面粉——他在试着烤面包,烤盘里的面团歪歪扭扭,像没对齐的代码。
“看来周工的烘焙技术,还不如当年的代码。”陈颂笑着换鞋,把手里的豆浆往餐桌上一放,“我带了现成的,别霍霍面粉了。”
周景恒把烤砸的面包扔进垃圾桶,转身时被陈颂拽住手腕,往他脸上抹了点面粉:“留点纪念,证明你也有搞不定的事。”
面粉落在鼻尖上,有点痒。周景恒没躲,反而低头,在陈颂沾着面粉的指尖上轻轻咬了一下。陈颂“嘶”了声,耳尖红得像被晨光染过,抽回手时,指尖还留着对方的温度。
早餐桌上,陈颂翻出手机里存的菜谱,是周景恒母亲发的:“阿姨说你爱吃她做的糖醋排骨,我研究了下步骤,周末要不要试试?”
周景恒看着菜谱里密密麻麻的批注——“糖要最后放”“排骨焯水时加姜片”,都是母亲的字迹,忽然想起小时候生病,母亲也是这样,把医嘱一条条写在便签上,贴在冰箱上。
“周末我来做。”他说,指尖划过“陈颂也爱吃辣,可加半勺辣椒面”那行字,喉结动了动,“你负责洗碗。”
“成交。”陈颂举起豆浆杯,和他的杯子轻轻碰了下,“不过得先说好,要是难吃,我可当场罢工。”
那天下午,技术部收到台新服务器,需要两个人配合上架。周景恒抬着主机箱的一端,陈颂抬着另一端,机房的空调嗡嗡地吹着,两人额头上都渗了汗。
“往左一点,对,再抬高点。”周景恒指挥着,视线落在陈颂绷紧的小臂上——那里的肌肉线条比大学时明显了,却还是能看见当年被碎玻璃划伤的浅疤,像条温柔的印记。
服务器稳稳落进机柜时,两人同时松了口气,手背不小心撞在一起,汗湿的皮肤相触,像有微弱的电流窜过。陈颂忽然笑了:“想起大三那年,我们抬着旧主机箱去报废,你差点被线绊倒,还是我拽了你一把。”
“是你非要抄近路走楼梯。”周景恒反驳,却弯腰捡起地上的数据线,把凌乱的线团理得整整齐齐——这是陈颂最不擅长的事,当年在实验室,总是他来收拾缠成一团的线。
傍晚下班时,天边挂着道淡粉色的晚霞。陈颂站在公司楼下等周景恒,手里拎着个纸袋,里面是刚买的烤红薯,热气把纸袋熏得发潮。
“给。”他递过去一个,“巷口张大爷烤的,甜得流油。”
周景恒接过来,烫得指尖发颤,却舍不得放手。红薯的甜香混着陈颂身上的雪松味,像极了某个冬天的晚自习后,两人揣着烤红薯走在回宿舍的路上,哈出的白气在路灯下散开,把影子都染得暖暖的。
走到陈颂家楼下时,周景恒忽然想起什么,从背包里掏出个小盒子:“给你的。”
是个新的篮球钥匙扣,金属表面锃亮,背面刻着“J&S 2024”。陈颂捏着旧钥匙扣对比了下,忽然笑出声:“这是……迭代升级款?”
“嗯,”周景恒点头,指尖划过新钥匙扣的边缘,“修复了旧款易磨损的BUG,增加了终身保修服务。”
陈颂把新钥匙扣挂在包上,和旧的那个并排晃着,像两个重叠的时光片段。他忽然踮脚,在周景恒唇上咬了下,像在验收新产品:“试用合格。”
晚风里带着烤红薯的甜香,周景恒看着陈颂眼里的笑意,忽然觉得“余生项目”哪里需要什么开发日志,这些琐碎的日常,早就把代码写满了——在碰在一起的豆浆杯里,在缠成一团又被理好的数据线里,在新旧两个钥匙扣的碰撞声里,一行行,都是最安稳的运行记录。
陈颂转身上楼时,忽然回头喊:“对了,明天带件厚外套,预报说降温。”
“知道了。”周景恒笑着点头。
楼道的灯亮起来,三楼的窗户很快透出暖黄的光。周景恒站在楼下,手里的烤红薯还很烫,他咬了一口,甜得从舌尖暖到胃里,像极了此刻心里的感觉——那些错过的、等待的、遗憾的,终于都在这个冬天,变成了实实在在的甜。
降温那天果然飘起了雪。周景恒早上出门时,看见陈颂站在巷口,怀里抱着件深灰色大衣,是他去年在南方买的,一直没机会穿。
“猜你肯定没看天气预报。”陈颂把大衣往他身上披,拉链拉到顶,只露出半张脸,“北方的风跟南方不一样,专往骨头缝里钻。”
周景恒低头,看见陈颂自己穿的还是那件薄款羽绒服,伸手想把大衣脱下来,却被按住。“我不冷,”陈颂笑着往后退半步,原地跳了跳,“刚跑过来的,身上热着呢。”
雪粒子落在陈颂发梢,像撒了层碎盐。周景恒抬手替他拂掉,指尖碰到耳廓,冰得像块玉。“下次等我一起走,”他说,把围巾解下来,往陈颂脖子上绕了两圈,“别总这么冒失。”
围巾上还带着他的体温,陈颂缩了缩脖子,把半张脸埋进去,声音闷闷的:“知道了,周管家。”
到公司时,两人肩头都落了层薄雪。陈颂去茶水间冲咖啡,周景恒先回了工位,发现自己的键盘旁多了个暖手宝,插着电,正温乎乎地冒着热气。下面压着张便签,是陈颂的字迹:“机房空调老毛病,揣着这个敲代码,手指不僵。”
周景恒拿起暖手宝,热度透过绒布渗到掌心,忽然想起大学时,陈颂总把暖水袋偷偷塞进他怀里,说“你手凉,敲代码都比别人慢半拍”。那时候的暖水袋是橡胶的,灌着热水,总担心漏出来,现在这个充电暖手宝,倒是方便多了,可那份暖意,却和当年一模一样。
下午开项目评审会,讨论到某个模块的容错机制,两人意见起了点小分歧。陈颂坚持用冗余备份,周景恒觉得可以优化成动态切换,争执到最后,陈颂忽然笑了:“行,听你的。不过要是出了问题,晚上羊杂汤你请。”
周景恒也笑了:“没问题,再加两份烤饼。”
散会后,陈颂被总监叫去办公室,周景恒替他整理散落的文件,看见他的笔记本上写着“景恒的动态切换逻辑其实更优,只是我没转过弯”,后面画了个小小的哭脸。周景恒拿出笔,在旁边补了句“冗余方案做备用,双保险”,像在代码里加了行兼容注释。
雪下得大了些,傍晚下班时,路面积了薄薄一层白。陈颂提议走路回家,说“雪天打车难,不如慢慢晃”。周景恒没意见,任由他拽着自己的手,揣进同一个大衣口袋里。
两人的手指在口袋里交握,陈颂的指尖有点凉,周景恒就用掌心裹着,一点点焐热。路过老邮局时,陈颂忽然停住,指着橱窗里的明信片:“你看那个,印着江城大学的樱花。”
是张很旧的明信片,边角都磨圆了。周景恒看着上面的樱花,忽然想起陈颂给的那两张门票,已经被他夹在《编译原理》里,和新的便签纸放在一起。
“等开春,我们去拍张照。”陈颂说,指尖在玻璃上画了个相机的形状,“就站在樱花树下,跟当年那张合影一样。”
“好。”周景恒点头,看见他呼出的白气在玻璃上凝成雾,又被他用手指画了个歪歪扭扭的爱心。
快到巷口时,陈颂忽然“哎呀”一声,从口袋里掏出个东西——是颗水果糖,糖纸被体温焐得发软,“早上想给你的,忘了。”
周景恒接过来,是橘子味的,是他小时候生病时爱吃的味道。他剥开糖纸,没自己吃,反而喂到陈颂嘴边。陈颂愣了愣,张嘴含住,甜味在舌尖漫开时,看见周景恒正望着自己笑,眼里的光比路灯还亮。
“其实有个事,”陈颂含着糖,说话有点含糊,“我跟总监申请了,把智能温控系统的项目捡起来,咱们俩牵头做。”
周景恒脚步顿住:“就是当年没做完的那个?”
“嗯,”陈颂点头,眼里闪着期待的光,“现在技术成熟了,说不定真能实现‘南北温差无缝衔接’。到时候……”他忽然笑了,“到时候就有借口去南方出差了,顺便去看看阿姨。”
雪还在落,落在两人的发间、肩头,把世界染成一片白。周景恒看着陈颂眼里的光,忽然觉得这雪下得真好,像给过去的遗憾盖上了层温柔的被子,而未来的日子,就在这白茫茫的干净里,等着他们一笔一笔,写出新的代码。
他握紧陈颂的手,往巷子里走。口袋里的暖手宝还热着,掌心的糖纸揉成了团,却舍不得扔。雪地上的脚印并排延伸着,偶尔交叠在一起,像两段终于完美同步的代码,在时光里,稳稳地向前走。