下一章 上一章 目录 设置
16、她知道 ...
-
“我在想,如果我在写那段代码的时候,能多想一步,能意识到写日志也会消耗连接——”
“林溪。”傅北辰的声音变重了一些,“不要想这些。”
林溪转过头,看着他。她的眼眶红红的,但没有眼泪。她的表情很平静,但那种平静下面,是一种更深层的东西——不是崩溃,不是自责,而是一种冷静的、理性的、近乎冷酷的自我审视。
“傅北辰,”她说,“你说过,最好的程序员不是不写bug的程序员,而是能快速修bug的程序员。但我觉得——最好的程序员,应该是能从每一个bug里学到东西的程序员。”
她转回头,看着屏幕上的代码,声音变得很轻。
“这个bug告诉我两件事。第一,永远不要在测试环境里偷懒。压测的并发量必须和生产环境一致,差一点都不行。第二,任何资源——连接、线程、内存——都要有明确的创建者和销毁者。谁创建谁销毁,不能交给运气。”
她深吸一口气。
“我会记住这两件事。以后不会再犯同样的错误。”
傅北辰看着她,沉默了很久。
然后他伸出手,放在她的头顶,轻轻地揉了一下。
“你已经是最好的程序员了。”他说,声音低低的,“不是因为你不写bug,而是因为你的bug永远只犯一次。”
“好吧,你说的对。”
“你刚才修bug的样子,很迷人。”
林溪愣了一下,然后笑了——那种带着真心实意的笑。
“你什么时候学会夸人了?”
“刚才。刚学的。效果怎么样?”
“……还行。再多练练。”
“好。”
两个人坐在凌晨四点的办公室里,对着屏幕笑了。
窗外的天空从靛蓝色变成了浅蓝色,然后又变成了橘红色。
太阳升起来了,把整座城市染上了一层温暖的光。
林溪靠在椅背上,看着窗外的日出,突然觉得——这个bug,也许不是一件坏事。
它让她知道了自己的弱点在哪里,让她知道了傅北辰会在她最需要的时候站在她身边,让她知道了——即使写出了一个让系统崩溃的bug,天也不会塌下来。天会亮,系统会恢复,她会变得更强。
“傅北辰。”
“嗯。”
“我想把那个代码情书的仓库更新一下。”
“加什么?”
“加今天修的这个bug。把它变成一个case study,写给所有的程序员看。告诉他们——连接池的连接一定要在finally块里关闭,压测的并发量一定要和生产环境一致,写日志的时候不要忘了关连接。”
她转过头,看着傅北辰,眼睛里有光。
“犯错不可怕。不学习才可怕。”
傅北辰看着她,嘴角微微弯了起来。
“这个想法很好。”他说,“我帮你review。”
“不用。”林溪摇了摇头,语气坚定,“我自己写。写完了你再帮我看。”
“好。”
那天早上,两个人在公司楼下的早餐店吃了一顿早饭。豆浆、油条、茶叶蛋,简简单单的。林溪吃着吃着就困了,脑袋一点一点地往下栽,最后直接趴在了桌上。
傅北辰把自己的外套脱下来,披在她身上,然后坐在对面,安静地看着她。
他想起八年前,他在实验室的机房里,第一次看到她的代码。那时候的她,写的代码漏洞百出,但注释写得认认真真,每一行都有。
八年后的今天,她在凌晨四点修好了一个让整个支付系统崩溃的bug,然后说“我要把这个bug写成case study,让更多的人学到东西”。
她变了。
从一个大一新生变成了一个真正的程序员,从菜鸟变成了骨干,从需要别人帮她改bug变成了能独立修好生产环境故障的工程师。
但她也没有变。
依然是那个认认真真写代码、认认真真对待每一行注释的人。依然是那个会在代码里藏温度的人。依然是那个让他觉得“写代码是有意义的”的人。
傅北辰伸出手,轻轻地把她额前垂下来的一缕头发拨到耳后。
她的睫毛在晨光中微微颤动,呼吸平稳而绵长,脸颊上还残留着哭过的痕迹,但嘴角是微微翘着的——像是在做一个好梦。
他低下头,在她的额头上轻轻地落下一个吻。
“睡吧。”他低声说,“bug修好了。剩下的,我来。”
那天之后,林溪做了一件让所有人都意外的事。
她在公司的技术分享会上,做了一次关于这次故障的复盘演讲。会议室里坐满了人——不只是技术中心的同事,产品部、运营部甚至销售部都来了人。大家都想知道,那个让支付系统崩溃了两个小时的bug,到底是什么样的。
林溪站在白板前面,没有用PPT,没有准备演讲稿。她只是站在那儿,面对着几十个同事,坦诚地、完整地、不加任何修饰地讲述了这个bug的来龙去脉。
她讲了代码里哪里写错了,为什么写错了,测试的时候为什么没有发现,上线之后为什么会爆发。她讲了修bug的过程,讲了改了什么配置,讲了为什么这样改。她讲了从这次故障里学到的三件事——测试环境的压测并发量必须和生产环境一致、任何资源都必须有明确的创建者和销毁者、写日志的时候不要忘了关连接。
她讲完之后,会议室里安静了几秒。
然后老周带头鼓起了掌。
“这才是我们需要的技术文化。”老周说,“不怕犯错,就怕不学习。林溪做得很好。”
分享会结束后,很多同事来找她。有人感谢她的分享,有人说“我也有过类似的bug”,有人说“以后写连接池的代码会想起你今天说的话”。
林溪站在会议室门口,一一回应着每个人,脸上的笑容疲惫但真诚。
傅北辰靠在走廊的墙上,远远地看着她。
陈小北不知道什么时候溜到了他旁边,小声说:“傅老师,溪姐今天真厉害。”
“嗯。”
“你不去夸夸她吗?”
“不用。”
“为什么?”
“因为她不需要我的夸奖了。”傅北辰看着远处的林溪,嘴角微微弯起来,“她已经不需要任何人告诉她‘你很好了’。她自己知道。”
陈小北似懂非懂地点了点头。
那天晚上,林溪更新了GitHub上的“CodeLoveLetter”仓库。
她在里面加了一个新的文件夹,名字叫“bug_case_study”。
文件夹里只有一个文件——一篇详细的故障复盘报告,从bug的产生、到测试的遗漏、到生产环境的爆发、到修复的过程、到学到的教训,写得清清楚楚。
她在报告的结尾写了一段话:
“每一个程序员都会写出让系统崩溃的bug。这不是失败,这是成长的一部分。重要的是——你从bug里学到了什么,你有没有把它变成经验分享给更多的人。
今天这个bug教会了我三件事。我希望读到这篇报告的人,也能从我的错误里学到东西。这样,这个bug就不只是一个bug了——它变成了一颗种子,种在每个人的代码里,让未来的代码变得更好。”
这篇报告在技术社区里被大量转发。很多人留言说“谢谢你的坦诚”“我也犯过类似的错误”“从今天开始,我会更认真地对待连接池的配置”。
林溪一条一条地看完了所有的留言,然后关掉了网页。
她打开终端,输入了git commit的命令。提交信息写的是:
“Learned something today. Growing.”
然后她输入了git push。
代码被推送到了远程仓库。几秒后,GitHub的通知栏里弹出了一条消息:
“beichen starred CodeLoveLetter”
林溪看着那颗星,笑了。
她拿起手机,给傅北辰发了一条消息:
“你又给我点了一颗星。”
回复几乎是秒回的:
“嗯。这颗星是给那个bug的。谢谢你把它变成了一颗种子。”
林溪把手机扣在胸口上,闭上眼睛,感觉到心脏在胸腔里安静地跳动着。
窗外是六月的夜晚,城市的灯火在黑暗中闪烁着,像无数颗星星。而在这些星星里,有一颗是最亮的——那颗叫“北辰”的星,永远挂在天上,永远不移动,永远在同一个位置发光。
她终于知道了,那不是一颗遥不可及的星。那是她身边这个人的眼睛,在黑暗中看着她,安静地、稳定地、永不宕机地看着她。
“傅北辰。”她在黑暗中轻声说。
手机屏幕亮了。
“嗯?”
“你的星星,我看到了一直在的。”
屏幕暗下去,然后又亮了。
“一直都在的。从第一天起。”
林溪把手机放在枕边,闭上了眼睛。嘴角翘着,慢慢地沉入了睡眠。
窗外,北极星在夜空中安静地亮着。