上来先跟大家道个歉,这篇文章确实有点标题党。
其实我并不是要抨击Vibe Coding,恰恰相反,我自己就是一个极其狂热的AI编程使用者。现在的我,写代码时完全依赖AI,甚至可以说是”纯AI流派”——我把AI生成的代码视为底层的汇编语言,并不会去逐行Review。既然我们已经在使用高级语言了,谁还会回头去检查编译器生成的汇编指令呢?
但”Vibe Coding”这个词,到处都能看见,我总觉得它少了一点什么,又多了一点什么。想把这些心里话拿出来,和大家聊聊。
这让我想起计算机史上的一个老典故。在Unix刚诞生的早期,系统程序员们引入了”user”这个词。今天我们说user name、user profile觉得天经地义,但在当年那群极客大佬的眼里,”user”这个词其实多少带着一点戏谑和贬义。那个语境下的潜台词是:只有root才是系统的创造者和掌控者,而user只是被动的使用者,甚至是被系统”喂养”的对象。
现在的”Vibe Coding”给我一种类似的既视感。它强调一种”感觉流”——你不再需要死磕语法,跟着感觉走就能把程序写出来。这种说法当然没错,但我担心它会让大家忽略这件事背后的严肃性。
这也正是我觉得需要探讨的地方:当自然语言变成代码,它确实自带了”vibe”,但是你是engineer,你不应该变成rapper。
自然语言和代码不同。代码是二进制的,非黑即白,没有歧义;而自然语言天生就是模糊的、带着情绪的、有温度的。所以用自然语言写程序,确实像是在搞艺术创作,带有一种天然的”氛围感”。这就像是一位才华横溢的艺术家手工打造一把椅子,独一无二,充满灵性。
但这只是故事的前半段。
当我们把视角拉长,放到工业界的尺度来看,情况就变了。工业界需要的往往不是一把孤品的艺术家椅子,而是像宜家那样,能卖给千万家庭、结构稳固、经久耐用、且能够大规模复制的产品。
目前的现状是,很多先驱者已经体验过了这种”艺术创作”的快感,Demo跑得很开心。但接下来,我们需要思考的是如何落地。如何把这种充满不确定性及”Vibe”的输入,转化为确定性、工业化、规模化的输出?这才是程序员在AI浪潮下更应该关注的课题。
我有一个比较大胆的猜想:把时间快进五年。
五年后,那些活下来的公司和项目,一定都是充分利用了AI效率的。到那时,应该不会有人再特意强调”我这是Vibe Coding”或者”我这是AI Coding”。因为当所有人都在用的时候,它就回归了本质,会被直接称为”Coding”。
就像汽车刚问世时,开马车的人也许会调侃这个新家伙跑得慢,噪音大还总抛锚。但历史从来不由嘲笑者书写。现在的我们,看着AI写出的代码有时候不靠谱,甚至有些愚蠢,很容易生出一种调侃的心态。但这种心态可能会让我们错失真正的机会。
这就要说到我看待”Bug”的视角转变了。
回想一下,当年我们从C语言转到C#这种高级语言时,如果写出的第一个函数运行结果不对,你的第一反应是什么?你肯定不会怪C#这门语言设计得不好,也不会怪编译器傻。你会默默地翻开《C#高级编程》,或者去Stack Overflow搜索,反思是不是自己对这门新语言的特性理解得不够深,是不是哪一行逻辑写错了。
怎么到了AI时代,逻辑就变了呢?
现在很多人用AI写代码,一旦结果不如预期,第一反应往往是:”这AI真笨,还是不行。”
我觉得我们需要把心态摆正:如果你认可,自然语言已经是一门新的高级编程语言,那么AI生成的结果不符合预期,这其实就是一个Bug。但这不一定是AI的Bug,更多时候,这是我们编写自然语言逻辑时的Bug。
这就是为什么我建议大家对这项技术保持一种理性的敬畏。当程序跑不通时,不要急着调侃工具,而要去调试你的Prompt(不要去PUA model,加什么MUST、MANDATORY什么的,这本质上和C语言的goto一样属于捷径,是规模化的噩梦),去调试你的上下文设计,去调试你的思维链路。这和当年我们调试C#代码本质上没有任何区别,只是我们在学习一门更抽象、更高级、也更具挑战性的语言。
所以,与其纠结于该怎么称呼,不如我们直接建立一个所谓的”自然语言高级编程”的心智。
我们不需要做一个高高在上的工具评判者,也不需要做一个只懂盲目跟风的弄潮儿。我们要做的是当年从汇编语言跨越到高级语言的那批人——适应它,掌握它,规范它。
让年轻一代和正在转型的我们,都能学会这门新时代的语言,造出稳固的”宜家椅子”,而不是停留在对新事物的调侃中。毕竟,不仅要活在当下,更要活到下一个时代。
