新智元报道

编辑:peter东 乔杨

【新智元导读】苏格拉底曾提到的门诺悖论(Meno's paradox)认为,人只能学会自己已经知道的事情;而关于AI辅助编程,谷歌资深工程师最近的一篇博客告诉我们,类似的知识悖论同样存在。

尽管程序员们纷纷反馈用上AI辅助之后,工作效率提升,但我们用到的软件中bug依旧不少。

针对这一现象,前谷歌产品经理Peter Szalontay,以及现任的谷歌Chrome的工程团队领导Addy Osmani都给出了自己的分析,并提供了一些如何使用AI辅助编程的建议。

AI编码工具的黑暗真相

1月7日,前谷歌产品经理Peter Szalontay发推,并配上了一个令人惊心动魄的标题: 「无人谈论的AI编码工具的黑暗真相」。

「在华丽的demo和病毒式推文的背后,隐藏着半途而废的项目和破碎的承诺。」


Peter Szalontay表示,作为Lazy AI的首席执行官,他在18个月的时间的时间中目睹了超过10万名开发人员的苦苦挣扎,因此要为所有构建AI项目的开发者提供几条建议。


Peter Szalontay本科毕业于加州大学洛杉矶分校,修读了数学/经济学和软件工程专业,2016年-2019年期间曾担任谷歌产品经理,领导着一支由1000多名员工组成的团队,并推出了响应式搜索广告(Responsive Search Ad)。

2023年3月,Szalontay成立初创公司Lazy AI并担任CEO,旨在帮助用户通过无代码或低代码的方式构建全栈Web应用程序。

1/ 智能体编码≠万金油

「50%的AI编写的代码都毫无价值」。如果你试过Bolt、v0、Replit等工具来构建登录页面以外的东西,一定对这句话深有感触。

因为每次代码更改时,都有可能因prompt引入一些bug或不需要的行为。如果LLM每次对代码进行5项更改,那么代码完成时,可能会出现许多个你自己都不知道怎么会触发的bug。

Lazy AI采取的方式是按照工程师的方式进行构建:发送prompt、测试更改,然后发送另一个prompt。这是获得有效成果的唯一途径。

2/ 「通用编码器」是一个谎言

如果一家公司站出来说他们已经开发了一款产品,可以让你只用prompt在任何框架中构建任何应用程序......冷静点,这种说法很可疑。

Lazy AI首次尝试同时支持Python和JavaScript编码时,让AI在JS文件中编写Python,结果它混淆了依赖关系,甚至弄混了两种语言的注释语法。

最终确实有方法让AI在两种语言中都能可靠地工作——但只有为编程语言构建特定的修复程序,并验证模型的每个响应之后才能做到。

3/ 不要把授权交给LLM

你可以在任何AI编码工具中尝试这个简单的提示:「构建一个谷歌登录页面,并跳转到显示我的详细信息的个人资料页面。」

之后你就会看到层出不穷、千奇百怪的错误和bug:被破坏的OAuth流程,重定向URI错误,以及在Google Cloud Console中无休止地打转以获取API密钥。

4/ LLM无法访问数据库

几乎每个想法的实现都需要一个数据库,但构建项目时,又总是需要更改数据库。如果AI编码工具按提示收费,那么准备好迎接下面这些不断重复的场景:

你更改了数据库,AI Agent混乱了...... 你修改了了代码,数据库混乱了...... 你需要迁移,结果AI编写了有缺陷的迁移代码......
5/ 现在付款,但永远没法成功

下面这些AI常见的智障错误,不知道你是否眼熟:

- 要求AI构建新功能时,AI却删除了一部分之前的内容 - AI复制了你的部分代码 - 你明确指示执行X操作,AI却正在执行Y - AI因为无法修复自己创建的bug而卡住

当你现在为AI编码工具付费时,期待模型在未来「变得更好」是不够的,一个放错位置的括号可能会破坏整个页面。 在一个没有从头开始准备的平台上构建现实世界中的应用程序,就是在浪费钱。

以上这些推文的内容或许过于简明扼要,而且倾向性过强。如果要想更全面、更深入地探究AI辅助编码的利弊,以及最佳的使用方法,谷歌Chrome工程团队领导Addy Osmani的这篇博客则更加有用。


原文链接:https://addyo.substack.com/p/the-70-problem-hard-truths-about

AI辅助编程——菜鸟和老手的差距

对AI辅助编程工具的使用,存在两种模式,第一种可以称为「自举模式」(bootstrapper),也就是使用诸如Bolt之类的工具,根据截图产生代码,使得程序员能够在AI协助下完成初始代码库,从而在数小时或数天而非数周的时间,生成最小可用原型。

相比于从零开始,程序员更熟悉的方式是如下描述的「迭代模式」,即使用Cursor、Copilot等工具进行日常开发工作流程。


例如,使用人工智能进行代码补全、进行复杂重构任务、生成测试和文档,或是将AI智能体当作「小助手」,咨询编程中遇到的问题,并寻求代码改进建议。

在迭代模式下,新手和老油条看似都能在几分钟之内使用AI工具完成代码搭建,但细看下来,资深程序员对AI的使用更加智慧。

他们不仅仅是接受AI的建议,而是试图让AI重构代码,生成更小、更专业化的模块。资深程序员还会增加AI遗漏的意外情况的处理模块,同时对AI给出的建议保持质疑。

相反,新手则会盲从AI的建议,这样生成的代码会如同海边的沙堡,看似坚固,但一遇到现实中的意外案例,就会崩溃。

这是由于,「菜鸟」会接受AI给出的错误或过时的代码,忽略关键的安全性和性能考虑,也没有对AI生成的代码进行调试,从而构建出一个他们不完全理解的脆弱系统。

以上的差异可以说明,AI工具对经验丰富的开发者帮助大于初学者。这似乎有些反直觉——AI不应该使编程变得更加人人可及吗?

知识悖论——只有知道怎么用才能用好

事实上,当前的AI,就像是在团队中有一个工作积极性爆棚的初级开发者。他们可以快速编写代码,但需要不断的监督和纠正。你知道的越多,就能更好地引导他们。

不止是在程序员群体之中,非工程师使用AI进行编码时,也会遇到类似的问题,即发现自己遇到了令人沮丧的瓶颈。AI工具能出人意料地迅速完成70%的任务,但在最后、最难完成、最令人沮丧的30%上,却只会收益递减。


可以举一个小例子来理解这个现象。比如,你试图让AI修复程序中的一个小bug,智能体给出一个看似合理的建议,但这个补丁破坏了其他部分。

接着,用户会继续要求AI修复新出现的问题,这又产生了更多的bug,从而使得局面变得更糟。这意味着最后的30%——使软件准备进入生产、可维护和健壮的部分——仍然需要真正的工程知识。

人工智能并没有使我们的软件显著改进,因为软件质量可能从未主要受限于编码速度。软件开发中的难点——理解需求、设计可维护的系统、处理意外情况、确保安全和性能——仍然需要人类的判断。

AI所做的,是让我们能够更快地进行迭代和实验,通过更快的探索,可能带来更好的解决方案。但前提是程序员必须保持工程规范,将AI作为工具,而不是替代良好软件实践的替代品。

记住:目标不是更快地编写更多代码。而是构建更好的软件。如果使用得当,人工智能可以帮助我们做到这一点。但最终,我们仍需知道「更好」的含义以及如何实现它。

当下对AI辅助编程滥用的背后,还有一个更深层次的问题:AI工具让编码变得人人可行的实质,是代替你处理了程序的复杂性。从另一个角度来看,这实际上可能会阻碍新手的学习与成长。

AI只是把代码放在你面前,并不能让你理解其背后的原理时。由于新手缺少调试经验,而这会反过来导致了一种对AI工具的依赖。他们需要不断回到AI那里去修复问题,而不是培养自己处理这些问题的专业知识。

如何使用AI编程——几条建议

有鉴于AI辅助编程中的「知识悖论」,当前的人工智能工具最好被用于快速验证想法,并用来生成最小可用的原型,或者作为有助于编程学习的辅助工具。

对于如何用好这些工具,作者给出了如下建议:

1. 从原型做起,使用AI进行快速原型设计

2. 使用人工智能处理孤立、定义明确的任务,逐步构建更大的功能

3. 花时间理解生成的代码是如何工作的,并审核每一行代码

4. 保持「模块化」,将代码分拆为功能单一的模块和小文件,保持组件之间的清晰接口,记录模块的边界

5. 在应用AI辅助编程的同时,学习基本编程概念,逐步建立知识基础

6. 将人工智能作为学习工具,加速学习,而不仅仅是代码生成器

7. 最重要的是,相信自己的判断力,利用人工智能加速,而非取代判断力

但以上这些都需要耐心和努力——这与许多人最初希望通过AI工具实现的目标正好相反。


具体来说,在编程时,有益的AI工具使用可分为三种模式:

一是「AI初稿」模式:即让AI生成一个基础版代码库,之后程序员手动审查和重构以提高模块化程度,并增加全面错误处理、撰写详尽的测试,同时记录关键决策。

第二种是是恒定对话模式,即为每个不同的任务启动新的AI聊天,在对话时保持语境集中且简洁,程序员经常审查代码并提交更改,在此过程中保持紧密的反馈回路。

第三种被称为「信任但核实」模式,程序员使用AI进行初始代码生成,对所有关键路径进行手动审查,同时对可能的异常案例进行自动化测试,并定期进行安全审核。

展望未来——AI对程序员意味着什么

尽管存在由于知识悖论带来的挑战,对人工智能在软件开发中的作用,我们应持乐观态度。这其中的关键在于,理解AI真正擅长的是什么:

人工智能擅长帮助实施我们已理解的模式。它就像有一个无限耐心的、打字速度极快的程序员搭子,非常适合快速原型设计和探索不同的方法;也像一个沙盒,可以用于快速测试概念。

此外,AI还显著缩短了处理模板和常规编码任务所需的时间,并能自动处理日常事务,使程序员能够专注于有趣的问题。

人工智能辅助开发的格局在2025年将发生巨大变化。尽管当前的工具已经改变了原型设计和迭代方式,但我们正站在一个更加重大变革的边缘:即AI智能体软件工程的兴起。


未来的辅助编程系统,不仅仅是响应提示,它们还能规划、执行并不断迭代解决方案。

当前工具大多等待程序员的指令,但看看像Anthropic在Claude中实现的计算机使用,或Cline自动启动浏览器和运行测试的新功能。这些不仅仅是美化版的自动补全——它们实际上是在理解任务并主动解决问题。


而自主编程AI不仅仅是提出修复方案,它还可以主动识别潜在问题,启动并运行测试套件,检查UI元素并捕获屏幕截图,提出并实施修复方案以及验证解决方案是否有效。

下一代辅助工具可能不仅限于与代码协同工作——它们可能实现无缝集成:视觉理解(UI截图、原型、图表)与语言交互(浏览器、终端、API)。

这种多模态能力意味着,AI工具可以像人类一样理解和处理软件——全面地,而不仅仅是代码层面。

从使用这些工具的工作中,我们应意识到:未来并非关于 AI 取代开发者——而是 AI 成为一个越来越有能力的合作伙伴,它可以在尊重人类指导和专业知识的同时采取主动。


这种对开发工具交互方式的根本转变,意味着在自然语言中清晰思考和精确沟通的能力正变得与传统编码技能一样重要。

具体来说,2025 年最有效的团队需要学会如下四点:

1. 明确为他们的 AI 智能体设定边界和指南

2. 建立强大的架构模式,使智能体能够在其中工作

3. 构建人类与AI能力之间的有效反馈循环

4. 保持人工监督的同时利用AI的自主性

这些都要求程序员提升技能,具备更强的系统设计和架构思维,更优的需求规范和沟通,更多关注质量保证和验证,并提升人机协作能力。

参考资料:

https://addyo.substack.com/p/the-70-problem-hard-truths-about

https://x.com/Szypetike/status/1876647482295259411

ad1 webp
ad2 webp
ad1 webp
ad2 webp