即使编码智能体写所有代码,不懂软件基础,糟糕权衡你都看不见
软件工程基础如何随着智能体编码(agentic coding)而改变?即使你使用编码智能体来编写所有代码,理解软件基础对于引导你的智能体做出你想要的权衡——甚至知道存在哪些权衡——仍然很重要。此外,当你在构建AI应用时,AI核心通常通过更广泛的软件应用来体现,而你将需要帮助构建或塑造这个应用。
一个不理解软件基础就凭感觉编码(vibe coding)的新手可以创建简单的应用,但这往往会导致编码智能体在延迟、可用性、一致性、可靠性、可维护性、简单性和/或成本方面做出糟糕的权衡。在这种情况下,开发者甚至不知道这些权衡的存在,因此没有引导智能体为其应用场景做出正确的决策。
本文介绍了我们对AI工程技能的研究所显示的软件工程中最需要了解的重要内容。它要求你熟练掌握:
- 构建全栈应用
- 管理数据
- 设计系统架构
- 确保系统安全可靠
- 在生产环境中扩展与运营
构建全栈应用
智能体编码使许多以前扮演更专业角色(如前端开发人员或移动开发人员)的开发者能够扮演更广泛的全栈角色。编码智能体可以帮你处理开发过程中你可能不太熟悉的部分。然而,理解全栈实际如何工作仍然很重要。熟练的开发者理解前端和后端系统的关键组件和概念,包括UI组件、缓存、页面渲染、API的选择与设计、身份验证、状态和会话管理、异步处理、数据持久化、测试、安全性和可访问性。
管理数据
数据值得特别关注,因为它是软件构建的基础,而且相对难以更改(即使有智能体帮助迁移)。当你知道如何管理数据时,你就能思考访问模式,并据此决定存储什么以及存储多久。你能识别正确的数据模型,选择适当的存储类型(如关系表、文档、键值或图)和基础设施,这进而影响速度、可扩展性、可用性、可靠性和成本。你理解事务、并发,以及如何确保数据干净、一致且新鲜。在需要时,你能确保适当的隐私、治理和合规性。你懂得如何管理数据生命周期。
随着应用的演进,你也知道如何随之演进数据架构。决定如何管理数据需要大量由人提供的上下文。你的AI系统会从数据源获取自己的输入上下文,因此如果数据架构选择不当,AI就不知道自己不知道什么。这就是为什么需要具备相关上下文且擅长AI工程的熟练人员——也就是你!——来进行干预,把它做对。如何为智能体(而不仅仅是传统软件或人类)构建数据基础设施也是一个快速发展的领域,你应该随着领域的发展不断调整自己的最佳实践。
设计系统架构
当你理解了软件和数据全栈的主要组件后,你就能更好地决定如何将这些部分组合在一起。良好的系统设计需要理解软件的目标用途(多少用户?延迟有多重要?成本有多重要?等),这样你才能对应用平台、前端与后端之间的边界、系统分解、应用状态放置以及架构粒度(单体与微服务)做出选择。你还需要选择技术栈(编程语言、运行时、组件/前端/后端框架、数据技术)——有时需要通过运行实验来评估选项,然后才确定一个。
此外,正确的架构是一个移动的目标,取决于项目所处的阶段。你为快速构建原型所选择的简单架构可能不是构建第一个生产系统的正确架构,而随着应用扩展,它也可能再次改变。做出这些决策需要对软件组件和应用上下文都有深入的技术理解,这样你才能设计——并演进——架构以做出更好的权衡。
确保系统安全可靠
要构建可靠的系统,你应该知道如何制定测试策略来验证系统的正确性:单元测试和集成测试的搭配比例、使用什么框架、以及什么样的覆盖率水平。你还知道如何围绕可能的故障进行设计——如何处理故障(如API遇到速率限制)、构建优雅降级机制,并最小化故障的爆炸半径。此外,与其先编写软件然后再想办法保护它,“左移”(shift left)运动正在将安全工作提前到生命周期的更早阶段(在传统项目时间线上向左移动)。正如所有开发者都在走向全栈开发一样,许多开发者现在也部分地成为了安全工程师。你现在可以使用AI工具扫描代码中的漏洞,检查依赖项中的供应链注入,以及检查云配置中的攻击面。但要做好这些,仍然需要一定的安全知识。
在生产环境中扩展与运营
要服务真实用户,你必须知道如何将软件部署到生产环境。了解如何执行软件开发生命周期(SDLC)将让你受益,除了构建和测试之外,它还包括配置部署环境、决定发布策略、应用部署自动化(CI/CD),以及理解基础设施即服务(IaaS)。
在生产环境中运营需要建立可观测性工具、设置告警和管理事件。最后,要扩展你的应用,你应该了解真实负载,知道如何扩展服务器、进行负载均衡、调整数据基础设施(通过分片、索引、复制),或进行架构更改以使系统适应规模。最后,理解版本控制、代码审查、依赖维护等编码最佳实践,以及如何管理技术债务,有助于你随着时间推移持续演进系统。
编码智能体改变了我们构建软件的方式,包括不包含任何AI组件的软件。编码知识的一些部分——比如记忆编码语法——正在变得过时。但深刻理解软件工作原理的开发者,其表现远超那些不理解就凭感觉编码的人。
理解软件基础(除了AI之外)还能帮助你弄清楚软件能做什么和不能做什么。这使它们成为你如何使用编码智能体和塑造构建过程的重要背景。我将在未来的文章中讨论这些。