代理式编码改变构建方式,但深刻理解软件原理的开发者表现远胜于仅凭感觉编码者。

ANDREW NG(@ANDREWYNG)随笔 · 已翻译 · 约 5 分钟
阅览室 · AI 最佳实践#软件#编码#代理#开发#工程#基础原文

代理式编码如何改变了软件工程的基本原理?即使你使用编码代理来编写所有代码,理解软件基本原理对于引导代理做出你想要的权衡取舍——甚至了解存在哪些权衡可供选择——仍然至关重要。此外,当你构建一个AI应用时,AI核心往往通过更广泛的软件应用来体现,而你可能希望帮助构建或塑造这个应用。

一个不了解软件基本原理、仅凭“氛围编码”的新手可以创建简单的应用,但这往往会导致编码代理在延迟、可用性、一致性、可靠性、可维护性、简单性和/或成本方面做出糟糕的权衡。在这种情况下,开发者甚至不知道这些权衡的存在,因此没有引导代理为其应用场景做出正确的决策。

本文描述了我们对AI工程技能的研究所揭示的软件工程中最需要掌握的关键要点。它要求你精通:

  • 构建全栈应用
  • 管理数据
  • 设计系统架构
  • 确保系统的安全性和可靠性
  • 在生产环境中进行扩展和运维

构建全栈应用。 代理式编码使许多此前扮演更专业角色(如前端开发或移动开发)的开发者能够承担更广泛的全栈角色。编码代理可以帮助你处理开发过程中可能不太熟悉的环节。然而,理解全栈的实际运作方式至关重要。熟练的开发者理解前端和后端系统的关键组件和概念,包括UI组件、缓存、页面渲染、API选择与设计、认证、状态和会话管理、异步处理、数据持久化、测试、安全性和可访问性。

数据管理。 数据值得特别关注,因为它是软件构建的基础,相对难以更改(即使有代理协助迁移)。掌握数据管理后,你能够思考访问模式,并据此决定存储内容及保留时长。你能识别合适的数据模型,选择恰当的存储类型(如关系表、文档、键值或图)及基础设施,这进而影响速度、可扩展性、可用性、可靠性和成本。你理解事务、并发,并确保数据干净、一致且新鲜。必要时,你能保障隐私、治理和合规性。你懂得如何管理数据生命周期。

随着应用演进,你也知道如何随之调整数据架构。决定如何管理数据需要大量人工提供的上下文。你的AI系统将从数据源获取自身的输入上下文,因此若数据架构选择不当,AI便无法知晓其所不知。这正是需要具备相关上下文且精通AI工程技能的人——即你!——进行干预以纠正的原因。为代理构建数据基础设施——而非仅针对传统软件或人类——也是一个快速发展的领域,你应随着领域演进不断调整最佳实践。

设计系统架构。 当你理解了软件与数据全栈的主要组成部分后,便能更好地决定如何将这些部分整合在一起。优秀的系统设计需要明确软件的预期用途(用户数量?延迟的重要性?成本的重要性?等),以便在应用平台、前后端边界、系统分解、应用状态放置以及架构粒度(单体 vs. 微服务)方面做出选择。你还需要选定技术栈(编程语言、运行时、组件/前端/后端框架、数据技术)——有时通过运行实验来评估选项,最终确定方案。

此外,正确的架构是一个动态目标,取决于项目所处的阶段。为快速构建原型而选择的简单架构,可能并不适合构建首个生产系统,而随着应用规模的扩展,这一架构也可能需要调整。做出这些决策需要深厚的软件组件与应用背景技术知识,以便设计——并演进——架构,从而做出更优的权衡。

确保系统安全可靠。 要构建可靠的系统,你需要掌握制定测试策略以验证系统正确性的方法:单元测试与集成测试的搭配比例、选用哪些框架,以及覆盖程度如何。同时,你还需了解如何围绕可能的故障进行设计——如何处理故障(如API遭遇速率限制)、实现优雅降级,并最小化故障的影响范围。此外,与其先编写软件再考虑如何加固安全,不如顺应“左移”趋势,将安全工作提前至生命周期早期阶段(在传统项目时间线上向左移动)。正如所有开发者正趋向成为全栈开发者,许多开发者如今也兼任部分安全工程师的角色。现在,你可以利用AI工具扫描代码漏洞、检查依赖项以防供应链注入,并审查云配置以识别攻击面。但要做好这些,仍需具备一定的安全知识。

扩展与生产环境运营。 要服务真实用户,你必须了解如何将软件部署至生产环境。掌握软件开发生命周期(SDLC)的执行方法将大有裨益,除了构建与测试外,这还包括配置部署环境、决定发布策略、应用部署自动化(CI/CD),以及理解基础设施即服务(IaaS)。

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

编码代理已经改变了我们构建软件的方式,包括那些不含任何AI组件的软件。编码知识的某些部分——比如记忆编码语法——正变得过时。但深刻理解软件工作原理的开发者,其表现远胜于那些仅凭感觉编码而不求甚解的人。

理解软件基础(除了AI之外)还能帮助你判断软件能做什么、不能做什么。这使得它们成为你使用编码代理和塑造构建过程的重要背景。我将在未来的文章中讨论这些内容。

已读完 · 本文由熊猫易读翻译重排