BrainBank

Agentic Coding 时代的软件工程基础要点

2026/8/30 15:33:14

AI 翻译于 2026/8/30 15:38:44 · 使用 Qwen3.6 35B (fast, default) + Qwen3.8 27B Q8 (vision)

#security#best-practices#system-design#ai-engineering#agentic-coding#software-engineering-fundamentals#full-stack-development#data-management#scalability

吴恩达认为,即使拥有智能体编码工具,对软件工程基础的深刻理解——包括全栈开发、数据管理、系统架构、安全性、可靠性以及生产级运维——对于做出模糊提示词本身无法实现的智能权衡决策也是必不可少的。

Andrew Ng (@AndrewYNg) 在 X 平台上的内容

图片:Andrew Ng (@AndrewYNg) 在 X 平台上的内容图片:Andrew Ng (@AndrewYNg) 在 X 平台上的内容

软件工程基础如何随着智能体编码(agentic coding)而发生变化?即使你使用编码智能体来编写全部代码,理解软件基础仍然至关重要——它帮助你引导智能体做出你想要的权衡决策,或者让你知道究竟存在哪些权衡可供取舍。此外,当你在构建一个 AI 应用时,AI 内核往往通过一个更广泛的软件应用来表达,而你往往需要参与构建或塑造这个应用。

一个不懂软件基础就随意"氛围编程"(vibe code)的初学者可以做出简单的应用,但这往往导致编码智能体在延迟、可用性、一致性、可靠性、可维护性、简洁性和/或成本方面做出糟糕的权衡。在这些情况下,开发者甚至不知道这些权衡的存在,因此无法引导智能体为自身的应用场景做出正确决策。

本文根据我们对"AI 工程技能"的研究所显示的内容,阐述了软件工程中最需要掌握的事情。它要求你具备以下能力:

构建全栈应用。智能体编码使许多过去扮演更专业化角色(如前端开发者或移动端开发者)的开发者,能够扮演更广泛的全栈角色。编码智能体可以在你不太熟悉的开发环节上提供帮助。然而,理解全栈究竟如何运作非常重要。有经验的开发者了解前端和后端系统的关键组件与概念,包括 UI 组件、缓存、页面渲染、API 的选择与设计、身份认证、状态与会话管理、异步处理、数据持久化、测试、安全性以及可访问性。

管理数据。数据值得格外关注,因为它是软件在其之上构建的基础,且相对难以更改(即使有智能体协助迁移也是)。当你知道如何管理数据时,你就可以思考访问模式,并据此决定存储什么以及存储多久。你能识别正确的数据模型,选择合适的存储类型(如关系型表、文档、键值或图)和基础设施,而这反过来会影响速度、可扩展性、可用性、可靠性与成本。你理解事务、并发,以及如何确保你的数据干净、一致且最新。在需要时,你能够确保适当的隐私、治理与合规。你懂得如何管理数据全生命周期。

随着应用的演进,你也知道如何让数据架构随之演进。决定如何管理数据需要大量由人提供的上下文。你的 AI 系统将从你的数据源获取其自身的输入上下文,因此如果数据架构选择不当,AI 将无法感知它自身缺乏什么。这就是为什么需要一位具备相关上下文、且擅长 AI 工程的人——也就是你——进行专业干预来将其纠正。如何为智能体(而非仅为传统软件或人类)构建数据基础设施,也是一个快速演进的领域,你应随领域的发展持续调整你的最佳实践。

设计系统架构。当你理解了软件和数据的整个全栈的主要组件后,你就更能决定如何将各部分组合在一起。良好的系统设计要求理解软件预期要实现什么(多少用户?延迟有多重要?成本有多重要?等等),以便你做出关于应用平台、前端与后端边界、系统分解、应用状态放置以及架构粒度(单体 vs. 微服务)的选择。你还需要选择技术栈(编程语言、运行时、组件/前端/后端框架、数据技术)——有时需要通过实验来评估各种选项后再最终确定。

此外,正确的架构是一个移动中的目标,取决于项目所处的阶段。你为快速构建原型而选择的简单架构,可能并不适合构建第一个生产系统,而后者可能也会随着应用规模扩大而需要改变。做出这些决定需要对软件组件和应用上下文都具备深厚的技术知识,以便你能够设计——并演进——架构,从而做出更好的权衡。

让系统安全且可靠。为了构建可靠的系统,你应该知道如何制定测试策略来验证你系统的正确性:单元测试与集成测试的混合比例、使用什么框架、达到什么覆盖程度。你还知道如何围绕可能的故障进行设计——如何处理故障(如 API 达到速率限制)、构建优雅降级、并最小化故障的影响范围。此外,"左移"(shift left)运动正将安全工作推向生命周期的更早阶段(在传统项目时间线中更靠左的位置)。正如所有开发者都在向全栈开发者转变,许多开发者现在也在一定程度上兼任安全工程师。你现在可以用 AI 工具扫描代码中的漏洞、检查依赖项中的供应链注入,以及审查你的云配置中的攻击面。但要做好这些,仍然需要一定的安全知识。

扩展与生产环境运营。为了服务真实用户,你必须知道如何将软件部署到生产环境。了解如何执行软件开发生命周期(SDLC)将对你有益,它除了构建和测试之外,还包括配置部署环境、决定发布策略、应用部署自动化(CI/CD)以及理解基础设施即服务(IaaS)。

