夜雨聆风学习资料网

ARTICLE · 987686

AI 越会写代码,越要懂软件工程:五项基础能力详解

AI 越会写代码,越要懂软件工程:五项基础能力详解

AI 工程技能图谱 · 第三篇|原著:Andrew Ng(吴恩达)|2026 年 8 月 28 日

智能体编程出现之后,软件工程的基础知识发生了哪些变化?

即使所有代码都由编程智能体编写,理解软件基础依然重要。只有这样,你才能引导智能体作出符合需求的取舍,甚至首先意识到:有哪些取舍需要作出。

此外,构建 AI 应用时,AI 核心能力通常需要通过一个更完整的软件应用来呈现,而你也需要参与这个应用的构建与塑造。

一个不懂软件基础的新手,凭感觉进行“氛围编程”(vibe coding),也能做出简单应用。但这往往会让编程智能体在延迟、可用性、一致性、可靠性、可维护性、简洁性或成本等方面,作出不理想的取舍。

在这些情况下,开发者甚至不知道这些取舍的存在,自然也就无法结合应用的具体背景,引导智能体作出正确决策。

这篇文章将介绍我们对 AI 工程技能的研究所揭示的、软件工程中最值得掌握的知识。它们包括五项能力:

  • 构建全栈应用
  • 管理数据
  • 设计系统架构
  • 保障系统安全与可靠性
  • 生产环境中的扩展与运维

理解软件如何工作,才能判断系统应该如何构建。

01 构建全栈应用

智能体编程,让许多过去专注于某个领域的开发者,例如前端开发者或移动端开发者,有机会承担覆盖面更广的全栈角色。对于开发过程中那些你不太熟悉的部分,编程智能体可以提供帮助。

但理解整个技术栈究竟如何运行,依然十分重要。

熟练的开发者,应当理解前端和后端系统中的关键组件与概念,包括界面组件、缓存、页面渲染、API 的选择与设计、身份认证、状态与会话管理、异步处理、数据持久化、测试、安全,以及无障碍设计。

02 管理数据

数据值得格外重视,因为它是软件赖以构建的基础,而且相对难以改变,即使智能体能够协助完成迁移,也依然如此。

掌握数据管理,意味着你能够分析数据的访问方式,据此决定应该存储什么、保存多久。你能够确定合适的数据模型,选择关系表、文档、键值或图等适当的存储类型,以及相应的基础设施。

这些选择,又会影响系统的速度、可扩展性、可用性、可靠性和成本。

你需要理解事务与并发,知道如何确保数据干净、一致、及时更新;在需要时,能够妥善处理隐私、治理和合规要求;也知道如何管理数据的整个生命周期。

随着应用演进,你还需要让数据架构随之演进。决定如何管理数据,需要人提供大量与具体场景有关的背景信息。

AI 系统会从你的数据源中获取自己的输入上下文。如果数据架构选择不当,AI 甚至不知道自己遗漏了什么。

这就是为什么需要一个既掌握相关背景、又具备 AI 工程能力的人来介入,把事情做对——这个人就是你。

如何为智能体构建数据基础设施,而不只是为传统软件或人类构建,也是一个快速发展的领域。你应当随着领域的演进,持续调整自己的最佳实践。

03 设计系统架构

当你理解了软件全栈和数据体系中的主要组成部分,就更有能力判断应该如何把它们组合起来。

好的系统设计,首先需要理解软件要完成什么任务:要服务多少用户?延迟有多重要?成本有多重要?有了这些背景,你才能选择应用平台,划分前后端边界,拆分系统,决定应用状态存放在哪里,以及选择单体还是微服务这样的架构粒度。

你还需要选择技术栈,包括编程语言、运行时、组件框架、前后端框架和数据技术。有时,应该先通过实验评估不同方案,再作出决定。

此外,合适的架构并不是固定不变的,而是会随项目阶段变化。

为快速制作原型而选择的简单架构,未必适合第一个生产版本;随着应用规模扩大,这套架构又可能需要调整。

作出这些决策,需要你既深入理解软件组件,也熟悉应用背景。只有这样,才能设计并持续演进架构,作出更合理的取舍。

04 保障系统安全与可靠性

要构建可靠的系统,你需要知道如何制定测试策略,验证系统是否正确运行:单元测试与集成测试怎样搭配,使用哪些框架,需要达到怎样的覆盖程度。

你还需要围绕可能发生的故障来设计系统:如何处理 API 触发限流等失败,如何实现优雅降级,以及如何尽量缩小故障的影响范围。

与此同时,安全工作也不应等软件写完后才开始考虑。“安全左移”(shift left)正在把安全工作提前到开发生命周期的更早阶段,也就是传统项目时间线的左侧。

正如开发者的能力范围正在向全栈扩展,许多开发者如今也开始承担一部分安全工程师的职责。

你可以使用 AI 工具扫描代码漏洞,检查依赖项是否遭到供应链恶意代码注入,并审查云配置可能暴露的攻击面。但要把这些工作做好,仍然需要掌握一定的安全知识。

05 生产环境中的扩展与运维

要服务真实用户,你必须知道如何把软件部署到生产环境。

理解并执行软件开发生命周期(SDLC)会很有帮助。除了构建和测试,它还包括配置部署环境、选择发布策略、实施持续集成与持续交付(CI/CD)等部署自动化流程,以及理解基础设施即服务(IaaS)。

在生产环境中运行系统,还需要配置可观测性工具、设置告警,并处理运行事故。

要让应用能够随规模扩大而发展,你应该理解真实负载,知道如何扩容服务器、进行负载均衡,以及通过分片、索引、复制等方式调整数据基础设施,或通过架构变更,让系统适应规模增长。

此外,理解版本控制、代码评审、依赖维护和技术债管理等开发最佳实践,能够帮助你长期、持续地演进系统。

代码的写法变了,理解软件仍然重要

编程智能体已经改变了我们构建软件的方式,甚至包括那些完全不含 AI 组件的软件。

某些编程知识,例如死记硬背代码语法,正在过时。但深入理解软件如何工作的开发者,依然远胜于那些不懂原理、只凭感觉进行氛围编程的人。

除了 AI 知识,软件基础还能够帮助你判断:软件能做什么,又不能做什么。这些认知,构成了你使用编程智能体、塑造产品与开发方向时的重要背景。

我会在后续文章中继续讨论这些话题。


原文,Andrew Ng:Software Engineering Fundamentals (https://x.com/AndrewYNg/article/2093388974194872781)

相关学习资料