SOTA Sync
全部文章
AI 编程2026-08-29

吴恩达的 AI 工程技能图谱:Agent 写代码以后,软件基础反而更重要

Coding Agent 正在降低写代码的门槛,却没有消除软件工程的权衡。吴恩达把 AI 工程的软件基础归纳为五层:全栈开发、数据管理、系统架构、安全与可靠性、生产扩展与运维。语法记忆正在贬值,定义约束、判断取舍和验证系统的能力正在升值。

Coding Agent 已经可以生成页面、接口、数据库迁移、测试和部署配置。于是,一个诱人的问题出现了:既然代码可以由 Agent 完成,软件工程基础还重要吗?

吴恩达给出的答案恰好相反:Agent 越能写代码,人越需要理解软件为何这样运行。

原因不复杂。生成代码只是实现方案,软件工程真正困难的部分一直是取舍:延迟和成本如何平衡,可用性和一致性如何选择,系统应该保持单体还是拆成服务,数据应该存多久,失败时应该重试、降级还是停止。

如果开发者不知道这些取舍存在,就不可能要求 Agent 做出正确选择。Agent 会给出一个“能跑”的答案,却不知道这个答案是否适合具体业务。

吴恩达将 AI 工程师需要掌握的软件基础归纳成五个部分:全栈应用、数据管理、系统架构、安全与可靠性、生产扩展与运维。它们共同描述了一种正在形成的新角色:不必亲手敲完所有代码,但必须能定义系统、审查权衡并对结果负责。

#语法正在贬值,工程判断没有

过去,软件能力经常通过可见的编码熟练度体现:是否记得 API,是否能快速写出框架样板,是否熟悉某种语言的语法细节。

Coding Agent 首先压缩的正是这部分价值。忘记函数名不再重要,不熟悉某个框架也不再意味着无法开始。开发者可以描述目标,让 Agent 查文档、选择接口并生成第一版实现。

但软件系统不是语法的集合。一个登录功能背后包含身份验证、会话存储、密码策略、权限边界、过期机制、攻击防护和审计记录。Agent 可以生成每一个组件,却无法凭空知道:

  • 这是内部工具还是面向公众的产品;
  • 用户规模是几十人还是几百万人;
  • 一次错误登录的风险有多大;
  • 数据是否涉及隐私和合规;
  • 团队能否长期维护生成的技术栈。

这些信息属于应用上下文。没有上下文,代码质量再高也可能解决错问题。

所以 Agent 时代的分界线,不再只是“会不会写”,而是“知不知道该让系统成为什么样,以及如何判断它真的做到了”。

#第一层:从专业分工走向全栈理解

Coding Agent 让原本专注前端、移动端或后端的开发者更容易跨越技术边界。它可以补上不熟悉的代码,让一个人完成过去需要多个角色协作的原型。

但“可以生成全栈代码”不等于“理解全栈系统”。一个成熟开发者仍然需要知道各层如何连接:

  • UI 组件如何组织状态,页面采用服务端还是客户端渲染;
  • API 如何设计,缓存放在哪里,何时失效;
  • 身份、会话与授权如何贯穿前后端;
  • 长任务为什么需要异步处理;
  • 数据如何持久化,失败如何恢复;
  • 测试、安全与可访问性如何进入交付流程。

这些知识的作用不再只是亲手实现,而是帮助开发者发现 Agent 方案中的隐含假设。

例如,Agent 可能为了快速交付,把大量状态留在浏览器;可能默认选择客户端渲染,牺牲首屏性能;也可能给每个功能建立独立接口,逐渐形成无法维护的边界。代码本身没有明显错误,系统方向却已经偏离。

全栈能力因此从“每层都会写”升级为“理解每层的责任、成本与连接方式”。

#第二层:数据是最难返工的系统决定

吴恩达特别强调数据,因为数据是软件的地基,也是 Agent 最难替你轻松改掉的部分。

界面可以重写,服务可以重构,已经积累的数据却带着历史约束。选择关系表、文档、键值或图数据库,会影响查询速度、事务能力、扩展方式、可靠性和成本。字段如何定义、数据保存多久、并发写入如何处理,也会在系统运行后变得越来越难改变。

对 AI 应用而言,数据架构还有更直接的后果:模型能看到什么,取决于系统能提供什么。

如果权限、索引、更新链路或数据模型设计错误,Agent 不只是回答得慢,而是根本不知道自己遗漏了什么。缺失的上下文不会自动报告“我不存在”。模型只能在被提供的世界里推理。

因此,AI 工程的数据能力至少包含四层:

  1. 从访问模式反推数据模型与存储类型;
  2. 处理事务、并发、一致性和新鲜度;
  3. 管理隐私、治理、合规与完整生命周期;
  4. 为 Agent 设计可检索、可授权、可追踪的上下文基础设施。

最后一层仍在快速演进。传统数据库主要服务应用程序与人类查询;Agent 数据基础设施还要支持动态检索、工具调用、长期记忆、权限继承和来源追踪。今天的最佳实践很可能不是明天的答案。

#第三层:架构不是模板,而是阶段性的取舍

理解组件和数据之后,下一步才是系统架构:这些部分应该如何组合。

好的架构并不是自动选择“最先进”的方案,而是先问清楚系统目标:用户数量是多少,延迟是否关键,故障是否可以接受,成本上限在哪里,团队有多少维护能力。

