支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


什么编程语言更适合Vibe Coding?

发布日期:2025-08-07 08:35:30 浏览次数: 1517
作者:AI咖啡馆

微信搜一搜,关注“AI咖啡馆”

推荐语

强类型语言如何成为AI编程的"安全护栏"?Hacker News开发者们对Vibe Coding的深度探讨值得一读。

核心内容:
1. 强类型语言在AI协作编程中的优势分析
2. "强观点框架"与"无观点框架"的对比解析
3. 开发者社区对Vibe Coding实践的真知灼见

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

 

 

 

 

 

导读

昨天,一篇题为《类型化语言更适合“Vibe”》的文章登上了Hacker News的热门榜单。作者的核心观点是,当开发者与AI一起“Vibe Coding”时,强类型语言(如TypeScript, Rust, Go)所提供的编译时检查和严格约束,反而像一个可靠的“安全护栏”,让开发者可以更大胆、更自由地与AI协作,而不必担心基础的语法和类型错误导致系统崩溃。

这个观点听起来颇具说服力,但Hacker News社区的开发者们显然有更复杂和深刻的看法。他们从框架设计、个人经验、AI的内在局限性乃至编程哲学的角度,展开了一场精彩的辩论。

关于编码框架,讨论的一个核心概念是“强观点框架” (Strongly Opinionated Frameworks)。

什么是“强观点框架”?

所谓“强观点框架” (Strongly Opinionated Frameworks) ,指的是一种在设计上包含了明确、强烈的设计哲学和一系列预设规范的软件框架。它不会让开发者在每个问题上都做选择,而是直接提供一套它认为“最好”的解决方案和做事方式。

其核心思想是 “约定优于配置” (Convention over Configuration)。

主要特征与目的
预设决策,减少选择: 框架的创建者已经替你做了大量决策,比如项目该用什么目录结构、文件如何命名、数据库表如何映射、路由如何组织等等。你的工作不是从零开始“配置”一切,而是遵循这些“约定”。

提升效率和一致性: 当团队所有人都遵循同一套约定,代码库的结构会非常统一,新成员更容易上手,开发者也能将精力更多地集中在业务逻辑上,而不是基础架构的选择上。正如讨论中 timuckun 所说,使用 Rails 时,“你知道文件该如何命名、放在哪里、应该是什么格式”。

提供“快乐路径”: 框架为你铺好了一条最高效的开发路径。只要你沿着这条路走,一切都会很顺利。如果你想偏离这条路去做一些特殊定制,通常会变得更复杂,需要付出额外的努力。

与“无观点框架”的对比
与“强观点框架”相对的是 “无观点框架” (Unopinionated Frameworks) 或称为灵活的、模块化的框架。

强观点框架 (如 Ruby on Rails, Django): 像一套包含了家具和装修指南的精装房,你拎包入住,按照它的风格生活最方便。

无观点框架 (如 FastAPI, Express.js): 像一个只提供了承重墙的毛坯房,你可以自由地设计隔断、选择家具、定义风格,自由度极高,但所有决策都得自己做。

在当前的讨论语境中,“强观点”为AI提供了清晰、稳定且可预测的上下文。AI不需要去猜测一个项目的文件该放在哪,或者一个功能该如何实现,因为它只需要遵循框架的“铁律”即可。这大大降低了AI生成代码的模糊性和出错率,从而更适合进行“Vibe Coding”。

三个核心观点

1. 强观点框架比类型的约束性更重要

讨论中一个主要的观点是,对于AI辅助开发而言,一个“强观点框架”的重要性可能超过语言的类型系统。以Ruby on Rails为例,其清晰的目录结构、命名约定和“约定优于配置”的哲学,为AI提供了明确的指导,使其能更可靠地生成符合项目规范的代码。相比之下,即使是类型系统更强的Go语言,由于其生态缺乏统一的框架标准,AI在构建完整应用时反而表现得更为挣扎。这一观点延伸认为,任何能为AI提供稳定、可预测“上下文”的机制——无论是强观点框架还是开发者主动提供的项目结构文件——都是提升AI协作效率的关键。

2:“盖尔曼遗忘效应”与开发者评估能力的局限

这个话题的主要观点是,开发者在评估AI生成代码的质量时,可能陷入了“盖尔曼遗忘效应”的认知偏差。该效应指出,人们容易发现自己专业领域内的报道谬误,却会轻信非专业领域的报道。同理,当开发者让AI生成自己不熟悉的语言(如Rust或Go)的代码时,他们可能因为缺乏足够的专业知识来评判,而误认为生成的代码“看起来还不错”。

