歌德写过一首民谣《魔法师的学徒》,后来被迪斯尼改编成了《幻想曲》中著名的一段动画片。内容是一位老巫师离开他的作坊,留下他的学徒(在迪斯尼的版本中是米老鼠)做些杂事。米老鼠厌倦了提水桶,给一把扫帚施了魔法,让它替自己干活,但他的魔法并不精通,很快地板上就被水淹没,他意识到自己无法阻止扫帚,用斧头将扫帚劈成两截,但每一截都变成了一把完整的扫帚,它们倒水的速度开始指数增长,于是整个城堡很快被水淹没了。
我在 vibe coding 的时候经常想起这段动画片。
在 vibe coding 的过程中,最常出现的局面是你每个命令都看似得到了有效的回应,创造了一个新的局面,但它们拼起来最终和你想象的完全不一样。你每个动作的幅度都太大,以至于要把它们有效地协调起来变成了一个难得多的任务。你提了一个需求,神明实现了它;第二天你想改进,又实现了;第三天你想让它自由发挥生长,依然实现了。你感觉好像每一步都在往前走,但要把所有这些快速生长的复杂性捏合成一个你真正想要的东西,需要俯瞰的宏观视野和有效的整合压缩,而整合的速度很可能赶不上混乱生长的速度。恰似米老鼠的遭遇。
古法编程像是工笔画,而 vibe coding 更像是泼墨写意山水。工笔要求你的每一笔都落实在一个具体的细节上,而写意的任何一笔都会改变整体的面貌。——但外部世界的需求并不会因为你采用什么样的工具而发生变化。于是很多时候你会发现你其实是在试图用泼墨山水的方式来画出蒙娜丽莎的效果。
当你古法编程的时候,你是在跟自己的无能做斗争;当你在 vibe coding 的时候,你是在跟自己的超能力做斗争。Ironically,后者的挑战要大得多。