下一章 上一章 目录 设置
7、代码情书 ...
-
不只是咖啡本身——而是那种“有人记得你喜欢什么”的感觉。在这个世界上,能记住她喜欢喝什么的人不多。她爸妈记不住,她的闺蜜记不住,她以前的室友也记不住。但傅北辰记住了。
不仅记住了,还执行得一丝不苟,像一个永不宕机的守护进程。
两个人坐在一起工作的画面,成了技术中心的一道风景线。
林溪写代码的时候,依然是那个六亲不认的状态——眉头紧锁,嘴唇抿成一条线,手指在键盘上噼里啪啦地敲,速度快得像在放鞭炮。
而傅北辰坐在她旁边,姿态松弛,手指敲击键盘的频率比林溪慢得多,但每一击都精准有力,像是在雕刻一件艺术品。
两个人偶尔会有互动。
林溪遇到问题的时候,会下意识地往右边瞥一眼。傅北辰像是装了感应器一样,每次她瞥过去的时候,他都会转过头来。
“怎么了?”他问。
“这段代码的逻辑我推不通。”林溪指着屏幕上的一个函数,“你看这个地方——我在高并发场景下做了一个异步队列,但消费者的处理速度跟不上生产者的写入速度,队列一直在堆积,最后会OOM。”
傅北辰把椅子往她这边挪了一点,凑近屏幕看了一眼。
“你的消费者线程数是多少?”
“十个。”
“太少了。改成五十个。”
“五十个会导致数据库连接池压力过大。”
“那就用批量消费。每次从队列里取一百条,批量写入数据库。这样消费者的吞吐量能提升一个数量级,同时减少数据库的连接次数。”
傅北辰说着,伸手在她的键盘上敲了几行代码。他的手指从她的手背上掠过——不知道是有意还是无意——林溪感觉到一阵微弱的电流从手背窜上来,酥酥麻麻的,让她差点把手缩回去。
“大概就是这样。”傅北辰敲完最后一行,把手收回去,表情平静得像什么都没发生过,“剩下的你自己补全。”
林溪盯着屏幕上那几行代码,发现他不仅写了一个批量消费的框架,还在注释里写了详细的性能分析——每条注释都精确到微秒级别,像是用示波器测过一样。
“傅北辰。”林溪说。
“嗯?”
“你是不是……把我的代码全部看过一遍?”
傅北辰的手指在键盘上停了一下。
“嗯。”
“……全部?”
“全部。”他顿了顿,补充道,“包括你上周写的那个单元测试。第九行的断言写错了,应该是assertEquals而不是assertSame。我帮你改过来了。”
林溪深吸一口气,缓缓地吐出来。
“你这个人……”她咬着牙说,“真的是……比我妈还了解我。”
傅北辰看了她一眼,嘴角微微动了一下:“你妈不会帮你改代码。”
“对,但你改得比我妈做的饭还多。”
傅北辰没有接这句话,但他的耳朵尖红了。
林溪发现了——傅北辰的耳朵尖是他情绪的“泄露点”。
无论他的表情控制得多好,无论他的语气多么平静,他的耳朵尖永远会出卖他。
紧张的时候红,窘迫的时候红,高兴的时候也红。
就像一个没有权限控制的日志文件,任何人都能读取。
这个发现让林溪觉得既好笑又心疼。好笑的是,这个在技术领域站在金字塔顶端的男人,在感情方面竟然连最基本的“隐藏情绪”都做不好。心疼的是——他可能从来没有在任何人面前暴露过这些情绪,所以从来没有练习过控制它们。
他的感情经验,就像一段从未上过生产环境的代码——理论上可行,但从未经受过真实流量的考验。
想到这里,林溪突然觉得,自己好像也不是那么“没出息”了。至少她的情绪系统,还能勉强维持在一个“可控”的范围内。
好吧,也不算太可控。她的耳朵也红了。
两个人就这么坐着,各自写各自的代码,偶尔交流几句技术问题,偶尔沉默很久。但那种沉默不是尴尬的沉默,而是一种舒适的、默契的安静——就像两个并肩跑步的人,不需要说话,只需要听着彼此的呼吸声,就知道对方还在。
这种状态持续了大概两周。
在这两周里,林溪发现了一件让她心跳加速的事——傅北辰的电脑桌面变了。
以前的桌面是一片深蓝色,只有一个“linxi_bubble_sort_review.txt”的快捷方式孤零零地躺在那里。现在的桌面上多了一个文件夹,名字叫“CodeReview”。
林溪第一次看到这个文件夹的时候,没有多想。她觉得那大概是傅北辰工作用的文件夹,里面装的是他审核过的代码。
直到有一天,傅北辰去开会,忘了锁屏。
林溪绝对不是那种会偷看别人电脑的人——她的人品和职业操守都不允许她做这种事。但那天,她的目光只是不经意地扫过他的屏幕,然后就钉在了那里,再也挪不开了。
因为那个“CodeReview”文件夹是打开的。
里面不是代码审核记录。
里面是——她的代码。
不是一份两份,而是几百份。从她大一时候写的那个冒泡排序,到她研究生时期的毕业论文实验代码,到她工作后提交的每一个项目的每一版迭代——全部都在。
文件夹的命名方式是按时间排序的:
“2018-09-15_林溪_冒泡排序_初版”
“2018-09-16_林溪_冒泡排序_修改版”
“2018-10-20_林溪_学生管理系统_数据库设计”
“2019-03-05_林溪_爬虫框架_第一版”
“2019-07-12_林溪_爬虫框架_重构版”
“2020-11-20_林溪_毕业论文_数据分析模块”
“2021-04-07_林溪_毕业论文_最终版”
“2022-01-15_林溪_云顶科技_用户画像系统_v1.0”
“2022-06-30_林溪_云顶科技_用户画像系统_v2.3”
“2023-09-10_林溪_云顶科技_支付接口优化_v3.1”
“2024-02-18_林溪_云顶科技_分布式事务模块_v1.2”
“2024-05-20_林溪_云顶科技_分布式事务模块_v1.4”
………
每一份代码旁边,都有一个对应的“review”文件——那是傅北辰写的代码审核意见。
林溪的手在发抖。
她的目光落在最新的一个文件夹上——日期是三天前。那是她上周提交的一个代码审核请求,内容是优化了一个缓存策略。她记得那次提交之后,code review的反馈来得特别快,而且特别详细,连她写错的一个日志级别都指出来了。
她一直以为是公司的审核系统变智能了。
现在她知道了——不是什么系统,是傅北辰。
是傅北辰在每一行代码后面,默默地守着。
林溪坐在自己的工位上,盯着傅北辰的屏幕,眼泪一滴一滴地往下掉。
她想起了很多事。
想起了大二那年,她在做一个课程设计的时候遇到了一个特别难的bug,调试了整整三天都没搞定。第四天早上,她打开电脑,发现bug莫名其妙地消失了——她以为是系统重启解决的,现在想来,大概是傅北辰远程连了她的电脑。
想起了研一那年,她在实验室里写论文写到崩溃,对着屏幕哭了半个小时。第二天收到一封匿名邮件,附件里是一段数据分析代码,运行之后完美地处理了她所有的实验数据。她当时以为是导师找人帮忙写的,现在想来,那个“匿名”就是傅北辰。
想起了工作第一年,她被主管骂了之后,在公司的天台上吹了一小时冷风。第二天,她的代码仓库里多了一个分支,分支名是“fix_performance_issue”,里面是一个优化过的聚类算法。她当时以为是哪个好心的同事帮忙改的,现在想来——云顶科技的技术团队里,没有人有那个水平写出那样的代码。
想起了去年的护网行动,她的模块被红队打穿之后,老周转给她一份“内部资料”。那份资料的编写风格精准、简洁,关键逻辑旁边都有“注意”标签——和傅北辰给她写代码注释的风格一模一样。
她当时就应该发现的。
但她没有。
因为她从来没有想过,那个站在云端的人,会一直在她身边。
林溪擦了擦眼泪,把目光从傅北辰的屏幕上移开。她深吸了一口气,稳定了一下情绪,然后做了一件她自己都觉得有点疯狂的事——
她打开了自己的代码编辑器,新建了一个文件。
她开始写代码。
不是工作代码,不是技术研究——是一封代码情书。
她用Python写了一个程序。程序的逻辑很简单:输入一个日期,输出那一天的“故事”。而这个“故事”,是从傅北辰的代码审核记录里提取出来的——她刚才偷看到的那些。
她写得很认真,手指在键盘上飞舞,速度比平时写工作代码还快。
她用了两个小时,写完了一个完整的情书程序。
程序的核心是一个字典——键是日期,值是从傅北辰的审核记录里提取出来的评论。每一句评论都是傅北辰的原话,她只做了一件事:把它们翻译成了“人话”。
比如:
“边界条件处理不当,建议增加对空输入的判断” → “你忘了考虑特殊情况,我帮你补上了。”
“时间复杂度O(n?),在大数据量场景下性能较差,建议优化为O(n log n)” → “你的算法太慢了,我帮你加速了一下。”
“变量命名不规范,建议使用驼峰命名法” → “你的变量名写得太随意了,我给你改成了更好看的。”
“日志级别使用错误,此处应使用WARN而非INFO” → “这个地方很重要,我帮你标出来了。”
“并发控制逻辑存在竞态条件,建议增加分布式锁” → “你的代码在人多的时候会打架,我帮你加了个排队系统。”
林溪写完之后,看着屏幕上那封“代码情书”,眼眶又红了。
她深吸一口气,把程序打包成一个可执行文件,然后——等傅北辰开完会回来。