用 AI 三天写完一个小程序:真实代价和我踩的坑

起因,一个憋了很久的小想法

事情是这样的。

我手机里有个备忘录,记了快两年,标题叫「值得的一件事」。每天晚上睡前,我会逼自己写一句话,今天有哪件事是值得的。可以是吃到了一碗好吃的面,可以是搞定了拖了一周的工作,也可以就是,今天天很蓝。

这个习惯救过我。有段时间我状态很差,每天往备忘录里写东西的时候才发现,原来我这一天,也不是什么都没有。

但我一直嫌备忘录难用,没法看历史,没法分类,没法在心情不好的时候翻出来看看自己到底走过多少日子。我想做个小程序,就一个页面,每天记录一件值得的事,能往前翻,能打个标签。

我搜过找人开发要多少钱,报价把我劝退了。我自己不会写代码,看了一晚上教程,第二天就放弃了。

直到今年,我用了 Claude Code 和 Cursor 之后,心里冒出一个念头,要不,我自己试试?

Day 1,我感觉自己无所不能

第一天我其实没指望能做出什么。

我打开 Claude Code,把想法一段一段说出来,我说我要一个小程序,首页一个输入框,写今天值得的一件事,下面能看历史记录,每条能打个心情标签,风格要干净,不要太花哨。

它开始问我问题。要不要登录,要不要云存储,要不要支持图片。我一开始还挺不耐烦,后来发现这些问题我不回答,它就往下编,编出来的东西根本不是我想要的。

我硬着头皮一个个想,要登录,微信授权那种,要云存储,不然换手机就没了,图片先不要,把核心跑通再说。

然后它就开始写了。

我是真的被那个过程震到了。它一边写一边跟我解释,这块是首页,这块是云函数,这块管数据库读写。我看不太懂代码,但我能看懂它在干嘛。大概一个多小时,它让我打开微信开发者工具导入项目。

我照做了。

编译,没报错。点开模拟器,一个干干净净的页面出来了,输入框,按钮,下面空空的历史列表。我试着写了一句「今天Claude帮我写了个小程序」,点提交。

它出现在列表里了。

我当时的感受,说真的,有点想哭。就是那种,一个在你脑子里待了两年的东西,突然出现在你眼前了。你知道那种感觉吗,不是一个抽象的「产品做出来了」,是真的有一个东西,在屏幕上活着。

那天晚上我折腾到两点,加上了心情标签,改了配色,调了字体大小。每一版都能跑。我感觉自己无所不能。

现在回头看,Day 1 是最危险的一天。因为太顺了,顺到让我以为后面也会这么顺。

Day 2,AI 开始给我编 API

第二天,麻烦来了。

我想加一个功能,按心情筛选历史记录。点「开心」,只看开心的那些。这个需求听起来特别简单对吧,但我万万没想到,它成了我整个项目最大的坑。

我跟 Claude Code 说,加个筛选,按标签过滤。它写了一段代码,告诉我用了一个叫 whereIn 的云数据库方法。

编译报错。

我截图发给它,它说哦那是某个版本的写法,给我换了一个。又报错。它再换,又报错。来回搞了三四轮,我开始觉得不对劲了。

我去查文档。查了半天我才搞明白,它最开始给我的那个方法,微信小程序的云数据库根本就没有。

它编了一个。

一个听起来特别合理、命名特别规范、参数特别像那么回事,但压根不存在的方法。

我当时真的愣住了。因为我前一天的信任建立得太满了,我几乎没去验证它写的任何东西,我觉得它说的就是对的。那一刻我才意识到,它不是在骗我,它是真的「以为」有这个东西,自信地,流畅地,把一个不存在的方法塞进了我的代码里。

后来我学到一个词,叫幻觉。但当时我不懂这些,我只觉得,这玩意,不能全信。

那一天我花在筛选这个功能上的时间,大概五个小时。其中真正写代码的时间可能半小时,剩下四个半小时,全在查文档、试错、跟它来回拉扯。

四个半小时。

你知道吗,这就是我没预料到的事。我以为 AI 帮我写代码,最花时间的会是想需求。不是。最花时间的,是它写错了,我得先搞清楚它哪儿错了,再搞清楚正确的应该是什么,再告诉它怎么改。这个排查的过程,比我自己从头学可能还累,因为我得在一个本来就不懂的领域里,分辨「这个是对的」还是「这个是它编的」。

Day 3,改一处坏三处的死循环

第三天,筛选功能终于能用了。

但我发现,加了筛选之后,原来好好的历史列表,翻页出问题了。加载第二页的时候会把第一页的内容重复显示一遍。

我又去找 Claude Code。它修好了翻页。然后我发现,心情标签的图标不显示了。我让它修图标。图标好了,提交的时候偶尔会卡住没反应。我让它修提交。

提交好了,翻页又坏了。

你敢信???