在生产环境中运营需要部署可观测性工具、设置告警以及管理事故(incident)。最后,为了扩展你的应用,你应该理解真实的负载,并知道如何扩展服务器、进行负载均衡,以及调整你的数据基础设施(通过分片、索引、复制),或者进行架构变更,使你的系统能够适应规模。最终,理解诸如版本控制、代码审查、依赖维护以及如何管理技术债务等编码最佳实践,有助于你在时间推移中持续演进你的系统。

编码智能体已经改变了我们构建软件的方式,包括构建不含任何 AI 组件的软件。某些部分的编码知识——例如记忆编码语法——正在变得过时。但那些深刻理解软件如何运作的开发者,远远胜过那些不懂原理就随意编写代码的人。

理解软件基础(在 AI 之外)也有助于你判断软件能做什么和不能做什么。这使它们成为你如何使用编码智能体、如何塑造构建的重要上下文。我将在未来的文章中讨论这些。

学习地图

软件工程基础学习路线图:面向智能体编码

第一阶段 — 基础

  • 掌握完整的软件栈(前端、后端、数据库、API)
  • 学习核心编程概念与数据结构
  • 熟悉版本控制(Git)及代码协作工作流

第二阶段 — 全栈开发

  • 构建端到端应用,涵盖从用户界面到数据持久化的完整链路
  • 理解前端概念:渲染、缓存、状态管理、无障碍访问
  • 理解后端概念:API、认证、异步处理、会话管理

第三阶段 — 数据管理

  • 掌握合适的数据模型(关系型、文档型、键值型、图数据库)
  • 理解事务处理、并发控制与数据一致性保障
  • 规划数据生命周期、治理策略以及隐私/合规要求

第四阶段 — 系统架构

  • 分析应用需求:用户规模、延迟敏感性、成本约束条件
  • 设计前端与后端之间的架构边界
  • 根据项目阶段在单体架构与微服务之间做出选择
  • 随着应用的规模化迭代演进架构

第五阶段 — 安全与可靠性

  • 实施分层测试策略(单元测试、集成测试)
  • 面向故障进行设计:限流机制、优雅降级、最小化爆炸半径
  • 安全左移漏洞扫描、供应链安全检查、云配置审查

第六阶段 — 生产运维

  • 掌握软件开发生命周期(SDLC):构建、测试、部署
  • 搭建 CI/CD 流水线及基础设施即服务(IaC)平台
  • 实施可观测性体系、监控告警、事件响应流程
  • 扩展系统规模:负载均衡、分片、索引优化、数据复制

动手实践——分步指南

  1. 使用 Git 和 VS Code(或其他你偏好的编辑器)搭建开发环境,并创建一个受版本控制的 "hello world" 仓库。
  2. 构建一个简单的全栈应用(例如待办事项应用 Todo App),使用一个前端框架和一个后端语言——完成 UI、API 端点以及数据库连接。
  3. 为你的应用添加认证和状态管理,以掌握会话处理和.secure data access patterns。
  4. 为你的应用设计数据模型:在 SQL 或 NoSQL 之间做出选择,基于访问模式论证你的选择理由,并实现适当的索引。
  5. 为核心逻辑编写单元测试,为 API 端点编写集成测试,然后在 CI 中设置自动化测试运行。
  6. 为 API 失败添加错误处理(例如速率限制 Rate Limits),并增加优雅降级机制,使应用能够以有帮助的方式降级,而不是直接崩溃。
  7. 使用像 GitHub 内置 CodeQL 或 Snyk 之类的工具扫描代码中的漏洞,并审计你的云配置以排查常见攻击面。
  8. 将你的应用部署到托管平台(Heroku、Render 或 Vercel + Supabase),首先通过手动部署的方式来实现。
  9. 建立可观测性:添加日志记录、错误追踪(例如 Sentry),以及基本监控仪表盘。
  10. 为关键故障配置告警,并编写事件响应 runbook 文档。
  11. 从概念上扩展你的应用:读取单台服务器的限制,在配置中添加负载均衡器模式,并测试数据库连接池。
  12. 建立团队协作开发实践:通过拉取请求(Pull Requests)开发功能、设置代码审查清单,并在 Issues 中跟踪技术债务。
  13. 现在,使用一个 AI 编码代理来重构你的应用——对比你自己做出的决策与代理做出的那些你并不理解或无法引导其做出选择的决策。

三大推荐资源

  1. 1
    AI Programming with ChatGPT -deeplearning.ai

    Andrew Ng's own course on practical AI programming, covering how to effectively use AI tools for software development and understand engineering tradeoffs.

    https://www.deeplearning.ai/short-courses/ai-programming-with-chatgpt/

  2. 2
    System Design Primer - GitHub

    A widely used open-source resource for learning large-scale system design, covering scalability, distributed systems, and architecture patterns.

    https://github.com/donnemartin/system-design-primer

  3. 3
    The Pragmatic Programmer - Official Site

    The canonical guide to software engineering fundamentals, professional judgment, and craft — essential reading for developers using advanced tools like AI coding agents.

    https://pragmaticprogrammer.com/

链接由 AI 推荐——使用前建议快速核实。