零基础也能编程?揭秘氛围编程的真相与陷阱

本文通过作者亲身体验,详细记录了使用Bolt等氛围编程工具从零创建应用的过程,揭示了AI代码生成的技术原理、安全隐患以及开发效率问题,并探讨了其对初级开发者的影响。

聊天室迎来最差程序员:零代码知识的氛围编程体验

在AI时代,制作应用程序和编写代码变得前所未有的简单。但这真的靠谱吗?以下是一个毫无技术背景的人进行氛围编程的真实体验。

如果让你猜猜工作中编写应用程序的人的职业,你首先想到的肯定不是"作家"——事实上,连前五个选项都不会有。但这并不会让我感到冒犯,因为我的简历上从未将编码专长列为技能。我的大部分知识都是在工作中积累的,这需要对技术语言的理解和对编程趋势的兴趣。还有一小部分来自生活在湾区的潜移默化,在那里科技对话对任何有社交生活的人来说都不可避免。

但生活总是充满小惊喜,其中之一就是我确实为工作创建了一个应用程序。不过需要说明的是:我并没有真正编写代码——而是完全通过"氛围"创建的,就像许多对代码好奇的人正在使用Bolt等氛围编程应用所做的那样。

氛围编程真的如看起来那么强大吗?

“氛围编程"这个概念在2025年初才出现,但已经成为大型语言模型最受讨论的用途之一。它引发了关于其作为编码工具有效性的激烈辩论,以及它将如何改变技术格局的焦虑,特别是对初级开发者而言。即使对经验丰富的开发者来说,它也带来了冒名顶替综合征的存在威胁,甚至是完全替代的可能性。

氛围编程承诺让任何人,即使是非技术背景的人,都能创建自己的可用应用程序,这一点也值得商榷。从我的亲身经历来看,这就像按下了Staples的"这很容易!“按钮。但太容易了,当我将输出交给比我更有技术专长的人时,问题就开始显现。虽然在懂行的人手中这可能是一个强大的工具,但在我手中,它就像那些让你看起来像吉卜力工作室角色的AI滤镜:发出来好玩,但实际上没有实质内容。

创建"不要进去"应用程序

我创建我的"应用程序"是作为Bolt黑客松的一部分。与Reddit合作,比赛的要求是创建一些愚蠢、不敬且完全无用的东西。我经常有无用的想法,所以这对我来说很完美。“这像是Yelp,但是针对卫生间的。而且是针对世界上最差的卫生间,“我告诉我妈妈。“呃,你到底是做什么工作的?“她回答。

开始的过程相当简单。或者说,本应该相当简单。对于一个不知道终端在电脑哪里的人来说,这并不简单。比赛主办方Devpost吹嘘说,用Bolt开始构建应用程序只需不到一分钟。他们提供了几个资源供我查阅,包括Reddit开发者快速入门指南。我最终在那个特定资源上花了很多时间,因为我不知道自己在做什么。我要借此机会正式向Stack Overflow的帮助台道歉,因为我试图在工作笔记本电脑上下载node.js,尽管我肯定不需要它。

当我发现Bolt可以完成我需要的一切时,事情变得容易多了。顺便说一句,这是真的。Bolt可以几乎无缝地端到端创建简单应用程序,只要操作者对代码有基本了解或清楚知道要运行什么。我属于第二类;直到阅读了Devpost的一个资源,我才知道需要什么命令来使程序工作。应用程序是否好用正是我要发现的。

Bolt的界面简洁直观,旁边有创作的实时预览。它还允许你浏览代码库并根据需要手动更新代码行。就我的目的而言,我使用了自然语言提示框,它附带了一些高效提示工程的技巧。我一个都没用。我的提示很简单:“为Reddit创建一个类似Yelp的应用程序,但是针对差卫生间。"(得了吧,这是个关于卫生间的玩笑应用;我不需要成为一个雄辩的提示工程师。)

我友好的氛围编程AI立即开始工作,创建文件夹来存放代码。总共花了大约十分钟创建了我要求的基础。应用程序可以在我的测试版subreddit上启动,包括一个有点傻的用户界面,使用了马桶表情符号。它有留言评价的地方、评分标准,以及一个随着人们撰写评价而填充的页面。所有这些都自动创建在一个可爱的小用户界面中,我可以在测试版Subreddit上点击浏览。但它完全不能用。

