夜雨聆风学习资料网

ARTICLE · 988394

吴恩达最新发文:AI时代软件基本功更重要

吴恩达最新发文:AI时代软件基本功更重要

在AI编程智能体越来越强的今天,很多人开始幻想:是不是以后只要会“说话”,就能轻松写出完整软件,软件工程的基本功可以彻底放下了?

吴恩达最新发文直接泼了一盆冷水:即使你让智能体写完全部代码,深刻理解软件工程基本原理,反而变得比以往任何时候都更重要。因为真正拉开差距的,从来不是谁能更快生成代码,而是谁能看清那些关键权衡,并引导智能体做出正确选择。

在智能体编程(agentic coding)时代,软件工程的基本功发生了怎样的变化?即使你让编程智能体写出所有代码,理解软件基本原理仍然很重要——它能帮助你引导智能体做出你想要的权衡取舍,或者至少让你知道有哪些权衡可以做。此外,当你在构建 AI 应用时,AI 核心通常会通过更广泛的软件应用来体现,而你也会想参与构建或塑造这个应用。

一个不懂软件基本原理、只会“氛围编程”(vibe code)的新手,可以做出简单的应用,但这往往会导致编程智能体在延迟、可用性、一致性、可靠性、可维护性、简洁性和/或成本等方面做出糟糕的权衡。在这种情况下,开发者甚至不知道这些权衡的存在,因此无法引导智能体为他们的应用场景做出正确决策。

本文描述了我们在 AI 工程技能研究中发现的、软件工程中最重要的事项。它要求具备以下技能:

  • • 构建全栈应用
  • • 管理数据
  • • 设计系统架构
  • • 让系统安全可靠
  • • 在生产环境中扩展与运维

构建全栈应用

智能体编程让许多原本扮演更专业角色(如前端开发或移动开发)的开发者,能够承担更广泛的全栈角色。编程智能体可以帮助你完成开发过程中不太熟悉的部分。然而,理解整个技术栈的实际工作原理仍然很重要。熟练的开发者了解前后端系统的关键组件与概念,包括 UI 组件、缓存、页面渲染、API 选择与设计、身份认证、状态与会话管理、异步处理、数据持久化、测试、安全性和无障碍访问。

管理数据

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

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

设计系统架构

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

此外,正确的架构是一个移动靶,取决于项目所处的阶段。你为快速原型选择的简单架构,可能不适合构建第一个生产系统,而随着应用扩展,它可能还需要再次变化。做出这些决策需要深入了解软件组件和应用上下文,以便设计并演进架构,做出更好的权衡。

让系统安全可靠

要构建可靠的系统,你应该知道如何制定测试策略来验证系统的正确性:单元测试与集成测试的混合比例、使用什么框架、覆盖到什么程度。你也知道如何围绕可能的故障进行设计——如何处理故障(如 API 触发速率限制)、构建优雅降级,并最小化故障的影响范围。此外,与其先写软件再事后考虑安全,“左移”(shift left)运动正在把安全工作移到生命周期更早的阶段(传统项目时间线上的左侧)。正如所有开发者都在向全栈开发者转变一样,许多开发者也在部分成为安全工程师。你现在可以使用 AI 工具扫描代码漏洞、检查依赖中的供应链注入、检查云配置中的攻击面。但要做好这些,仍然需要一定的安全知识。

在生产环境中扩展与运维

要服务真实用户,你必须知道如何把软件部署到生产环境。你会受益于了解如何执行软件开发生命周期(SDLC),除了构建和测试外,还包括配置部署环境、决定发布策略、应用部署自动化(CI/CD),以及理解基础设施即服务(IaaS)。

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

编程智能体已经改变了我们构建软件的方式,包括那些完全不含 AI 组件的软件。一些编程知识——比如死记硬背语法——正在变得过时。但深刻理解软件如何工作的开发者,会远远胜过那些不懂原理就进行氛围编程的人。

理解软件基本原理(再加上 AI)还能帮助你弄清软件能做什么、不能做什么。这为你使用编程智能体并塑造构建过程提供了重要上下文。我将在后续文章中讨论这些内容。


编程智能体正在彻底改变我们构建软件的方式,甚至让一部分语法记忆变得不再必要。但吴恩达的提醒一针见血:不懂原理的“氛围编程”,最终只会让智能体替你做出一堆糟糕的决定。

真正厉害的开发者,不是把一切交给AI,而是用扎实的软件工程功底,把AI变成自己最锋利的武器。基本功没有过时,它只是换了一种更重要的存在方式。​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

相关学习资料