陆维的办公室在十七楼。窗户对着另一栋写字楼的玻璃幕墙。他已经不记得上次看窗外是什么时候了。
屏幕上是今天第三个Pull Request。七百多行Go代码,AI写的。他从头到尾扫了一遍,在"Approve"按钮上悬停了一下,点了。
三分钟。
第一个月的时候他会花二十分钟。会在注释里写feedback。会跑到同事工位上说"这里有个竞态你看到没"。现在三分钟。有时候两分钟。
他不觉得这有什么问题。代码质量确实在提高。AI犯的错越来越少。他的价值不在于逐行审查,而在于"把关架构方向"。他跟老板这么说的。老板点了点头。
他的vim已经三个月没打开了。图标还在dock栏最左边。他每天都看到它。每天都没点。
但他的手指还记得。
他不记得从什么时候开始不看代码的。不是一瞬间的事。是一个渐变。
最开始他会在每个PR上写三四条comment。然后两条。然后一条。然后"LGTM"。然后连LGTM都不打了,直接点绿色按钮。
他跟自己说这是信任。AI越来越好,不需要逐行审查了。他的角色变了——从reviewer变成了gatekeeper。gatekeeper不需要看内容,只需要确认流程走完了。
但有时候,他的右手食指会在空中画一个冒号。然后是w。然后按一下回车。
动作很快,像打了一个哈欠一样自然。他自己都没注意到。
他的同事小周注意到了。
"维哥,刚那个PR你看了吗?第三个函数有个竞态。"
"哪个PR?"
"就是刚才那个。你两分钟前approve的。"
陆维看了眼屏幕。绿色的"Approved"标签还挂在上面。他确实不记得那个PR里有什么了。
"我看了,"他说。"整体没问题。竞态的话你提个issue跟进一下。"
小周看了他一眼,没说什么,转身走了。
陆维把屏幕上的PR关掉,打开下一个。
下班前他打开了浏览器。准备搜一个技术问题。
他在搜索框里打了:w。
回车。
搜索结果页出来了。第一条是Stack Overflow上一个十年前的帖子:"How to save and quit in Vim"。
他盯着屏幕看了三秒。
然后退格。重新输入。
这件事他做过很多次了。每次都觉得是手滑。
但这次他没有立刻输入新的搜索词。他的手悬在键盘上方。
:w。
保存。
他的手指想保存什么?
周五下午三点,CTO发了一封全员邮件。标题是"Embracing the Future: Our AI-First Transformation"。
陆维在工位上打开邮件。读了两遍。第一遍他觉得没什么。第二遍他注意到了一个数字。
"我们的AI工具已经帮助团队提升了47%的代码产出效率。基于这一成果,我们决定对组织架构进行优化,以更好地拥抱AI时代的机遇。"
优化。
他往下滑。看到了名单。
小周的名字在第三行。
他看了一眼小周的工位。小周也在看邮件。两个人的目光没有碰上。
陆维关掉邮件,打开了下一个PR。
小周走之前来找他。
"维哥,那个竞态的issue,我没来得及跟进。你记得关掉。"
"好。"
"还有一个事。"小周压低声音。"上周四那个PR,你真的看了吗?"
陆维没说话。
"不是怪你。就是想知道。"
"我看了。"
小周点了点头。没有追问。拿起背包走了。
陆维坐在工位上。屏幕上还是那个PR。绿色的按钮。
他的右手食指在桌面上画了一个冒号。然后是w。然后停了。
:w
保存。
但这里没有文件。这里没有buffer。这里什么都没有。
小周走后的第二天,陆维点开了那个issue。
#4217: Race condition in concurrent session handler
他看了一眼代码。
看不懂。
不是代码太难。是他太久没读代码了。变量名像是AI起的——descriptive_session_lock_timeout_handler。每个函数三百行。注释比代码多。但逻辑……逻辑在哪里?
他往上翻。往下翻。往上翻。
他忽然意识到这感觉很熟悉。这就是他以前review代码的感觉。他只是已经很久没有这个感觉了。
他关掉了电脑。回家了。
晚上十一点他又打开了电脑。不是公司的电脑。是他自己那台。
他打开了终端。
vim session_handler.go
光标在闪。
他开始读。一行一行。像以前那样。用手指跟着光标走。读到第四十七行的时候他看到了那个竞态。
小周说得对。
他开始写。不是让AI写。是自己写。一个字符一个字符。他的手指很慢。比以前慢很多。有些语法他需要查。但他在写。
凌晨两点他写完了。二十三行。一个mutex。一个defer。一个注释:"这里有个竞态,小周发现的。"
:w
他按下了这两个键。
屏幕上什么都没变。文件保存了。就是这样。
他关上电脑。躺下。闭眼。
他不知道明天这个修复会不会被merge。也许会。也许不会。也许那个项目下周就被AI重写了。也许那二十三行代码的寿命只有一个sprint。
但他写了。他亲手写了。他的手指记住了这个感觉。
:w
保存。
第二天早上他到了公司。打开电脑。提交了那个PR。
title: fix race condition in session handler
description: Found by Zhou Wei during code review. Manual fix.
他在description里多写了一行:
"Zhou Wei caught this on his last day. Fixing it felt like the least I could do."
然后他点了Create。
过了十分钟,AI review bot给了一条comment:"Consider using sync.RWMutex instead of sync.Mutex for better read concurrency."
他看了看那条comment。想了想。
然后他打开了文件。
vim session_handler.go
改了。
:w