事情的起因很简单。

我老婆想看《火影忍者》。

115 里存着完整的七百二十集,文件一个不少。可“拥有七百二十集”和“舒舒服服地看七百二十集”,显然不是一回事。每次都去网盘里找文件,名字长短不一,播放起来也谈不上从容。

我便想,不如给她做一个专门的播放器。

这个念头若是放在过去,大概也就到此为止了。做一个网站尚且可以想象,做一个真正装在 iPad 上的应用,便像是另一回事。那里面似乎有许多门槛,门槛后面还有门槛。一个人站在门外,看上一会儿,往往也就回去了。

但这一次,我用了 Vibe Coding。

我没有先去买一摞书,也没有从第一行代码开始苦学。我只是把自己的想法说出来:这是给我老婆用的,她习惯横着拿 iPad;我希望打开以后就能找到想看的那一集;坐飞机没有网络时,也应该照样能看。

AI 读懂现有项目,写代码,检查问题,再把做好的应用装到 iPad 上。我负责说清楚自己想要什么,也负责在用过以后告诉它:这里不够顺手,那里还可以更好。

就这样,一个原本只在脑子里的念头,真的出现在了她手里的 iPad 上。

火影忍者 iPad 应用首页

应用最终的样子:没有复杂的入口,打开便能看到“继续观看”和完整系列。

Vibe Coding 对我最大的帮助,并不只是少写了一些代码,而是缩短了“想到”和“做到”之间的距离。

过去,一个想法刚冒出来,紧跟着便是一连串问题:要学多久?从哪里开始?我真的能做出来吗?想得多了,事情还没有开始,人已经先疲倦了。

现在却可以先把它做出来。

最初只是一个网站。后来发现浏览器播放某些视频并不痛快,于是又做成了 iPad 应用。她用着,偶尔说一句哪里不方便,我便继续和 AI 商量。应用就在这些很自然的对话里慢慢长大。

中间当然也有不顺利的时候。有时自动播放到了下一集,只听得见声音,画面却没有跟上。可这些问题不再像从前那样令人望而生畏。把现象说清楚,找到原因,改掉,再装回 iPad 上试一试,也就是了。

后来,我甚至在深夜随口提了一句:

“播放这一集的时候,能不能先把下一集准备好一点?”

不久以后,这个想法也真的出现在了播放器里。当前一集播放时,下一集会在后台预先缓冲开头十五秒。片尾结束,它不必临时起床、洗脸、找衣服,早已经站在门口。

我对这一点颇为喜欢。

不是因为它有多么了不起,而是因为一个刚刚说出口的念头,竟然很快就变成了手里可以使用的东西。过去很难想象这样的事,现在它却越来越自然。

当然,AI 并不是挥一挥手,一切便自动妥当。想做什么,仍然要由我决定;做出来的东西好不好,也要由真实使用它的人判断。它会误解,会绕路,有时修好一个地方,又从另一个地方冒出问题。

但它是一个极有耐心的合作者。

你可以随时同它讨论,可以推翻刚才的方案,也可以忽然改变主意。它不会嫌问题太小,也不会因为你不是专业开发者,便把你挡在门外。

这是一种很特别的自由。

从前,我们常常因为不会某种技术,便默默放弃一个想法。现在,人可以先从自己的需要出发。至于那些陌生的工具和复杂的细节,可以一边走,一边解决。

播放器后来有了名字,有了图标,也有了正式版本。

火影忍者播放器图标

一团旋转的火光,中间放着播放键。它没有直接使用动画人物,却保留了一点忍者世界的气息。

项目最终被放进了私有的 GitHub 仓库。它不是什么宏大的产品,没有商业计划,也没有改变世界的志向。它只是把散落在网盘里的七百二十集动画,整理成了一个我老婆愿意打开的地方。

可我很喜欢这样的项目。

它不是从一份郑重其事的需求文档开始的,只是从一句普通的话开始:

“我想看《火影忍者》。”

然后另一个人回答:

“好,我给你做一个。”

有人问,花这么多工夫,只为了做一个播放器,值得吗?

这问题并不难回答。

少年时看鸣人,总觉得喜欢一个人,就该说许多漂亮的话。年岁稍长以后才明白,话当然可以说,事情也还是要做。

她在看她的《火影忍者》,我坐在旁边,继续同 AI 商量播放器还能怎样改得更好。一个念头刚说出口,不久便真的出现在她手里的 iPad 上。

过去很难想象这样的事。

如今它已经发生了。

这便很好。