副标题:OpenAI服务器崩溃,全球程序员代码水平下降100倍,只有我保持不变
目录
第一章 活化石的最后一个上午
第二章 崩溃首日
第三章 神迹十分钟
第四章 捧杀进行时
第五章 黑高领衫的offer
第六章 依赖度白皮书
第七章 AI马上好
第八章 支付系统的定时炸弹
第九章 深夜机房
第十章 每行代码都要过自己脑子
第一章 活化石的最后一个上午
晨会开到第九分钟,周总点了我的名。
"顾法,你这个季度的代码产出,全组倒数第一。"他把报表拍在桌上,转笔的手没停,"马小跳一天三个需求,你三天一个。解释一下?"
会议室里有人笑出了声。
我站起来,想了想,说:"我的代码是自己写的。"
笑声更大了。马小跳笑得最欢,他往椅背上一靠,开始模仿我敲键盘的样子:两根手指悬在半空,一顿一顿,嘴里配着音,嗒,嗒,嗒。
"各位,这叫人形编译器。"他说,"纯手工,无添加,日产量三百行。"
"我的三百行,"我说,"线上零事故,跑了四年。"
"我的三千行也没事故啊。"他把手一摊,"AI写完还会自己写测试,你呢,测试都得手写。哥,不是我说你,你这属于用算盘嘲笑计算器。"
周总敲了敲桌子,说散会前最后一句:"顾法,一会儿晋升答辩,你好自为之。"
好自为之。我在这家公司快十年,听过四次好自为之,每次都不是什么好兆头。
我坐下了。十年了,这种会我开了十年。人的抗压能力跟代码一样,压测跑多了,阈值自然就高了。
其实马小跳没说错,我确实是个人形编译器。
我不用AI补全,不用AI生成,不用那个什么都能帮你写的助手。我的IDE干净得像刚装好的系统,插件列表只有三行。同事路过我工位都要多看两眼。
我的工位是整层楼唯一没有第二块屏幕的。桌上一把HHKB,键帽磨得发亮,字母早就看不清了。旁边一摞纸质书,最上面那本是《TCP/IP详解》,翻得掉了页,我用回形针别着。马小跳问过我这键盘多少钱,我说两千三。他愣了三秒:"两千三?够我开两年AI会员了。这玩意儿能进博物馆。"
"手感是练出来的。"我说。
他摇着头走了,边走边跟旁边的人说我是行为艺术。
显示器边框上贴着一张便签,我手写的,十一个字:每行代码都要过自己脑子。这是我师傅退休前留给我的,他干了三十年汇编,临走就说了这一句。我抄下来贴在这儿,一贴就是七年。上周有人拍了照发到内网,配文"活化石出土现场",点赞破百。我没删,也没解释。便签纸在空调出风口底下哗哗地响,我觉得挺好,至少有人看。
十点四十,晋升答辩。
会议室里坐着三个评委,周总也在。我讲了二十分钟,讲我做的风控模块,讲我怎么把一个超时三秒的查询优化到八十毫秒,讲索引,讲执行计划,讲我翻了多少页文档。
讲完,对面沉默了一会儿。
然后主评委往前倾了倾身子,问出那个我被问了无数遍的问题:
"我有个疑问。你为什么,不装Copilot?"
空调呜呜地响。我听见自己的声音很平:"装了,我就不知道自己会不会写了。"
"这是态度问题。"另一个评委在本子上记着什么,"公司推行AI协作,你抗拒工具,等于抗拒组织效率。"
"我不抗拒工具。"我说,"我抗拒的是忘了自己还会不会。"
没人接话。周总的笔转得飞快,最后啪嗒一声掉在桌上。
答辩挂得毫无悬念。散会的时候主评委拍了拍我肩膀,语气像劝一个不肯吃药的病人:"顾法啊,时代变了。AI写的代码,有什么好懂的?能用就行。你较这个劲干嘛呢。"
周围响起一片哄笑。有人接茬:"就是,AI写的代码有什么好懂的!"
这句话后来在我脑子里住了很久。当时我只是把它归档了,像归档一个编译警告。当时不致命,但你知道它迟早会炸。
中午十二点,我在工位上啃面包,顺手改一个边界条件的bug。本地编译,绿。跑测试,绿。我把补丁提交上去,git log里又多了一行我自己看得懂的提交信息。
十二点零七分。
先是马小跳那边"咦"了一声。
然后是斜对面的实习生,然后是整个工区,像接力一样,一声接一声的"咦"。
我抬起头。整层楼的屏幕,一块接一块地弹出同一个红框。马小跳的三块屏红得最齐,像三面同时拉响的警报。
我听见他念出声的,一字一顿:
"A-I-服-务-不-可-用。"
"重启一下就好了。"有人说。
马小跳点了重试。红框又弹出来。再点,再弹。他敲击的频率越来越快,那声音我很熟,跟我敲HHKB的时候完全不一样。急躁,没底气,像一个人反复推一扇锁死的门。
我低头看了看自己的屏幕。编译器还是绿的,测试还是绿的,光标安安静静地停在下一个函数开头。
我顺手把那个边界条件的补丁跑完了最后一轮回归。绿。面包渣掉在键帽缝里,我吹了一口气。
我的世界里什么都没有发生。
但空调风底下,那张便签纸哗啦啦响得比平时厉害。我后来总想起这个细节。那天中午十二点零七分,整层楼的红色里,只有我这个角落是绿的。
当时我以为这只是又一次普通的服务抖动。
当时我哪知道,那是这个世界最后一次"普通"的中午。
第二章 崩溃首日
下午两点,我听见有人在哭。
是实习生小陈,工位在窗边,入职三个月。他盯着屏幕,眼泪挂在脸上,手里捏着一张需求单,纸上就一件事:写一个分页查询。
"你卡在哪儿?"我走过去问。
他抬起头,声音抖的:"顾哥,for循环……这个循环怎么写来着?"
我以为他在开玩笑。一个计算机系本科毕业生,问我for循环怎么写。可他眼睛里的慌是真的,手指悬在键盘上,抖,落不下去,像第一次摸键盘的人。
"你之前不是做过分页吗?"
"之前都是AI……"他没说完,眼泪又下来了。
我拉了个凳子坐下,带着他一行一行写。初始化,条件,步进。他抄得很慢,抄到第三行忽然卡住,指着屏幕上自己刚写的东西问我:"这个分号,为什么要在这儿?"
我没回答。我后背有点凉。
小陈不是笨孩子。他入职笔试是我面的,算法题做得比谁都快。只是这三个月,他的每一段代码都是对话框里长出来的,他的脑子已经三个月没干过这个活了。
刀不用会锈。脑子也是。
马小跳没哭。马小跳在等。
他的三块屏全开着,AI窗口的加载圈转了两个小时。他就那么盯着,一动不动,手里的咖啡从热放到凉。
两点半,周总从会议室冲出来,说上头下了死命令,今天交付的版本不许延期。全组面面相觑。版本里还有四十个接口没写完,而这四十个接口,从来没人亲手写过。
"那就手写啊。"周总自己把话说出来了,说完自己愣住了,好像这三个字是什么外语。
办公室里安静了几秒。然后马小跳转回头去,继续盯着他的加载圈。
"再等等。"他跟周围人说,也跟自已说,"AI马上就好。"
这句话下午在办公室里此起彼伏,成了当日口令。运维说在联系服务商了,服务商说在排查了,排查的结果是没有结果。有人开始刷手机,刷出一条热搜:Stack Overflow崩了。
我点进去看了一眼。崩溃前最后半小时,这个快被忘干净的网站流量暴涨十倍,新提问每分钟几百条,标题清一色是"for循环怎么写""指针是什么急在线等"。然后服务器扛不住了,页面变成一只抱歉的企鹅。
一个时代的百度贴吧,在另一个时代复活了三个小时,又死了。
我低头继续写我的代码。本地编译,跑测试,提交。节奏跟上午一模一样。
"顾法。"运营组的小姑娘路过我工位,探头看了一眼,语气不太友善,"都这时候了,你还有心情摸鱼?"
我看了看自己的屏幕,又看了看她。我写的明明是下个迭代的排期任务。
"我在干活。"我说。
"干活?"她撇撇嘴走了。我听见她跟人说,全组都在等AI恢复,就他一个人在那儿装忙。
傍晚,林晚把我拉到了监控大屏前。
她是数据组的,全公司我最佩服的人,因为她屏幕上的数字从来不会哄人。她指着一条报错曲线,从十二点零七分开始,笔直地往上窜。
"看这儿。"她说,"报错率上升4700%。你管这叫服务抖动?"
"官方说在排查。"
"排查个鬼。"她推了下眼镜,调出另一张图,"我拉了全行业的公开状态页。智枢,红。Copilot,红。国外那几家,全红。同一时间,同一分钟。"
我盯着那排红色看了几秒:"你的意思是,这不是我们一家的事。"
"我的意思是,"她压低声音,"这不像故障。故障有传播路径,有先后。这个是同时断电,全世界一起。你见过哪个故障这么整齐的?"
我说没见过。
她关掉大屏,补了一句:"还有件事。小陈那种,今天下午全公司报了十几个。写不出基础语法的,看不懂编译报错的。顾法,你有没有觉得,瘫掉的不是AI。"
她没把话说完。但我听懂了她没说的那半句。
瘫掉的是人。
晚上十一点,家里。
老婆孩子都睡了。我泡了杯茶,翻开桌子上的Linux内核源码打印件,拿红笔在页边写批注。这是我十年的习惯,睡前读一个小时源码,比什么安眠药都管用。老婆说我这是病,我说这是疫苗,她翻个白眼不理我了。
楼道里的监控摄像头对着我家门,红点一闪一闪。它拍过我无数个这样的深夜:灯亮着,一个人坐着,翻纸,写字。保安大概觉得我是这栋楼里最无聊的住户。
手机里,工作群还在刷"AI马上就好",最后一条是周总发的:各位保持信心,明早恢复正常。
十一点五十,新闻推送弹出来。
《全球AI编程服务集体失效,原因不明》。
我点开,快速扫完。智枢发了声明,四个字:未知故障。没有恢复时间,没有解释,没有道歉。评论区炸了,几十万条,最顶上一条写着:明天我还有三个需求要交付,谁救救我。
我关掉手机,把读到一半的源码折了个角。
合上书的时候我想,瘫痪的服务器会修好,这种事情顶多三天。三天后,马小跳会继续一天三个需求,小陈会忘记今天哭过,周总会继续转他的笔。
我当时真的这么想。
我关了灯。窗外整栋写字楼还有一半的灯亮着,一格一格,全是在等AI回来的人。
那一晚我睡得很好。全楼大概只有我一个人睡得好。
第三章 神迹十分钟
第二天早上九点二十,蓝鲸挂了。
不是演习。交易核心服务,每秒三万单的那套,全线五百。告警声从运维区一路叫到我们这边,又尖又密,听着像一整层楼的电热水壶同时烧开。
周总从办公室冲出来,笔都忘了转:"什么情况?"
"在排查!"运维组长的声音也是抖的。
我走到马小跳工位后面。他的三块屏上摊着报错栈,几百行,红色的异常链一层套一层。他看都不看,直接把整段复制下来,粘贴进AI窗口,点发送。
窗口转了个圈,弹出一行灰字:服务不可用。
他又试了一遍。还是那行灰字。
"哥几个谁有别的账号?"他回头喊,"我这个登不上去了。"
没人应他。全组的屏幕,灰的灰,红的红。小陈缩在角落里,脸色比昨天还差。
报错栈最底下,有个一闪而过的按钮:一键修复。那是IDE自带的功能,以前AI在的时候,按一下,自动分析自动改,改完自动提交。现在按钮是灰的,点不动。
马小跳还是伸手去戳了那个灰按钮,戳了三下。
"你戳它干嘛?"我问。
"万一呢。"他说。
我没说话。我从来不点那个按钮。装了IDE十年,那个按钮我一次都没碰过。马小跳以前为这个笑话我,说我有病,说有电梯不坐非要爬楼梯。
我当时回他:电梯停电的时候你别哭。
现在停电了。
"报错栈给我看一眼。"我拉了把椅子坐下。
马小跳愣了一下,让开半个身子。身后很快围上来一圈人,周总也来了,站在最外圈,压着嗓子问:"能行吗?"
我没理他。我看栈。
这是个空指针。栈顶写着订单服务在扣减库存的时候炸了,但栈这种东西,顶上的那一层通常是受害者。真正的凶手藏在调用链中间,藏在半个月前被谁改过的方法里。
干我们这行有个常识,报错信息是案发现场的口供,口供会撒谎。你得自己勘察现场。这话是我师傅说的,他说这话的时候,AI还只会下围棋。
我把代码拉下来,本地起服务,挂上GDB。断点打在扣减库存的入口。
"他要干嘛?"人群里有人小声问。
"调试。"另一个声音答,语气像在说一种民间巫术。
我打了七个断点。参数传进来,一层一层往下走。走到第五层,有个并发锁的释放顺序不对,高并发下库存对象会被提前置空,下一个线程进来,拿到一个空壳,直接炸。
这个写法我熟。半年前AI生成过一大批这样的代码,当时没人看,因为"能跑"。能跑的代码就像没响的闹钟,你不拆开看,永远不知道它少了哪个零件。
十分钟。我改完,本地跑通,压测三轮,提交,发版。
告警声停了。监控大屏上,那条红色的报错曲线垂直往下掉,掉到零。交易恢复了。
整个办公区安静了三秒,然后炸开。运营组的小姑娘带头鼓掌,掌声稀稀拉拉又越来越密,跟下雨一样。小陈站在人群后面,眼睛红着,鼓掌鼓得最用力。
"运气好。"马小跳说。他声音不大,但周围都听见了,"空指针嘛,蒙也能蒙到。"
"那你蒙一个。"林晚不知道什么时候也来了,靠在隔断上,"我给你计时。"
马小跳张了张嘴,没出声,转回去对着他那块灰屏幕。
周总拨开人群走过来,在我肩膀上拍了两下,拍得很重:"老顾,深藏不露啊。"
深藏谈不上,是你们从来没看过。
他没接这句。他已经在看手机了,手指飞快打字,脸上的表情我认得,那是他每次在群里报喜的表情。
中午我去茶水间,路过运维区,听见两个运维在看我修bug的录屏。
"他中间停都没停一下。"一个说。
"这个人看栈的样子,跟咱们看小说一样。"另一个说。
我回到工位,发现内网论坛炸了。有人把整个过程的屏幕录像传了上去,配了个标题:《活化石开光了?》。发帖四十分钟,回复三百多条。
我往下翻。前排回复是惊叹,中间开始吵,有人说这是摆拍,有人说这是基本功,还有人认真讨论"GDB是什么,新出的AI吗"。
再往下翻,有一条回复被顶得很高:我们什么时候把"会自己写代码"当成特异功能了?
发这条的人没有头像,没有昵称,匿名。我盯着那行字看了很久。
下午三点,我看见周总站在他办公室的落地玻璃后面,也在看那段录屏。他看了两遍,又倒回去看了一遍,然后拿起手机拨了个电话。
他一边讲一边看着我这边。
那眼神我后来才读懂。那不是一个领导看下属的眼神,那是一个商人看见货架的眼神。
下班前,全组收到邮件:即日起成立"核心系统保障专班",组长顾法,直接向周总汇报。
下班路上,电梯里两个别的部门的工程师认出了我,往两边让了让,让出一片空地。昨天之前,他们在电梯里连我是哪个组的都懒得记。
出名这件事,来的比告警还快。
马小跳从我工位旁边走过,停了停,欲言又止,最后什么都没说,走了。
他工位上多了个东西。一本崭新的笔记本,纸的,摊开着,第一页上用黑笔抄着一个for循环,字迹歪歪扭扭,抄了三遍。
第四章 捧杀进行时
周总是抱着一卷海报来找我工位的,早上八点五十,比打卡机还准时。
他把海报在我显示器上展开。铜版纸,覆了膜,上面印着我的脸,P得比我本人年轻八岁,旁边一行烫金大字:古法编程,匠心不灭。底下还有一行小字:蓝鲸科技首席手艺官 顾法。
"首席手艺官?"我把工牌翻过来给他看,"我这个月还是P6。"
内网那段录像不知被谁搬了出去,一夜之间铺满了全网。
"马上就升,流程在走。"周总压低声音,兴奋藏不住,"老顾,你那视频全网播放量两千万了。两千万,够市场部花两年的预算。这波流量必须接住。"
"我只想写代码。"
"写,接着写。"他把海报卷起来,拍在我键盘边上,"但是先拍宣传照。九点,楼下摄影棚,市场部都给你约好了。"
摄影棚是租的写字楼大堂,搭了个背景板,灯光打得我睁不开眼。摄影师让我抱着键盘,对,抱着,像抱吉他一样。
"眼神再坚定一点。"摄影师说,"想象你在眺望远方。"
我说我眺望的是报错日志,我坚定不起来。
市场总监亲自来盯现场,给我设计了三套造型:格子衫怀旧版、西装权威版、还有一套工装马甲,说是"工匠风"。我穿着工装马甲站在那儿,感觉自己像个修水管的吉祥物。
拍到一半,手机开始震。陌生号码,一个接一个。
"顾老师您好,我是猎聘的,有个技术合伙人岗位,年薪您开个数。"
"顾工,我们是做在线教育的,想请您出一套《古法编程三十讲》。"
"顾先生,我们这边是MCN机构,您这个IP商业价值非常大……"
我把手机调成静音。屏幕还是一亮一亮,像一只不停的萤火虫。午休前数了数,未接来电三十七个。
最离谱的一通,对方开口就问:顾老师,您这种不装AI的体质,是先天的吗?我们想做基因检测方向的商业合作。
我挂了。挂完想了想,又有点后怕。他们已经开始研究我的"体质"了。
林晚给我发消息:热搜第三了。恭喜你,正式成为生产资料。
我回她:能退货吗。
她回:生产资料没有退货通道。
下午回工位,路过马小跳的位子,我停了一下。
他屏幕开得很低,几乎贴着桌面。走近了才看清,他在记事本里打字,打的不是需求文档,是代码。一段快速排序,手写,没有AI窗口,没有自动补全。他打两行,删一行,再打,再删,手指头悬在键盘上面犹豫,跟拆炸弹似的。
我在他身后站了十秒,他没发现。
"基准值选第一个元素,极端情况下会退化。"我说。
他吓得整个人弹起来,手忙脚乱去关窗口,关完才反应过来,脸涨得通红。
"你……你别多想。"他梗着脖子,"我就是,就是活动活动手指。"
"快排不是这么活动的。"我拉过椅子,用笔在他纸上画,"你这里 partition 的边界条件错了,i 和 j 相遇的时候要停。"
他盯着那张纸看了一会儿,声音低下去:"哥,这个你当年练了多久?"
"十年。"
他没说话。过了一会,他把那张纸撕下来,对折,塞进卫衣口袋里,动作很轻,跟藏情书似的。
"别让周总看见。"他补了一句,"他要知道我在手练,又该说我不务正业了。"
我看着他。这个嘲笑了我十年的人,兜里揣着一张写着快排的纸,让我替他保密。
这世界变得真快。比发版还快。
周五,发布会。
周总把它叫做"古法编程品牌发布暨技术分享会",租了酒店宴会厅,请了一百多家媒体,全程直播。我穿着那套工装马甲坐在台上,台下闪光灯闪成一片,晃得我眼睛疼。
流程走到一半,主持人开始煽情。她说在这个AI沉睡的时代,有一位匠人守护着火种。她说得眼泛泪光,台下响起掌声。我坐在那儿,手心全是汗,只想找个终端窗口钻进去。
提问环节,前几个问题都是安排好的,我照着市场部给的稿子念。念到第三个,主持人忽然脱稿了。
"顾老师,"她把话筒递近,笑得很甜,"全网都想知道,AI倒下了,为什么只有您站着?您的秘诀到底是什么?"
台下安静下来。镜头怼到我脸上,我能看见大屏幕里自己的表情,僵的。
周总坐在第一排,拼命给我使眼色。稿子上这道题的标准答案我背过:感谢公司培养,感谢平台支持,蓝鲸的技术积淀让我……
我没念。
我从口袋里摸出那张便签。就是贴在我显示器边框上、被人拍照发内网当笑话的那张,纸边都磨毛了。我把它举起来,对着镜头。
上面是我师傅留的一行字。我看着台下那一排镜头,说了七个字:
"它得先过我脑子。"
全场静了三秒。真的三秒,我数了。快门声都停了。
然后弹幕和掌声同时炸开。我后来看回放,那三秒钟的直播间弹幕是空的,三秒后,同一句话刷满了屏幕。
散场的时候周总追上来,脸上的表情很复杂,像是想骂我,又舍不得骂。
"老顾,你知道你这句话值多少钱吗?"他说,"市场部已经去印T恤了。"
我站在宴会厅门口,听见里面还在放我的宣传片,配乐激昂。海报上的我在眺望远方,眼神坚定。
我忽然有点想我师傅了。他要是活着,看见自己那句话印在T恤上,估计会先笑,然后抄起键盘追着我打。
第五章 黑高领衫的offer
周六早上七点,楼下停了辆黑色的车,无声无息,车窗黑得能当镜子照。
司机下来,递给我一张卡片,纸厚得能划破手:智枢科技,霍衍,敬邀顾先生一叙。底下印着一行小字:车已等候。
我说我不认识你们霍总。
司机说,霍总认识您。全网都认识您。
我本来想拒绝。但我想起那个做基因检测的电话,想起"体质"两个字。他们迟早要来,不如去看看他们想要什么。我上楼换了件格子衫,把工牌摘了。
智枢的大楼在城东,玻璃幕墙,大堂里没有人声,只有新风系统的低鸣。
霍衍亲自在电梯口等我。黑高领衫,黑西裤,比发布会上瘦,笑得很温和,握手的时候用了两只手。
"顾老师。"他说,"我等这次见面等了一个礼拜。"
"智枢出事那天到现在,刚好一个礼拜。"
他笑出声,侧身请我往里走:"所以我说是缘分。"
走廊很长。两边是开放式工区,一眼望不到头,几百个工位,每块屏幕都亮着,代码一行行往上滚。我走了五十多米,听见空调声,听见自己的脚步声,就是没听见一样东西。
键盘声。
几百个工位,没有一个人敲键盘。所有人都坐着,看着屏幕,偶尔说一句话,AI就把活干了。整个楼层的产出哗哗地流,安静得像个水族馆。
"智枢的效率,全球第一。"霍衍在我旁边说,"一个工程师,产能是古法时代的三十倍。顾老师,你说,这是坏事吗?"
"这些人多久没写过代码了?"
"写代码?"他像是听见一个古董词,"他们设计意图,审核产出。重复劳动交给AI,人类负责创造。不要重复造轮子,顾老师,轮子这东西,造一次就够了。"
我说轮子造一次是够了,但腿不是。腿不走路,是会废的。
他没接这句,领我进了办公室。
办公室很大,一整面墙的书架。我扫了一眼,脚步停了。
书架正中间,最显眼的位置,摆着一套《TCP/IP详解》。三卷,崭新,书脊笔直,塑封都没拆,在射灯下反着光。旁边立着个小铜牌:工程师的圣经。
我包里就揣着同款的第一卷。翻到掉页,书脊用透明胶缠了三层,页边写满批注,有几页被咖啡浸成了褐色。师傅传给我的时候它就已经是旧的了。
"顾老师也喜欢这套书?"霍衍顺着我的视线看过去。
"喜欢。"我说,"常读常新。"
"对对,经典永不过时。"他说得很顺,"协议这种东西,万变不离其宗。"
他说完这句,转身去给我倒茶。我看着那层塑封。这本书他要是拆开过,塑封不会反光反得这么完整。
他坐下来,开价了。
数字很吓人。年薪八位数,签字费另算,职位是"首席科学家",配独立实验室,股票期权四年归属。他说了一串,我听着,注意力有一半还在那层塑封上。
"条件只有一个。"他把茶杯推过来,"顾老师加入之后,配合我们做一个研究项目。"
"什么项目?"
"认知基线研究。"他双手交叠,身体前倾,"崩溃之后,全行业工程师的编码能力出现了断崖式下跌。但您没有。我们对您的认知基线非常好奇。为什么没降?你的大脑,和别人的大脑,差别在哪儿?"
我放下茶杯。
"你们想解剖我。"
"研究,不是解剖。"他笑了笑,"抽点血,做几次脑电,填一些量表。外加一点点配合:在结果出来之前,不接受其他机构的采访,不发表涉及能力成因的公开言论。沉默是科学家的美德,顾老师。"
"如果研究结论是,我没降是因为我每天自己写代码呢?"
办公室里静了一下。新风系统的声音忽然显得很大。
"那这个结论就需要商榷。"霍衍靠回椅背,语气还是温和的,"顾老师,你是聪明人。智枢的AI服务着全球八成的工程师。有些真相,说出来对谁都没有好处。人站在AI的肩膀上,站久了,你非要说肩膀有问题,那摔下来的是谁?"
"站在肩膀上的摔不下来。"我说,"摔下来的,是那些把肩膀也外包了的人。"
他盯着我看了几秒钟,脸上的温和一点点收回去。
"我再给顾老师三天考虑。"
"不用三天。"我站起来,从包里掏出我那本《TCP/IP详解》,放在他桌上,塑封版的旁边。一本崭新反光,一本烂得掉渣。
"霍总,哪天你把这本书拆开读完,我们再谈。"
我走到门口,他在背后开口,声音不大:
"顾老师,古法编程这四个字,是我让市场部帮你推上热搜的。"
我回头。
"我也能让它变成一个笑话。"他说。
当天晚上九点,通稿来了。
十几家科技媒体同一时间发文,标题整齐得像是一个模板里印出来的:《"古法编程"是一场反智骗局》《警惕新卢德分子:拒绝AI的人想把你拖回石器时代》《独家:某"古法程序员"涉嫌伪造修复录屏》。
配图是我发布会的照片,就是抱键盘那张,P得我眼神阴郁。
评论区整齐划一:骗子、神棍、贩卖焦虑、挡了全行业的路。
我坐在工位上翻这些稿子,翻到第三条,笑了。霍衍的效率确实高,AI写稿,AI配图,AI发评论,全自动泼脏水生产线。
周总的电话打进来,声音发抖:"老顾,这阵仗……要不你先发个声明,就说你尊重AI?"
"我尊重AI。"我说,"我不尊重的是拿AI当奶嘴的人。"
电话那头沉默了很久。
"你这话千万别往外说。"他说完就挂了。
我关掉手机,看着屏幕上那些整齐划一的骂声。安静得像智枢的走廊。
他们不敲键盘,也不许别人敲了。
第六章 依赖度白皮书
林晚的短信只有九个字:今晚八点,带身份证。
见面地点是城西一家咖啡馆,门脸正常,她带我下到地下室。地下室比楼上大,没有窗,灯是暖黄的,角落一台老式抽湿机嗡嗡地响,空气里一股咖啡豆受潮的味道。
桌上摆着一叠打印件,用燕尾夹夹着,厚得吓人。
她把打印件推过来。封面一行黑体大字:《工程师认知依赖度白皮书》。右上角印着红章:智枢科技 内部资料 禁止外传。
"三年前我在智枢做数据。"她说,"走之前拷的。犹豫了很久要不要给你看。"
"看完会怎样?"
"看完你就没法假装不知道了。"
我翻开第一页。开头是一份行业数据:全球程序员平均编码能力指数,五年曲线。曲线一路往下,坡度平缓,每年降一截,五年累计跌了九成九。
"这就是那个'下降100倍'。"林晚说,"你网上看到的标题党,源头就在这张图上。"
我盯着那条曲线看了半天。曲线末端是崩溃那天的断崖,但断崖之前,曲线已经在谷底趴着了。
"等等。"我抬头,"崩溃之前,水平就已经降了九成九?"
"对。"她说,"所以压根谈不上下降。崩溃那天,只是把分数亮出来了。"
我一页页往下翻。抽湿机嗡嗡地响,地下室的安静压得人耳朵疼。
白皮书把机制写得很清楚,用的全是中性词,冷冰冰的。
第一阶段,思维回路托管。AI接管编码中的搜索、设计、排错三个环节,工程师的大脑只做两件事:写提示词,点确认键。神经科学顾问在附录里给了术语,叫"任务性认知萎缩",用进废退。
第二阶段,肌肉记忆空心化。连续十八个月不手写代码,语法记忆开始脱落,先是冷门API,然后是基础控制结构。白皮书里有个对照实验:让一百名重度依赖的工程师手写二分查找,通过率百分之十一。
第三阶段,依赖稳固期。能力归零,但产出不变,甚至更高。没人觉得疼。收入涨了,产能涨了,只有手废了。
"他们三年前就全知道。"我嗓子有点干,"知道会发生什么。"
"不只知道。"林晚翻到中间一页,指给我看,"你看这一章的标题。"
《依赖度与续费率相关性分析》。结论是:工程师依赖度每上升一级,年续费率提高百分之十九。白皮书建议"优化产品体验以加速依赖形成",翻译过来就是:让AI更好用,让人更不需要动脑。
"崩溃算不上事故。"我把打印件放下,"气球吹到头了而已。"
"对。他们早知道气球会爆,只是在赌爆的那天别人也一起爆。"林晚说,"赌赢了。全球一起爆,谁也不用负责。"
她打开笔记本电脑,调出另一份数据。
"这是我拿崩溃前后两周的公开数据做的比对。"屏幕上两条曲线,"红色,全行业工程师的报错率,崩溃当天冲上去,翻了四十七倍,再没下来过。蓝色,是你的提交记录。"
蓝色那条线是平的。崩溃前什么样,崩溃后什么样,一个毛刺都没有。
"全行业就你这一条平线。"她说,"我一开始以为是数据错了。后来我查了你的公开作息。"
"作息?"
"你家小区物业内网有公开的楼道巡逻记录,凌晨两点,你家书房灯常年亮着。你老婆在母婴论坛发过帖子,吐槽老公半夜看天书,还拿红笔画。"她顿了顿,"Linux内核源码,第一卷,你读了三遍。"
我没想到我的"病",会在这种地方被归档成证据。
"你知道这意味着什么吗?"林晚的眼睛在镜片后面发亮,"白皮书的整个模型,预言所有人都会降。模型对百分之九十九点九九的人都准,只有你不准。你就是那个反例,活体反例。你十年不托管,所以你没有可以中断的托管。"
我想起晋升答辩上那句话。评委拍着肩膀笑:AI写的代码有什么好懂的?
当时哄堂大笑。现在我明白了,那句话就是整个机制的墓志铭。不是有什么好懂的,是他们已经不懂了。托管太久,连"懂"这个功能都一并托管出去了。白皮书里没有这句话,但每一页都在给这句话做注脚。
我把这条写在了便签上。林晚看着我从兜里摸便签,愣了一下。
"你们古法派都这么记东西?"
"好记性不如烂笔头。"我说,"再说笔头这东西,不会服务不可用。"
"你打算拿它怎么办?"我问。
"我一个人发不出去。"她说得很平,"我试过了。三家媒体,稿子发出去两小时就撤,有一家编辑直接把我拉黑了。智枢的公关预算比我见过的大多数公司研发预算都高。但是你不一样。"
"我?"
"你现在是全网最大的争议体。"她说,"他们骂你骗子,骂得越狠,看你名字的人越多。骗子拿出证据,比好人拿出证据,传得快。"
我看着桌上那叠纸。接过来,我就是宣战。不接,霍衍那批通稿就会把我钉死在"卢德分子"的耻辱柱上,白皮书永远锁在地下室里陪着抽湿机。
我把打印件拉到自己面前,一页页翻回封面,去找落款。
编制单位:智枢科技战略研究院。校对:战略研究院数据组。我继续往后翻,翻到最后,末页右下角有一栏审核签字。
审核人:霍衍。
两个字,手写,笔锋很稳,签在三年前。那一年全行业还在开香槟庆祝"AI生产力革命",香槟的泡沫底下,压着他亲笔签过字的死刑判决书。
"他不仅知情。"林晚在我对面说,声音很轻,"他是批的那个人。"
我把打印件码齐,燕尾夹夹好,抱起来。
纸很沉。比看起来沉得多。
"走吧。"我说,"找个能发的地方。"
第七章 AI马上好
"再等等,AI马上就好。"
这句话又响起来了。不是从一个人嘴里,是从整层楼的工位上,此起彼伏,跟崩溃首日一模一样。区别是,首日说这话的时候带着哭腔,今天说这话的时候带着笑。
智枢凌晨发的公告:核心AI编程服务"限量恢复",灰度开放,先到先得。公告末尾还加了一句,"短暂休整,只为更好相遇"。
我进办公室的时候,马小跳正举着手机满屋子转,屏幕上是一个排队进度条,前面还有十几万人。
"排上了吗?"我问他。
"快了快了。"他头也不抬,"哥你说,这算不算春运抢票?"
算。而且抢的还是同一张票。
我把包放下,开机。周总在群里发了三个烟花表情,配文:春天回来了。底下一排"周总威武"。没有人提那叠打印件。
三天前,我和林晚把白皮书发给了七家媒体和四个独立技术博主。到现在,一家刊了出来,存活了四十分钟,然后404。博主那边倒是有两个发了,阅读量加起来不到三千。热搜上挂着的是"智枢服务恢复倒计时",第二名是"古法编程是不是骗局"。
林晚说得没错,骗子的流量大。但她没算到,骗子手里的证据,发不出去。
中午,排队进度条见底了。
整层楼安静下来,安静得很熟悉,那是所有人同时打开IDE的声音。接着是此起彼伏的提示音,叮,叮,叮。一行行代码开始自己往外冒,光标自己往下跳,像冬眠结束的虫子集体出土。
"活了!"隔壁工位有人喊,"我的活了!"
掌声响起来。真的掌声。有个产品经理激动得拍了桌子。
马小跳的三块屏全亮了,两个AI窗口一起跑,他左右开工,嘴里念叨着"对齐一下""让它先跑一版",词库一夜之间恢复了出厂设置。
我看着他。半个月前,这人卫衣口袋里还揣着偷抄的for循环。
"马小跳。"我说,"你那个快排,练得怎么样了?"
他的手在键盘上顿了半秒,又继续敲。"哥,时代变了,快排有AI写。"
"AI写的,你看得懂吗?"
"看得懂看不懂,能跑就行呗。"他敲下回车,冲我咧嘴一笑,"再等等嘛,AI马上就好,你看,这不就好了。"
同一句话。崩溃首日,他说这句话的时候,眼睛盯着红屏,声音发飘。今天他说这句话,眼睛盯着绿屏,理直气壮。还是那句话,意思翻了个面。这句话飞出去半个月,拐了个弯,扎回了说的人自己身上,可他自己不觉得疼。
我想提醒他,白皮书还没死透,脏数据的事林晚正在查。话到嘴边又咽了回去。对一个刚抢上票的人谈晚点,没用。
晚上七点,我收到一条地址,发信人是马小跳。
地址在城东一个老小区,地下室。我到的时候,铁门虚掩着,里面透出灯管的白光,还有一股潮气混着方便面的味道。
推门进去,我愣了。二十多个人,有老有少,每人面前一台笔记本,墙上挂着一块白板,白板上用记号笔写着五个字:古法互助会。底下还有一行小字:第一周,从Hello World开始。
组织者是个四十多岁的中年程序员,头发花白,见我进来,腾地站起来。
"顾老师!"
"别叫老师。"我说,"叫顾法。"
他说他姓陈,干了十五年后端,崩溃那天发现自己连链表反转都写不出来了,在工位上坐了一下午,汗把衬衫后背全浸透了。他在论坛上发了个帖子,问有没有人想一起从头练,一个星期,帖子底下盖了四百多层楼。
"我们是废掉的一代。"老陈说得很平静,"AI好的时候,我年薪七十万。AI一停,我连实习生都不如。这口气我咽不下去。"
角落里有人举手:"顾法,手写代码真的有用?现在AI都恢复了。"
"有用没用,取决于你想不想知道自己写的每一行是什么。"我说,"AI能给你代码,给不了你底气。这次它停了半个月,下次呢?"
屋里安静了几秒。潮气从墙缝里渗出来,灯管滋滋地响。
然后角落里一个戴帽子的人摘了帽子,露出一张我熟的不能再熟的脸。马小跳。
"你不是抢到号了吗?"我问。
"抢到了。"他把笔记本电脑转过来,屏幕上是一个手写快排的练习页面,旁边AI窗口开着,但被最小化了。"白天让AI干活,晚上来这儿还债。哥,我这算不算骑墙?"
"算。"我说,"但墙骑久了,腿会长回来。"
那天晚上我讲了两个小时,从变量讲到指针,底下二十多个人拿纸笔记得沙沙响。那种声音我很久没听过了,上一次听到,还是大学的自习室。马小跳坐在第一排,笔记本上画满了乱七八糟的箭头,写到激动处把笔摔了,又捡起来接着写。
散场的时候,老陈拉着我说,下周能不能还来。
"来。"我说。
回家的路上,手机震了。林晚。
"你看新闻了吗?AI恢复了。"她说。
"看了。全民狂欢。"
"狂欢不了几天。"她的声音压着,背景里有键盘声,很急,"我拉了恢复版AI的生成样本,跑了三个小时比对。错误率不对。"
"怎么个不对法?"
"正常AI生成代码,错误是散的,东一个西一个,像撒盐。恢复版不是,它的错误扎堆,全挤在并发、事务边界这几个地方,而且错得很一致,同一个错误模式重复出现。"
我停下脚步。夜里的风从楼缝里穿过来,吹得脖子后面发凉。
"像喝了脏数据。"林晚说,"崩溃期间它到底训练了什么,谁也不知道。顾法,这玩意儿现在不是病了。"
她顿了顿。
"是中毒了还在给人开药方。"
第八章 支付系统的定时炸弹
告急函是早上九点整群发的,红头,加急,全行业抄送。
我读到第三行,手里的豆浆凉了。
发函单位是环球清算中心,就是那个每天夜里给全世界算账的系统。核心清算模块出现间歇性记账错误,多笔交易在特定并发窗口内被重复记账,或干脆漏记。故障无规律,无法复现,无法回滚。函件末尾的措辞很克制,但每个字都在冒汗:请各单位派遣技术骨干协助排查。
楼下的咖啡机旁,消息已经炸了。有人说海外的对账差了几个亿,有人说两家银行暂停了跨行转账。马小跳端着杯子凑过来,脸色发白。
"哥,这要是清算系统真崩了,咱们工资卡里的钱算什么?"
"算数字。"我说,"能不能取出来的数字。"
中午,更详细的技术通报流出来了。智枢牵头成立了联合排查组,全球远程会诊。通报里有一句话被技术圈疯狂转发:已调用最新恢复版AI进行根因定位,持续分析中。
林晚给我发来四个字:完了,完了。
下午,内部技术论坛有人匿名贴了排查组的进展纪要。我一行行读下去,后背一阵阵发麻。
恢复版AI确实在干活,干得还特别勤。第一轮,它定位出一个"根因":某段日志序列化代码有性能瓶颈,建议替换。工程师照做了,上线,故障照旧。第二轮,它又给出新结论:数据库连接池参数不合理,建议调优。调了,故障反而更密了。第三轮,它一口气输出了十七个修复建议,排查组的工程师按优先级逐个实施,记账错误的频率从每小时三次变成了每分钟两次。
越修越错。越错越修。
马小跳凑在我屏幕后面看纪要,看了一半,忽然冒出一句:"这不就是让它先跑一版吗?跑错了再让它修一版,修错了再跑一版。"
"对。"我说,"死循环。"
"那他们自己看不出来吗?"
"看得出来的人才不会这么干。"
我盯着纪要里附的故障日志,一条条往下翻。翻到第七屏,手指停住了。
重复记账的交易,全都落在同一个时间窗口里,相差不超过三毫秒。漏记的也一样。三毫秒,两台清算节点的心跳间隔。这是竞态:两个节点同时抢同一笔账,谁先谁后没约定好,于是有时记两遍,有时一遍都不记。
教科书级别的并发缺陷。
可这么典型的问题,为什么八年没人看出来?
答案藏在代码历史里。晚上我托清算中心的朋友调了那段的提交记录,翻完,我在椅子上坐了很久没动。
那段清算核心代码,八年里被改过四十七次。每一次提交,提交者都是AI。每一次提交的触发,都是工程师点了那个按钮。
一键修复。
第一次,八年前,有人报告偶发重复记账。AI分析后打了个补丁:加锁。故障消失,结案。其实锁加错了地方,把竞态压低了概率,没修掉。
第二次,五年前,故障换了个马甲又冒出来。AI又打补丁:加超时重试。重试本身又引入了新的竞态,但它把症状压得更深了。
第三次,第四次,一直到第四十七次。每一代补丁都不治病,只掩盖上一代的误诊。补丁摞补丁,纱布摞纱布,底下的伤口烂了八年。现在这个炸弹之所以炸,是因为最新一代恢复版AI打的补丁,恰好把最底下那层纱布给揭开了。
我想起马小跳当年戳着那个灰色按钮骂我的样子。有病,不点白不点,一键修复多省事。
十年了,我一次都没点过那个按钮。谈不上先见之明,是师傅教过我:修代码之前,先搞懂它为什么坏。看不懂病因就吃药,吃的是安慰剂,攒下的是癌。
全行业的工程师都在给这个系统喂安慰剂,喂了八年。现在癌发了,喂药的人围着病床,每人手里还端着一碗新的安慰剂。
"哥。"马小跳站在我身后,声音很小,"我现在觉得你那个'有病',是真有先见。"
"是常识。"我把屏幕关了,"只是常识丢了八年,捡回来要费点劲。"
晚上十一点半,我在家翻资料。那本《TCP/IP详解》摊在茶几上,翻到协议状态机那一章,页角全是我这些年用红笔画的记号。老婆带着孩子睡了,屋里只有冰箱的低鸣和我翻页的声音。
竞态的定位我心里已经有了路线:抓两台节点之间的协议交互,还原状态机,找到两个状态迁移重叠的那个点。不需要AI,需要眼睛、耐心,和一包烟的功夫。
但我心里清楚,这个活轮不到我。全网还挂着"古法编程是不是骗局"的热搜,清算中心就算烧到眉毛,也不会第一个想到一个"卢德分子"。
门铃响的时候是十一点五十。
我从猫眼看出去,楼道声控灯亮着,照亮一片黑。
霍衍站在门外,还是那件黑高领衫,只是皱了。下巴上有青色的胡茬,手里拎着一个纸箱,纸箱的棱角被压得有点塌。
那个在发布会上说"站在AI肩膀上"的人,那个亲笔签过白皮书的人,那个买通稿把我钉成骗子的人,半夜站在我家门口,像个送错地址的快递员。
他抬手,又按了一下门铃。
纸箱里装的是什么,我不知道。但我知道一件事:能让霍衍亲自拎箱子爬六楼的东西,一定比他的面子重。
而他的面子,曾经比全世界都重。
第九章 深夜机房
"要么我修,要么它炸。"我挡在门口,没让他进来,"先谈条件。"
霍衍站在楼道声控灯下,纸箱抱在怀里。他抬头看我,喉结动了一下。
"什么条件都行。"
这话从霍衍嘴里说出来,比清算系统崩溃本身还吓人。
"三个条件。"我伸出手指,"第一,机房断AI,所有智枢的服务一律断连,一根网线都不许留。第二,全程直播,不修图,不剪片,全球随便看。第三,修完之后,白皮书原档,全网公开,你签字背书。"
他沉默了大概五秒。这五秒里,全世界每分钟都在错账。
"前两条我现在就能答应。"他说,"第三条,给我三天。"
"你没有三天。"我拉开门,"倒计时今晚就开始,清算中心给的窗口是凌晨四点切换备用链路。进来吧,纸箱放下。"
他把纸箱放在茶几上,打开。我愣了一下。
里面是那套塑封的《TCP/IP详解》,连铜牌都拆下来一起装来了。铜牌朝上,"工程师的圣经"五个字对着我。
"押在你这儿。"他说,"修好了,我当众拆。"
我没接话,把我那本翻烂掉页的收进背包。两本书在茶几上并排躺了半分钟,一本亮得反光,一本用透明胶缠着书脊。
出门前林晚来了电话,背景音里是监控大盘的风扇声。
"我带数据组在外面守着。"她说,"对账流的每一笔我实时盯,你修你的,账错没继续,我来告诉你。"
"好。"
"还有,"她顿了顿,"直播别关。这回谁也不许让它404。"
马小跳也要跟来,被我按在了家里。他在电话里急了:"哥,我好歹能给你递个咖啡!"
"你明天的任务更重。"我说,"互助会那边盯着,把今晚的抓包录屏做成教案。今晚全世界看热闹,你们要看门道。"
他沉默两秒,说了一个字:"收到。"
这是他第一次没用黑话回答我。
凌晨一点,清算中心机房。
恒温十六度,冷气顺着后脖颈往里钻。机柜的指示灯红绿乱闪,警报压得很低,嗡嗡地垫在所有声音底下。有人给我搬来一张折叠桌,我把HHKB放上去,旧ThinkPad接上隔离内网,网线另一头通向两台出事的清算节点。
直播三脚架立在三米外,红灯亮着。开播两分钟,在线人数破了三千万。
我坐下,活动了一下手指,开始敲。
第一个小时,抓包。两台节点之间的协议交互全部录下来,一万四千多个报文。弹幕里有人问为什么不直接让AI分析,解说席的工程师替我答了:现场没有AI,只有一个人和一把键盘。
我把报文按时间戳排开,一行一行读。抓包文件里没有报错,竞态这东西从不报错,它只是安静地、诚实地把每一次侥幸都记下来。读到第三百多条,找到了第一处对不上的地方:节点A发出记账请求的同时,节点B的心跳包晚到了一点七毫秒。就这一点七毫秒,两边都以为自己拿到了这笔账的记账权。
我继续往下筛,把一万四千条报文里所有落在三毫秒窗口内的交互全部标红。红出来的那一刻,规律浮上来了:凡是重复记账或漏记的交易,两边的时间戳都咬在同一口上。不是随机故障,是有条件的必然,条件藏在协议协商的缝隙里。
我把《TCP/IP详解》摊开在键盘旁边,翻到协议状态机那一章。镜头推近的时候,书页上全是红笔的记号和磨出的毛边,页脚还有一小块当年泡面溅上去的印子。
后来有人告诉我,就是这个镜头出的事。有网友截了图,再翻出半年前霍衍专访里那组书架特写,两本《TCP/IP详解》被拼在一起:一本翻到散架,一本塑封反光。标题起得很损:《谁是工程师,谁是卖工程师的》。直播还没结束,"塑封CEO"就冲上了热搜第一。
第二个小时,还原状态机。我用铅笔在纸上画,两个节点的状态迁移画满三张A4纸。找到了:故障窗口里,两边会同时进入"待确认"态,协议里压根没定义这种情况谁让谁。八年前的第一次"一键修复"加了把锁,锁错了位置,把这个空洞盖住了。四十七代补丁,盖的都是同一个洞。
"竞态点确认。"我对着对讲机说,"准备改协议协商逻辑,加优先仲裁,顺带拆掉八年前那把错位的锁。"
对讲机那头问:"要多久?"
"四十分钟。"我说,"代码不长,难的是知道写哪几行。"
第三个小时,写补丁。方案不复杂:协商阶段引入确定性的仲裁,节点编号小者优先,另一方无条件退避并重发,从根上消灭"两边同时待确认"这个协议没定义的黑洞。八年前那把锁要一起拆掉,它锁错了地方,留着只会让下一个人继续误诊。拆旧补丁比写新代码更费神,每一行删除都得想清楚它在替谁遮丑。
GDB挂着测试实例,改一行,跑一遍,看状态机迁移图对齐没有。HHKB的声音在机房里很脆,键帽被磨得发亮,镜头给了好几次特写。弹幕从"他真在手写?"变成了一片整齐的词。
我没看弹幕。写到仲裁逻辑的边界条件,我停了三秒,把"每行代码都要过自己脑子"在心里过了一遍,然后才落下最后几行。
三点五十一分,回车。
编译通过。压测流量打进来,一万笔并发交易灌进修复后的通道。我盯着监控屏,手指悬在键盘上方,跟当年盯着答辩评委的表情一个姿势。
错误计数:零。
三秒后,备用链路切换的窗口到了,绿灯一片一片亮起来,从机房这头亮到那头,报警声哑了。
机房里响起掌声。我靠在椅背上,才发现后背全湿了,十六度的冷气吹上来,凉得人一激灵。
直播结束前,霍衍走到镜头前面。他没念稿子,黑高领衫上还是昨晚的褶子。他朝着镜头,也朝着我,弯下腰,鞠了一个很深的躬,保持了三秒。
"我错了。"他说,"白皮书,三天内全网公开,我签字。"
然后他直起身,补了一句,声音不大,但麦克风收得清清楚楚:
"那套书,我回去就拆。"
弹幕在那一刻刷得密不透风。我只看清最上面的一条:
"古法,不是过去的方法,是过脑子的方法。"
第十章 每行代码都要过自己脑子
修复后的第七天,我的邮箱先崩了。
不是故障,是offer。八位数的有四封,带期权的有九封,还有两封直接附了机票,说CEO在机场等我。行业协会的邀请函烫着金,请我去给"手艺复兴大会"做开幕演讲,演讲主题他们都替我想好了:《一个人的行业》。
我把这封删了。
一个人救不了一个行业。一个人能做的事很具体:修好一个bug,教会几个人,然后回去写自己的代码。
周总抱着新的海报冲进我工位,这次海报上没字,只有我的脸。他站定,看了一眼我的屏幕,又看了一眼海报,自己先笑了。
"算了。"他把海报卷起来夹在腋下,"我猜你也不去。"
"培训预算的事,"我说,"翻倍就行。"
"已经翻了三倍。"他转身要走,又转回来,"顾法,答辩那个事,当年我也是投了挂的。"
"知道。"我说,"你现在的眼神比当年诚实多了。"
他骂了一句什么,没听清,反正不像生气。
真正的变化是从招聘开始的。
第十天,一家头部公司的面试题流出来,第一条赫然写着:请关闭AI,手写一段代码,题目现场给。接着是第二家、第三家。半个月后,这成了全行业的标配流程,HR圈管它叫"古法关"。有人在网上发牢骚,说准备了三个月prompt工程,结果面试官递过来一支笔。
底下的热评是:笔都不认识,还当什么程序员。
当年答辩现场那句"你为什么不装Copilot",如今换了个方向,扎回了每个面试者身上。问题还是那个问题,只是答错的人换了。
马小跳是第一批考"古法关"的。他考的是手写快排,十五行,要求现场讲partition的边界条件。考完他给我打电话,嗓门大得震耳朵。
"哥!过了!我手写过的!面试官问我为什么选第一个元素做基准,我说因为我要让它先过我脑子!"
"你通过了。"我说,"也学会拿我的话去蒙人了。"
"那能叫蒙吗,"他嘿嘿两声,"那叫传承。"
他现在是古法互助会的辅导员了,教二十几个新人写for循环,收费是每人请他喝一杯速溶咖啡。老陈说互助会已经排到三个月后,地下室坐不下,准备换个大点的地方。
上周末我去互助会讲了一课,讲的就是那晚机房的抓包录屏。地下室的灯管还是忽明忽暗,白板上写着"第十三周,从链表到状态机"。讲到竞态那一段,底下一个四十多岁的老哥举手,问了个问题:"这东西我们当年也学过,怎么就全忘了呢?"
屋里安静了一会儿。
"不是忘了。"我说,"是有人替你记着,你就把记的力气省下了。省下一次,两次,省到第八年,那个部位就真没了。"
老陈在旁边补了一刀:"所以现在重新练,一次都别省。"
下课的时候,有个小姑娘追出来,递给我一张她自己写的便签,让我签名。字歪歪扭扭的,就跟我当年贴在显示器边上那张一样,纸是最便宜的黄色便签。我签了,想了想,又补了一行小字:别学我,学这个。
白皮书是霍衍亲自发的,原档,扫描件,末页签字栏清清楚楚。发布会没开,热搜没买,但没人压得住它了。智枢的股价跌了一半,又在半个月后慢慢爬回来,因为霍衍宣布智枢转型做"协作式AI",工具归工具,代码归人。
有人拍到他那间办公室。书架正中的塑封不见了,换上一本翻到卷边的《TCP/IP详解》。评论区吵了三百楼,有说是摆拍的,有说他真读了。我没评论。书读没读,只有他自己知道。反正哪天他写代码了,编译器知道。
那块"工程师的圣经"铜牌,他让人寄到了清算中心机房,钉在我修bug的那张折叠桌上。桌腿还是有点晃,但没人舍得换。
今天是恢复平静后的第一个普通周一。
我回到自己的工位。角落里,没有第二块屏幕,HHKB在桌上,磨光的键帽在晨光里发亮。显示器边框上贴着一张新的便签,旧的那张发布会之后被人要走了,不知道现在挂在哪个博物馆。
新便签还是那行字:每行代码都要过自己脑子。
写完整的是十一个字。发布会直播那天我举着它,只说了七个字,"它得先过我脑子"。后来我才知道,这两个版本在网上吵过一架,一派说正版是十一个字,一派说七字版才是精髓。我没去仲裁。师傅当年写给我的是十一个字,我记在心里的也是十一个字。少了四个字,意思没少。
变化在别处。这层楼的每一台显示器边框上,现在几乎都贴着一张复印的便签,同样的字,不同的纸。空调出风口呜呜地吹,几十张纸片一起哗哗地响。实习生小陈的便签贴歪了,用透明胶补了一角。马小跳那张最夸张,过塑了,还签了名。
我坐下来,开始敲代码。新项目,新需求,没有任何值得直播的东西。需求文档第三页有个边界条件写得很含糊,我给它标了红,约了产品经理下午当面对。这种事不上热搜,但系统活不活,全靠这种事。HHKB的声音落下去,像雨落在铁皮棚上,一格一格,不快,但每一下都砸在实处。
隔壁工位传来小陈的声音,他在给更新的人讲题:"别急着跑,先想清楚它为什么这么写。"
十年了。十年前他们说我是活化石,三个月后他们说我是神。化石和神都不是人干的事,所以我一样都没当。我就是个程序员,早上来,坐下,把每一行代码先过自己的脑子,再过编译器。
AI没有罪。我现在也用AI查文档,它查得确实快。工具是路,手艺是腿。路修得再好,腿不能卖。
楼外,这座城市跟三个月前一样堵车,一样拥挤,写字楼的电梯上上下下,载着重新学会写字的人。机房十六度的冷气,地下室速溶咖啡的味道,三千万人的弹幕,都已经过去了。
屋里很静,只有键盘声,和整层楼便签纸在风里的哗哗声。
这声音,比掌声好听。