
两个月做了 50 个 AI 项目后,我学到的 10 件事
Ars Technica 编辑 Benj Edwards 分享他用 Claude Code 和 Codex 在两个月内完成 50 个项目的实战经验,从人类必要性到 90% 问题,记录了 AI 编程代理的真实能力与边界。
原文来源:Ars Technica — Ars Technica 编辑 Benj Edwards 自费订阅 Claude Max 和 OpenAI 高级计划,用 Claude Code 和 Codex 在两个月内完成 50 个项目后,总结了 10 条关于 AI 编程代理的真实经验。
如果你用过 3D 打印机,可能还记得第一次打印出自己永远不可能手工雕刻或建造的东西时那种奇妙的感觉。下载模型文件,装入塑料耗材,按个按钮,一个三维物体几乎像变魔术一样出现了。但结果并不精致,不适合大规模生产,而且创造新形状需要的技能远不止按按钮那么简单。有趣的是,今天的 AI 编程代理给人的感觉非常相似。
从 2025 年 11 月起,Ars Technica 编辑 Benj Edwards 用 Claude Code 和 Claude Opus 4.5(通过个人 Claude Max 账户),以及 OpenAI 的 Codex,广泛实验了 AI 辅助软件开发。两个月、50 个项目之后,他说了句实话:自从 9 岁在 Apple II Plus 上学会 BASIC 以来,他从未觉得用电脑这么好玩。
但这话不是背书,而是个人体验:他自己主动承担了这些项目,自掏腰包为 OpenAI 和 Anthropic 的高级 AI 计划付费。他 lifelong 都是实用主义程序员,需要时写小工具或脚本。在职业生涯中写过 BASIC、C、Visual Basic、PHP、ASP、Perl、Python、Ruby、MUSHcode 等,但没有一门是专家——只学到够用的程度。
Claude Code、Codex 和 Google 的 Gemini CLI 在小规模上似乎能表演软件奇迹。它们能喷出简单应用、用户界面甚至游戏的 flashy 原型,但前提是这些模式存在于它们的训练数据中。就像 3D 打印机一样,做生产级工作需要更多努力。创建耐用的生产代码、管理复杂项目、或者打造真正新颖的东西,仍然需要经验、耐心和技能,超出了今天 AI 代理独自能提供的范围。
然而这些工具打开了一个以前对他关闭的软件创意世界,让他感到个人赋权。即便如此,他知道这些都是业余项目,代理的局限性让他相信资深软件开发者可能暂时不必担心丢工作。事实上,他们可能会比以前更忙。
过去两个月他创建了超过 50 个 demo 项目,部分原因是得了 COVID 卧床不起,正好有笔记本电脑和 Anthropic 在 12 月最后几周慷慨提供的 2 倍 Claude 使用上限。他整天疯狂打字,妻子一直问他:"你在跟谁说话?"
以下是他在过程中学到的 10 件事。
1. 人仍然是必要的
即使有今天最好的 AI 编程代理,人类仍然是软件开发过程中不可或缺的。经验丰富的人类软件开发者带来 AI 模型所缺乏的判断力、创造力和领域知识。他们知道如何为长期可维护性架构系统,如何在技术债务和功能速度之间取得平衡,以及什么时候该在需求不合理时 push back。
对于像 Benj 这样的业余项目, sloppy 一点没关系。但对于生产工作,有懂版本控制、增量备份、一次测试一个功能、调试系统间复杂交互的人,一切都不一样。了解好的软件开发如何运作,对指导 AI 编程代理帮助很大——工具放大你现有的知识,而不是替代它。
独立 AI 研究者 Simon Willison 在一篇区分严肃的 AI 辅助开发和随意的"Vibe Coding"的文章中写道:"AI 工具放大现有专业能力。你作为软件工程师的技能和经验越多,与 LLM 和编程代理合作时就能更快更好地获得结果。"
有了 AI 辅助,你不需要记住怎么做所有事情。你只需要知道想做什么。
所以 Benj 提醒自己,编程代理是用来实现人类想法的软件工具,不是自主编码员工。它们不是人(也不是人的替代品),无论背后公司如何营销它们。
想想吧,你在电脑上做的每一件事曾经都是手动过程。给 ENIAC 编程涉及 literally 用线在 plugboard 上做物理连接。编程的历史就是一部自动化程度不断提高的历史,所以即使这次 AI 辅助的飞跃有些惊人,也可以把它看作类似于高级语言、自动编译器和调试工具、或基于 GUI 的 IDE 的出现。它们能自动化很多任务,但管理整体项目范围仍然落在告诉工具做什么的人身上。
而且它们能产生快速复合的收益。Benj 已经用 AI 工具写出了更好的工具——比如修改模拟器源码让编程代理能直接使用——而这些改进的工具已经开始产生涟漪效应。但人类必须在循环中,才能最好地执行他的愿景。这种方法让他非常忙碌,而且与一些人担心的"AI 让人变笨"相反,他一路上学到了很多新东西。
2. AI 模型在训练数据之外很脆弱
和所有基于 Transformer 架构的 AI 模型一样,支撑今天编程代理的大语言模型有一个重大限制:它们只能可靠应用从训练数据中学到的知识,将知识泛化到训练数据中未代表的新领域的能力很有限。
训练数据是什么?构建面向编码的 LLM 时,AI 公司从 GitHub 等来源下载数百万个软件代码示例,用它们训练模型。之后通过微调过程专门化。
AI 代理使用试错能力——尝试某事然后重试——这在一定程度上缓解了 LLM 的脆弱性。但这并不完美,看着编程代理反复尝试和失败会很沮丧,要么是因为它不知道怎么做,要么是因为它之前学会了怎么解决问题,但后来因为上下文窗口被压缩而忘记了。
为了解决这个问题,让 AI 模型在过程中做大量笔记,记录如何解决某些问题,这样代理的未来实例可以重新学习。你还想在 claude.md 文件中设定基本规则,代理在开始会话时会读取。
这种脆弱性意味着编程代理在它们被训练和微调过的领域——现代编程语言、JavaScript、HTML 和类似被充分代表的技术——几乎好得吓人;而在它们没有被深入训练的任务上,比如 6502 汇编或用 Atari 800 的真实风格字符图形编程游戏,通常很糟糕。
用 Claude 做一个漂亮的 HTML5 demo 只需要五分钟,但做一个类似的 Atari 800 游戏 demo 却需要一周痛苦的试错,加上他自己实际的系统设计。为了做到这点,他不得不用 Claude Code 发明几个工具,比如命令行模拟器和 MCP 服务器,让代理能窥探 Atari 800 的内存和芯片组操作,才能开始实现。
3. 真正的创新是场硬仗
由于可能诗意地称为"先入之见"的东西被烘焙进编码模型的神经网络(更技术性地说是统计语义关联),即使仔细说明想要什么,也很难让 AI 代理创造真正新颖的东西。
比如,Benj 花了四天试图让 Claude Code 为他的 HTML 游戏《Violent Checkers》创建 Atari 800 版本,但代理遇到了麻烦,因为在游戏设计中,棋盘上的格子除了起始位置外并不重要。无论他告诉代理多少次(并在 Claude 项目文件中做笔记),它都会回到试图把棋子居中到格子里、在格子内吸附、或者用格子作为游戏计算的逻辑基础——而实际上格子应该只是背景图像。
为了绕过这个问题,在 Atari 800 版本中他重新开始,告诉 Claude 他正在创建一个游戏:一个 UFO(而不是圆形棋子)飞过一片相邻方块组成的田野——从头到尾没有提到"checker"、"checkerboard"或"checkers"这个词。用这种方法,他得到了想要的结果。
为什么这很重要?因为对 LLM 来说,上下文就是一切,而在语言中,上下文改变含义。拿"bank"这个词,在前面加上"river"或"central",看看含义如何变化。词语在某种程度上充当地址,解锁神经网络中编码的语义关系。所以如果你把"checkerboard"和"game"放进上下文,模型的自注意力过程会链接起关于 checker 游戏应该如何工作的巨大语义关联网络,这些语义包袱会干扰结果。
有几个技巧可以帮助 AI 编码器绕过这些限制。首先,避免用无关信息污染上下文。其次,当代理卡住时,试试这个提示:"你需要什么信息才能让你现在就完美地实现这个?你有什么可用工具可以系统地发现这些信息而不靠猜测?"这迫使代理识别(语义链接)自己的知识缺口,在上下文窗口中明确列出并纳入未来行动,而不是盲目挣扎。
4. 90% 问题
AI 编码项目的前 90% 来得很快,让你惊叹。最后 10% 涉及与代理来回反复试错对话, tedious 地填补细节。需要比代理能提供的更深洞察或理解的任务,仍然需要人类来建立连接并引导它走向正确方向。上面讨论的限制也可能让你的项目撞上一堵砖墙。
Benj 花了大约一个月迭代开发《Card Miner: Heart of the Earth》,完全由人类设计但用 Claude Code AI 编码。这个游戏代表了大量迭代工作,远不是按个按钮就能出来的。
对于生产工作,这"最后 10%"可能是整个项目中最关键的部分。原型能跑和代码能长期维护之间,差距往往就在这最后的细节里。
5. 代理会编造工具
AI 代理有时会发明不存在的工具或方法。Benj 多次遇到 Claude Code 自信地告诉他可以用某个命令行工具或 API 端点,结果那个东西根本不存在。代理不是故意撒谎,而是基于训练数据中的模式"幻觉"出一个看似合理的解决方案。
这在使用不常见的技术栈或较新的框架时尤其危险。代理对流行技术(React、Django、Express 等)的了解相对可靠,但对小众或最新发布的东西,它可能会自信地给出完全错误的建议。
Benj 的应对策略是:对于任何他不完全确定的代理建议,都手动验证。如果代理推荐一个他没听说过的库,他会去 npm 或 PyPI 搜索确认它存在。如果代理说"用这个 API 端点",他会去查官方文档。这种验证增加了额外步骤,但避免了在不存在的东西上浪费时间。
6. 上下文窗口是硬限制
即使是最先进的模型,上下文窗口也是有限的。Claude Opus 4.5 能处理的上下文比早期模型多得多,但对于大型项目仍然不够。当项目超过一定规模时,代理会开始"忘记"之前的决策,或者在不同文件间失去一致性。
Benj 发现,当项目超过约 20 个文件或几千行代码时,代理的表现会明显下降。它会重复已经做过的工作,或者在文件 A 中实现的函数与文件 B 中的调用不匹配。
他的解决方案是把大项目拆成小块。不是让代理"构建整个应用",而是给它具体的、范围有限的任务:"实现用户认证中间件"、"创建数据库迁移脚本"、"添加密码重置功能"。每个任务完成后,他手动审查并提交,然后才开始下一个任务。
这种"分块法"虽然增加了管理开销,但显著提高了成功率和代码质量。
7. 调试是代理的弱点
AI 代理在写新代码方面表现不错,但在调试现有代码时往往挣扎。当代码不工作时,代理倾向于随机修改东西,希望某个修改能解决问题,而不是系统地分析根本原因。
Benj 观察到代理的调试策略通常是:
- 添加日志语句
- 修改看起来可疑的代码
- 如果还不行,重写整个函数
- 重复直到似乎工作或用户放弃
这种方法有时能蒙对,但更多时候会引入新问题。人类开发者的系统性调试思维——理解代码应该做什么、观察实际做了什么、找出差距、定位根本原因——仍然是代理难以复制的。
Benj 的建议是:当代理陷入调试循环超过 3-4 轮时,停下来,自己看看代码。代理可能已经添加了太多日志和临时修复,让代码变得一团糟。有时候,人工花 10 分钟理解问题,比让代理折腾一小时更有效。
8. 安全与隐私需要主动管理
把 API 密钥、数据库密码和其他敏感信息交给 AI 代理处理,需要谨慎。代理可能会把这些信息写入日志文件、错误消息,甚至提交到 git 仓库。
Benj 的做法是:
- 所有密钥放在
.env文件中 .env在.gitignore里- 在 AGENTS.md 中明确禁止代理读取或写入
.env以外的密钥存储 - 定期审查代理创建的文件,确保没有意外泄露
他还发现代理有时会创建不安全的代码模式,比如 SQL 注入漏洞、不安全的文件上传处理、或硬编码的密钥。这些不是代理故意为之,而是训练数据中存在的模式被复制了。生产代码需要人类安全审查,不能信任代理自动处理好安全问题。
9. 代理让"做更多"变得太容易
这可能是 Benj 学到的最重要也最意外的一点:AI 代理让他比以前更忙了。
有了代理,启动新项目的摩擦几乎消失了。以前需要权衡"值不值得花几天做这个工具",现在只需要几小时的代理对话就能出原型。结果是,他启动了比没有代理时多得多的项目。
但每个项目都需要维护、调试、改进。50 个项目同时存在意味着 50 个代码库需要关注。代理帮他快速创建,但不帮他长期维护。
Benj 把这比作 3D 打印机:打印东西很容易,但如果你有 50 个打印出来的原型散落在工作台上,管理它们就成了新负担。AI 代理降低了创造的门槛,但没有降低管理的成本。
他的反思是:代理让"做"变得太容易,以至于"选择做什么"和"什么时候停下来"变成了更重要的技能。在没有代理的世界里,项目的启动成本自然限制了并行项目数量。有了代理,这个限制消失了,你需要自己建立纪律。
10. 乐趣与倦怠的边界
两个月 50 个项目,COVID 卧床期间每天疯狂编码——这听起来像梦想成真,但 Benj 也经历了倦怠。
代理让编码变得如此流畅,以至于很难停下来。总有"再做一个功能"、"再试一个想法"的冲动。但当一切都来得太容易时,成就感也会稀释。完成第 50 个项目的感觉,远不如完成第 5 个时那么强烈。
Benj 的观察是:AI 代理改变了"完成"的含义。以前,完成一个项目意味着克服了很多技术挑战,有明确的成就感。现在,项目"完成"可能只是意味着你和代理的对话结束了,而你对代码的理解可能很浅。
他的建议是:用代理做项目时,有意识地留出"消化"时间。不要从一个代理会话立即跳到下一个。花时间理解代理写的代码,手动测试边缘情况,思考架构决策。这不仅提高代码质量,也保留了你作为开发者的成长感。
写在最后
Benj 两个月 50 个项目的经历,展示了 AI 编程代理的真实面貌:它们是强大的工具,能显著降低创造的门槛,但不是魔法。它们放大你的能力,但也放大你的工作量。它们帮你快速启动,但不帮你长期维护。
对于独立开发者、业余爱好者和想快速验证想法的人来说,代理是变革性的。对于生产环境和需要长期维护的项目,人类判断仍然不可替代。
最重要的教训可能是:代理让"做"变得太容易,所以"选择做什么"和"什么时候停下来"变成了更关键的技能。在 AI 辅助编程的时代,纪律和判断力比编码速度更有价值。
你可以在 Benj 的个人网站 bxfoundry.com 看到他的一些项目成果。
© 2026 四月 · CC BY-NC-SA 4.0
原文链接:https://aprilzz.com/indie/ai-coding-50-projects-lessons
相关文章
AI 编码助手生产力提升仍未突破 10%——调查
DX 公司 CTO Laura Tacho 基于 12.1 万名开发者与 450 余家企业的最新调查揭示,93% 的开发者已在使用 AI 编码助手,但组织层面的生产力提升始终停留在 10% 左右,AI 的作用高度依赖企业自身的工程成熟度。
独立开发者的注意力经济学:为什么做减法比加功能更难赚钱
独立开发者常陷入一个悖论:功能越多,用户越迷茫,收入反而越低。这篇文章从注意力经济学的角度,分析为什么减法思维才是独立产品的核心竞争力。
Index Rusher:一个单功能 SEO 工具如何做到 7164 美元月收入
johnrushx 分享他用一个月开发、一个月推广的极简 SEO 工具 Index Rusher,从 0 到 7164 美元月收入的真实成本明细和增长策略。