如果您曾经使用过3D打印机,您可能还记得第一次打印出自己无法雕刻或制作的东西时那种奇妙的感觉。下载一个模型文件,装入一些塑料耗材,按下按钮,几乎就像魔法一样,一个三维物体就出现了。但是结果并不完美,也不能直接投入大规模生产,而创造新颖的形状需要的技能远不止按下按钮那么简单。有趣的是,今天的AI编程智能体给人的感觉也完全一样。
自去年11月以来,我通过个人的Claude Max账户广泛使用Claude Code和Claude Opus 4.5进行AI辅助软件开发实验(我也以类似方式使用过OpenAI的Codex,但频率不那么高)。50个项目后,坦率地说:自从我9岁时在Apple II Plus上学习BASIC以来,我从未在计算机上获得过如此大的乐趣。这个观点不是作为推荐,而是个人体验:我自愿承担了这个项目,并自费购买了OpenAI和Anthropic的高级AI计划。
在我的整个职业生涯中,我作为一名实用型编程者涉足编程,在需要时编写小工具或脚本。在我的Web开发职业生涯中,我从头编写了一些小工具,但我主要是根据需要修改其他人的代码。自1990年以来,我用过BASIC、C、Visual Basic、PHP、ASP、Perl、Python、Ruby、MUSHcode等多种语言编程。我不是任何一种语言的专家——我学习的程度刚好够完成工作。多年来,我使用BASIC、Torque游戏引擎和Godot开发了自己的爱好游戏,所以我对什么样的架构才能构建一个可以随时间扩展的模块化程序有一定了解。
12月,我使用Claude Code创建了一个名为"Christmas Roll-Up"的《块魂》多人在线克隆版。
Claude Code、Codex和谷歌的Gemini CLI似乎可以在小规模上执行软件奇迹。它们可以快速生成简单应用程序、用户界面甚至游戏的炫目原型,但只要它们借用训练数据中的模式。就像3D打印机一样,进行生产级工作需要更多努力。创建持久的生产代码、管理复杂项目或制作真正新颖的东西仍然需要经验、耐心和技能,这些是当今的AI智能体无法独自提供的。
然而,这些工具为我打开了以前无法触及的软件创意潜能世界,它们让人感到力量强大。即便如此,我知道这些都是爱好项目,编程智能体的局限性让我相信资深软件开发者可能不应该担心很快就会因为这些工具而失业。事实上,他们可能会比以往任何时候都更忙。
到目前为止,我在过去两个月里创建了50多个演示项目,部分原因是感染了新冠病毒,我只能卧床不起拿着笔记本电脑,加上Anthropic在12月最后几周实施的慷慨的2倍Claude使用上限。当我整天疯狂打字时,我妻子不断问我:"你在和谁说话?"
您可以在我的个人网站上看到一些更有趣的结果。以下是我从这个过程中学到的10个有趣的事情。
1. 人类仍然是必需的
即使有了当今最好的AI编程智能体,人类在软件开发过程中仍然至关重要。有经验的人类软件开发者带来了AI模型缺乏的判断力、创造力和领域知识。他们知道如何为长期可维护性构建系统架构,如何平衡技术债务与功能速度,以及何时在需求没有意义时进行反驳。
对于像我这样的爱好项目,我可以容忍很多粗糙之处。但对于生产工作,拥有了解版本控制、增量备份、逐个测试功能以及调试系统间复杂交互的人会产生很大不同。了解良好软件开发工作原理在指导AI编程智能体时很有帮助——该工具放大您现有的知识而不是取代它。
正如独立AI研究员Simon Willison在一篇将严肃的AI辅助开发与随意的"氛围编程"区分开来的文章中写道:"AI工具放大现有专业知识。您作为软件工程师拥有的技能和经验越多,您与大语言模型和编程智能体合作就能获得越快越好的结果。"
有了AI协助,您不必记住如何做每件事。您只需要知道想要做什么。
《Card Miner: Heart of the Earth》完全由人类设计,但使用Claude Code进行AI编程。它代表了大约一个月的迭代工作。
所以我喜欢提醒自己,编程智能体是最好用来实现人类想法的软件工具,而不是自主编程员工。无论背后的公司如何营销,它们都不是人(也不是人的替代品)。
如果您想想看,您在计算机上做的一切曾经都是手动过程。为像ENIAC这样的计算机编程实际上涉及在插板上用电线制作物理位(连接)。编程的历史就是不断增加自动化的历史,所以即使这种AI辅助的飞跃有些惊人,人们也可以将这些工具视为类似于高级语言、自动编译器和调试器工具或基于GUI的IDE出现的进步。它们可以自动化许多任务,但管理总体项目范围仍然落在告诉工具该做什么的人身上。
它们可以产生快速复合的好处。我现在已经使用AI工具编写了更好的工具——比如更改模拟器的源代码,使编程智能体可以直接使用它——这些改进的工具已经产生了连锁反应。但为了最好地执行我的愿景,必须有人在循环中。这种方法让我非常忙碌,与一些关于人们因AI而变愚的普遍担忧相反,我在这个过程中学到了很多新东西。
2. AI模型在训练数据之外很脆弱
像所有基于Transformer架构的AI模型一样,支撑当今编程智能体的大语言模型有一个重大局限:它们只能可靠地应用从训练数据中获得的知识,并且它们将知识泛化到训练数据中未表示的新领域的能力有限。
什么是训练数据?在这种情况下,在构建编程类大语言模型时,AI公司从GitHub等来源下载数百万个软件代码示例,并使用它们来制作AI模型。公司后来通过微调过程将它们专门化用于编程。
AI智能体使用试错的能力——尝试某事然后再次尝试——在一定程度上有助于缓解大语言模型的脆弱性。但这并不完美,看到编程智能体反复尝试并失败于一项任务可能会令人沮丧,要么因为它不知道如何做,要么因为它之前学会了如何解决问题但后来忘记了,因为上下文窗口被压缩了。
《Violent Checkers》是基于物理的经典棋盘游戏变体,使用Claude Code编程。
为了解决这个问题,让AI模型在处理过程中就如何解决某些问题做大量笔记会有帮助,这样智能体的未来实例可以再次从中学习。您还想在claude.md文件中设置基本规则,智能体在开始会话时会读取该文件。
这种脆弱性意味着编程智能体在它们已经接受训练和微调的内容上几乎令人恐惧地出色——现代编程语言、JavaScript、HTML和类似的充分代表的技术——而在它们没有接受深度训练的任务上通常很糟糕,比如6502汇编或使用真实外观字符图形编程Atari 800游戏。
我花了五分钟用Claude制作了一个不错的HTML5演示,但花了一周的痛苦试错,加上我自己的实际系统设计,才制作了类似的Atari 800游戏演示。为此,我必须使用Claude Code发明几个工具,如命令行模拟器和MCP服务器,允许它查看Atari 800的内存和芯片组操作,甚至开始实现它。
3. 真正的创新可能是一场艰难的战斗
由于编程模型神经网络中嵌入的"先入为主的观念"(更技术性地说,统计语义关联),即使您仔细阐述想要什么,也很难让AI智能体创造真正新颖的东西。
例如,我花了四天时间试图让Claude Code创建我的HTML游戏《Violent Checkers》的Atari 800版本,但它遇到了困难,因为在游戏设计中,棋盘上的方格除了起始位置之外并不重要。无论我告诉智能体多少次(并在我的Claude项目文件中做了笔记),它都会回到试图将棋子居中到方格、将它们对齐在方格内,或使用方格作为游戏计算的逻辑基础,而它们实际上应该只是形成背景图像。
为了在Atari 800版本中解决这个问题,我重新开始,告诉Claude我正在创建一个有UFO(而不是圆形棋子)在相邻方格场上飞行的游戏——从未提及"checker"、"checkerboard"或"checkers"这些词。通过这种方法,我得到了想要的结果。
在为Atari 800家用计算机开发《Violent Checkers》移植版的过程中,Benj的Mac屏幕截图,同时进行其他项目。
为什么这很重要?因为对于大语言模型来说,上下文就是一切,而在语言中,上下文改变意义。取"bank"这个词,在前面加上"river"或"central",看看意义如何改变。在某种程度上,词汇充当地址,解锁神经网络中编码的语义关系。所以如果您在上下文中放入"checkerboard"和"game",模型的自注意力过程链接起关于跳棋游戏应该如何工作的大量语义关联,这种语义包袱会搞砸事情。
一些技巧可以帮助AI编程者绕过这些限制。首先,避免用无关信息污染上下文。第二,当智能体卡住时,尝试这个提示:"您需要什么信息才能现在完美地实现这个?您有什么可用的工具可以用来系统地发现这些信息而不是猜测?"这迫使智能体识别(语义链接)自己的知识差距,在上下文窗口中详细说明并受制于未来行动,而不是盲目地徒劳挣扎。
4. 90%问题
AI编程项目的前90%进展很快,让您惊讶。最后的10%涉及通过与智能体的来回试错对话来繁琐地填充细节。需要比智能体能提供的更深入洞察或理解的任务仍然需要人类来建立连接并指导它朝正确方向前进。我们上面讨论的限制也可能导致您的项目撞墙。
从我多年来观察的情况来看,更大的大语言模型可能比较小的模型建立更深的上下文连接。它们有更多参数(编码数据点),这些参数以更多维的方式链接,所以它们往往有更深的语义关系映射。无论这些有多深,看起来人类大脑仍然对语义连接有更深的把握,并且可以做出大语言模型往往不会做的疯狂语义跳跃。
从这个意义上说,创造力可能是当您从篮球跳到肥皂膜中气泡如何形成,并以某种方式建立有用连接从而产生突破时的情况。相反,大语言模型倾向于遵循传统的语义路径,这些路径更保守,完全由训练数据中映射出的关系指导。这限制了它们的创造潜力,除非提示者通过指导大语言模型建立新颖的语义连接来解锁它。这需要操作者的技能和创造力,这再次显示了大语言模型作为人类使用的工具而不是独立思考机器的作用。
5. 功能蔓延变得不可抗拒
在使用AI编程工具创建软件时,体验新颖性的乐趣让您想要不断添加有趣的新功能,而不是修复错误或完善现有系统。Claude(或Codex)很乐意配合,孜孜不倦地处理易于在快速令人愉悦的演示中勾画出的新想法(再次是90%问题),而不是润色代码。
修复错误也可能在其他地方产生错误。这对编程智能体来说并不新鲜——这是软件开发中的历史悠久问题。但智能体加剧了这种现象,因为它们可以在追求影响许多工作系统的狭隘目标过程中冲过您的代码并做出广泛更改。我们已经讨论过拥有由背后人类思维指导的良好架构的重要性,这在这里发挥作用。
《Flip-Lash》开始是"可以翻转棋盘的俄罗斯方块",但功能蔓延让我加入了所有东西,失去了焦点。
6. AGI还没有到来
考虑到我上面描述的局限性,很明显具有通用智能的AI模型——人们通常称之为人工通用智能(AGI)——仍然没有到来。AGI假设能够绕过嵌入的刻板印象关联,而不必依赖明确的训练或对许多示例的微调来把事情做对。AI公司将来可能需要不同的架构。
我在推测,但AGI可能需要实时永久学习——即修改自己的神经网络权重——而不是依赖所谓的"上下文学习",后者只持续到上下文填满并被压缩或清除。
《Grapheeti》是一个"绘画MMO",世界各地的人们分享画布。
换句话说,您可以通过解释教真正的AGI系统如何做某事,或让它通过实践学习,注意成功,并让这些教训永久保持,无论上下文窗口中有什么。今天的编程智能体无法做到这一点——它们会忘记长会话中较早的教训或会话之间的教训,除非您为它们手动记录一切。我最喜欢的技巧是指示它们在修复错误时写一份关于发生了什么的长期详细报告。这样,下次失忆的AI模型犯同样错误时,您可以指向来之不易的解决方案。
7. 即使快速也不够快
在使用Claude Code一段时间后,很容易认为您突然拥有了在不了解某些编程语言的情况下创建软件的能力是理所当然的。这起初很令人惊讶,但您可能很快就会感到沮丧,因为传统上非常快的开发过程还不够快。对编程机器的不耐烦开始出现,您开始想要更多。
但即使您确实了解正在使用的编程语言,您也不会得到免费通行证。您仍然需要对项目如何展开做出关键决定。当智能体卡住或搞砸事情时,您的编程知识对于诊断出了什么问题并将其引导回正轨至关重要。
8. 人们可能会变得比以往任何时候都更忙
在过去两个月中通过Claude Code指导了太多爱好项目之后,我开始认为大多数人不会因为AI而失业——他们会比以往任何时候都更忙。电动工具允许在更短时间内完成更多工作,经济将要求更多生产力来匹配。
事实上,制作新软件几乎太容易了,这可能令人疲惫。一个项目想法会导致另一个,我很快在寒假期间每天花八小时同时管理大约15个Claude Code项目。对于良好结果来说,这太分散注意力了,但看到我的想法栩栩如生的新颖性是令人上瘾的。除了我这里提到的游戏想法,我还制作了抓取和搜索我过去文章的工具、基于ZZT的图形MUD、使用AI生成房间的新型MUSH(文本游戏)、新型Telnet显示代理,以及Apple II的Claude Code客户端(稍后详述)。我还在GitHub上放了两个支持AI的Apple II和Atari 800模拟器。呼!
考虑蒸汽铲的出现,它允许人类比使用手铲的团队更快地挖洞。它使现有项目更快,使新项目成为可能。但想想蒸汽铲的人类操作员。突然间,我们有了一个如果加油和正确维护可以24小时工作的不知疲倦的工具,而驾驶它的人类需要吃饭、睡觉和休息。
我使用Claude Code创建了一个在Telnet上工作的Mac窗口GUI模拟。
事实上,我们最终可能需要为使用这些不知疲倦的信息引擎实现想法的人类知识工作者提供新的保护,就像100多年前工会作为对工业生产线的回应而兴起一样。人类需要休息,即使机器不需要。
AI系统会取代这里的人类角色吗?即使AI编程智能体最终可以完全自主工作,我也不认为它们会完全取代人类,因为仍然会有想要完成事情的人,新的AI电动工具会出现来帮助他们做到这一点。
9. 快速对人们来说很可怕
AI编程工具可以将曾经需要一年的个人项目变成五分钟的会话。我给Claude Code提供了我在2008年在笔记本中勾画的双人俄罗斯方块游戏的照片,它在几分钟内就制作出了一个工作原型(提示:"基于这个图表创建一个带有音效的全功能网页游戏")。这很疯狂,即使结果不完美,理解这可能给软件开发带来什么样的巨变也有点可怕。
自12月初以来,我一直在Bluesky上发布我一些更有趣的实验性AI编程项目供人们试用,但我发现我需要故意放慢更新速度,因为它们出现得太快,人们无法吸收(对我来说也太快,无法完全测试)。我也收到了"我担心你在使用AI,你制作游戏太快了"等评论。
Benj在2007年关于双人俄罗斯方块概念的手写游戏设计笔记。
无论我自己的习惯如何,新软件的流动都不会放缓。很快将有看似无穷无尽的AI增强媒体供应(游戏、电影、图像、书籍),这是我们必须弄清楚如何处理的问题。这些产品也不会都是"AI垃圾";其中一些会做得很好,由于这些新电动工具,生产时间的加速将使数量膨胀到我们前所未见的程度。
社交媒体往往让人们相信AI要么全好要么全坏,但这种黑白思维可能是容易的出路。您不会有认知失调,但您会错过一个更丰富的第三选择:将这些工具视为不完美的、值得批评的,但当它们实现您的想法时也是有用的和赋予力量的。
AI智能体应该被视为工具,而不是实体或员工,它们应该是人类想法的放大器。我正在进行的游戏《Card Miner》完全是我自己的高级创意设计工作,但AI模型处理了低级代码。我仍然为它作为我个人想法的表达而感到自豪,如果没有AI编程智能体,它就不会存在。
10. 这些工具不会消失
至少现在,编程智能体仍然非常像是想要构建东西的人手中的工具。问题是人类是否会学会有效地使用这些新工具来增强自己的能力。基于两个月的密集实验,我会说答案是有条件的肯定,有很多注意事项。
我们还面临社会问题:专业开发者已经在使用这些工具,在一些在线社区对AI工具的普遍偏见下,许多软件开发者和托管他们工作的平台将面临困难决定。
最终,我不认为AI工具会让人类软件设计师过时。相反,它们很可能帮助那些设计师变得更有能力。这并不新鲜,当然;自有记录历史之前很久,各种工具就一直在发挥这种作用。最好的工具放大人类能力,同时让人保持主导地位。3D打印机的类比成立:令人惊讶的快速结果是可能的,但掌握仍然需要时间、技能以及对机器的大量耐心。
Q&A
Q1:AI编程智能体适合完全没有编程经验的人使用吗?
A:对于完全的编程新手来说,AI编程智能体有一定作用但也有局限性。它们可以帮助快速生成简单的原型和演示,但缺乏编程知识的人在遇到复杂问题、需要调试或进行架构设计时会感到困难。文章提到,有编程背景的人能更好地指导AI智能体并诊断问题。
Q2:使用AI编程智能体创建的软件在商业项目中可靠吗?
A:目前还不够可靠。文章指出AI编程智能体更适合爱好项目和原型开发,对于生产级代码仍需要人类的专业判断。它们擅长快速生成前90%的功能,但最后10%的完善和调试需要大量人工干预,特别是在版本控制、测试和系统架构方面。
Q3:AI编程智能体会让程序员失业吗?
A:短期内不会。文章作者认为AI工具更像是电动工具,会让开发者变得更忙而不是失业。这些工具需要有经验的人类来指导方向、做出架构决策和处理复杂问题。它们放大现有技能而不是取代人类,资深开发者的判断力、创造力和领域知识仍然不可替代。
热门跟贴