这两年经常被问到同一个问题:AI 都这么能写了,程序员还有活路吗?我的回答一直很直接——AI 抢的不是程序员的饭碗,而是"不会用 AI 工具的程序员"的饭碗。这个结论不是拍脑袋,是我把自己手头的真实开发任务挨个交给 AI 跑了一遍之后,得出来的经验。
先说结论:大量重复、规范明确、反馈闭环短的工作,确实在被 AI 快速吞掉;但需求抽象、系统设计、故障定责、架构权衡这一类"出了问题要有人背锅"的活,AI 暂时接不住。真正拉开差距的,已经不是你会不会写某段代码,而是你能不能把 AI 变成一个 24 小时在线的结对编程搭子。这篇文章不聊宏观趋势,只聊我一线实操中的工具选择、调用技巧和踩坑记录,希望能给正在焦虑或被提效卷到的朋友一些能直接上手的东西。
1. 先别急着焦虑:AI 到底动了谁的"饭碗"
1.1 恐慌的来源与真实边界
大家之所以慌,是因为看到 AI 编程助手已经能自动生成一整个函数、一整个模块,甚至根据注释把接口实现写完。这种能力在五年前还像科幻片,现在却是每天打开 IDE 就在发生的事情。于是很多人开始对号入座:我每天写 CRUD、写 SQL、调接口、配页面,这些 AI 都能做,那我还有什么价值?
我自己试过之后发现,被 AI 覆盖最快的工作,都有几个共同特征:需求边界极其清晰,产出格式相对固定,前人的历史代码提供了大量可模仿的范式。典型的就是基础增删改查接口、固定模板的报表、简单脚本、重复性配置。这些活儿本质上是在"搬运模式",AI 见过足够多同类样本,生成质量确实不低。
但真实的开发工作里,有很大一部分时间花在了这些事上:把一句含糊的产品需求翻译成系统的设计方案;在多个方案之间做取舍;排查一个只在特定数据量下出现的诡异问题;评估改动对老模块的潜在影响。这些任务的共同点是信息不完整、责任边界模糊、结果没有唯一标准。我拿这类问题去问 AI,它能给出像模像样的建议,但一旦追问到"你这个方案依赖哪些前置条件""如果某个服务超时了怎么办",它就开始含糊其辞。
这不是 AI 笨,而是这类问题需要的是对业务长期理解、对团队技术栈的熟悉、对线上环境的掌控。这些信息根本无法完整塞进一次对话里。所以我的判断是:AI 替代的是"执行层",难以替代的是"决策层"和"责任层"。
1.2 受影响最大的是"搬运代码"而不是"解决问题"
我用一个更直白的类比来解释这件事。早期电子表格软件出现的时候,会计行业也恐慌过,觉得计算器都要失业了。但结果是什么?会计没有消失,而是从"花半天算一张表"变成"花半天核对报表逻辑和异常数据"。工具把重复计算变便宜之后,人的注意力被逼着转向更高价值的部分。AI 编程也是一样,它把"写代码"这个动作的成本压到极低,但同时也把程序员的"工作重心"从打字挪到了判断。
真正容易被淘汰的,是那些工作流里只有"根据文档实现需求"这一个环节的人。如果一个人长期停留在搬运代码的舒适区,不接触系统全貌、不思考数据流向、不追问异常分支,那么 AI 对他的替代成本确实很低。而一个熟悉业务、能把模糊需求拆成清晰模块、能在关键时刻拍板"这里必须重写"的开发者,AI 对他来说只是把重复劳动从 8 小时压缩到 2 小时,省下来的 6 小时用来做更深度的设计。
想明白这一点之后,我就不太焦虑了,反而有一种"手里的牌变多了"的感觉。接下来的重点就变成了一个更务实的问题:具体怎么用好这些工具,让它帮我把活干得更快更稳。
2. 工具盘点:当下值得投入的 AI 能力地图
2.1 两类主力形态:贴身插件与通用对话
常看我写东西的朋友知道,我一向不迷信"最强工具",只关心"工具和工作流的匹配度"。现在市面上的 AI 开发工具,大体可以分成两类。
第一类是集成在 IDE 里的 AI 插件,特点是我边写代码它边提示,选中一段代码它能解释,报错了它能立刻分析。这类工具的强项是"上下文近",它能看到我正在编辑的文件、当前项目的目录结构,甚至能读取最近打开的几个文件。用起来最大的感受是顺手,不用切换窗口,不用复制粘贴,思维不会被打断。
第二类是通用的对话式大模型,特点是我把一段代码、一个报错、一个需求背景丢给它,它给出全面分析和方案。这类工具的强项是"视野宽",不局限于当前项目,能结合更广泛的行业实践给出建议。适合做方案预研、代码审查、知识扫盲。
我自己常用的组合方式是:写代码时靠 IDE 插件挡住那些重复编码,做方案或排查疑难问题时把对话大模型当成一个可以随时头脑风暴的同事。两者各干各擅长的部分,效率比单用任何一种都高。
| 形态 | 适合场景 | 核心优势 | 常见短板 |
|---|---|---|---|
| IDE 插件 | 日常编码、补全、单测生成、报错分析 | 上手快、上下文连续、不打断思路 | 独立处理复杂设计问题的能力一般 |
| 对话大模型 | 方案评审、技术调研、复杂 bug 排查 | 知识面广、推理链长、能多轮追问 | 需要我自己补充足够上下文否则容易空谈 |
| 两者组合 | 完整功能开发、老代码重构、跨模块排障 | 各取所长、效率最高 | 需要练习切换节奏避免冗余沟通 |
2.2 代码生成之外:AI 更容易被低估的三个能力
很多人一提到 AI 编程就想到"自动生成代码",但我实际用下来,有三个能力比写代码更值钱。
第一个是代码解释。接手一个没人维护的老项目,打开一个几百行的类,人肉读要半天,AI 通常一两分钟就能把结构、依赖关系、异常处理逻辑梳理清楚。这个能力的意义在于让"接手"从最痛苦的任务变成最快的任务。我甚至会把 AI 解释的结果直接转成模块文档,存进项目里,后来的同事看了都少走弯路。
第二个是测试生成。国内很多团队的单测覆盖率一直上不去,不是不想写,是写测试的投入产出比太低。AI 在这方面意外地擅长,给它一个类或接口,它能按方法分支生成基础用例,虽然不能覆盖全部边界,但能把测试的"地基"快速铺好。剩余的人力只需要集中在高风险的边界场景上。
第三个是代码评审辅助。我写完代码之后,会先让 AI 从"陌生人的视角"看一遍,找潜在的空指针隐患、未处理的异常分支、性能问题。它的意见不一定全对,但经常能帮我抓出那些"太熟悉所以看不见"的问题。一个低成本的外部视角,让代码在提交之前就多了一道保险。
2.3 工具选型原则:看工作流,不看名词
我知道很多读者会纠结"到底选哪家工具",我的原则很简单:先看自己平时的工作流里哪块最痛,再去选工具。如果你的主要痛点是写业务代码太重复,那就先把 IDE 插件用透;如果是老项目看不懂、没人带,就以对话大模型为主力;如果是测试补不全,可以优先试生成测试类的功能。
工具迭代也很快,今天某个工具在补全上略逊一筹,可能下个月就追平了。追着参数跑没有意义,真正值得长期投资的是"给 AI 下任务"和"验收 AI 产出"这两项能力。参数是变量,工作流和判断力才是常量。
再说一个容易踩的坑:不要同时装一大堆 AI 插件。我见过有同事把四五个插件同时开着,代码提示互相打架,生成的风格也不一致,反而降低了效率。我的建议是选一两个主力插件,把功能摸透,比走马观花地装十个强得多。
3. 实操:我把 AI 嵌进日常开发的三类真实场景
3.1 场景一:给老模块补单元测试
有一次我接手一个支付结算模块,代码量不算多,但完全没有任何单元测试,每次改动全凭线上验证。领导要求把覆盖率补到及格线,我第一反应是头皮发麻。后来我换了思路:让 AI 先干最累的铺量工作。
我先让 AI 通读整个核心服务的类和方法,然后给它下了一个非常具体的任务,大致是这样的:
请先通读这个类的所有方法,不要修改源代码。 基于以下接口契约生成一套 JUnit 5 单元测试: - 主要分支:余额充足、余额不足、重复回调、渠道超时、幂等命中 - 要求:使用 Mockito 模拟外部渠道服务,断言只检查状态机和返回码,不要写脆弱的时间断言。说实话,第一次生成的效果超出我的预期。AI 把每个分支的测试骨架都列了出来,mock 逻辑也写好了,我只需要补充几个它在注释里留空的数据构造场景。整个过程下来,原本预算三天的活,不到半天就把主要覆盖铺完了,剩下的时间去写真正需要人为思考的并发和边界用例。
这个案例给我的启发是:AI 最擅长的是"按已有模式批量铺开",它不懂业务,但懂编码范式。把铺量的活交给它,把判断的活留给自己,正好互补。
3.2 场景二:接手没文档的陈旧代码库
最近我还在做一个历史系统的功能升级。这个系统代码年代久远,文档早就不全,核心流程夹杂着大量历史分支,新同事看一眼就头大。我过去的方式是人肉追代码,边追边画流程图,效率低且累。
这次我换了个办法。第一步,把核心入口类和调用链相关的几个文件一次性丢给 AI,让它用讲故事的方式解释:这个模块从哪开始、经过哪些步骤、哪些分支被历史遗留逻辑覆盖了。第二步,针对它解释里含糊的地方进行定向追问,让它说清楚某张表的数据状态在什么时候被修改。第三步,让它列出这个模块全部外部依赖与出口,生成一张改动影响清单。
整个过程很像带了一个熟悉所有代码的实习生,我负责提问,它负责翻代码。最后我把这些输出整理成文档,作为这次需求评审的基础材料。相比以前,省掉的不仅是时间,还有我自己的脑力消耗。真正需要我做的,是判断哪些旧逻辑可以保留、哪些必须重写——这些 AI 替不了。
3.3 场景三:线上告警的快速定位
线上出了问题,第一优先级永远是恢复服务,而不是分析根因。我通常会让 AI 参与"缩小排查范围"这一步。把报错堆栈、相关日志片段、最近的变更信息脱敏后发给对话大模型,让它列出所有可能的原因并排序。它的排序未必准确,但能提供很多我没想到的角度。
有一次线上出现偶发超时,日志没有任何明显异常。AI 根据调用链信息提出了一种可能:某个缓存键在极端并发下失效,导致多个请求同时回源。顺着这个方向去抓,果然复现了。这种"假设生成器"的价值不在于直接给答案,而在于帮我在压力下快速扩展思路。
当然,把所有原始日志直接贴给 AI 是一个很大的风险,涉及用户敏感信息或者内部密钥就麻烦了。我的做法是先做脱敏,把 IP、用户名、手机号、token 这些全部替换成占位符,再发给工具分析。这个习惯,我认为是每个开发者用 AI 前的底线。
4. 一套可复用的 AI 提效工作流
4.1 需求阶段:让 AI 把"一句话需求"拆成验收点
很多开发的低效,不是写代码慢,而是需求理解错了,白干一遍。我现在接到一个需求之后,会先把产品的一句话描述丢给 AI,让它帮我拆解:
需求背景:用户希望支持修改收货地址,但订单已发货的不允许修改。 请生成一份需求澄清清单,包括: - 完整用户流程与状态流转 - 至少 8 个边界条件 - 需要产品确认的疑问点 - 不建议直接写代码,先做问题发散这一步的作用是"强迫自己先想清楚所有边界",AI 的发散提供了大量角度,我再根据自己的业务知识做收敛。很多需求表面简单,实际藏着不少坑,比如修改地址后是否要重新计算运费、是否需要通知旧地址的配送员。这些问题如果在编码阶段才暴露,返工成本极高。让 AI 在需求阶段就把这些问题列出来,等于用最低的成本踩了一遍坑。
4.2 编码阶段:让 AI 做草稿,你来当评审
编码阶段的正确姿势,不是让 AI 全自动把功能写完,而是"你设计架构、AI 填充实现"。我通常先自己写好接口签名、数据结构、模块拆分,然后让 AI 按这个设计生成具体实现。这样生成代码的骨架符合我的预期,细节交给它补齐,大型语言模型生成的代码会在"设计约束"下收敛很多,质量也稳定得多。
每次拿到生成代码,我都会当成"一个水平还可以的实习生提交的 MR"来审查。先看方法签名是否和我的设计一致,再看异常处理是否符合项目规范,最后跑一个关键路径的调试用例。任何一段不能理解透的代码,我都会让 AI 重写或解释,而不是直接合入。这样做的好处是,代码是 AI 写的,但每一行我都理解,后续维护不会变成黑盒。
4.3 交付阶段:把 AI 当成不知疲倦的自审员
代码写完准备提测的时候,我会再让 AI 做三件事:第一,根据变更内容列出影响面清单,防止漏测;第二,生成一份自测要点,覆盖正常流程、异常流程、兼容性;第三,生成精简的变更说明,方便队友和测试理解改动背景。
这个环节的价值经常被低估。很多线上 bug 不是因为代码写错,而是改动的影响范围没有交代清楚。AI 能根据 diff 分析"这次改了哪些入口、哪些数据会变、哪些调用方会受影响",虽然结论需要人工确认,但它提供了一个非常完整的起点。我只需要在上面补充业务层面的判断,就可以直接当作测试依据。
经历几次完整的"需求拆解、编码审查、交付自审"之后,我明显感觉自己的开发节奏变了。以前是一边写一边胡思乱想,现在是前期想清楚、中期干得快、后期不慌张。工具并没有替我做一个决定,只是把每个环节的"体力活"压缩到了最低。
5. 大家最常踩的坑与我的规避方法
5.1 输出幻觉:漂亮代码不等于正确代码
AI 生成代码最大的坑,是"看起来非常合理"却隐藏着幻觉。我曾经让 AI 生成一段处理文件上传的代码,它调用了一个开源库的方法,方法名和用法都像模像样,一编译却报错——那个方法在这个版本根本不存在。后来我养成一个习惯,对 AI 生成代码中出现的任何不熟悉的 API,都会反问一句"这个函数在哪个版本可用?请给出官方文档链接"。让它自证,好过自己去猜。
另一个更隐蔽的幻觉是"逻辑自洽但语义错误"。AI 会把某种模式从训练数据中套用过来,表面上代码风格统一、注释清晰,但业务规则完全不对。规避办法只有一个:关键业务逻辑中,我永远会手动画清楚状态流转,而不是直接信任 AI 的实现。AI 擅长组合已知模式,可业务规则往往不在"已知模式"里。
5.2 上下文失控:把大模型当成有失忆症的同事
很多人觉得 AI"笨",其实很多时候是"给的上下文太少或太乱"。把它当成一个刚进群、没有任何聊天记录的同事,你需要把项目背景、相关文件、约束条件、期望产出一次性交代清楚。我常用的上下文模板是四段式:当前目标、相关文件路径与关键代码、约束条件、期望输出格式。缺任何一段,回答质量都会明显下降。
另一个问题是"对话太长导致上下文漂移"。一次会话里同时聊了三个问题,聊到后面它已经忘了第一个问题用的什么假设。我的习惯是一个任务开一个新会话,任务中途有新的相关发现,用粘贴关键代码的方式补充,而不是长篇聊天。
5.3 安全红线:敏感数据绝不进会话
这一点我真要反复强调。不少团队已经发生过因为员工把内部代码贴进公共工具,导致代码泄露的事件。我在团队里定过规矩:内部系统名称、线上真实数据、密钥 token、用户隐私字段,一律禁止进入任何外部 AI 工具。涉及敏感分析时,要么用脱敏后的模拟数据,要么选择私有化部署方案。
这不是保守,而是基本的职业素养。用 AI 提效的前提是不给团队和公司带来额外风险。我自己在调试线上问题时,永远先做数据脱敏再复制日志;涉及核心算法或商业逻辑的代码,也只会用抽象后的伪代码跟 AI 讨论思路。守住这条红线,AI 才是工具,而不是风险源。
5.4 过度依赖:别把自己变成"代码合入员"
使用 AI 还有一个无形中的坑,是人的判断力退化。当工具生成的代码越来越好,人会越来越不愿意怀疑它。最危险的状态是自己完全不懂那段代码在干什么,仅仅因为"测试能过"就合入。这样的代码一旦进了生产环境,出了问题,AI 不会替你背锅,站在故障复盘会上的还是你。
我给自己定了一个硬性标准:AI 生成的每一段代码,我必须能向一个完全不懂代码的人解释清楚它的逻辑。如果解释不清,就继续追问 AI,直到自己真正理解。宁可速度慢一点,也不能让系统里堆满自己不懂的代码。这个习惯,帮我躲过了很多潜在的线上问题。
踩过几次坑之后,我反而更确信一件事:AI 工具只是把程序员的门槛从"写代码"移到了"提需求、做判断、保安全"上。工具会不断更迭,今天用的助手可能过两年就被更好的替代了,但我养成的验收习惯、上下文组织能力和安全意识,换什么新工具都用得上。这大概是我这段时间用 AI 提效过程中,最有价值的一笔收获。