事情的起因很简单。
我老婆想看《火影忍者》。
115 里存着完整的七百二十集,文件一个不少。可“拥有七百二十集”和“舒舒服服地看七百二十集”,显然不是一回事。每次都去网盘里找文件,名字长短不一,播放起来也谈不上从容。
我便想,不如给她做一个专门的播放器。
这个念头若是放在过去,大概也就到此为止了。做一个网站尚且可以想象,做一个真正装在 iPad 上的应用,便像是另一回事。那里面似乎有许多门槛,门槛后面还有门槛。一个人站在门外,看上一会儿,往往也就回去了。
但这一次,我用了 Vibe Coding。
我没有先去买一摞书,也没有从第一行代码开始苦学。我只是把自己的想法说出来:这是给我老婆用的,她习惯横着拿 iPad;我希望打开以后就能找到想看的那一集;坐飞机没有网络时,也应该照样能看。
AI 读懂现有项目,写代码,检查问题,再把做好的应用装到 iPad 上。我负责说清楚自己想要什么,也负责在用过以后告诉它:这里不够顺手,那里还可以更好。
就这样,一个原本只在脑子里的念头,真的出现在了她手里的 iPad 上。

应用最终的样子:没有复杂的入口,打开便能看到“继续观看”和完整系列。
Vibe Coding 对我最大的帮助,并不只是少写了一些代码,而是缩短了“想到”和“做到”之间的距离。
过去,一个想法刚冒出来,紧跟着便是一连串问题:要学多久?从哪里开始?我真的能做出来吗?想得多了,事情还没有开始,人已经先疲倦了。
现在却可以先把它做出来。
最初只是一个网站。后来发现浏览器播放某些视频并不痛快,于是又做成了 iPad 应用。她用着,偶尔说一句哪里不方便,我便继续和 AI 商量。应用就在这些很自然的对话里慢慢长大。
中间当然也有不顺利的时候。有时自动播放到了下一集,只听得见声音,画面却没有跟上。可这些问题不再像从前那样令人望而生畏。把现象说清楚,找到原因,改掉,再装回 iPad 上试一试,也就是了。
后来,我甚至在深夜随口提了一句:
“播放这一集的时候,能不能先把下一集准备好一点?”
不久以后,这个想法也真的出现在了播放器里。当前一集播放时,下一集会在后台预先缓冲开头十五秒。片尾结束,它不必临时起床、洗脸、找衣服,早已经站在门口。
我对这一点颇为喜欢。
不是因为它有多么了不起,而是因为一个刚刚说出口的念头,竟然很快就变成了手里可以使用的东西。过去很难想象这样的事,现在它却越来越自然。
当然,AI 并不是挥一挥手,一切便自动妥当。想做什么,仍然要由我决定;做出来的东西好不好,也要由真实使用它的人判断。它会误解,会绕路,有时修好一个地方,又从另一个地方冒出问题。
但它是一个极有耐心的合作者。
你可以随时同它讨论,可以推翻刚才的方案,也可以忽然改变主意。它不会嫌问题太小,也不会因为你不是专业开发者,便把你挡在门外。
这是一种很特别的自由。
从前,我们常常因为不会某种技术,便默默放弃一个想法。现在,人可以先从自己的需要出发。至于那些陌生的工具和复杂的细节,可以一边走,一边解决。
播放器后来有了名字,有了图标,也有了正式版本。

一团旋转的火光,中间放着播放键。它没有直接使用动画人物,却保留了一点忍者世界的气息。
项目最终被放进了私有的 GitHub 仓库。它不是什么宏大的产品,没有商业计划,也没有改变世界的志向。它只是把散落在网盘里的七百二十集动画,整理成了一个我老婆愿意打开的地方。
可我很喜欢这样的项目。
它不是从一份郑重其事的需求文档开始的,只是从一句普通的话开始:
“我想看《火影忍者》。”
然后另一个人回答:
“好,我给你做一个。”
有人问,花这么多工夫,只为了做一个播放器,值得吗?
这问题并不难回答。
少年时看鸣人,总觉得喜欢一个人,就该说许多漂亮的话。年岁稍长以后才明白,话当然可以说,事情也还是要做。
她在看她的《火影忍者》,我坐在旁边,继续同 AI 商量播放器还能怎样改得更好。一个念头刚说出口,不久便真的出现在她手里的 iPad 上。
过去很难想象这样的事。
如今它已经发生了。
这便很好。