那一天我反复经历这个循环,改一处,坏三处。我自己都数不清来回多少轮了。到后来我都麻木了,看到报错已经不慌了,就是截图,发过去,等它改,再看下一个报错。

我后来想明白了一件事。它每次改代码,只看得到我发给它的那一段,它不知道这一改动会牵连到哪儿。但我这个项目已经不小了,页面之间、函数之间有各种依赖,它改了 A,B 和 C 就跟着崩。而我自己又看不出来会崩在哪儿,因为那些代码不是我写的,我根本不知道它们之间是怎么勾连的。

这是最讽刺的地方。代码是它写的,但我得为它的代码兜底。而我没有兜底的能力。

那天晚上九点多,我把所有功能都凑合跑通了。注意我用的是「凑合」。因为我知道,这代码里面有多少坑,有多少临时绕过去的问题,有多少我自己都说不清为什么这样改就能跑的东西,只有天知道。

我点了上传,提交审核。

躺到床上的时候,我没有 Day 1 那种想哭的感动,只有一种,虚虚的疲惫。

上线之后,才是焦虑的开始

小程序过了两天审核通过了。我发给了几个朋友。

头一天没什么事,我甚至觉得,哎,好像还行?

第二天晚上,一个朋友跟我说,他写了三条,第三条提交之后前面两条不见了。

我心里咯噔一下。

我打开后台查,数据还在,只是前端列表渲染出了问题。但我花了一整个晚上才定位到,又花了一晚上才改好。改好之后我提心吊胆,生怕又改出别的毛病。

那段时间我每天醒过来第一件事,是看有没有人跟我反馈 bug。没有人反馈的时候我也焦虑,是不是大家根本没用。。。有人反馈的时候我更焦虑,因为我不知道下一个 bug 什么时候来。

这种焦虑,是我做之前完全没想过的。

我以为上线就结束了。不是的。上线只是开始。你做了一个东西放在那里,它就会一直有概率出问题,而你,是唯一一个能修它的人。可是这代码一大半你都没自己写过,你怎么修?你得把整个项目重新交给 AI,让它先读懂,再找问题,再改,再祈祷别改出新问题。

这就是隐性技术债。表面上看,我用三天做出了一个小程序,很厉害。但只有我自己知道,这三天产出的代码,有多少是我没真正理解的,有多少是临时贴上去能跑就行的,有多少是埋着雷等哪天炸的。

我不敢加新功能,因为每加一个就可能碰坏旧的。我不敢重构,因为我怕一动就全崩。这个小程序上线一个月了,我一共更新过两次,都是修 bug,没加过任何新东西。

那个我最初想做的图片功能,我一直没敢做。

做出来容易,做好做稳太难

回头想想这三天,我的感受很复杂。

一方面,我确实做到了一件两年前觉得不可能的事。一个不会写代码的人,三天做出了一个能跑的小程序,还上线了,还有朋友在用。搁两年前这事想都不敢想。Claude Code 和 Cursor 把「能做出来」这件事的门槛,压到了一个我够得着的位置。这件事我得认,它确实了不起。

但另一方面,我也确实付出了一些没预料到的代价。

调试的时间,比我以为的多得多。我一开始以为三天里大部分时间在「创造」,其实不是,大部分时间在「救火」。AI 写得快,但它写得对不对得我来判断,而我没有判断的能力,所以我只能靠试错,试错是世界上最慢的调试方式。

还有一个代价,是那种「不完全属于自己的掌控感」。代码是它写的,我能跑,但我不能说自己「懂」。这种悬空的感觉,在出 bug 的时候特别折磨人,因为你连问题出在哪儿都不知道,只能把希望寄托在它身上,而它,你也见识过了,会编 API。

这事儿其实跟所有工具革命一个道理。相机变成了手机里的一个按钮,人人能拍照了,但好照片该难还是难。AI 把写代码的门槛踩平了,但把代码写好、写稳这件事,门槛还在原地,甚至因为你随手就能做出一堆东西,隐性门槛反而更高了。

我有时候会想,如果我本身是个程序员,用 AI 会不会完全是另一种体验。大概率是的。因为你能看懂它写的,能判断它哪儿编了,能在它改坏的时候自己接手。AI 对懂行的人来说是加速器。对完全不懂的人来说,它是帮你起飞,但也把你扔在一个你不认识的地方。

我现在还在用那个小程序,每天睡前还是会写一句。有时候翻到很早以前的记录,会觉得,嗯,这个东西虽然粗糙,虽然摇摇欲坠,但它确实是我做的,它确实在记录我的人生。

只是如果让我重来一次,我不会再带着 Day 1 那种「无所不能」的幻觉了。我会先告诉自己,你接下来花在找 bug 上的时间,会比写功能多得多。而你最后得到的,不是一个「做完了」的产品,是一个「暂时还没坏」的产品。

这两者,差得很远。

评论区

暂无评论,快来抢沙发吧