拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI 生码率进 KPI,Java 老程序员怎么保住饭碗?三个不可替代技能(附实战案例)

AI 生码率进 KPI,Java 老程序员怎么保住饭碗?三个不可替代技能(附实战案例)

老炮踩坑录 · A03· AI 时代系列
基于「企业融合评估系统」真实复盘,三个月人机对话的总结
关键词:AI 生码率 · KPI · 需求拆解 · 代码审查 · 上线兜底

👋 欢迎阅读


🏠个人主页:知守观
📘我的专栏:老炮踩坑录
💻当前内容:核心竞争力

引子

前同事上周给我发消息,说公司把 AI 生码率写进了 KPI,季度末按这个排名,排在末位的走人。

他问我:“咱们这种跑了三年的老系统,AI 是不是能全包了?”

我没直接回答。我前面文章讲过AI重构项目的事情,不知道大家还有印象了。我的输入是那个 1600 行的 Controller——业务逻辑、Excel 导出、鉴权全糊在一起。AI 三分钟给了五层拆分,命名、分层、职责边界,专业到我挑不出毛病。

但是方案我一条都敢没用。

AI建议把 type=0 的远程认证和 type=2 的本地认证合并成一套。它不知道 type=0 背后的 OSS 网关域名两年前就死了。

这个信息不在代码里,在上线记录和客诉群里。

AI 是我入行以来见过最强的码力放大器。而且放大器不挑方向,方向仍掌握在我们手里。

这篇就讲我握方向的三根手指,每根都配着这个项目的真实代码。

保命技能一:拆需求——AI 看得见代码,看不见"为什么"

我做过一次对照。同一句需求——“给评估系统加第 5 个诊断模型”——我先自己拆一遍,再原样丢给 AI 拆一遍。

AI 比我快得多。建表 SQL、枚举定义、switch 补 case、Controller 加路由,一份完整清单,编译零警告,连导出模板都替我想好了。

把两份清单摊开,差别全在水面下。

模型编号 paperid 在这个项目里是个雷区:

ApplyPapersMapper.xml 三处 paperid != 0 的查询,语义是"非精益诊断模型" ReportController switch 没有 case 0,0 号语义一直靠默认分支兜着 整个工程 13 个 Java 文件、64 处 paperid 引用

那三处paperid != 0的 SQL,新模型算不算"非精益",得逐个判定语义。0 号模型身上还挂着一堆单独照顾它的私有逻辑(Java 硬编码 switch 重构实战:策略模式替代 paperId==0/1/2/3)。AI 的清单照单全收,上线当天五个模型的行为就开始分叉,而它全程无辜。

我还试过让它"优化登录模块的重复代码"。它一眼看出 type=0 和 type=2 是两套认证,好心建议合并。它不知道 type=0 的远程网关已经是个死域名,合并之后登录入口直接 404(2022年的项目,代码完整,却永远跑不起来——项目交接的4个致命缺失)。

也有它猜对的时候。AI 代码审查实战:给老项目挑 20 个坑,老炮只认 15 个 复盘期间,它把AsyncService里那句"有 session 则认为登录是异步处理"标成"疑似遗留代码,建议清理",方向对了一半——那确实是个遗留物,全项目再没人调用那个@Async入口。可它曾经真承担过职责,清理得顺着五处读取点一步步拆。

它给的是概率判断,落地责任全在你。

拆需求落到动作上,我就盯三件事:

任务:为评估系统新增第 5 个诊断模型(paperid=4) 约束: 1. ApplyPapersMapper.xml 三处 paperid != 0 的查询,语义是"非精益模型", 逐一评估是否纳入新模型 2. ReportController.searchPaperInfo 的 switch 没有 case 0, 先补齐 0 号语义,再谈新增 3. 禁止合并 uploadDiagnosis / uploadDiagnosis1,二者并发保护不同

这段约束清单,每一条背后都是一次差点发生的生产事故。

先考古,后拆解。git log、代码注释、配置文件、死代码,全部过一遍再写任务清单。这单活 AI 干不了全程,判不了真伪,它能列清单。

约束写进 prompt。给 AI 的输入里,“不要动什么” 比 “要做什么” 值钱。

隐性知识找活人。老系统的"为什么"存在老同事脑子里和上线记录里,趁人还在,导出成文档。这是拆需求的弹药库,也是 AI 永远拿不走的存货。

保命技能二:验代码——你的上限,等于你审代码的速度

AI 生成代码按秒算,人审代码按小时算。

这个剪刀差不解决,生码率 KPI 就是库存积压 KPI——代码堆在分支上,合不敢合,删不敢删。验代码从"职业美德"变成了"产能瓶颈",你的产出上限由审的速度决定,跟打字多快没关系。

我让 AI 分析文件上传模块。它一眼看出uploadDiagnosis和uploadDiagnosis1高度相似,建议合并去重,连模板方法都替我抽好了。

它漏掉的是语义层的差异。前者有 Guava 占位、冲突核对、类锁三件套,后者三样全没有,是个过渡品(OBS 同名文件互相覆盖,客户拿错了别人的报告案发现场)。