这些答案会决定:

  • 使用什么应用平台和运行时;
  • 前后端边界放在哪里;
  • 状态由客户端、服务端还是数据库持有;
  • 系统保持单体还是拆成微服务;
  • 选择哪些语言、框架与数据技术。

Agent 很擅长根据常见模式生成架构,却容易把互联网大厂的复杂方案搬进一个尚未验证需求的产品。消息队列、事件总线、微服务和多层抽象看起来专业,却可能让三个人的团队先承担运维成本,再获得并不存在的规模收益。

更重要的是,正确架构是移动目标。快速原型需要最短反馈路径,第一版生产系统需要安全和可恢复,规模增长后才可能需要分片、复制或服务拆分。

工程能力不是第一次就选中永恒架构,而是知道当前阶段需要什么,并保留未来演进的空间。

#第四层:安全与可靠性必须进入生成之前

AI 可以帮助扫描漏洞、检查依赖供应链、审查云配置,但工具不会自动建立安全模型。

开发者仍然要决定哪些行为必须测试,单元测试和集成测试如何组合,关键链路需要什么覆盖;还要预先考虑外部 API 限流、网络中断、模型超时和第三方服务故障。

可靠系统并不假设所有组件永远可用,而是提前定义:

  • 哪些错误可以重试,退避策略是什么;
  • 哪些功能可以降级,用户会看到什么;
  • 如何限制故障影响范围;
  • 哪些操作必须幂等;
  • 什么状态需要告警或人工介入。

安全也不应该等代码写完后再补。所谓“左移”,就是把威胁建模、依赖审查、权限设计和配置检查提前到开发生命周期的前端。

这对 Coding Agent 尤其重要。生成速度越快,错误进入系统的速度也越快。如果审查和安全只发生在最后,团队会持续累积一批“功能已完成、风险待处理”的代码。

Agent 能扩大安全工程师的覆盖面,也会扩大缺少安全意识的开发者的攻击面。

#第五层:能部署不等于能运营

Demo 在本地运行,只证明了一条理想路径。服务真实用户,则需要完整的软件生命周期:环境配置、发布策略、CI/CD、基础设施、可观测性、告警和事故管理。

系统上线后,开发者必须知道它实际上承受了什么负载,而不是根据想象提前扩容。需要观察延迟、错误率、吞吐量、资源使用与用户行为,再决定增加服务器、引入负载均衡,还是调整索引、复制、分片和架构边界。

生产运维还包含一些不耀眼、却决定系统寿命的工作:版本控制、代码审查、依赖升级、回滚机制和技术债管理。

Coding Agent 可以生成部署配置,甚至协助处理故障,但它不会自动为组织建立责任机制。谁接收告警,谁决定回滚,什么指标代表用户受损,事故后如何避免重复发生,这些仍然是工程系统的一部分。

#“会用 Agent”最终是一种上下文工程

把这五层放在一起,会发现 Coding Agent 的核心能力并不只是提示词技巧,而是把足够准确的上下文交给模型。

这里的上下文不仅是代码文件,还包括:

  • 产品目标与用户规模;
  • 性能、可靠性和成本预算;
  • 数据模型、访问模式与合规边界;
  • 团队维护能力与现有技术栈;
  • 测试策略、发布规则和故障预案。

缺少这些约束时,“帮我设计一个可扩展系统”只会得到平均意义上的答案。Agent 不知道团队更在乎交付速度还是长期维护,也不知道一次短暂停机是否会造成真实损失。

高水平开发者与普通 Vibe Coder 的差距,正在从代码产量转移到上下文质量。前者会明确约束、要求候选方案、比较权衡、验证关键假设;后者只描述功能,然后接受第一份能运行的输出。

#一张更实际的学习路线图

这份技能图谱不意味着每个人都要先学完所有计算机科学知识,才可以使用 Agent。更合理的顺序是围绕真实项目逐层补齐判断能力。

第一步,完成一个端到端应用。 不要只停留在页面生成。让它包含身份、API、数据持久化、异步任务与一次真实部署,理解请求如何穿过整个系统。

第二步,为每个技术选择写下理由。 为什么使用关系数据库,为什么选择当前渲染方式,为什么状态放在这里。无法解释的选择,通常只是 Agent 默认值。

第三步,主动设计失败。 模拟限流、超时、重复请求、数据库不可用和权限错误,观察系统是否能恢复,还是只在理想路径上工作。

第四步,用真实指标替代架构想象。 上线后记录延迟、错误和资源消耗,根据证据决定扩展,而不是为了“以后可能有百万用户”提前复杂化。

第五步,持续阅读 Agent 的代码。 不是逐字符检查,而是追踪数据流、信任边界、状态变化和故障路径。代码审查正在从语法纠错转向系统推理。

#软件工程没有消失,只是上移了一层

Agent 让更多人可以把想法变成软件,这是确定的进步。但“更多人能生成软件”与“更多人能运营可靠软件”是两件不同的事。

语法、样板代码和框架记忆正在被工具吸收。与此同时,延迟、可用性、一致性、可靠性、可维护性、简洁性和成本之间的冲突并没有消失。它们只是从写代码的过程,转移到了给 Agent 定义任务和审查结果的过程。

未来优秀的软件工程师不一定是写代码最多的人,而是最清楚系统约束、最善于识别隐含取舍、最能让 Agent 输出在真实世界长期成立的人。

Coding Agent 降低了实现门槛,却提高了判断的杠杆。软件基础不是旧时代的负担,而是人类在自动生成时代仍然掌握方向盘的方式。