ARTICLE · 996418
AI 会写代码之后,为什么软件工程基础反而更重要?

智能体编程给软件工程基础带来了怎样的变化?即使你让编程智能体编写全部代码,理解软件工程基础仍然十分重要。只有这样,你才能引导智能体按照你的期望进行权衡,甚至才能知道究竟有哪些因素需要权衡。此外,在构建 AI 应用时,AI 核心能力通常要通过一个更完整的软件应用呈现,而你也需要参与这个应用的构建与塑造。
不懂软件工程基础的新手也能借助氛围编程(vibe coding)做出简单应用,但编程智能体往往会因此在延迟、可用性、一致性、可靠性、可维护性、简洁性和成本等方面作出糟糕的权衡。在这种情况下,开发者甚至不知道这些权衡的存在,自然也就无法根据具体应用场景,引导智能体作出正确决策。
本文介绍了我们在研究 AI 工程技能时发现的软件工程中最重要的知识。你需要具备以下能力:
构建全栈应用 管理数据 设计系统架构 确保系统安全可靠 扩展系统并在生产环境中运行
构建全栈应用。智能体编程让许多原本从事专业化岗位的开发者,例如前端开发者或移动端开发者,能够承担范围更广的全栈工作。编程智能体可以帮助你完成开发流程中不太熟悉的环节,但理解整个技术栈实际上如何运作仍然很重要。优秀的开发者了解前端和后端系统的关键组件与概念,包括 UI 组件、缓存、页面渲染、API 的选择与设计、身份认证、状态与会话管理、异步处理、数据持久化、测试、安全性和无障碍访问。
管理数据。数据值得特别关注,因为它是软件赖以构建的基础,而且相对难以改变,即使有智能体协助迁移也是如此。当你懂得如何管理数据,就能深入分析访问模式,据此决定应当存储哪些数据,以及保留多长时间。你能够识别合适的数据模型,选择恰当的存储类型——例如关系型表、文档、键值存储或图——以及相应的基础设施,而这些选择又会影响速度、可扩展性、可用性、可靠性和成本。你理解事务与并发,知道如何确保数据干净、一致且及时更新。必要时,你还能保证适当的隐私保护、数据治理与合规,并管理完整的数据生命周期。
随着应用不断演进,你也需要让数据架构随之演进。决定如何管理数据,需要人类提供大量上下文。AI 系统会从数据源中获得自己的输入上下文,因此,如果数据架构选择不当,AI 连自己缺少什么都不会知道。这就是为什么需要一位既掌握相关上下文、又具备 AI 工程能力的人——也就是你——进行专业干预,才能让系统回到正确轨道。如何为智能体,而不只是为传统软件或人类,构建数据基础设施,也是一个快速发展的领域。随着领域演进,你应持续调整自己的最佳实践。
设计系统架构。当你理解软件全栈和数据体系中的主要组件后,就更有能力决定如何把这些部分组合起来。良好的系统设计要求你理解软件的预期用途:用户有多少?延迟有多重要?成本有多重要?等等。基于这些信息,你才能选择应用平台,划定前端与后端的边界,决定如何拆分系统、把应用状态放在哪里,以及采用怎样的架构粒度(单体架构还是微服务)。你还需要选择技术栈,包括编程语言、运行时、组件/前端/后端框架和数据技术。有时,你需要先通过实验评估不同方案,再作出最终选择。
此外,正确的架构并非固定不变,而会随着项目阶段移动。为了快速制作原型而选择的简单架构,未必适合构建第一个生产系统;随着应用规模扩大,这套生产架构也可能需要继续改变。要作出这些决策,你必须深入理解软件组件和应用场景,才能设计架构、推动架构演进,并作出更好的权衡。
确保系统安全可靠。要构建可靠的系统,你需要知道如何制定测试策略来验证系统的正确性:单元测试与集成测试应如何搭配,使用哪些框架,以及测试覆盖率应达到什么水平。你还要知道如何围绕潜在故障进行设计——如何处理故障,例如 API 触发限流;如何加入优雅降级机制;以及如何尽量缩小故障影响范围。
此外,与其先写完软件,之后再考虑如何保护它,不如把安全工作提前到生命周期的更早阶段。这正是“安全左移(shift left)”运动的方向——在传统项目时间线上向左移动。正如所有开发者都在逐渐成为全栈开发者,许多开发者如今也在一定程度上承担安全工程师的职责。你现在可以使用 AI 工具扫描代码漏洞,检查依赖项中是否存在供应链注入攻击,并检查云配置中的攻击面。但要做好这些工作,仍然需要具备一定的安全知识。
扩展系统并在生产环境中运行。要为真实用户提供服务,你必须知道如何把软件部署到生产环境。你还应了解如何执行软件开发生命周期(SDLC)。除了构建和测试,SDLC 还包括配置部署环境、确定发布策略、应用持续集成/持续交付(CI/CD)等部署自动化手段,以及理解基础设施即服务(IaaS)。
在生产环境中运行系统,需要部署可观测性工具、设置告警并管理事故。要扩展应用,你还应理解真实负载,知道如何扩展服务器、进行负载均衡,以及通过分片、索引、复制等方式调整数据基础设施,或修改系统架构,使其能够适应规模增长。最后,理解版本控制、代码审查、依赖维护和技术债务管理等编程最佳实践,能帮助你持续推动系统演进。
编程智能体已经改变了我们构建软件的方式,即使软件本身不包含任何 AI 组件也是如此。某些编程知识,例如记忆编程语法,正在逐渐过时。但深入理解软件运行原理的开发者,其表现远胜于那些缺乏理解、只靠氛围编程写代码的人。
除了 AI 知识,理解软件工程基础还能帮助你判断软件能做什么、不能做什么。因此,在使用编程智能体并塑造最终产品时,这些基础知识构成了重要的上下文。我将在后续文章中继续讨论这些内容。
作者:Andrew Ng(@AndrewYNg)
来源:X(@AndrewYNg)