几乎立即,错误消息就在我的Bolt界面和应用程序本身弹出。无论我如何尝试,都无法上传卫生间评价。我收到了几个可怕的红色文字错误消息,告诉我位置服务不可用,无法上传评价。虽然我这方面几乎没做什么工作,但我确实感受到了失败的刺痛。所以我告诉我的Bolt AI:“应用程序不能用。”

接下来是大约45分钟的故障排除,AI告诉我确切在哪里找到错误消息。我自己不需要理解任何内容;我只需要逐字逐句、未格式化的将它们粘贴到对话框中,Bolt就会处理问题。虽然Bolt确实提供了关于它修复了什么的信息,但对我这个非编码者来说没有用,我不知道当API端点不在根级别提供服务时意味着什么。我确信如果我对应用程序内部发生的事情有任何了解,我可以要求它深入挖掘,但这个实验的重点就是我什么都不懂。

我的不理解超出了代码库,延伸到测试和使用应用程序的一些基础知识。例如,我没有意识到npm run dev命令会更新我测试版subreddit中现有的测试应用程序。我以为每次编辑后都必须重新启动和重新发布应用程序来测试新"版本”。在我脑海中,每个应用程序版本都是各自独立的实体,而不是一个会自我更新的演进应用程序。因此,当我有一个实际可用的卫生间应用程序时,我的测试版subreddit上已经有20个帖子了。

但Bolt是一个强大的助手。我无法夸大在创建这个应用程序的过程中我有多迷茫,以及Bolt让我制作东西变得多么容易。它甚至帮助我对界面进行简单更改,让我以更舒适的方式玩弄设计,因为我有着平面设计的背景。

最终,我做出了一个能用的东西,使用"我"这个词很宽松。实际上,是Bolt创建了东西;我所做的只是给它一个提示,并在它要求时输入错误消息。随着应用程序的每次迭代,越来越多的功能开始工作。我能够输入信息、浏览评价,甚至添加一些小装饰,比如Bolt徽章和不同的评价选项。

但即使应用程序上线并工作,它好用吗?

分享我不劳而获的成果

我觉得我已经完成了黑客松比赛的挑战:我创建了一些愚蠢、不敬且完全无用的东西。立即,我的同事们开始输入他们最不喜欢的卫生间。这确实很有趣。

Ryan甚至不需要查看我的实际代码就能发现问题。他只需访问我的测试Subreddit并点击检查功能就能发现明显的问题。他立即告诉我,我的应用程序很容易被黑客攻击,因为没有安全功能来阻止有人访问它存储的任何数据。这显然是件大事,但我稍后会回到这一点。

作为我的启蒙的一部分,Ryan建议我获取代码本身的反馈。他提到将其公开发布到GitHub并请社区给我反馈,但随着我开始理解我创建的东西有多糟糕,我回避了公开鞭挞的想法。不是因为害怕杀死我的宝贝;事实上,没有宝贝可杀。更多的是一种 simmering 的恐惧感,就像一个人知道自己作业做得不好,害怕老师会说什么。

幸运的是,我住在湾区,这意味着我几乎所有的朋友都是开发者。所以在让陌生人玩弄我的代码之前,我转向了他们。这是一个懦弱的举动,因为额外的上下文意味着我的朋友们会对我宽容,知道我的创作是氛围编码的,我可能不理解他们给我的任何反馈。

另一个朋友写道:“所有样式都内联在tsx组件中,这使得它更加混乱/难以阅读。“我不知道这意味着我在GitHub上传中做错了什么,还是代码本身有问题。她的总体反馈是代码的创建方式不利于反馈或理解:“例如,从LocationDetails.tsx返回的代码块很大。我会将其拆分成几个较小的组件。”

然后在最后她补充道:“没有单元测试。“我认为这意味着她无法理解我创建的组件是否有意义,或者能否独立存在。我想,这可能不太好。

未兑现的承诺

