尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI不会淘汰程序员,但会淘汰只会写模板代码的人

AI不会淘汰程序员,但会淘汰只会写模板代码的人 开头就从一个现实问题说起。视频平台和开发者社区里经常出现类似标题POV: An AI replaced your job this morning。有人把它当段子有人把它当预言但真正值得开发者关心的不是标题本身而是它背后那条技术趋势线以 AI Agent、AI 编程工具、大模型应用开发为代表的工程能力正在把软件开发里大量“可被明确描述、可重复执行”的任务自动化。这篇文章不打算贩卖焦虑而是把问题拆成三个具体层次AI 到底能替代哪些工作、哪些工作短期内替代不了、以及开发者用什么方式把自己放在安全位置。看完整篇文章你会得到一份可执行的应对清单而不是一句“要拥抱 AI”的空话。1. 先拆解“AI 替代工作”这个标题真正发生的其实是任务替代1.1 “早上被替代”是一种叙事但任务替代有真实的技术依据这类标题视频能传播是因为它命中了一个真实心理开发者担心自己多年的编码经验被大模型一夜之间抹平。情绪先放在一边从工程角度看AI 对开发岗位的影响单位不是“职业”而是“任务”。一个 Java 开发者的日常由大量具体任务组成写 CRUD 接口、设计表结构、修复编译错误、排查线上日志、写单元测试、做代码审查、和产品经理确认需求边界。AI 真正在替代的是其中那些“输入输出明确、规则清晰、上下文可以被完整描述”的任务。比如“给订单表加一个分页查询接口”“把这段 JSON 转成 Java 实体类”“找出这段代码里空指针的可能位置”这些任务天然适合大模型处理。因为它们有清晰的输入、期望输出和判断标准。而“这个订单状态机这样设计是否合理”“这个接口的失败对下游影响多大”“需求文档里这句话到底是什么意思”这些任务依赖业务上下文、系统全貌和风险承担AI 很难独立完成。这就是理解 AI 替代问题的第一把钥匙判断一个岗位风险高低不是看岗位叫什么而是看这个岗位每天的任务结构里有多大比例是“规则明确型任务”多大比例是“判断责任型任务”。1.2 用最小例子看 AI 编程的产出边界用一段真实场景说明。任务是“给定一组订单按用户聚合出每个用户的订单总金额”。把这个问题交给任何主流 AI 编程工具它都会快速产出类似下面的代码def aggregate_by_user(orders): result {} for order in orders: user_id order[user_id] amount order[amount] result[user_id] result.get(user_id, 0) amount return result这段代码在数据格式完全规范、金额用整数表示、不存在缺失字段的情况下可以运行。但真实项目不是这样。金额可能是字符串、可能是浮点数、可能为空订单列表可能为空user_id 可能重复传入。这些边界情况需要有人提出来AI 才会处理。经验丰富的开发者会在需求描述阶段就追问这些边界然后写出更健壮的版本from decimal import Decimal def aggregate_by_user(orders): result {} if not orders: return result for order in orders: user_id order.get(user_id) amount order.get(amount) if user_id is None or amount is None: raise ValueError(order must contain user_id and amount) result[user_id] result.get(user_id, Decimal(0)) Decimal(str(amount)) return result这个对比说明一个问题AI 能把“80% 的标准场景”写得又快又好但剩下 20% 的边界识别、异常决策和质量兜底仍需要人来完成。AI 缩短的是编码执行时间放大的是人的需求分析和工程判断能力。1.3 任务替代不等于职业消失把任务替代误读成职业消失会产生两种错误行为。一种是对抗拒绝使用任何 AI 工具坚持手写所有代码结果产出效率落后于团队平均水平另一种是完全放手把需求原样丢给 AI结果得到一堆“能编译但不符合业务语义”的代码最后花更多时间返工。正确姿态是重新设计自己的任务结构。把 AI 擅长的任务交给 AI把时间腾出来做 AI 不擅长的事情和业务方确认规则、设计系统边界、把关代码质量、处理线上故障、评估技术方案风险。这不是道德层面的选择而是效率层面的必然。同样一个功能使用 AI 辅助的开发者可以在更短时间内完成剩余时间投入到更高价值任务上长期积累出来的差距会非常明显。2. 哪些开发任务最容易被 AI 接管哪些暂时接不了2.1 高风险任务模板代码、单测用例和日志排查辅助从实际开发任务清单里挑出几类逐一分析 AI 的完成度。第一类是模板代码和样板工程典型代表是 Controller 层、DTO 转换、配置文件初始化、MyBatis 的 XML 映射、OpenAPI 文档生成。这些任务规则高度统一AI 生成质量稳定人工介入成本极低。第二类是单元测试代码。AI 能根据方法签名和注释生成覆盖正常路径的测试用例对 Mock 框架的使用也比较熟练。实际项目里AI 生成单测的瓶颈不在生成而在于业务断言。很多开发者让 AI 生成测试后直接运行发现测试通过率很低原因在于 AI 不知道“这个订单在状态为 CANCELLED 时不应该展示支付按钮”这类业务规则。它只能从代码表面结构推断断言无法从需求语义推断。第三类是日志和报错排查辅助。把一段堆栈贴给 AI让它解释可能原因并给出检查方向这是当前大模型比较擅长的场景。尤其是在 Spring Boot、Node.js、Python 等常见技术栈上AI 见过的错误模式足够多能快速给出线索定位。但这里有个陷阱AI 给出的原因可能是“常见原因之一”不一定是当前环境的真实原因。日志排查最后还是要靠数据、调用链和现场证据确认。2.2 中风险任务常规 CRUD、接口文档和数据库脚本常规 CRUD 开发属于中风险任务。说它中风险是因为“根据已有表结构写一个列表查询接口”确实高度自动化但“根据业务规则决定查询条件、排序规则、权限过滤和数据范围”并不简单。举例来说一个订单列表接口管理员能看到所有订单普通用户只能看到自己的订单销售角色只能看到自己负责区域的订单。这部分权限过滤逻辑如果描述不清晰AI 生成的代码就会出现越权风险。因此这类任务 AI 能完成 60%剩下 40% 需要人确认业务语义并做安全审查。数据库脚本类似。AI 能根据表名和字段描述生成建表 SQL也能生成索引建议。但索引怎么加、字段类型用什么、是否需要分区、主键用自增还是雪花 ID这些决策依赖数据量、写入频率、查询模式AI 拿不到这些上下文时只能给通用建议。通用建议在低并发场景没问题在高并发场景可能直接拖垮数据库。接口文档生成属于高风险替代区。OpenAPI 注解、Markdown 文档、接口说明这些几乎可以完全交给 AI。但文档的准确性依赖代码注释和参数命名质量如果代码本身命名混乱AI 生成的文档也会跟着混乱。2.3 低风险任务架构决策、需求澄清和线上事故处置这三类任务短期很难被 AI 独立完成。架构决策要求理解系统全貌、团队能力、业务阶段、成本预算和演进方向。AI 可以提供候选方案对比但“当前这个阶段选单体还是微服务”“这个模块是否值得引入消息队列”这类判断依赖大量隐性上下文AI 无法全面获取。需求澄清是另一个关键短板。真实需求文档往往有歧义、缺失和矛盾。例如产品经理说“用户下单后要能取消订单”AI 只能按照字面意思实现取消接口但人需要继续追问取消有没有时间限制取消后退款走原路吗取消后库存是否回补取消操作需要审批吗这些追问是 AI 做不到的因为 AI 没有“对业务后果负责”的压力。线上事故处置也属于低风险替代区。虽然 AI 能帮忙分析日志、给出假设但故障定级、流量摘除、紧急回滚、通知相关方、组织复盘这些动作涉及流程、权限和责任必须由人来决策。下表整理了开发任务的风险分层方便对照自己的日常工作任务类型AI 完成度替代风险关键瓶颈模板代码、DTO 转换高高几乎无单元测试生成中高高业务断言缺失日志初步分析中高中证据链确认常规 CRUD 接口中中权限与业务语义数据库脚本中中数据量与索引决策接口文档生成高高依赖代码质量需求澄清低低隐性上下文架构设计低低全貌与取舍线上事故处置低低责任与流程3. 被替代的不是程序员而是不会使用 AI 的工作方式3.1 提示词不是玄学而是需求描述的工程化很多人用 AI 编程效果差第一反应是工具不行但大多数情况是“需求描述不行”。给 AI 的指令越模糊产出越随机。把提示词理解成一种精简化、结构化的需求文档很多问题就通了。下面是一个对比。模糊写法是“帮我写一个订单接口”这种指令下 AI 只能凭猜测输出一堆泛化代码。结构化的写法应该像这样你是一名 Java 后端工程师使用 Spring Boot 3 和 MyBatis-Plus。 请根据以下需求生成一个 Service 方法 需求根据订单状态统计订单数量。 状态枚举CREATED、PAID、SHIPPED、CANCELLED。 要求 1. 使用 Stream API 对状态分组计数 2. 返回 MapOrderStatus, Long 3. 状态为空时返回空 Map 4. 只生成 Service 方法和必要 import不生成 Controller 和 Repository 5. 方法名使用 countOrdersByStatus。这个提示词包含了角色、技术栈、输入输出、约束条件、期望命名和明确边界。AI 生成结果的可用性会大幅提升。这不是技巧而是把需求文档的要素拆清楚。3.2 同样的任务人和 AI 的协作方式决定产出假设两个开发者技术水平相当都使用同一款 AI 编程工具最终产出差距可以很大。差距来自几个环节任务拆分粒度、上下文提供完整度、生成结果审查深度、以及返工迭代能力。一个优秀的使用方式是“AI 负责写人负责审”。AI 生成代码后开发者需要做三件事第一确认代码是否满足业务语义而不是仅满足编译第二检查异常处理、空指针、并发安全、资源释放等工程性问题第三把生成结果放回整体架构里看是否符合模块边界。在常见项目里可以按这个顺序处理先把需求拆成任务清单再逐项把任务描述成结构化提示词然后由 AI 生成初版代码接着进行代码审查和单元测试补充最后由人完成集成联调和业务验证。这个流程里 AI 是一个高效的初稿撰写者而不是最终责任人。3.3 从单次生成走向 AI Agent 工作流单次问答式 AI 编程只是 AI 辅助的初级阶段。更接近真实工程场景的是 AI Agent让模型不仅能生成文本还能调用工具、读取文件、执行命令、根据执行结果调整下一步行动。一个最简单的 Agent 流程可以用伪代码描述tools { search_order: search_order, get_order_detail: get_order_detail, send_cancel_notice: send_cancel_notice, } def run_agent(task: str): messages [{role: system, content: 你是订单客服助理负责查询订单并处理取消请求。}] for step in range(5): messages.append({role: user, content: task}) response call_llm(messages, toolstools) if response.get(tool_calls): for call in response[tool_calls]: result tools[call[name]](**call[arguments]) messages.append({role: tool, content: result}) else: return response[content] return 达到最大步数停止执行这个流程里的关键点是模型每次生成结果后可以决定是否调用工具工具返回结果后模型再继续推理直到给出最终答案。对于开发者来说理解 Agent 不只是为了追赶热点而是为了明白 AI 的能力边界正在从“回答问题”扩展到“完成多步骤任务”。今天你已经可以用 Agent 做代码仓库扫描、自动化测试报告生成、定时巡检告警摘要等工作。但这带来一个新的工程问题Agent 会出幻觉会调用不存在的参数会在多步循环里跑偏。因此使用 Agent 必须有明确的工具函数校验、最大步数限制、日志记录和人工确认节点。这也是“AI 工程实践”要解决的核心问题。4. 把 AI 纳入工程链路一个可落地的协作流程4.1 需求拆解先让 AI 生成验收清单传统开发流程里需求拆解依赖人脑尤其是经验不足的开发者容易漏掉边界。AI 可以在这里发挥作用。拿到一段需求描述后先让 AI 生成一份问题清单和验收点再由人来补充和确认。示例提示词你是资深测试工程师。请把以下需求拆成可验收的功能点 “用户可以在订单详情页申请退款退款成功后订单状态变为 REFUNDED退款金额原路返回。 如果订单已发货超过 30 天不允许退款。” 输出格式 1. 功能点列表 2. 每个功能点的正常路径 3. 每个功能点的异常路径 4. 需要产品经理确认的歧义点。这一步的价值是让 AI 先把模型里遗漏的边界问题浮出来人再去决策。比如“退款成功后订单状态变为什么”已经明确但“退款中这个中间状态是否需要展示给用户”“部分退款是否支持”这类问题AI 会自然提出来人只需要确认即可。4.2 编码阶段AI 生成初稿人做边界审查编码阶段的核心原则是“让 AI 出初稿让人做审查”。初始提示词里应该包含技术栈版本、模块范围、输入输出、异常要求、代码风格。以 Spring Boot 的订单查询为例Service public class OrderQueryService { private final OrderMapper orderMapper; public OrderQueryService(OrderMapper orderMapper) { this.orderMapper orderMapper; } public ListOrderVO listOrders(OrderQuery query) { // web 层已经完成登录用户信息解析这里只需要按用户视角查询 return orderMapper.selectList(query.toWrapper()).stream() .map(OrderVO::fromEntity) .toList(); } }AI 生成类似代码后人需要审查的点包括OrderQuery.toWrapper()是否包含数据权限范围、返回结果是否需要分页、空列表是否会被上层正确渲染、数据库查询是否需要防止全表扫描。这些审查项无法指望 AI 主动完成必须由人发现并补充。这里有一个常见坑不要直接把 AI 生成的代码粘进生产关键路径。至少要做一遍本地编译、单测运行和数据访问审查尤其是涉及金额、权限、事务的代码必须逐行确认。4.3 验证阶段AI 补测试人定业务断言AI 生成单测的能力已经足够用于补充正常路径但业务断言需要人参与。下面是一个补测试的提示词为 OrderQueryService.listOrders 方法生成 Spring Boot 单元测试。 使用 Mockito 和 JUnit 5覆盖以下场景 1. 正常返回订单列表 2. 查询条件为空时返回空列表 3. 订单实体转换 VO 时金额字段使用 BigDecimal 而不是 double。 不生成多余测试。生成之后人要检查断言是否覆盖了业务规则。AI 经常会生成“只要方法不报错就算通过”的测试这种测试价值很低。正确做法是先由人确认业务规则再让 AI 按规则生成测试骨架最后人补充关键断言。4.4 代码审查清单把 AI 生成的代码纳入正式代码审查流程时建议使用下面的清单审查项检查内容AI 是否能自动完成编译与静态检查是否通过编译、Lint、Checkstyle基本可以安全审查SQL 注入、越权、敏感信息泄露部分可以需要人确认数据一致性事务边界、并发更新、幂等性较难需要人判断性能风险N1 查询、全表扫描、大对象内存较难需要上下文业务语义是否符合需求文档真实意图很难必须人确认可维护性命名、分层、可测试性部分可以与团队规范相关这个清单也回答了“AI 能不能替代代码审查”的问题它能替代规则检查类部分但不能替代业务正确性和架构一致性判断。5. 面向 AI 的工程实践从使用工具到部署模型5.1 什么是 AI 工程实践“AI 工程实践”不是让每个开发者都能训练大模型而是指一套把 AI 能力真正落地到业务系统的工程方法。它包括几个层面模型接入与调用、提示词管理、上下文构建、知识库检索、Agent 编排、模型部署、成本控制、效果评估和可观测性。对后端开发者来说最直接的切入点是模型接入层。无论你是用 OpenAI 兼容接口、第三方大模型平台还是企业内部自建模型核心步骤都差不多配置连接、构建提示词、调用模型、解析结果、做异常兜底。5.2 用 Spring AI 接入大模型的最小流程以 Java 技术栈为例Spring AI 提供了一套统一的接入抽象可以简化大模型调用的开发。实际使用前要先确认对应版本的 Maven 依赖和 API 签名因为框架迭代较快。下面是一个示例思路。先添加依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-openai/artifactId version1.0.0/version /dependency注意Spring AI 的版本变化较快示例中版本号可能不是最新。落地前务必前往官方仓库确认与当前 Spring Boot 版本兼容的依赖版本。然后在配置文件中配置模型连接spring: ai: openai: base-url: ${AI_BASE_URL:https://api.openai.com} api-key: ${OPENAI_API_KEY} chat: options: model: gpt-4o-mini temperature: 0.2这里的关键点有两个一是 API Key 不能硬编码必须通过环境变量或配置中心注入二是temperature参数会影响输出随机性。生成代码和结构化校验场景建议调低到 0.2 以下创意写作场景可以调高。然后定义一个服务类用于调用模型Service public class ChatAssistantService { private final ChatClient chatClient; public ChatAssistantService(ChatClient.Builder builder) { this.chatClient builder.build(); } public String summarizeError(String stackTrace) { return chatClient.prompt() .system(你是资深运维工程师请用中文简要解释下面的异常堆栈指出最可能的原因和排查步骤。) .user(stackTrace) .call() .content(); } }这个最小示例展示了“用户输入 系统指令 模型输出”的基本流程。生产环境还需要补充超时控制、重试策略、日志记录、限流和输出格式校验。5.3 模型部署的资源与成本考量如果业务要求数据不能出内网或者调用量很大就需要考虑本地部署模型。这里要先做资源和成本评估。下表是一个粗略对比对比项使用云 API本地私有化部署接入成本低一条 URL 加 Key高需要环境准备和运维数据合规依赖服务商协议数据不出内网更可控响应延迟依赖网络依赖 GPU 和推理框架单次成本按 token 计费固定硬件投入扩展性服务商负责扩容需要自己管理 GPU 集群效果迭代模型版本由服务商升级需要自己升级和评估这个表格不是结论而是决策框架。项目处于验证阶段时优先使用 API 方式快速跑通进入生产阶段且对数据合规或延迟敏感时再评估私有化部署。无论哪种方式都要在代码里设计好模型调用层后续切换供应商时只需要改配置和适配层不需要改动业务代码。本地部署有一个常见坑只看模型参数量忽略显存、推理框架和并发吞吐。一个七 B 参数的模型看起来不大但如果在生产环境要支撑几十并发仍然需要多张显卡或专门的推理优化。建议先在测试环境压测再到生产。6. 真正难被替代的三块能力业务、架构和工程质量6.1 需求澄清与业务建模AI 生成代码再快也不能替开发者完成“理解业务”这件事。最真实的工作场景里需求文档是一个起点而不是终点。产品经理说“订单取消后要发通知”你需要接着问什么渠道、什么时机、发给谁、通知失败怎么办、是否做成可配置模板。这些问题在文档里经常缺失却在线上运行时要命。这种能力来自长期业务积累AI 无法短期复制。所以对开发者来说不要把自己定义为“写代码的人”要定义为“把业务问题翻译成技术方案的人”。在项目里主动参与需求评审、主动记录业务规则、主动了解上下游系统这些习惯会让你的不可替代性明显提高。6.2 系统设计与跨模块协调AI 能设计单个类的结构但设计一个系统需要综合大量因素。以“订单超时自动关闭”这个需求为例候选方案有定时任务扫描、延迟消息队列、Redis 过期事件。每种方案的开发成本、数据准确率、极端场景表现都不一样。AI 会把三种方案列出来并给出对比但最终选择哪一个取决于团队技术栈、已有中间件、订单量级和可接受的误差范围。这类决策需要人对系统有全局认识。同时跨模块协调也体现人的价值前端何时展示倒计时、库存模块何时回补、支付回调先于超时事件到达怎么办这些边界问题需要人和多个团队一起对齐AI 无法坐到会议桌前替你沟通。6.3 安全合规与线上稳定性AI 生成代码时不会主动替你想“这个接口是否暴露了其他用户的数据”“这个 SQL 是否存在注入风险”“这个操作是否需要幂等”。这些工程质量问题需要人来把关。尤其是涉政、涉背调、资金、个人信息等场景一旦出问题责任主体是人不是 AI。线上稳定性也一样。AI 可以根据监控数据生成分析报告但决定“是否立刻回滚”“是否摘除节点流量”“如何通知用户”的人必须对系统负责。这种责任能力是 AI 时代开发者最稀缺的资产之一。6.4 怎么向这些方向转型如果你发现自己现在的日常工作里模板代码占比很高那正是危险信号。需要主动调整任务结构参与需求评审锻炼提问能力。承担系统模块设计输出技术方案文档。参与线上值班和故障处理积累稳定性经验。在团队里推广 AI 工具使用规范成为“会使用 AI 的人”。关注提示词工程、Agent 编排、模型评估等新技能。这些方向不是要你完全放弃编码而是要在编码之外建立第二层能力对业务的判断、对系统的认知、对质量的责任。7. AI 时代的开发技能清单与学习路径7.1 技能清单这份清单不是全都要学而是根据你的岗位方向选择重点技能方向核心内容适合人群提示词工程结构化描述、上下文构建、约束表达所有开发者AI 辅助开发代码生成、测试生成、重构辅助后端、前端开发AI Agent 开发工具调用、任务编排、循环控制后端开发、平台开发模型接入与部署API 接入、推理资源、成本评估后端、运维、架构师RAG 应用向量检索、知识库构建、上下文组装应用开发模型评估离线测试、线上指标、幻觉治理质量、算法、后端AI 产品化思维需求识别、场景验证、ROI 评估产品、全栈7.2 一个可执行的 90 天学习路径如果现在从零开始可以把学习分成三个阶段。第一阶段花 30 天熟悉 AI 辅助开发。每天用 AI 完成至少一个真实编码任务重点练习结构化提示词。可以从写单元测试、生成 CRUD、修复告警入手。这个阶段的产出是形成一套自己的提示词模板。第二阶段花 30 天学习 AI 应用开发。选一个自己熟悉的框架比如 Spring AI 或 Python 的 LangChain 生态完成一个最小功能把公司内部知识库文档喂给模型做问答。这个阶段的重点是掌握模型调用、上下文组装和异常兜底。第三阶段花 30 天做 AI 工程化实践。把你做的功能放到真实项目里加上日志、监控、限流、评估。同时尝试用 Agent 编排一个多步骤任务比如“读取代码仓库变更生成变更摘要并发送到通知平台”。这个阶段的产出是一套可观测、可评估的 AI 功能。7.3 常见认知误区误区实际情况建议“AI 生成的代码可以不用审查”编译通过不等于语义正确越权与数据问题常在必须审查尤其是权限和金额“提示词越详细越好”过长提示词会引入噪声关键信息更容易丢失信息结构清晰删掉冗余背景“大模型不会错”模型存在幻觉尤其是文档拼接和事实性输出重要输出要求引用来源或人工复核“本地部署一定比 API 好”本地部署成本高、维护重效果未必更优数据合规和延迟敏感时才考虑“学会一个框架就能跟上 AI”框架迭代快底层能力是理解模型行为以原理为主框架按需切换“AI 让初级开发者失去价值”初级开发者真正的问题是只会写模板代码趁早转向需求分析、架构和质检学习过程中还有一个实际建议多读模型官方文档和框架 changelog不要只靠短视频和二手教程。AI 技术迭代很快很多“一天学会”的内容几个月后就过时了。真正稳定的能力是理解模型输入输出机制、评估结果质量、设计可控的工程流程。回到文章开头那个标题。AI 会不会在某天早上替换掉你的工作取决于你今天的工作里有多少是“可被描述、可被自动化”的任务又花了多少时间在“需要判断、需要负责、需要沟通”的事情上。这不是一句鸡汤而是一个可以被量化的工程问题。花一周时间记录自己的工作耗时分布按本文的表格归类你就能得出自己的风险评分。然后按照三个方向去调整把 AI 纳入工具链、掌握 AI 应用开发基础、把业务架构和工程质量变成核心优势。这个过程不需要恐慌也不需要躺平只需要对自己当前的任务结构保持清醒并持续把它往更难被替代的方向调整。
返回列表