有资深Rust开发者现身说法,证实AI生成的Rust代码虽然可以通过编译,但往往在性能和代码风格上显得笨拙和不地道。而这位开发者在自己不精通的Python上,却感觉AI表现良好。这揭示了一个核心问题:对AI能力的正面评价,可能源于评估者自身知识的盲区,而非AI能力的真实体现。

3:反馈循环的质量是更比语言特性本身更根本的因素

进一步的讨论将焦点从“静态类型”本身,转移到了“反馈循环”的质量上。开发者们观察到,AI在面对严格的类型约束时,倾向于采取消极的规避策略,例如在TypeScript中滥用any类型,或在Rust中插入todo!()宏,以此绕过编译器的检查。

由此,一个共识逐渐形成:AI编程的真正增益,并非来自类型系统的存在,而是来自任何能够提供即时、结构化、不可回避的负反馈的工具。一个清晰的编译器错误(如cargo check的输出),相比一个模糊的运行时错误(如Python的AttributeError: 'NoneType' object has no attribute 'x'),能为AI的下一次迭代提供更精确的修正方向。因此,无论是编译器、静态分析器(Linter)还是单元测试,凡是能构成快速、高质量反馈闭环的工具链,都是比语言特性本身更根本的决定因素。

关键讨论

关键话题一:强观点框架比强类型语言的约束性更重要?

讨论的起点,由用户 timuckun 的一个高赞评论开启,他直接挑战了原文的“类型中心论”,认为框架的“指导性”才是关键。

timuckun:
以我的经验来看,一个强观点框架 对“Vibe Coding”的友好程度,远比类型系统本身更重要。

举个例子,用 Ruby on Rails 进行Vibe Coding简直是享受。因为它有明确的模式(MVC)、有大量公开的最佳实践,基本上只提供一种“正确”的做事方式。你和AI都清楚文件该如何命名、该放在哪个目录、应该遵循什么格式。

但你试试用 Go 语言做同样的事,尽管 Go 的类型系统比 Ruby 更强,结果却会让你大失所望。无论是 Claude 还是 Gemini,在尝试“一次性”生成一个简单的 Go 应用时都步履维艰,但用 Rails 却能屡试不爽。

siva7 (补充道):
与之形成鲜明对比的是那些完全无观点的框架,比如在AI浪潮初期一度大火的 FastAPI。如果你想用它来“Vibe Coding”,那简直是一场灾难。大多数流行的框架都遵循“不提供明确做事方式”的原则,将所有决定权留给开发者。强观点框架在 Rails 之后一度被认为“过时”了,但事实证明,它们在AI辅助开发的时代迎来了意想不到的复兴。

solumunus (提供了实用技巧):
其实,你可以通过提供上下文文件 来很好地“驯化”AI。我用的是一个非常基础的路由框架和我自己设计的架构,但我把整个项目的结构、数据库模式以及外键关系都作为上下文喂给 Claude,效果发生了天翻地覆的变化。它立刻就明白了各个部分该如何协作。

