2024年6月,北京中关村一家中型软件公司的季度评审会上,技术总监把一份内部调研报告投影在幕布上:过去三个月里,团队用AI辅助完成的代码量占总交付量的37.2%,但人员编制没减一人,新人入职计划照常推进,连实习生留用率还比去年同期高了5个百分点。台下三十多号工程师低头看手机的、端茶杯的、转笔的,没人抢着发言——没人再提“明天是不是就该交辞职信”这种话了。
这事得倒着说。
上个月,某头部招聘平台突然在程序员频道弹出一条红色预警:“AI编程岗需求激增320%”,底下配图是某大厂新设的“AI协同开发工程师”岗位JD,要求“熟练使用Copilot、CodeWhisperer,能对AI生成代码做逻辑校验与安全加固”。消息像雪球滚进技术群,半夜三点,一个有八百人的“一线码农互助群”在线人数冲到792,群名连夜从“Java摸鱼群”改成“救救孩子·AI时代生存指南”。有人贴出自己上周写的登录模块被AI三分钟重构的截图,函数名全变了,注释里还加了英文冷笑话;也有人发语音,声音发颤:“我昨天改了六遍的支付回调,AI直接输出带单元测试+压测脚本的完整方案……我盯着屏幕看了四十分钟,不知道该夸它,还是该找HR聊N+1。”

再往前推,真正让这根弦绷到极限的,是今年四月GitHub上一个实测项目。三位来自深圳、杭州、成都的独立开发者,不约而同用同一套老旧电商系统做实验:前端Vue2+后端Spring Boot 2.1,数据库还是MySQL 5.7。他们分别让不同AI工具(含开源本地模型和商业API)从零生成可运行的订单管理后台。结果很扎眼——AI平均耗时11.4分钟完成基础CRUD,但上线前人工投入高达22.6小时:光是排查Redis缓存穿透漏洞就卡了五小时;AI生成的JWT鉴权逻辑漏掉了refresh token轮换机制;最要命的是,所有AI都把“用户余额扣减”写成先查再改,没加数据库行锁,压力测试一上,超卖问题直接爆出。三位开发者后来在技术博客里写:“它不是在写代码,是在交作业。老师批改时发现错别字、算术错误、格式跑偏,还得重抄一遍。”
这事要是搁在十年前,可能就当个段子讲完。但2024年不一样。去年全国新增备案的AI编程类工具超过147个,光是做Code LLM微调服务的创业公司,工商注册数量同比翻了两倍。某长三角IT培训机构悄悄把“Python基础班”课时砍掉40%,换成“AI提示词工程+人工复核实战”,学费涨了2000块,报名表排到九月。更实在的变化藏在工位底下:深圳南山某外包公司行政部悄悄撤了三台打印机——因为程序员提交的“代码审查意见”不再手写,改用AI生成PDF后直接钉钉批注;上海陆家嘴某券商技术部新配的双屏显示器,副屏固定开着本地部署的代码校验模型,主屏写业务逻辑,两边实时比对,像老会计拿算盘核对账本。
但所有这些热火朝天的背后,有个特别安静的角落:中科院计算所一栋灰楼的三楼,一间没挂牌的实验室常年亮着灯。这里不搞大模型训练,专做“人机协作断点分析”。研究员老张的笔记本里贴着一张泛黄的打印纸,是1965年《计算机学报》创刊号里一篇小文章,标题叫《程序设计中的人工干预边界试探》。他带的学生最近做了组实验:让同一组程序员,分别在“只用IDE”“叠加AI插件”“全程由AI代劳+人工验收”三种模式下开发同一个报表导出功能。结果最慢的反而是第三种——平均耗时比纯手写多18分钟。原因很具体:AI生成的Excel导出接口默认用Apache POI,而客户现场服务器JDK版本太低,兼容报错;程序员得先读懂AI抛出的十七行异常堆栈,再翻文档查POI各版本兼容表,最后手动降级依赖。这个过程,AI帮不上忙,它连“客户现场环境”这六个字都看不见。
真正让程序员心里落定的,是那些AI至今绕不开的活儿。比如银行核心系统里一段2003年写的COBOL批量对账程序,注释全是“张工-03年11月-为规避XX银行清算延迟补丁”。没人敢动,因为没人能说清当年那个“清算延迟”具体指哪个时段、哪台主机、哪条专线的抖动阈值。这段代码就像嵌在混凝土里的钢筋,AI再聪明,也读不懂二十一年前凌晨两点调度员手写的故障日志本。再比如某省级政务平台的身份证OCR识别模块,AI工具生成的识别逻辑在99.8%的清晰照片上准确率极高,可一旦遇到2000年前老式身份证——边缘模糊、底纹褪色、甚至还有手写补录栏,识别率立刻掉到63%。最后解决问题的,是三位快退休的老工程师,他们翻出二十盒纸质档案,比对了472张老旧证件样本,手写了一套像素级阈值校准规则,才把准确率拉回92%。这套规则当然也能喂给AI,但前提是,得先有人把那472张模糊证件一张张拍清楚、标好类别、归档入库——这事AI干不了,它连档案室的门朝哪开都不知道。
六月的北京,晚风已经带了点热气。海淀区某创业园区楼下,两个刚下班的后端工程师蹲在便利店门口吃关东煮。竹签上串着的鱼丸滋滋冒热气,其中一个戳着丸子说:“前两天我让AI写了个消息队列死信重投的兜底方案,它写了三千行,看着特别唬人。我删了两千八,留了两百行,加了三处sleep,三处日志埋点,还重写了异常通知逻辑——最后发现,核心就一句话:‘重试三次不成就发钉钉告警’。”另一个吸溜着魔芋丝点点头:“对。它算力强,但我们得教它什么叫‘三次’——是三秒后?三分钟后?还是三次重试间隔要指数退避?这些没写进论文,也没塞进训练数据,得我们一句句说。”
便利店玻璃门开合之间,冷气混着食物香气涌出来,门上的小铃铛叮当响了一声。