没有 Vibe 工程。
There is no Vibe Engineering

原始链接: https://serce.me/posts/2025-31-03-there-is-no-vibe-engineering

“氛围编程”(Vibe coding),由Andrej Karpathy推广,指的是利用AI通过提示生成代码,关注结果而非直接与代码库交互。虽然它对快速原型设计很有用,但它并不能替代软件工程。软件工程是“整合时间的编程”,包含系统设计、可扩展性、安全性以及长期可维护性。而氛围编程忽略了这些至关重要的工程考量。 虽然未来可能会出现AI生成的代码组件,但创建可靠的系统仍然需要严格的测试、监控和传统的工程实践。这种潜在的“氛围工程”本质上将是带有AI辅助的标准软件工程,重点放在架构和平台工程上。关键问题是:你是否足够信任一个AI生成的系统,以至于愿意为它值班?除非答案是响亮的“是的”,否则氛围编程仍然只是快速原型设计的工具,而非完整的软件工程。

这篇 Hacker News 讨论串探讨了利用生成式 AI 进行“氛围编程”(vibe coding)的概念。一位用户认为,对 AI 输出施加限制会成倍地增加获得理想结果的难度,从而限制了它在复杂软件工程中的应用。他们认为,“氛围编程”更适合数据科学的探索性编程,因为约束较少。 讨论还探讨了 AI 编程的未来潜力,一些人对快速发展持乐观态度,另一些人则预测会达到平台期。人们对 AI 是否能够在流行框架之外创造新颖的解决方案以及它是否有可能降低编码标准表示担忧。工程师愿意为 AI 生成的系统承担值班任务被提出作为衡量 AI 可靠性的指标。 讨论串涉及到 AI 辅助编码中测试和调试的作用,并将“氛围编程”与更严格的工程实践需求进行了对比。有人建议采取折中方案,即 AI 辅助但并不完全取代人工开发者。一些人认为“粗糙编程”(slop coding)是测试不足和标准低下的结果,而另一些人则强调了 AI 工具加速测试和调试的潜力。
相关文章

原文

You've probably heard about "vibe coding" by now. The term was recently coined by Andrej Karpathy in his tweet. Andrej defines Vibe Coding as "a new kind of coding, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists". The key difference between vibe coding and normal coding is that the engineer doesn’t interact with the codebase directly, and instead converses with the agent and inspects the final outcome.

The term caught on and Twitter quickly flooded with posts about how AI has radically transformed coding and will soon replace all software engineers. While AI undeniably impacts the way we write code, it hasn't fundamentally changed our role as engineers. Allow me to explain.

When the tornado comes whipping through your neighborhood and your house gets blown down and somehow you didn’t have insurance and you lose everything, you can’t control that. But you can certainly control how you’re gonna react to that situation.

Clancy Gilroy

Coding vs Engineering

Let’s start by clearly defining what a software engineer’s role entails, and to the surprise of some people, software engineering is not writing code. Yet even highly technical people often conflate coding and engineering. The most concise and precise definition of software engineering I've encountered is:

Software engineering is programming integrated over time

Software Engineering at Google: Lessons Learned from Programming Over Time

The integrated over time part is crucial. It highlights that software engineering isn't simply writing a functioning program but building a system that successfully serves the needs, can scale to the demand, and is able to evolve over its complete lifespan.

However, similarly to normal coding, vibe coding only covers coding at a single point in time. If an agent is used to generate a quick prototype and validate it with tests, that’s coding – not engineering. Engineering means designing systems capable of withstanding real-world conditions, sustaining workloads, resisting security threats, migrating and supporting users’ data in the system, and adapting to new requirements often many years down the line.

Vibe coding is interacting with the codebase via prompts. As the implementation is hidden from the "vibe coder", all the engineering concerns will inevitably get ignored. Many of the concerns are hard to express in a prompt, and many of them are hard to verify by only inspecting the final artifact. Historically, all engineering practices have tried to shift all those concerns left – to the earlier stages of development when they’re cheap to address. Yet with vibe coding, they’re shifted very far to the right – when addressing them is expensive.

The question of whether an AI system can perform the complete engineering cycle and build and evolve software the same way a human can remains open. However, there are no signs of it being able to do so at this point, and if it one day happens, it won’t have anything to do with vibe coding – at least the way it’s defined today.

The real Vibe Engineering

As a thought experiment, we can consider whether it’s possible to engineer reliable systems composed entirely of "vibe-coded" components. After all, less reliable consumer hardware once replaced mainframes, and we learned how to build reliable systems from inherently unreliable parts.

Such systems could tightly encapsulate AI-generated black-box components with rigorous testing, detailed performance profiling, tracing, canary deployments, and strict protocol compatibility checks. In other words, the systems would employ the same rigorous engineering practices that underpin today's software – but likely much, much stricter.

In such a future, every engineer essentially becomes a mix of an architect and a platform engineer. We could even coin the term "Vibe Engineering" for this new role – but its definition would ultimately be the same as traditional software engineering. So, there is no distinct "Vibe Engineering" – just software engineering, perhaps involving less code typing than before.

When might this future arrive? It's uncertain. A good indicator, however, might be when engineers confidently say "yes" to the question: "Would you happily go on-call for a system of fully AI-generated services?". So far, the answer seems to be a predominant "no".

Conclusion

Vibe Coding as a practice is here to stay. It works, and it solves real-world problems – getting you from zero to a working prototype in hours. Yet, at the moment, it isn’t suitable for building production-grade software.

It is possible that there’ll be a future where software is built from vibe-coded blocks, but the work of designing software able to evolve and scale doesn’t go away. That’s not vibe engineering – that’s just engineering, even if the coding part of it will look a bit different.

Thank you for reading.

Subscribe

I'll be sending an email every time I publish a new post.

Or, subscribe with RSS.

联系我们 contact @ memedata.com