氛围编程(Vibe Coding)是最近非常火热的一个概念,但其实质非常简单,就是在AI大模型的帮助下根据自然语言来编程;也就是以一种曲线救国的方式,实现了自然语言编程。这个词的来源如下:

image

翻译(这个翻译也是模型在几秒钟之内给出的):

「有一种新型编程方式,我称之为”氛围编程”——你完全沉浸于氛围之中,拥抱指数级进步,甚至忘记代码本身的存在。这之所以成为可能,是因为大语言模型(例如搭载Sonnet的Cursor Composer)已经变得非常强大。我现在甚至通过SuperWhisper与Composer对话,几乎不需要碰键盘。我会提出各种看似愚蠢的要求,比如”把侧边栏的内边距减半”,因为懒得自己定位代码位置。我总是点击”全部接受”,不再阅读代码差异。遇到错误信息时,直接原样粘贴进对话框,通常问题就能解决。代码的复杂程度已超出我的日常理解范围,需要认真研读才能看懂。有时大语言模型无法修复某个bug,我就直接绕开它,或者随意要求修改直到bug消失。对于周末临时项目来说还算可行,这种体验相当有趣。虽然看似在构建项目或网络应用,但这其实不是真正的编程——我只是看着界面说话,运行程序,复制粘贴内容,而一切居然能正常运行。」

仔细看上面的描述,里面其实隐含了一个风险,就是 “我不理解这个代码,但它能工作”,这对软件的调试或后续的维护提出了巨大的挑战。因为软件维护的前提必然是理解它,虽然可以使用大模型辅助理解,但是你根本上来讲就是要理解它,这也是有经验的程序员没法被立刻替换掉的原因。

最近使用模型搭建了一个python程序的数据库操作和日志操作的框架,模型一顿操作,生成了很多我暂时用不到的函数和方法,非常全面,非常细致,但很多代码也非常用不上。懒得删掉了,就带着这些代码在本地操作,一切非常好。结果部署时发生了一些问题。

问题是配置错误导致的,由于配置文件的手误(包含密码token这部分没让大模型生成),它报了一个非常奇怪的错误,即配置中我明明要求连接远程数据库,但总是提示连接的是localhost,这部分相关代码如下,原因就是它找不到配置项的时候给了个默认值。

它生成这个代码的时候我还仔细看过了,但是就是叠加问题的时候就没有快速定位到,反而总在琢磨配置文件名的问题。

config = {
    'host': get_config(f'{self.config_section}.host', 'localhost'), 
    'port': get_config(f'{self.config_section}.port', '3306'),
    'user': get_config(f'{self.config_section}.user', 'root'),
    ...
}

还有个小问题是因为用户又被创建了一遍,使用了不同的密码导致的连不上,这个问题和上面的问题叠加,花了一个多小时才解决。

当然,技术的进步是挡不住的,历史的潮流也是挡不住的,AI/大模型替代程序员这件事,不是将要发生,而是已经发生。