关于氛围编程实践的一些分享

Filed under هندسة البرمجيات, الذكاء الاصطناعي, LLM on 25 مارس 2025. Last updated on 25 مارس 2025.

toc

什么是氛围编程?

氛围编程(Vibe Coding)这个词最初由OpenAI联合创始人、前特斯拉AI负责人Andrej Karpathy于今年2月初在社交平台上提出。

vibe coding

不可否认,通过使用AI工具,氛围编程确实可以让我们的编程工作变得更加轻松。但是,氛围编程真的有这么简单吗?

我对氛围编程的看法

当我听到“氛围编程”这个词的时候,我第一反应是:“氛围编程”这个词听起来有点过于轻松简单了。这可能会让一些行业外的人士认为,编程是一件非常轻松的事情。并且,这也可能会加深行业内年轻工程师的焦虑:是否程序员将会被AI取代?是否人人都可以轻松完成一个项目?

而我的观点是:

如何在日常的工作中使用AI工具,以提高工作效率,是我一直在实践并尝试回答的问题。

请记住这个存在主义的结论:没有人能帮你做决策,AI也不行。你需要为自己的决策负责,你需要为自己的代码负责。利用AI,快速试错,持续学习。

氛围编程 vs. AI辅助编程

相较于“氛围编程”,我更喜欢“AI辅助编程”这个词,以强调AI工具在编程过程中的作用。

对比项氛围编程AI辅助编程
受众所有人专业人士
项目规模小规模,试验性中大规模,正式项目
技能要求编程基础架构,抽象,设计
可维护性

从氛围编程到AI辅助编程

以下是我个人使用AI辅助编程的流程。可以看到,AI参与的部分是有限的。所有涉及决策的部分,都离不开程序员自身。

vibe coding

接下来我会通过我自己使用AI工具辅助编程的例子,来详细介绍这个流程。我会用🤖和👨‍💻来分别表示AI和程序员主导的部分。

准备工作 👨‍💻

目前我使用得最多的是Cursor和ChatGPT。Cursor用来处理任何跟代码相关的事情(编辑、修改、调试),ChatGPT则用来进行分析、学习。

提出想法 👨‍💻

首先,要善于思考、提问、质疑。没有这些创造性的原创想法,AI再强大,也帮不了你。

其次,要敢于提问、尝试。没有人能做到完美,不要害怕犯错。按照自己的节奏,不断学习。

AI辅助编程与需求分析 🤖

在当前的环境下,需求分析变得非常简单。使用ChatGPT等工具,我们只需要描述清楚需求,就可以得到一个初步的解决方案。

比如,我可以直接问ChatGPT“我想使用RL训练一个模型玩Hollow Knight,应该怎么做?”。当然,我也可以直接在Cursor的聊天窗口中,输入我的需求。

生成代码 🤖

就我的经验而言,在使用AI生成代码的时候,有以下几点需要注意:

强调确定的部分 👨‍💻

不管是需求,还是函数签名,类型设计,任何你确定的部分,你需要在提示词中明确指出,以确保AI能够正确地生成代码。或者,你也可以自己编写这部分代码,然后让AI来补充完整。

学习并理解生成的代码 👨‍💻

在AI生成的代码中,你可能会遇到一些你不太理解的部分。这时候,你需要停下来,理解这部分代码,然后根据你的理解,让AI修改这部分代码。

迭代试验代码 🤖

通常经过几个迭代,一个阶段的工作就完成了。这时候,你需要停下来,反思一下,这个阶段的工作是否达到了你的预期。如果达到了,那么就继续下一个阶段;如果还没有达到,那么就继续迭代。

重构,重构,还是重构 👨‍💻

如果你完全不清楚是否应该重构,可以使用SonarQube等工具来辅助你,发现代码中的Bad Smells。我的经验是,经过几轮的迭代,AI生成的代码会越来越复杂,越来越难以维护。这时候,重构就显得尤为重要。

测试(TDD) 👨‍💻

AI并不会自己测试它生成的代码,所以,麻烦你来测试它。当然,你可以继续用AI来生成测试代码,但是你需要主导这个过程。

生成测试代码 🤖

对于开发人员来说,在函数签名、类型设计上投入时间,可以让你在测试代码时更加得心应手。大多数语言,即便是动态类型语言,至少都提供某种程度上的注解(Annotation)能力,比如Python的类型注解。

这些类型注解,可以帮助AI生成更准确的测试代码。

运行测试代码 🤖

目前,Cursor已经能够很好的生成测试命令。特别是一些测试工具本身命令参数比较多,并且你累积了越来越多的测试用例时,使用Cursor直接在命令行生成测试命令就非常方便。

在最新版本中,Cursor甚至可以在聊天框生成命令,你可以直接在聊天框中点击运行。

修复并改进代码 👨‍💻

不管是现有的实现有问题,还是测试用例本身有问题,你都需要评估并修复这些问题。或许AI可以帮助你,但是,最终的决策权在你手里。

发布上线 👨‍💻

如果是小型项目,AI生成的代码基本上可以直接发布上线。但是,对于大型项目,需要考虑的问题更多,比如前后端分离、容器化、可观测性、多云部署等等。所有这些需要再深入讨论的问题,AI都没有办法直接给你答案,而是需要你来做出决策。

总结

AI作为辅助工具,可以让你在编程过程中更加得心应手。但是,个人才是项目成功的关键。如果你有任何想法,请大胆尝试吧!哪怕失败了,你也会收获宝贵的经验。

参考