上一篇《我一行代码没写,做出了个塔罗牌 APP》发出去,留言里问得最多的是:那「一个多小时」是第一天的事。中间它撞了好几次墙、返了好几次工,真正发出去是 4 天后第二次坐下来的事,这些我上篇全省了。但「没那么一气呵成」不等于「不强」。它真干的那些活,是真的让我一次次卧槽。这一篇,我把上篇一笔带过的地方,一帧一帧拆开——告诉你 vibe coding 真上手,到底是个什么流程。5 步,每步都是你今天就能照着抄的动作。最后我还会泼你一盆冷水:它哪儿不行。先给你看个数。我敲完那句话,10 秒后它开始吐代码,等它停下,我往下滚了好几屏——我一行没写,也根本不会写安卓。但真正让我服的,不是它写得多,是它写得对。怎么做到的?往下看。🎴 第 0 步:别写需求,扔个场景,然后逼它反问你
上篇说过它「反问了我 4 个问题」。这步太关键,这次给你看细节。我那句话,没需求文档,没原型图,连技术栈都没提。但我多加了一句——这一句是整套打法的钥匙:动手前,先问我 3~5 个最关键的决策点,每个给我你的默认建议和理由,我来拍板。
它没闷头开干。它反手甩回 4 个问题,每个都带着它的默认建议:① 用什么技术栈?它推 React Native + TypeScript。算盘很简单:我连语言都没提,说明要的是快、不是极致性能;塔罗 APP 的瓶颈在 UI 和动画,不在算力;RN 改一句看一眼,最适合边聊边调。我一秒拍板。② MVP 砍哪些?它给我两张单子。「做」:78 张牌、洗牌翻牌、单张/三张牌阵、解读、本地历史。「先不做」:登录、付费、云同步、AI 解读、分享海报。第二张救了我——我脑子里那些「要不要做个会员」的贪心,被它提前钉死在「以后再说」。③ 78 张牌图从哪来?它的建议特别反直觉:先用代码画极简牌面,0 依赖马上能跑,真图留个槽以后换。我嫌丑,但听了。(这一板后面救了大命,第 1 步讲。)④ 代码放哪?本地文件夹 + 顺手 git init。当时觉得多此一举。后面真「改崩了」,一条命令回退,我才懂。然后它没急着写代码,先甩出一份我得滚两屏的计划:目录结构、数据模型、13 步执行、风险兜底,连「本期不做什么」都单列了一栏。我当时还嫌它啰嗦。后来才明白:这份计划就是我俩的「合同」——它跑偏,我拿计划怼它;我心里也不再干慌「它到底要把我带哪去」。写计划花它 1 分钟,省我后面至少 1 小时返工。抄这步:开局别写「做个记账 App」,写「我老婆老记不住每月花多少,我想随手记、她在家能看汇总」。场景给够,再加那句「先反问我 3-5 个关键决策」。项目一旦不小,先让它写一版计划再动手。🃏 第 1 步:看着它自己撞墙、自己绕路(这步最爽)
计划定完,它开始埋头干:写 78 张牌的数据、画牌面、接导航和状态、自己补测试。一步一步串着来,自己对着计划勾进度。中途出事了。它去网上抓真实塔罗牌图——被网站限流,所有请求返回空。换个不懂的人,大概率卡死在这儿,或者死磕重试一下午。它没有。它当场转向:抓不到,就用代码画一套极简牌面顶上,流程继续往前跑,真图留个槽以后再换。我啥也没干,它自己绕过去了。更让我服的是 debug。它写完一块就自己跑、自己读报错、自己回去翻源码找原因。整个第一天,它自己揪出 6 个 bug,全部自己定位、自己修,我一个都没碰。你得换个脑子理解这件事:它不是个听话的打字机,等你下指令。它更像一个会自己判断、自己撞墙、又自己爬起来的执行者。你给方向,它跑;遇到墙,它自己找门。抄这步:当它说「原来那条路走不通,我换一种」,先别急着拦,听它说完。99% 的情况它是对的——它能看到的报错和上下文,比你多得多。🔧 第 2 步:报 bug 只描述现象,根因交给它
第一天我试出个硬 bug:三张牌阵好好的,一点「单张牌」,首次渲染直接崩。我的手指当时悬在键盘上,差点打出「是不是哪儿没初始化,你去改一下」——其实我啥也不懂,纯瞎猜。点「单张牌」会崩,点「三张牌」不会,你看下。
它干的事是:复现崩溃、读 stack trace、顺着调用链找到首次渲染时一个没兜住的空状态,加上判断,13 行修好。这里的关键是:报错堆栈、代码上下文——这些你看不到,它能看到。你越是替它猜根因,越是拿你那点可怜的信息,去盖住它手上的全部信息。要是我真按瞎猜的方向去指挥,它八成被我带沟里,越改越乱。抄这步:❌「把第 47 行改成右对齐」 ✅「单牌会崩、三牌不会」。你负责说哪儿不对,它负责找为什么——这事上你大概率没它准。🔮 第 3 步:全场最炸——它说「这架构错了,得推倒重写」
这一下,是整个项目让我最服的瞬间,也是上篇完全没讲过的。翻牌动画翻出来不对:边缘漏光,翻到一半甚至能瞄到背面的影子。我就随口说了句「翻牌看着不对」。我以为它缝两针就完事。结果它判断:这个实现方式,架构上就错了,得重写。旧方案靠 backfaceVisibility:两张牌正反叠着转,转过去自动藏背面。听着挺合理,但这属性在安卓上渲染不稳,所以才漏光。它换成 scaleX:把牌横向压扁,压到宽度为 0、看不见的那一瞬间,神不知鬼不觉换成另一面,再展开——就像一张牌立起来只剩侧面一条线的时候,偷偷翻了张脸。你品一下这个思路:它根本没去「修」那个漏光的洞,而是换了一套从原理上就不会漏光的几何障眼法,把整个问题绕过去了。删 140 行,加 67 行。翻出来那一下,干干净净,真牌图。卧槽——那一刻我才反应过来:它不只是会写代码,它在做架构判断,而且比我这个外行懂得多。但注意:我不是闭眼盖章。它说要重写,同时把「为什么旧的不行、新的怎么解决」摆了出来。一个带得出理由的重写,你可以信;一个只会说「我重写一下」却讲不清为什么的,你才要警惕。抄这步:你不用懂 backfaceVisibility 是啥。你要练的,是认出「它什么时候比你强」,以及「它的理由站不站得住」。它说推倒重写、又讲得清为什么,你让它推——你的活儿是把关,不是替它写。🚀 第 4 步:从「能跑」到「能发」(90% 的人死在这步)
但那只是个 demo——丑牌、没图标、桌面一个白方块、没推 GitHub,谁都看不到。这,就是上篇那「一个多小时」的真实终点。满世界「我用 AI 做了个 X」,80% 停在这儿:截个图发朋友圈,得意两天,然后烂在本地。我隔了 4 天又坐下来。第一个小惊喜:它读了一遍现在的代码,自己就接上了上次的进度——哪些是临时方案、哪些定了稿、还差什么,不用我重新交代。隔了 4 天,它比我还清楚项目走到哪了。这次我给自己定了个规矩:一个 PR 只干一件事。哪怕就我一个人,也走 GitHub PR 流程。为啥?一个 PR 一件事,改崩了好回退,出问题好定位,记录还清清楚楚。这是把「随手乱改」逼成「有章法地推进」——单干尤其需要这点,不然你三天后自己都看不懂自己干了啥。80 分钟,7 个 PR:接真牌图、牌阵扩到 6 种、做专属图标、翻牌动画推倒重写、重写 README、打 v0.5.0 Release、换真机实拍截图。全部 merge。但正是这 80 分钟,把一个玩具,变成了一个能发出去、别人能装能用的作品。抄这步:demo 谁都能糊。逼自己走完最后一公里——推 GitHub、写清楚 README、打个能直接装的 APK。哪怕单干,也一个 PR 干一件事。这一步,才是 demo 和作品的分水岭。把 5 步收成一张你能贴在显示器上的清单
整套打法,我一行代码没写。我干的全是:拍板、把关、逼自己收尾。说句真的:Vibe Coding 不是万能的
吹了这么多,得给你泼盆冷水,不然你今晚上手容易摔。它最猛的地方,是「从 0 到 1」糊一个全新的原型。但有几条边界,我这一趟也实打实撞到了:一、它做得越多,你越得能验收。它替你扛了写代码,但「做出来的对不对」最后还得你点头。你能验收到什么程度,就只能放心让它做到什么程度。一旦它做的东西你完全看不懂、也判断不了对错,你就是在闭眼飞行——出了事你都不知道。二、它会自信地把错的东西讲得头头是道。6 个 bug 它确实自己修了,但也有它信誓旦旦、其实没对的时候。所以「能装真机跑一遍」比「它说修好了」可信一百倍。每一步都自己上手验,别全听它的。三、越往后越复杂的项目,光靠「聊」越吃力。塔罗 APP 这种单机、无后端、规模可控的,vibe coding 几乎无敌。可一旦涉及一堆外部系统、真实用户数据、复杂的线上环境,那 20% 的判断和把关,分量会重得多。一句话:它把你的下限抬得很高,但你的上限,还是你自己的判断力。面试被问「你怎么用 AI 干活」,我会这么讲
第一句(定锚):我一句话做了个能上架的塔罗 APP,没写代码。但重点不是它多强,是我搞清了哪些事交给它、哪些事只能我扛。本质判断:AI 能接住绝大多数技术活——找 bug、绕死路、做架构判断。它接不住的,是品味、拍板,和「想不想做完」。更大趋势:往后「会写代码」越来越不稀缺。稀缺的是知道要什么、敢拍板、肯收尾的人。写在最后
这两篇,我把一个塔罗 APP 从一句话到发出去,全摊开了。上一篇讲的是「为什么你该开始」。这一篇讲的是「开始之后,具体怎么走」。那 5 步、那盆冷水,你第一次上手大概率会忘一半、踩几个坑。没事,我第一次也一样。但你会发现:挡在你和那个「一直想做的东西」之间的,真的不再是技术了。剩下的,全是你的判断——和你肯不肯,把它一路做到「能发出去」。你上一个停在「差不多能用了」、然后再没碰过的东西,是什么?
项目开源在评论区,带能直接装的 APK 和搭建文档。clone 下来照 README 走就能跑。