夜雨聆风学习资料网

ARTICLE · 991418

吴恩达:AI时代的软件工程基础依然重要

吴恩达:AI时代的软件工程基础依然重要

TL;DR

Andrew Ng在推文中发布了他AI工程技能图谱系列的第一篇长文:软件工程基础。核心观点:即使你的代码全部由coding agent来写,理解软件工程基础依然重要——因为你得知道存在哪些权衡,才能引导agent做出正确的取舍。一个不懂基础、只靠vibe coding的新手,会让coding agent在延迟、可用性、一致性、可靠性、可维护性、简单性和成本上做出糟糕的权衡。文章列出五项必须掌握的技能:构建全栈应用、管理数据、设计系统架构、让系统安全可靠、在生产中扩展与运营。下面是全文翻译。

原文

How have software engineering fundamentals changed with agentic coding?(Agentic编程出现后,软件工程基础发生了哪些变化?)

这是Andrew Ng于2026年8月28日在X(推特)上发布的文章《AI Engineering Skills Map: Software engineering fundamentals》的全文翻译。

引言

即使你使用coding agent来写全部代码,理解软件基础依然重要——因为它帮助你引导agent做出你想要的权衡,甚至帮助你意识到有哪些权衡存在。此外,当你在构建一个AI应用时,AI核心往往要通过一个更广泛的软件应用来承载,而你多半会想要帮助构建或塑造这个应用。

一个不了解软件基础、只凭感觉写代码(vibe coding)的新手,确实能做出简单的应用,但这常常导致coding agent在延迟、可用性、一致性、可靠性、可维护性、简单性和/或成本上做出糟糕的权衡。在这种情况下,开发者根本不知道这些权衡的存在,因此也就没有引导agent为他们的应用场景做出正确的决策。

这篇文章介绍的是,我们针对AI工程技能的研究表明,在软件工程中最需要知道的事情。它要求你擅长:

  • • 构建全栈应用
  • • 管理数据
  • • 设计系统架构
  • • 让系统安全可靠
  • • 在生产中扩展和运营

构建全栈应用

Agentic编程让许多此前只扮演更专门角色的开发者(比如前端开发者或移动开发者)能够承担更广泛的全栈角色。coding agent可以帮你处理开发流程中你不太熟悉的部分。但理解全栈到底是如何运转的,依然很重要。

熟练的开发者理解前端和后端系统的关键组件与概念,包括:UI组件、缓存、页面渲染、API选型与设计、认证、状态与会话管理、异步处理、数据持久化、测试、安全与可访问性。

管理数据

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

随着应用演进,你也要知道如何让数据架构随之演进。决定如何管理数据,需要大量由人提供的上下文。你的AI系统会从你的数据源获得自己的输入上下文,所以如果数据架构选得不好,AI就会"不知道自己不知道什么"。这就是为什么需要一位掌握相关上下文、又擅长AI工程的人——也就是你——来把它做对。如何为agent构建数据基础设施(而不仅仅是面向传统软件或人类),也是一个快速演进的领域,你应该随着领域的发展持续调整自己的最佳实践。

设计系统架构

当你理解了软件与数据全栈的主要组件,你就更有能力决定如何把这些部件组合在一起。好的系统设计需要理解软件预期要做什么(多少用户?延迟有多重要?成本有多重要?等等),以便你就应用平台、前端与后端的边界、系统拆分、应用状态放置、架构粒度(单体对比微服务)做出选择。你还会选择技术栈(编程语言、运行时、组件/前端/后端框架、数据技术)——有时通过运行实验来评估选项,然后才确定选型。

此外,正确的架构是一个移动靶,取决于项目所处的阶段。你为快速原型选择的简单架构,可能并不适合构建第一个生产系统;而随着应用扩展,它可能还要再变。做出这些决策,需要对软件组件和应用场景都有深入的技术知识,这样你才能设计——并演进——架构,做出更好的权衡。

让系统安全可靠

要构建可靠系统,你应该知道如何制定测试策略来验证系统的正确性:单元测试与集成测试如何搭配、使用什么框架、覆盖率达到什么水平。你还知道如何围绕可能的失败做设计——如何处理失败(比如API遇到速率限制)、构建优雅降级、并最小化失败的爆炸半径。

此外,与其先写软件、事后再想办法加固它,"左移"(shift left)运动正在把安全工作提前到生命周期更早的阶段(传统项目时间线上的左侧)。正如所有开发者都在走向全栈开发者一样,许多开发者现在也同时是部分意义上的安全工程师。你现在可以使用AI工具扫描代码漏洞、检查依赖以防止供应链注入、检查云配置中的攻击面。但要做好这些,依然需要一定的安全知识。

在生产中扩展和运营

要服务真实用户,你必须知道如何把软件部署到生产环境。你会受益于掌握软件开发生命周期(SDLC)——除了构建和测试,它还包括配置部署环境、决定发布策略、应用部署自动化(CI/CD)、理解基础设施即服务(IaaS)。

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

结尾

coding agent已经改变了我们构建软件的方式,包括那些不含任何AI组件的软件。部分编码知识——比如记住编码语法——正在变得过时。但深度理解软件如何运作的开发者,远远胜过那些不理解就凭感觉写代码的人。

理解软件基础(再加上AI知识),也会帮助你搞清楚软件能做什么、不能做什么。这使它们成为你使用coding agent、塑造构建方式的重要背景。我会在后续文章中继续讨论这些内容。


相关学习资料