原文:https://dev.to/infoinlet1/i-let-ai-write-100-of-my-code-for-30-days-heres-what-broke-1aa0(作者 @infoinlet1)
不是“AI 辅助”,也不是“我改了改 Copilot 的建议”。我的意思是,我给自己定了一条铁律:30 天之内,我一行应用代码都不亲手敲,全部由 AI 来写。我的工作只剩三件事:描述需求、审查代码、决定是否采纳。
我用这种方式上线了一个真实产品——一个带用户认证、Stripe 计费、数据看板和公开 API 的小型 SaaS。它能跑,而且已经在生产环境中运行。一路做下来,我也确切看清了“AI 包办一切”的美梦到底在哪里站得住,又在哪里悄悄崩塌。
这不是吹捧文,也不是唱衰文。这是一份实地报告。
规则
为了不骗自己,我定下这些规则:
- 我不手写任何应用逻辑。我写提示词,AI 写代码。
- 我可以逐行阅读它给出的代码、拒绝它、要求重写——但不能自己在编辑器里动手修。
- 配置文件、密钥,以及“去控制台点那个按钮”之类的操作归我管(反正这些 AI 也做不了)。
- 如果真的卡住超过一个小时,我就把它记作一次“破例”(break),然后自己动手写代码。
到最后我一共记下了 9 次破例。有意思的部分全在这 9 次里。
好得出奇的部分
先替机器说句公道话,因为下面很多东西确实让我吃了一惊。
从零搭建新项目的脚手架,基本已经被解决了。“搭一个带 Postgres、Drizzle 和用户认证的 Next.js 应用”——一次生成,直接正确。项目前 40% 的进度快得超过我以往做过的任何东西。
样板代码它从不出错。 CRUD 接口、表单校验、Zod schema、带排序和分页的表格组件——这些都是我最讨厌写的东西,而它每次都写得完美无缺,无可挑剔。
它是一只绝佳的小黄鸭。 问它“这个查询为什么慢”,得到的答案比我自己一个人闷头推理出来的更好——它一口气同时指出了缺失的索引和一个 N+1 查询问题。
第一周的时候,我是真心打算写一篇“开发者已经过时了”。然后,第二周来了。
哪里崩了——老实交代这 9 次破例
破例 1–3:它没法把整个系统装进脑子
AI 对眼前这个文件了如指掌,对三个文件夹之外的那个却视而不见。它会兴致勃勃地写出第二个 formatCurrency 工具函数,因为它根本不知道已经有一个了;它把我已有的中间件晾在一边,在代码里内联重新实现了一遍权限校验;它在新模块里引入了一个细微不同的 User 类型。
这些都不算“bug”——代码全都能编译,测试全都通过。这是架构漂移(architecture drift)。而架构漂移是隐形的,直到某一天让你赔进去整整一周才会现形。
AI 做的是局部优化。让整个系统保持连贯一致,仍然是人类的活儿。
破例 4–5:它会自信满满地写出看似合理、实则错误的代码
最吓人的失败不是崩溃,而是那些看起来正确、在一切顺利的理想路径上也跑得好好的代码。
它写的计费 webhook 处理器,在持久化之前就先向 Stripe 确认(acknowledge)了事件。测试环境下完美运行。到了生产环境,数据库只要抖一下,就会出现一个付了钱、却没有访问权限、也没有任何记录的客户。我能抓住这个问题,纯粹是因为我以前恰好被一模一样的事坑过。一个照抄 AI 输出的初级工程师是抓不住它的。这才是让我夜里睡不着觉的部分。
破例 6:调试它自己写的代码是一场绝望的循环
当问题出在 AI 看不见的地方,让它修只会产出“改动”,而不是“修复”。它会自信地重写那个函数,发誓 bug 已经消灭,然后在两轮提示之后把 bug 原样带回来。如果不是我还能自己下到调试器里、真正搞清楚程序的运行状态,我们会在原地打转到天荒地老。这是这一个月里最耗时间的一件事。
破例 7–8:品味,以及说“不,再少一点”
要一个设置页,它给了我 14 个没有任何用户要求过的选项。要做错误处理,它把所有东西都包进 try/catch,然后把错误悄悄吞掉。AI 的本能是做加法。至于知道该省掉什么——工程中真正属于产品设计的那部分——它一点都没有。
破例 9:最后 10% 仍然是 90% 的工作量
做到“演示能跑”花了一周。做到“能扛住真实用户凌晨两点搞出奇怪操作”花了另外三周。边界情况、竞态条件、空状态、错误状态、“用户连点两次怎么办”的状态——这些 AI 一概不会处理,除非你知道该开口要——而知道该要什么,本身就是这份工作。
让人不太舒服的结论
30 天之后,我真正相信的是:
AI 没有取代我。它取代的是那些我过去交给初级工程师做的任务。脚手架、样板代码、第一版草稿——这恰恰是初级工程师边干边学的活儿。而这才是没有人算进账里的真正问题:如果入门级工作全被 AI 干了,下一代资深工程师从哪里来?一万小时是跳不过去的,你能改变的只是这一万小时花在哪里。
每天真正起作用的技能不是写代码,而是:
- 看出它给我的代码哪里有细微的错误。
- 知道哪些东西不该做。
- 把整个系统装在自己脑子里,才能及时抓住漂移。
这些全是资深技能。也就是说,AI 并没有把职级金字塔拉平——它让塔尖变得更值钱,同时抽掉了通往塔尖的梯子。
我真正改变的是什么
我并没有停止使用 AI——现在 100% 的打字都由它完成,以后也会一直如此。我改变的是围绕它的护栏,而且每一条护栏都对应着上文的一次翻车:
- 写代码的那个东西永远不是审查代码的那个东西。一个被要求专门去反驳这份 diff 的独立审查者,能抓住那些看似合理实则错误的代码——而这类代码,作者自己永远会放行。
- 没有一个能看清模型所看不见的波及范围的人类把关,任何代码都不许合并。
- “能编译、测试全过”只是审查的起点,而不是终点——因为模型写出的测试,会和它自己错误的心智模型保持一致。
这种分离——这边是作者,那边是唱反调的怀疑者,合并按钮握在人类手里——正是我能把打字交给机器、夜里还睡得着觉的全部原因。顺带一提(这绝非巧合),这也正是我们打造 xenition 的方式:一个负责干活的 agent、另一个专门试图推翻它的 agent,再加一个对决策负责的人。把它放进一个真实的 30 天构建项目里亲身验证(dogfooding),才是我唯一信得过的基准。
我还会再来一次吗?
做原型?想都不用想——我再也不会手动搭脚手架了。
上生产?我会让 AI 完成 100% 的打字,以及 0% 的思考。打字从来就不是难的那部分,只是它让人感觉像是而已。
最后留一个真诚的问题:如果初级工程师的活都被 AI 干了,你的团队打算怎么培养出下一代高级工程师?因为我认为“他们到时候自然会搞明白”已经不再是一个可以接受的答案了。
原文:https://dev.to/infoinlet1/i-let-ai-write-100-of-my-code-for-30-days-heres-what-broke-1aa0(作者 @infoinlet1)