这个应用程序的氛围编码与实际编码实践之间存在着明显的脱节。因为这个应用程序仅作为我自己的实验存在,它不太好用和代码不太好的事实并不重要。但氛围编码并不是被吹捧为"如果你只是胡闹并不真正在乎的话,AI的一个很好用途”。它应该是一个提高开发者生产力的工具,非技术人员进入开发的桥梁,以及有一天替代初级开发者的工具。那是承诺。

当然,如果我想,我可能会把我软件工程师朋友的反馈输入Bolt。我的一个朋友建议添加"描述性类名"以帮助可读性,Bolt几乎不需要时间就更新了代码。它甚至对我为什么想要添加描述性类名有天生的理解,除非我的朋友解释,否则我不会理解。

但如果我不是一个有开发者朋友的人呢?如果我正在进行的项目不仅仅是为了好玩,而是我真正热衷的东西,甚至想要推向市场呢?

我的代码混乱在所有这些情况下都会成为问题。即使我做出了一个能用的东西,它真的能用吗?如果这是一个真正的工作项目,开发者将不得不在事后清理我制作的一切,以免未来的开发者迷失在我创作的混乱中。这被称为"生产力税”,是开发者对AI工具最大的挫折,因为它们吐出的代码几乎——但不完全——正确。我们的开发者调查发现,66%的开发者在使用这些编码工具时经历了这种税。

但即使我们不担心工程部门的好伙伴,还有一个更大的问题:安全。我想回到Ryan关于我的愚蠢卫生间应用程序上没有任何数据受到保护的观点。幸运的是,至少在这种情况下,没有重要数据在我的应用程序上共享或存储。但在许多情况下,情况并非如此。

因为这些工具承诺不需要开发者经验就能产生强大结果,可能有很多没有经验的人会使用像Bolt这样的东西来创建他们的激情项目。可能很多这些激情项目都是善意的,并且会工作,至少在前端。也许有些程序会要求信息如邮政编码、电子邮件地址、出生日期,甚至创建密码。你大概能明白我要说什么;GDPR也能。

似乎不太可能有什么东西会推向市场而没有有开发背景的人看过,但像我这样的有趣副项目呢?我可以轻易想象一个邪恶的世界,有人为所爱的人氛围编码一些东西,其中包括关于他们生活中人的识别信息,而这些信息落入了知道如何使用检查功能的恶意人士手中。

Bolt创建的东西对我的目的来说足够好吗?当然。在几个知识渊博的朋友和同事的帮助下,我能否在不学习任何命令的情况下解决安全和组织问题?是的,绝对可以。但对于一种据说将使初级开发者过时的技术,它需要我朋友们的大量帮助——他们都是初级开发者。

在这个故事的另一面,我想分享一些关于我最好的朋友之一的事情,他也经常氛围编码。他是一名理论物理学家,拥有斯坦福大学的博士学位。在完成博士学位后,他曾想留在研究领域,但由于高等教育的现状,发现机会稀少,薪酬更低。所以他转行了,相当艰难地转向了一个意味着他必须快速学习编码的角色。

他与我分享说,LLMs将他的学习能力提高了十倍,因为它们让他能快速找到信息。他谈论他混杂使用CoPilot、Gemini和ChatGPT的方式,几乎就像它是一个亲切的导师,引用了他无法找出错误而让Gemini向他解释的时候。他告诉我,这帮助他下次遇到类似错误时。

我认为,这就是氛围编码工具的真正承诺——你可以在没有计算机科学学位的情况下学习如何编码。世界上没有人会说我的朋友不够聪明来编码,但问题是他没有经验。在斯坦福物理系五年后,他不可能再回去读另一个学位。氛围编码工具给了他所需的支持和知识,这样他就可以自己学习这些技能。

就像这个AI时代的狂野西部中的任何事情一样,一切都取决于你如何使用它。

借鉴我朋友的经验,我希望我的氛围编码体验是我学习如何编码的第一步。所以,我提供我的氛围代码供社区反馈、批评和建议。让我知道你对我的GitHub的看法,以及你认为我应该怎么做才能不再是世界上最差的程序员。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计