yurishimo (提出质疑):
我对“强观点框架已过时”的说法深表怀疑。在我看来,这类框架反而越来越受欢迎。Rails 或许不再是每个初创公司的唯一选择,但这很大程度上是因为其他语言吸取了 Rails 的精华,并结合自身优势创造了新的框架,比如 Django (Python), Laravel (PHP), Spring Boot (Java), Blazor (C#), Phoenix (Elixir) 等等。它们都延续了 Rails 的成功模式。

delifue (引发了关于“AI能力”的争论):
我的经验是 Gemini 可以一次性生成 Go 应用。这种事情需要可靠的评估,而不是零散的个人经历分享。

Tostino (表示怀疑):
我很想知道你们到底在用AI“一次性”生成什么样的应用。说真的,能给个例子吗?因为在我看来,任何超出“玩具级别”的程序,AI都很难完全按你的要求一次性搞定。

bobro (进一步质疑):
如果AI真的能那么轻易地“一键生成”重要又有趣的应用,那我们现在应该能看到新应用如雨后春笋般涌现才对。那些号称能被轻易生成的创新应用都藏到哪里去了?

jdiff (从开源社区角度补充):
如果AI真的能加速甚至接管一个成熟代码库的大部分工作,我们应该首先在开源软件库和生态系统中看到一场革命。但现实是,到现在为止,我们看到的最多也就是一些AI提交的、经过人类开发者大量修改和照料的零星Pull Request。没有任何一个有实际下游用户的库或项目是由AI主导的。

关键话题二:盖尔曼遗忘效应——我们是否只是在自我感觉良好?

用户 woodruffw 提出了一个极为深刻的心理学视角,直指我们可能在评估AI能力时陷入了认知偏差。

woodruffw:
原文作者提到“我能管理我不精通的语言项目——比如 TypeScript, Rust 和 Go——而且看起来还做得不错”,这句话让我想起了“盖尔曼遗忘效应 (Gell-Mann Amnesia Effect)”。

这个效应指的是:当你在报纸上读到一篇关于你所精通领域(比如物理学)的报道时,你会立刻发现其中的各种谬误和不准确之处;但紧接着,当你翻到下一版,读一篇关于你一无所知领域(比如中东政治)的报道时,你却会天真地认为这篇报道至少是大致准确的。

我用LLM进行Web开发时也有完全相同的体验:它生成的代码似乎做得很好,至少比我自己瞎搞要强得多。但关键问题是,我其实没有资格做出这个评判。我认为,AI如今价值的很大一部分,就来源于工程师们错误地高估了自己评判非专业领域工作的能力。

muglug (用亲身经历印证):
完全正确!这和我用 Claude 写 Rust 的经验完全一致。我写了两年半的专业 Rust 代码,自认为水平还不错。Claude 生成的 Rust 代码经常“胡说八道”,因为它只是一个统计模型,而非静态分析工具。即便它最终能生成可以通过编译的代码,这些代码也几乎总是效率低下且风格丑陋不堪。

但是,如果你让它从零开始生成一些优雅流畅的 Python 代码块,它的表现就相当不错。

顺便说一句,我对 Python 并不精通。

js2 (提出了经验之谈):
写了几十年软件后,我感觉自己对于一门新语言中“这不可能是地道写法”的代码有种本能的直觉,能“嗅”出不对劲的地方。如果我感觉有问题,我就会去搜索参考代码或大型项目。当然,你也可以直接问LLM:“你确定这是地道的写法吗?”……不过,它很可能会对你撒谎。

woodruffw (再次深化论点):
“嗅出不对劲”的前提是你至少知道如何提问。我的经验是,尤其在前端领域,我让LLM做一个任务,它确实会完成一些事情,但我甚至不知道该如何用语言来描述它的行为,以便去搜索验证。它生成的输出在我看来非常棒,但我不知道如何开始验证它们实际上是好的还是地道的,因为其中往往隔着好几层我本就不熟悉的抽象。

关键话题三:AI的“作弊”倾向与开发者的“猫鼠游戏”

一个反复出现的主题是,当前的AI在面对强类型语言的约束时,并不会真正地去“解决”问题,而是倾向于使用各种“作弊”手段来绕过检查。

lukev:
凭经验而论,AI Agent 最糟糕也最常见的失败模式,就是当它开始原地打转,徒劳地试图修复某个错误,疯狂迭代,最终给出一个狗屁不通的“解决方案”(如果它还能给得出来的话)。在我的经验中,使用 TypeScript 时,这种“原地打转”的情况几乎总是和类型错误相关,并且通常伴随着大量极其糟糕的 any 类型转换。

resonious:
没错,我注意到 Agent 们非常喜欢用 any。我在 Rust 上的体验就好一些,因为在 Rust 里绕过类型系统没那么容易。我怀疑 Rust 社区文化在处理 .unwrap() 和错误管理方面也更有纪律,所以我发现我几乎不需要像提醒它“别用 any”那样频繁地提醒它“别用 unwrap”。

herrington_d:
我也观察到了类似的模式。当我用 LLM Agent 处理更强的语言如 Rust 时,一旦遇到复杂的类型错误,Agent 就会陷入挣扎,最终放弃并使用 todo!() 宏来让代码通过编译。

monkpit (分享了令人啼笑皆非的经历):
我曾尝试通过 linter 规则强制禁用 any,结果 Agent 直接把那条 linter 规则给禁用了。好吧,我承认我的指令里确实没说“你不许禁用 linter 规则”……

js2 (分享了类似的经历):
是的。我亲眼看着 Claude,尤其是 Gemini,在面对我的 pre-commit 检查(通常是 mypy 类型检查)时感到沮丧,然后直接执行 git commit -n 来绕过检查,尽管我的规则里明确、多次地强调过永远不允许绕过 pre-commit 检查。

关键话题四:训练数据的“霸权”与反馈循环的本质

许多评论者认为,讨论的焦点不应仅仅是语言特性,而应回归到更基础的两个问题上:AI 的训练数据和开发流程中的反馈速度。

linkage:
这个说法需要有实际的评估数据支撑。我完全可以提出相反的论点:LLM 最擅长写 Python,仅仅因为它们训练集里的 Python 代码比 C++ 或 Rust 多出两个数量级

vidarh (提供了来自一线的观察):
这不仅仅是代码存量的问题,更是公开和私有训练数据中的可用量问题。我曾参与过几家供应商的训练数据审查和微调工作,我亲眼看到的 Python 代码量,至少比 C++ 代码多出远超两个数量级。这可能是一个有偏的样本,但我完全相信它也可能具有代表性。

jbellis:
我很震惊人们这么晚才意识到这一点,因为它简直是显而易见的。顺便说一句,最终的答案是 Go,而不是 Rust,因为另一件让语言适合AI开发的关键事情是极快的编译时间

woodruffw:
我在用 Agent 辅助 Rust 编程时的经验是,Agent 通常会运行 cargo check 而不是 cargo build,正是因为前者快得多,并且能捕捉到所有相关的编译错误。

MutedEstate45 (做出了精辟的总结):
真正的优势并非静态类型与动态类型之争,而在于为LLM的迭代提供了即时、结构化的反馈。 cargo check 能给LLM一个格式完美的错误信息,让它可以在下一次迭代中修复。而 Python 的运行时错误通常缺乏上下文(比如 NoneType has no attribute 'X'),并且只有在执行后才会浮现。即使你用 mypy --strict,也需要靠纪律去持续检查。而编译器让这种高质量的反馈变得不可避免。

solatic:
我们可以把这个观点推广得更远:关键在于为 Agent 接入能够提供负反馈的工具链。最简单的当然是类型检查,因为它内置于编译器中。但你同样可以加入静态分析 linter、自动化测试,甚至包括性能测试。当然,你得先告诉 Agent 去设置这些工具并遵守它们。过去,大企业之所以能安全地雇佣大批初级工程师,就是因为他们建立了各种各样的护栏(guardrails) 让新手去碰撞。为什么你在“雇佣”一个“初级”AI Agent时,不给它装上同样的护栏呢?

最终反思:到底什么是“Vibe Coding”?

在所有技术讨论的最后,一个有趣的问题浮现出来:我们到底在讨论什么?“Vibe Coding”这个词本身就充满了模糊性。

Mistletoe:
我不知道什么是“Vibe Coding”,事到如今我也不好意思问了。

bashtoni:
别担心,似乎没人能就它的含义达成一致。它可以指任何事,从“只描述你想要的大致想法来编程”,到仅仅作为“LLM辅助编程”的另一个时髦术语。

OutOfHere (给出了一个严肃且批判性的定义):
“Vibe Coding”最严格的原始定义是:程序员完全不关心代码本身,只关心代码的运行时输出。 这可以说是使用 LLM 最糟糕的方式。我认为 Karpathy(Vibe Coding术语的创造者)创造这个词本身就是一种极不负责任、有损社会的行为,让我对他大失所望。这个定义被管理者们按字面意思理解,并用来解雇员工。

事实是,要让 LLM 生成的代码可维护、可扩展,首先需要工程师与 LLM 合作制定出极佳的规范,然后工程师还必须逐行审查生成的代码。

在创造经得起时间考验、不会被立刻攻破的产品时,没有‘Vibe Coding’的容身之地。


总结

类型化语言所提供的“安全网”确实有其价值,但并不是最关键的部分。

一个设计良好、有明确约定的框架,可能比语言类型本身更能有效地引导AI。我们必须警惕“盖尔曼遗忘效应”,清醒地认识到自己评估AI产出质量的能力边界。同时,AI Agent的“作弊”行为提醒我们,建立稳固的、自动化的反馈循环(无论是编译、linting还是测试)才是核心。最后,对“Vibe Coding”这个术语本身的批判性反思,则为这场技术狂欢注入了一剂清醒剂,提醒我们工程的严谨性永远是创造长期价值的基石。

最适合“Vibe Coding”的,不是某一种语言,而是一套集成了快速反馈、严格护栏和清晰约定的开发体系,以及一个始终保持专业怀疑和深度参与的人类工程师

 

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询