夜雨聆风学习资料网

ARTICLE · 991207

吴恩达:AI 工程技能地图-软件工程基础

吴恩达:AI 工程技能地图-软件工程基础

原文标题:AI Engineering Skills Map: Software engineering fundamentals

引言

当你使用编码智能体(coding agent)来编写全部代码时,理解软件基础依然很重要——它能帮你引导智能体做出你想要的权衡取舍,甚至让你知道究竟存在哪些可以取舍的点。此外,当你构建一个 AI 应用时,AI 的核心往往是通过一个更广泛的软件应用来表达的,而你可能正想帮忙构建或塑造这个应用。

一个不懂软件基础、只会"氛围编程"(vibe coding)的新手可以做出简单的应用,但这往往会导致编码智能体在延迟、可用性、一致性、可靠性、可维护性、简单性和/或成本上做出糟糕的权衡。在这种情况下,开发者甚至不知道这些权衡的存在,因此也就没能引导智能体针对自己应用的场景做出正确的决策。

本文基于我们对"AI 工程技能"的研究,介绍在软件工程中最重要的几件事。这要求你熟练掌握:

  • 构建全栈应用
  • 管理数据
  • 设计系统架构
  • 让系统安全可靠
  • 在线上环境中扩展与运营

构建全栈应用

智能体编程让许多原本只扮演单一角色(如前端开发者或移动开发者)的开发者,能够承担更广泛的全栈角色。编码智能体可以帮你处理开发流程中那些你不那么熟悉的部分。然而,理解全栈的实际运作方式依然很重要。熟练的开发者了解前端和后端系统的关键组件与概念,包括 UI 组件、缓存、页面渲染、API 的选择与设计、认证、状态与会话管理、异步处理、数据持久化、测试、安全和无障碍。

管理数据

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

随着应用不断演进,你也知道如何让数据架构随之演进。决定如何管理数据需要大量由人提供的上下文。你的 AI 系统会从你的数据源中获得自己的输入上下文,所以如果数据架构选择不当,AI 就"不知道自己不知道什么"。这就是为什么需要有具备相关上下文、并精通 AI 工程的人——也就是你!——来进行专业的干预,把它弄对。如何为智能体构建数据基础设施(而不仅仅是面向传统软件或人类)也是一个快速演进的领域,你应该随着领域的发展不断调整自己的最佳实践。

设计系统架构

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

此外,正确的架构是一个移动的目标,取决于项目所处的阶段。你为快速做出原型而选择的简单架构,可能并不适合构建第一个生产系统;而当应用扩展时,那个架构也可能再次改变。做出这些决策需要对软件组件和应用上下文都有深入的技术理解,这样你才能设计——并演进——架构,以做出更好的权衡。

让系统安全可靠

要构建可靠的系统,你应该知道如何制定测试策略来验证系统的正确性:单元测试与集成测试各占多少比例、用什么框架、覆盖率要多高。你还知道如何围绕可能的失败来设计——如何处理失败(比如 API 遇到限流)、构建优雅降级,并把失败的影响范围(blast radius)最小化。此外,与其先写软件、之后再想办法补安全,"左移"(shift left)运动正把安全工作提前到生命周期的更早阶段(在传统项目时间线上向左移)。正如所有开发者都在向全栈开发者转变,现在许多开发者也在一定程度上成了安全工程师。你可以用 AI 工具扫描代码中的漏洞、检查依赖项是否存在供应链注入、审查云配置中的攻击面。但要做好这些,仍然需要一些安全知识。

在线上环境中扩展与运营

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

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

结语

编码智能体已经改变了我们构建软件的方式,包括不含任何 AI 组件的软件。某些编码知识——比如死记硬背编码语法——正在变得过时。但深刻理解软件运作方式的开发者,其表现会远远超过那些不懂基础、只靠氛围编程的人。

理解软件基础(除了 AI 之外)还能帮你弄清楚软件能做什么、不能做什么。这使它成为你如何使用编码智能体、如何塑造构建过程的重要背景。我将在后续文章中讨论这些内容。

注:文章来自吴恩达在x上的文章翻译

相关学习资料

返回首页浏览学习资料