夜雨聆风学习资料网

ARTICLE · 996583

吴恩达来信:AI 工程技能图谱详解——软件工程基础

吴恩达来信:AI 工程技能图谱详解——软件工程基础

Hi~新朋友,记得关注我们哟

亲爱的朋友们:

随着智能体式编码的出现,软件工程基础发生了怎样的变化?即使你使用编码智能体来编写全部代码,理解软件基础仍然很重要,因为这能帮助你引导智能体做出你希望的权衡——甚至让你知道有哪些权衡需要做。除此之外,在构建 AI 应用时,AI 核心通常会通过更广泛的软件应用来体现,而这一整体会由优秀的工程师来塑造。

一个在不理解软件基础的情况下进行 vibe coding 的新手,虽然也能创建简单应用,但这往往会导致编码智能体在延迟、可用性、一致性、可靠性、可维护性、简洁性和/或成本方面做出糟糕的权衡。大多数情况下,开发者甚至不知道这些权衡的存在,因此也就没有引导智能体针对其应用场景做出正确决策。

今天这封信阐述了我们对 AI 工程技能的研究所发现的软件工程中最重要的知识点。它要求具备以下能力:

✴ 构建全栈应用

✴ 管理数据

✴ 设计系统架构

✴ 构建安全可靠的系统

✴ 在生产环境中扩展并运维

构建全栈应用。智能体式编码使许多过去从事更专门角色(如前端开发或移动端开发)的开发者,能够承担更广泛的全栈角色。编码智能体可以帮助处理开发过程中你可能不太熟悉的部分。不过,理解整个全栈究竟是如何运作的仍然很重要。优秀的开发者理解前端和后端系统的关键组件与概念,包括 UI 组件、缓存、页面渲染、API 的选择与设计、身份认证、状态和会话管理、异步处理、数据持久化、测试、安全性以及可访问性。

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

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

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

此外,合适的架构是一个不断变化的目标,取决于项目所处阶段。你为快速原型选择的简单架构,未必适合构建第一个生产系统,而随着应用规模扩大,这一架构也可能再次变化。做出这些决策需要对软件组件和应用上下文都具备深厚的技术知识,这样你才能对架构进行设计并持续演进,以做出更优的权衡。

构建安全可靠的系统。要构建可靠系统,你应当知道如何制定测试策略来验证系统的正确性:单元测试与集成测试如何搭配,使用哪些框架,以及需要达到怎样的覆盖率。你还知道如何围绕可能的故障进行设计——如何处理故障(例如 API 命中速率限制)、构建优雅降级,以及尽量缩小故障影响范围。此外,与其先写软件再后来考虑如何保护它,“左移”运动正把安全工作提前到生命周期更早阶段(在传统项目时间线中向左移动)。正如所有开发者都在向全栈开发者转变一样,如今许多开发者也正在部分承担安全工程师的职责。现在你可以使用 AI 工具扫描代码中的漏洞、检查依赖项是否存在供应链注入风险,并审查云配置中的攻击面。但要把这些工作做好,仍然需要一定的安全知识。

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

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

编码智能体已经改变了我们构建软件的方式,包括那些不包含任何 AI 组件的软件。有些编码知识——比如记忆代码语法——正在变得过时。但深刻理解软件如何工作的开发者,远远优于那些在不理解的情况下仅凭感觉编程的人。

理解软件基础(以及 AI)也有助于你弄清楚软件能做什么、不能做什么。这使它们成为你使用编码智能体并塑造构建过程时的重要上下文。我会在接下来的两封信中讨论这些内容。

请不断构建!

吴恩达

点击下方阅读原文查看更多有趣内容哦~

相关学习资料

返回首页浏览学习资料