2024年,AI编程已经渗透到各行各业,影响软件的整个生命周期。
那么问题来了。用过AI编码的人都说好,但为什么我们感觉平时用的软件没有太大进步呢?
近日,谷歌工程总监、亚马逊畅销书作者 Addy Osmani 揭示了人工智能辅助编码在一线开发中的现实。
程序员如何使用人工智能?
一般来说,团队使用AI进行开发有两种不同的模式:“引导程序”和“迭代器”。两者都在帮助工程师(甚至非技术用户)弥合从想法到执行的差距。
引导者
此类别包括 Bolt、v0 和屏幕截图到代码等 AI 工具。其特点是:
从设计或粗略概念开始;使用AI生成完整的初始代码库;能够在数小时或数天内获得工作原型;专注于快速验证和迭代
这样的工作流程令人印象深刻。例如,独立开发人员可以使用 Bolt 在短时间内将 Figma 设计转变为可用的 Web 应用程序。虽然不是生产级,但足以获得初始用户反馈。
迭代器
该类别主要负责日常开发工作流程,包括Cursor、Cline、Copilot和WindSurf等工具。效果并不像上面那么夸张,而是更加实用,比如:
完成代码并提供建议;执行复杂的重构任务;生成测试和文档;充当“结对程序员”解决问题
虽然这两种方法都可以大大加快开发速度,但“天下没有免费的午餐”。
“AI速度”的隐性成本
使用 Cursor 或 Copilot 等 AI 工具,高级工程师可以在几分钟内搭建整个功能并完成测试和文档,就像魔术一样。
但如果你仔细观察,你会发现,资深工程师在参考AI建议的同时,还会:
将生成的代码重构为更小的模块;添加边缘情况处理;优化类型定义和接口;添加全面的错误处理;甚至质疑人工智能给出的架构。
换句话说,他们正在利用多年来积累的工程智慧来塑造和限制人工智能的输出。人工智能负责加速代码执行,但人类的专业知识确保代码的可维护性。
初级工程师经常会错过这些关键步骤。他们更容易接受人工智能的输出,从而产生了所谓的“纸牌屋代码”——这些代码看起来完好无损,但在现实世界的压力下就会崩溃。
知识悖论
所以事实上,人工智能对经验丰富的开发人员的帮助比初学者更多——这有点违反直觉。
高级工程师使用AI快速原型化想法(理解)、生成基本实现(可以改进)、探索已知问题的替代方案等;
另一方面,初学者经常接受不正确或过时的解决方案,忽略关键的安全和性能问题,不知道如何调试人工智能生成的代码,最终构建一个他们不完全理解的脆弱系统。
70%的问题
使用 AI 编码的非工程师经常会遇到一个困境:他们可以惊人地快速完成 70% 的工作,但最后 30% 却相当痛苦。
“70%问题”揭示了人工智能辅助发展的现状。一开始似乎得到了神灵的帮助,后来却被现实摩擦到了地上。
实际情况通常是:
尝试修复一个小错误 --> AI 提出一个看起来合理的更改 --> 这个更改破坏了其他东西 --> 要求 AI 修复新问题 --> 又创建了两个新错误 --> 无限循环
对于非工程师来说,这个循环尤其痛苦,因为他们缺乏了解真正问题所在的专业知识。
当经验丰富的开发人员遇到错误时,他们可以根据多年的模式识别来推断潜在原因和解决方案。如果没有这个背景,你基本上就是在用你不完全理解的代码玩“打地鼠”游戏。
学习悖论
还有一个更深层次的问题:让非工程师使用人工智能编码工具实际上可能会阻碍学习。
代码生成并运行,但“开发人员”不了解基本原理。此时,他错过了学习基本模式、培养调试技能、推理架构决策以及需要维护和扩展代码的机会。
结果,“开发者”不断回归人工智能来解决问题,而没有培养自己处理问题的专业能力。
也许非工程师使用 AI 编码工具的最佳方式是“混合模式”:
1. 使用 AI 进行快速原型设计 2. 花时间了解生成的代码是如何工作的 3. 学习基本的编程概念以及 AI 的使用 4. 逐步构建知识库 5. 将 AI 用作学习工具,而不仅仅是学习工具代码生成器
但这需要耐心和奉献精神,这与许多人使用人工智能工具的目的恰恰相反。
“70%问题”说明现在的AI并不是很多人所希望的AI。最后 30% 的工作(使软件可用于生产、可维护等)仍然需要真正的工程知识。
最佳实践
Addy Osmani 观察了数十个团队并总结了一些最佳实践:
“AI初稿”模式
让AI生成基础实现;手动审查和模块化重构;添加全面的错误处理;编写综合测试;记录关键决策。
“连续对话”模式
为每个不同的任务启动新的人工智能聊天;保持上下文集中且最小化;经常审查并提交变更;保持紧密的反馈循环。
“信任但验证”模式
使用AI生成初始代码;手动审查所有关键路径;边缘情况的自动化测试;定期安全审核。
人工智能的真正前景是什么?
尽管存在这些挑战,作者对人工智能在软件开发中的作用持乐观态度。关键是要充分利用人工智能的真正优势:
加速已知的人工智能擅长帮助实现我们已知的模式,就像拥有一个可以非常快速打字的无限耐心的结对程序员。
探索可能性人工智能非常适合快速构建想法原型并探索不同的方法,例如我们可以快速测试概念的沙箱。
自动化的日常人工智能显着减少了花在样板文件和日常编码任务上的时间,使我们能够专注于有趣的问题。
如果你刚刚开始人工智能辅助开发,作者的建议是从小事做起。
使用人工智能来执行解耦的、定义明确的任务,查看生成的每一行代码,并随着时间的推移构建更大的功能。
保持流程模块化:将所有内容分解为小的集中文件,保持组件之间清晰的接口,文档模块边界。
重要的一点是相信你自己的经验:人工智能是用来加速而不是取代你的判断。当您感觉有问题时提出质疑,并始终保持自己的工程标准。
代理的崛起
进入 2025 年,人工智能辅助开发的格局正在发生巨大变化。虽然当前的工具已经改变了我们设计原型和迭代的方式,但我们正处于一个更重要的转变的风口浪尖:代理软件工程的兴起。
代理系统不仅会响应提示,还会以越来越自治的方式规划、执行和迭代解决方案。
例如 Anthropic 的 Claude 使用计算机的能力,或者 Cline 自动启动浏览器并运行测试的能力。
在调试过程中,代理系统不仅给出修复错误的建议,还:
主动识别潜在问题,启动和运行测试套件,检查 UI 元素并捕获屏幕截图,提出并实施修复,并验证解决方案是否有效。
下一代工具将无缝集成视觉理解(UI 屏幕截图、模型、图表)、口语对话和环境交互(浏览器、终端、API)。
未来的人工智能不会取代开发人员,而是成为一个能力越来越强的合作者,能够在尊重人类指导和专业知识的同时采取主动。
参考: