为什么“氛围编程”做出来的应用难以维护
Vibes Don't Maintain
一位餐厅老板用 Claude Code 零代码搭出任务管理 Web 应用,界面整洁、数据可持久化,但缺少响应式布局、登录、设置、错误状态与并发编辑处理,本质只是可点击原型。作者指出软件大部分代码是应对故障的“安全带”,而 AI 只让执行变便宜,不会替你想清楚要执行什么,聊天记录丢失后连维护线索都不剩。
自从 ChatGPT 火起来之后,总有人跑来对我说类似“你们这行很快就要失业了”的话。
这些人大多是管理者。他们知道这话有挑衅意味,也想看看我会怎么反应——一部分是想试探这是不是真的会成为现实。他们的共同点是,没有一个人真正清楚软件开发到底是什么。不是从外面看起来的样子,而是它本质上是什么。
上周,我经历了一次迄今为止最好的此类对话。
我有个朋友开了一家餐厅。他告诉我,他用 Claude Code 为餐厅做了一个应用——一个用来管理员工任务和流程的 Web 应用。他很自豪,他也完全有理由自豪。他从未写过一行代码,却在屏幕上做出了一个能实现他所描述功能的东西。
我看了一下。做得不错。布局干净,流程合理,数据在页面刷新之间能保留,用起来像个能跑的系统。
然后我开始挑毛病。没有响应式布局——在他员工实际会用的手机上就崩了。没有深色模式 🏴☠️。没有登录,所以不知道谁做了什么。没有设置。没有翻译,而厨房里有一半人不会说这个应用所用的语言。没有错误状态。没有处理空数据、重复数据、两人同时编辑同一内容的情况。数据“持久化”的方式只能扛过一次刷新,仅此而已。
它只是个点击原型。一个原型。一个完全够用的概念验证,适合用来进行第一轮关于想法是否成立的讨论——这本身是真实且有价值的东西。
然后他问我能不能帮他托管并做运维。
这是人们对软件最大的误解,而且这跟 AI 毫无关系。
人们看到的是表面。他们看到的是能工作的部分。他们看不到出错时才会运行的部分,看不到为了防止出错而存在的部分,也看不到那些在生产环境中从未执行过一次、只为某人坐下来设想过的最坏情况而存在的部分。
你车里的安全带和安全气囊,运气好的话,从未起过作用。但这不代表它们没用。你系安全带不是因为法律规定,也不是因为车会滴滴叫。你系安全带是因为你明白有一天你可能会需要它。软件大部分都是安全带。快乐路径——演示所展示的东西——只是代码库中最小的一部分。
我的朋友,可以理解,看不到这一点。他的理解是,应用 100% 按预期工作,所以 90% 的工作已经完成。剩下的就是托管。而我不该把它搞复杂。
接下来这个版本会这样发展。
原型几乎免费、几乎瞬间就做出来了。他认定产品已经完成。他甚至可能把它推到用户面前——他的员工开始在实际排班、实际任务、实际日程中使用它。
然后出了问题。数据库文件损坏了。一次依赖更新弄坏了某个东西。有人在公开互联网上发现了这个应用并四处看了看。一个没人记录过的边缘情况触发了。或者我个人最喜欢的:夏令时,排班表里的每个班次都差了一个小时。
一切都炸了。
他不知道他造了什么。他不知道为什么要那样造——推理过程存在于一个已经消失的聊天会话里。他不知道该找什么,也不知道从哪里开始找。没有规格说明,没有测试,没有文档,没有提交信息来解释任何东西的意图。
到那时他有两个选择。找人来修,并准备好把所有的钱都交给对方,因为接手的第一周纯粹是考古。或者跑路出国。
这就是“氛围感不维护”在实践中的含义。氛围感把他带到了演示。从那以后什么都没有延续下来。
这一切都不是“别用 AI”。我们每天都在用。但两件事同时成立。
第一:如果你的背景是烤面包,AI 不会让你成为软件工程师,就像你家里的烤箱不会让你成为厨师一样。它让执行变便宜了。它对于知道该执行什么、或者执行失败时该怎么办毫无帮助。
第二:垃圾进,垃圾出。如果输入是对快乐路径长什么样的松散描述,输出就是一条快乐路径。AI 不会替你发明安全带。它不知道你会需要它们,因为你也不知道。
在热潮中幸存下来的不是代码。而是代码本该做什么的记录——故事、规格、决策——写在人类或代理能读回来的某个地方。我们的是 git 里的 markdown 文件,和 bacon-tracker 放在一起。我的朋友有一段他再也找不到的聊天记录。
那份记录才是你付钱买的东西。不是那个点击假人。
他的请求里还藏着第二个问题,在所有这些“你会失业”的对话里也有:如果这个工具真的能做我的工作,那我到底还在这里干什么?但那是另一天的事了。
第二天我给他打了电话。我告诉他我给自己买了一个 Thermomix——带 AI 的那个——并计划下周开一家餐厅。
他笑了。然后他沉默了一秒。
我希望他懂了。但以我对他的了解,我觉得他没懂。
来源:Hacker News · roll.bybacon.com