// uploadDiagnosis:有 Guava 占位 + 冲突核对 + 类锁synchronized(this){StringcacheKey=...;if(guavaCache.getIfPresent(cacheKey)!=null){thrownewBusinessException("文件正在处理,请勿重复提交");}guavaCache.put(cacheKey,true);// ... 冲突核对逻辑}// uploadDiagnosis1:三样全没有的过渡品// AI 的"合并"方案会把上面那段保护逻辑当成重复代码删掉

文本相似,命不同。

幻觉这件事得单独说。复盘这几个月,AI 报过一条让我后背发凉的坑:"Guava 缓存注释写 1 秒过期,实际配置 24 小时,疑似有人改配置埋雷。"这条是真的,我自己复盘时也抓到了。

同一场分析里它还说:"getObjectKey对超长文件名做截断,会引发下载 404。"这条是幻觉——它没读懂substring(0,36)加斜杠的目录语义。

真坑和幻觉排在同一份报告里,格式一样,语气一样,置信度标识也一样。

行业里那些"AI 生成代码 45% 含安全缺陷"的研究数字,出处各家不一,量级做个参考就好。一线的体感是:报告质量方差极大,抽检一步都省不了。

验代码三道关,全是土办法,管用:

  • 引用逐个搜。AI 报告里出现的行号、方法名、配置项,逐个在 IDE 里搜,搜不到即幻觉。这一条能拦下八成假报告。

  • “安全删除” 先证明 “无人引用”。引用不止 Java 里的 import,XML、反射、AOP、前端调用都算。这个项目的鉴权全靠注解切面,全局拦截器注册整段注释掉了(MvcConfig.java),这种看不见的调用关系,静态分析经常漏。

  • 关键路径真环境跟一遍。复盘登录链路时,我们用 curl 加 AES 加密实测跑通的。AI 给的每个方案,过了这一关才算数。

保命技能三:兜底线——KPI 考生码率,客诉群找的是你

生码率 KPI 最荒谬的地方:它奖励"更多代码产出",而生产事故从不问你写了多少行。

@Transactional 事务失效排查,try-catch 吞异常导致回滚失败 复盘过的那处@Transactional吞异常——catch、printStackTrace、return 一气呵成,事务没回滚,数据不一致查了三天。

这种代码 AI 写得出来吗。大模型训练集里遍地都是,它闭着眼就能写。

出事那天,AI 不会出现在客服群里。去的还是你。

兜底线有个更直观的例子。登录链路 type=0 走远程 OSS 网关,网关域名死了,整个入口跟着死。复盘时我们能做的只有改代码、切 type=2、重发版。

如果当年有人把降级写成配置:

login:auth:mode:${AUTH_MODE:remote}# remote | local,网关失联时一条配置切本地

网关死掉那天,一条配置就能续命。

兜底线是态度这种话我说不出口,但是它却是一行行提前写好的退路。

三件套,一个都不省:

发布按钮必须是人手。AI 可以生成一千个变更,上线审批人的职责只剩一个——你要当那个说 “不” 的人。

回滚方案先于上线方案。每个变更合入前先回答 “怎么退回去”,答不上来就不准上。

关键路径留人工开关。凡依赖外部服务的地方都问一句:它死了怎么办。答不上来的,补开关。

一天的分工表

环节AI 干 + 你干交付物
拆需求AI 检索相似实现;你考古业务约束带约束的任务清单
写代码AI 按清单生成;你限定边界、盯住禁止事项候选代码
验代码AI 静态检查;你人机对照、真环境回归对照表 + 回归记录
兜底线无;你发布审批、回滚预案、降级开关可回退的上线

生码率能考核的,只有第二格的输入量。后两格,KPI 连考卷都出不了。

老炮点评

18 年里我听过好几轮"程序员要被淘汰":可视化编程、外包浪潮、低代码平台等等凡此种种。

每一轮都有人真的掉队。掉队的原因倒也一致——他们把自己活成了纯产码机器。产码这件事一旦出现更便宜的产能,纯度越高,越先被替换。

这一轮的不同,在于产码这个维度头一次被机器追平。

被追平的维度不再构成护城河。还是握在人手里的三样东西——把业务翻译成约束、把幻觉拦在上线前、把退路写在事故前——这些恰好都长在 “责任” 这棵树上,AI不会担责,担责的永远是人。

AI 我一直在用,用得比谁都欢,它也确实是这两年最值钱的工具。区别只在把它当副驾,还是当司机。

生码率进 KPI,往坏了说,是把人往产码机器的定义里按;往好了说,它逼每个人回答一个问题:除了产码,你还能给这个职业提供些什么。

我的答案就这三个技能。

18 年攒下来的东西,攒的从来都跟打字速度无关。

如果本文对你有帮助,欢迎:

👍 点赞 | ⭐ 收藏 | 👤 关注 | 💬 留言

欢迎留言探讨。你的每一次互动,都是我继续更新的动力🚀


下期预告:《Spring Boot 2.1.0 → 3.x 迁移实战:我踩了多少坑》

F07 确诊了这个项目跑在一个停止维护的版本上,U01 就是手术台实录——OpenRewrite 自动迁移 + 手工兜底,JDK 8 到 17 的每一步都会留痕。

我是老炮,18 年 Java 老兵,仍在一线。关注「Java老炮踩坑录」,真实项目复盘,让你少走弯路。

返回列表