
智能体编程如何改变了软件工程基础?即使你使用编码智能体来编写所有代码,理解软件基础对于引导你的智能体做出你想要的权衡——甚至了解存在哪些权衡——仍然至关重要。此外,当你构建 AI 应用时,AI 核心往往通过更广泛的软件应用来表达,而这正是你可能希望帮助构建或塑造的部分。
一个不理解软件基础、仅凭直觉编码的新手可以创建简单的应用,但这往往会导致编码智能体在延迟、可用性、一致性、可靠性、可维护性、简单性和 / 或成本方面做出糟糕的权衡。在这种情况下,开发者甚至不知道这些权衡的存在,因此未能引导智能体为其应用场景做出正确的决策。
本文阐述了我们对 AI 工程技能的研究表明,软件工程中最重要的知识点是什么。它要求你精通以下方面:
- 构建全栈应用
- 管理数据
- 设计系统架构
- 确保系统安全可靠
- 在生产环境中扩展和运维
构建全栈应用。 智能体编码使许多此前担任专业化角色(如前端开发者或移动开发者)的开发者能够承担更广泛的全栈角色。编码智能体可以帮助你处理开发过程中你可能不太熟悉的部分。然而,理解全栈的实际工作原理非常重要。熟练的开发者理解前端和后端系统的关键组件和概念,包括 UI 组件、缓存、页面渲染、API 选择与设计、身份验证、状态和会话管理、异步处理、数据持久化、测试、安全性和可访问性。
管理数据。 数据值得特别关注,因为它是软件构建的基础,且相对难以改变(即使有智能体帮助迁移)。当你懂得如何管理数据时,你可以思考访问模式,并利用它们来决定存储什么以及存储多长时间。你能够确定正确的数据模型,选择合适的存储类型(如关系表、文档、键值或图)和基础设施,这反过来会影响速度、可扩展性、可用性、可靠性和成本。你理解事务、并发,以及如何确保数据干净、一致和新鲜。必要时,你能够确保适当的隐私、治理和合规性。你懂得如何管理数据生命周期。
随着应用的发展,你也知道如何随之演进数据架构。决定如何管理数据需要大量由人类提供的上下文。你的 AI 系统将从数据源获取自身的输入上下文,因此如果数据架构选择不当,AI 就不会知道自己不知道什么。这就是为什么需要具备相关上下文的、精通 AI 工程的熟练人员——也就是你!——来进行干预以将其修正。如何为智能体构建数据基础设施——而不仅仅是为传统软件或人类——也是一个快速发展的领域,你应该随着该领域的发展不断调整你的最佳实践。
设计系统架构。 当你理解软件和数据全栈的主要组件后,你就更有能力决定如何将这些部分组合在一起。良好的系统设计要求理解软件的目标用途(多少用户?延迟有多重要?成本有多重要?等),以便你能够就应用平台、前端与后端之间的边界、系统分解、应用状态放置以及架构粒度(单体 vs. 微服务)做出选择。你还需要选择技术栈(编程语言、运行时、组件/前端/后端框架、数据技术)——有时需要通过运行实验来评估选项,然后再确定最终方案。
此外,正确的架构是一个不断变化的目标,取决于项目的阶段。你为快速构建原型所选择的简单架构,可能并不是构建第一个生产系统的正确架构,而且随着应用扩展,它也可能发生变化。做出这些决策需要对软件组件和应用上下文有深入的技术理解,以便你能够设计——并演进——架构以做出更好的权衡。
确保系统安全可靠。 要构建可靠的系统,你应该知道如何制定测试策略来验证系统的正确性:单元测试和集成测试的搭配比例、使用哪些框架,以及覆盖率水平。你还知道如何围绕可能的故障进行设计——如何处理故障(如 API 遇到速率限制)、构建优雅降级,并最小化故障的影响范围。此外,与其先编写软件然后再考虑如何保障其安全,“左移” 运动正将安全工作提前到生命周期的早期阶段(在传统项目时间线上靠左的位置)。正如所有开发者都在向全栈开发者转变,许多开发者现在也部分承担了安全工程师的角色。你现在可以使用 AI 工具扫描代码中的漏洞、检查依赖项中是否存在供应链注入,并审查云配置中的攻击面。但要做好这一点,仍然需要一定的安全知识。

在生产环境中扩展和运维。 要服务真实用户,你必须知道如何将软件部署到生产环境。了解如何执行软件开发生命周期(SDLC)对你大有裨益,除了构建和测试之外,它还包括配置部署环境、决定发布策略、应用部署自动化(CI/CD),以及理解基础设施即服务(IaaS)。
在生产环境中运维需要部署可观测性工具、设置告警并管理事件。最后,要扩展应用,你应该理解真实负载,知道如何扩展服务器、进行负载均衡,并调整数据基础设施(通过分片、索引、复制)或进行架构变更,以使系统适应扩展需求。最后,理解版本控制、代码审查、依赖维护以及如何管理技术债务等编码最佳实践,有助于你长期持续演进系统。
编码智能体改变了我们构建软件的方式,包括不包含任何 AI 组件的软件。编码知识的某些部分——比如记忆编码语法——正在变得过时。但深刻理解软件工作原理的开发者,远远胜过那些不理解就凭直觉编码的人。
理解软件基础(以及 AI)也有助于你弄清楚软件能做什么、不能做什么。这使它们成为你如何使用编码智能体以及如何塑造构建过程的重要背景。我将在后续文章中讨论这些问题。
