Agentic Coding 时代的软件工程基础
基于 Andrew Ng 2026-08-28 发布的《AI Engineering Skills Map: Software engineering fundamentals》整理,并扩展为一份可学习、可实践、可用于项目 Review 的中文技术手册。
结论先行:AI 淘汰的是语法负担,不是工程判断
Andrew Ng 的核心判断
即使代码全部由 Coding Agent 编写,开发者仍需要理解软件底层工作方式。否则 Agent 会替你做出大量你甚至不知道已经发生的决策:延迟、可用性、一致性、可靠性、可维护性、复杂度和成本都可能被错误权衡。
因此,Vibe Coding 可以帮助初学者快速做出 Demo,但不能自动得到生产级工程质量。
原文背景:AI Engineering Skills Map 的第二个分支
Andrew Ng 在 2026-08-14 首次发布整体技能图,2026-08-21 细化“构建与部署 AI 应用”,2026-08-28 继续细化“软件工程基础”。
软件工程基础:5 个必须掌握的能力块
| 能力 | 你要真正理解什么 | Agent 能帮什么 | 人必须负责什么 |
|---|---|---|---|
| 全栈应用 | 前后端边界、API、认证、状态、异步、测试、可访问性 | 快速实现陌生层代码 | 定义组件边界与交互契约 |
| 数据管理 | 模型、访问模式、事务、并发、一致性、生命周期 | Schema、迁移、查询优化建议 | 决定数据语义和长期结构 |
| 系统架构 | 分解、状态放置、单体/微服务、技术栈、演进路线 | 生成方案、POC、基准测试 | 做业务上下文驱动的 Trade-off |
| 安全可靠 | 测试策略、故障模式、降级、Blast Radius、威胁模型 | 扫描漏洞、补测试、审依赖 | 确定风险边界和安全目标 |
| 生产扩展 | CI/CD、发布、可观测性、告警、事故、容量、扩容 | 配置、脚本、Runbook 草稿 | 判断真实负载和运维策略 |
全栈应用:Agent 让“跨栈”更容易,但理解边界更重要
为什么全栈能力重新变得重要?
过去一个工程师可能只负责前端、移动端或后端。Agent 可以补足陌生技术栈的实现细节,因此个人能覆盖更大的系统范围。但覆盖范围扩大后,你更需要知道每一层究竟承担什么职责。
前端必须理解
- 组件边界与状态管理
- CSR / SSR / Streaming / Hydration
- 缓存、性能、可访问性
- 客户端安全边界
后端必须理解
- API 设计与版本化
- 认证、授权、Session
- 同步 vs 异步任务
- 事务、幂等、错误处理
数据管理:Agent 时代最容易被低估、最难返工的一层
Andrew Ng 特别强调数据,因为数据结构一旦进入生产环境,改变成本通常比代码更高。AI 应用又更依赖数据提供上下文,所以错误的数据架构会直接限制 Agent“能够知道什么”。
| 问题 | 你应该思考 | 常见错误 |
|---|---|---|
| 存什么? | 访问模式、业务语义、保留周期 | 看到 JSON 就直接塞 Document DB |
| 怎么建模? | 关系、文档、KV、图各自适用场景 | 让 Agent 根据“方便写代码”选数据库 |
| 一致性? | 事务、并发、幂等、最终一致性 | 只验证单用户 happy path |
| 数据质量? | 完整、准确、新鲜、可追溯 | RAG 出错后只改 Prompt |
| 生命周期? | 创建→访问→归档→删除→审计 | 无限保存所有 Agent Memory |
Agent 系统新增的数据问题
传统系统:数据主要服务人和业务逻辑。
Agent 系统:数据还要服务检索、上下文构造、Memory、工具调用与可验证性。
因此需要额外关注:数据切片粒度、语义索引、元数据、权限过滤、时间新鲜度、来源引用、Agent Memory 的写入与过期策略。
系统架构:真正难的是“选择”,不是“生成”
传统编码瓶颈
方案知道怎么做,但实现时间长。
Agentic Coding 瓶颈
实现很快,但错误架构也能被很快地实现出来。
架构决策至少要回答 6 个问题
- 用户规模和峰值流量是多少?
- 延迟目标是什么?哪些路径必须实时?
- 成本约束是什么?按请求还是按任务计费?
- 系统失败时可以损失什么、不能损失什么?
- 状态放在哪里?谁是 Source of Truth?
- 当前阶段是 Demo、MVP、生产初期还是规模化?
安全与可靠性:AI 可以扫描,但风险模型仍需人定义
可靠性
- 单元测试 / 集成测试 / E2E 的合理组合
- Rate limit、超时、重试、熔断
- Graceful Degradation
- 幂等与重复执行保护
- 限制故障 Blast Radius
安全
- 认证与授权
- 输入验证和输出编码
- Secret / Token 管理
- 供应链与依赖风险
- 云配置和最小权限
Agent 系统还需要额外关注
- Prompt Injection 与不可信外部内容
- 工具调用权限与高风险操作审批
- 数据外泄与跨租户上下文污染
- 长程任务中的权限漂移
- Agent 错误循环导致成本或副作用放大
生产与扩展:能跑 ≠ 能上线,能上线 ≠ 能长期运营
本地验证、自动化测试、静态检查、依赖检查。
CI/CD、环境配置、灰度、Canary、Rollback。
日志、指标、Trace、业务 KPI、Agent trajectory。
阈值、异常检测、Runbook、复盘。
负载均衡、缓存、索引、复制、分片、架构演进。
Agentic Coding 到底改变了什么?
| 以前 | 现在 | 新的核心能力 |
|---|---|---|
| 记住语法并手写实现 | Agent 生成大部分实现 | 规格、上下文、约束 |
| 实现速度是瓶颈 | 验证速度变成瓶颈 | 测试、Review、Evals |
| 跨栈成本高 | 个人可以覆盖更完整系统 | 全局系统理解 |
| 重构成本高 | 修改代码更便宜 | 仍需管理数据与兼容性 |
| 写错代码慢慢积累 | Agent 可高速制造技术债 | 架构守门与自动化验证 |
| 工具主要辅助人 | Agent 可以直接操作工具 | 权限、审计、执行边界 |
Code Generation → Context Engineering → Engineering Judgment → Verification → Operation
推荐工作流:不要让 Agent“直接开始写”
需求 / Problem
↓
约束:用户量、延迟、成本、安全、数据
↓
Architecture Decision / ADR
↓
让 Agent 先探索代码库与现状
↓
Implementation Plan
↓
Agent 分阶段实现
↓
Tests + Static Checks + Security Checks
↓
人工 Review:Trade-off / Boundaries / Failure Modes
↓
Deploy / Observe / Feedback
↺
给 Coding Agent 的工程上下文模板
Goal: 要解决什么业务问题? Current Architecture: 现有系统边界、依赖、Source of Truth。 Constraints: Latency / Cost / Scale / Reliability / Security / Compliance。 Non-goals: 本次明确不做什么。 Data: 数据模型、访问模式、一致性要求。 Failure Modes: 外部 API 失败、重复执行、超时、权限不足时怎么办? Verification: 必须通过哪些测试、指标或人工验收?
Trade-off 决策框架:Agent 给方案,人决定取舍
| 维度 | 关键问题 | 验证方式 |
|---|---|---|
| Latency | P50/P95/P99 目标?实时还是异步? | Benchmark / Trace |
| Availability | 允许多少停机?依赖挂了怎么办? | SLO / Chaos Test |
| Consistency | 是否必须读到最新状态? | 并发/事务测试 |
| Reliability | 失败后能否重试?是否幂等? | Failure Injection |
| Maintainability | 半年后别人能否修改? | Code Review / Complexity |
| Simplicity | 能否先用更简单架构? | 依赖数 / 服务数 / 运维面 |
| Cost | 每用户、每请求、每 Agent Task 成本? | Cost Model |
| Security | 最坏情况下会暴露/破坏什么? | Threat Model |
6 周学习路线:用 Agent 学工程,而不是绕过工程
完成一个前端 → API → DB → 返回 UI 的完整应用;重点解释每层职责、认证、状态和错误传播。
关系库建模、索引、事务、幂等;让 Agent 生成三种 Schema,再自己做 Trade-off。
同一个产品分别设计 Prototype / Production / Scale 三个阶段架构。
加入鉴权、Rate Limit、Retry、Timeout、Circuit Breaker、审计日志和核心测试。
容器化、CI/CD、环境隔离、日志、Metrics、Trace、告警和回滚。
让 Coding Agent 承担大部分实现,但要求每次先读架构约束、输出计划、执行测试和提交 Review 证据。
实战项目:构建一个生产级 Agent Task Service
项目目标
做一个“用户提交任务 → Agent 异步执行 → 调用工具 → 保存 trajectory → 返回结果”的服务。重点不是模型效果,而是把 Andrew Ng 提到的 5 个软件工程能力全部串起来。
必须实现
- Web UI + REST/Streaming API
- 用户认证与权限
- Task / Step / ToolCall 数据模型
- 异步队列与任务状态机
- 重试、超时、幂等
- 日志、Trace、Token/Cost 统计
必须 Review
- 为什么不是同步执行?
- 为什么用当前数据库?
- Agent 重复调用工具怎么办?
- 任务执行一半进程挂了怎么办?
- 如何限制高风险工具?
- 如何从 10 QPS 扩到 1,000 QPS?
面试 / 自测:是否真正掌握,而不是“会 Vibe Coding”
10 个关键问题
- 什么时候应该用队列而不是同步 API?
- 如何保证支付或 Agent Tool Call 不被重复执行?
- Redis、Postgres、Document DB 分别适合什么访问模式?
- 什么时候单体架构优于微服务?
- 如何设计一个可回滚的数据库 Schema 变更?
- 外部 LLM API 连续超时,你的系统如何降级?
- 你会监控哪些指标来判断 Agent 服务“健康”?
- Prompt Injection 为什么不仅仅是 Prompt 问题?
- Agent 生成了通过测试的代码,为什么仍可能不能上线?
- 如何让 Coding Agent 证明它完成了任务,而不是只说“已完成”?
来源与延伸阅读
说明:本文把 Andrew Ng 原文的 5 个软件工程能力块作为骨架;“Agent 系统新增问题、工作流模板、Trade-off 表、6 周路线和实战项目”为便于学习和落地而做的扩展分析。
页面格式严格遵循《html_UI 设计规范.md》:240px 固定侧边栏、900px 内容区、白底/米白背景、蓝紫单一强调色、Card / Callout / Chip / Hierarchy / Timeline / 对比表格 / IntersectionObserver。