经过两年的氛围编码,我回到手写了。
After two years of vibecoding, I'm back to writing by hand

原始链接: https://atmoio.substack.com/p/after-two-years-of-vibecoding-im

许多人开始使用人工智能编码工具时充满热情,并迅速将其应用于复杂的任务。然而,经验丰富的工程师们发现了一个关键的局限性:虽然人工智能擅长于孤立的代码片段,但难以维护整个项目的完整性。 最初对详细规范的吸引力(“规格驱动开发”)被证明是无效的,因为人工智能在迭代开发过程中缺乏人类工程师的适应性。生成的代码*看起来*是正确的——甚至能产生令人印象深刻的拉取请求——但彻底审查会发现潜在的“漏洞”——不一致、结构缺陷的代码,不尊重更大的代码库。 本质上,人工智能可以用单个代码块讲述一个好的故事,但无法为整个项目创建一个连贯的叙述。这种认识促使作者放弃了大多数任务中使用人工智能生成代码,发现手工编写的代码最终更快、更准确、更可靠,考虑到集成和维护的全部成本。

## 回归手写代码与AI代理的潜力 一位开发者(“mobitar”)分享了在两年后停止使用AI生成代码(“vibecoding”)的经验,引发了关于人类程序员与AI编码助手之间不断演变的关系的讨论。最初的热情逐渐消退,因为作者发现AI生成的代码缺乏整体理解和结构完整性。 评论者普遍认为,当前AI工具在局部任务和重构方面表现出色,*前提是得到有效引导*。Simonw认为问题不在于AI本身,而在于缺乏“代理管理技能”——即指导AI清理自身工作,尤其是在拥有强大的自动化测试套件的情况下。其他人则强调了手动修复AI生成代码的沮丧感,以及战略性地选择何时进行人工干预的必要性。 一个关键点是AI生成测试的质量,通常要么过于具体,要么缺少关键的概念性检查。成功的集成似乎依赖于利用现有、结构良好的代码库作为AI学习的示例。大家普遍认为AI是一种强大的工具,但需要积极管理和对底层代码有深刻理解,以避免制造“混乱”。也有人提醒不要过度依赖AI来学习,强调基础编码技能的重要性。
相关文章

原文

Most people’s journey with AI coding starts the same: you give it a simple task. You’re impressed. So you give it a large task. You’re even more impressed.

You open X and draft up a rant on job displacement.

If you’ve persisted past this point: congratulations, you understand AI coding better than 99% of people.

Serious engineers using AI to do real work and not just weekend projects largely also follow a predictable development arc.

Still amazed at the big task you gave it, you wonder if you can keep giving it bigger and bigger tasks. Maybe even that haunting refactor no one wants to take on?

But here’s where the curtain starts to crinkle.

On the one hand, you’re amazed at how well it seems to understand you. On the other hand, it makes frustrating errors and decisions that clearly go against the shared understanding you’ve developed.

You quickly learn that being angry at the model serves no purpose, so you begin to internalize any unsatisfactory output.

“It’s me. My prompt sucked. It was under-specified.”

“If I can specify it, it can build it. The sky’s the limit,” you think.

So you open Obsidian and begin drafting beefy spec docs that describe the feature in your head with impressive detail. Maybe you’ve put together a full page of a prompt, and spent half an hour doing so.

But you find that spec-driven development doesn’t work either. In real life, design docs and specs are living documents that evolve in a volatile manner through discovery and implementation. Imagine if in a real company you wrote a design doc in 1 hour for a complex architecture, handed it off to a mid-level engineer (and told him not to discuss the doc with anyone), and took off on vacation.

Not only does an agent not have the ability to evolve a specification over a multi-week period as it builds out its lower components, it also makes decisions upfront that it later doesn’t deviate from. And most agents simply surrender once they feel the problem and solution has gotten away from them (though this rarely happens anymore, since agents will just force themselves through the walls of the maze.)

What’s worse is code that agents write looks plausible and impressive while it’s being written and presented to you. It even looks good in pull requests (as both you and the agent are well trained in what a “good” pull request looks like).

It’s not until I opened up the full codebase and read its latest state cover to cover that I began to see what we theorized and hoped was only a diminishing artifact of earlier models: slop.

It was pure, unadulterated slop. I was bewildered. Had I not reviewed every line of code before admitting it? Where did all this...gunk..come from?

In retrospect, it made sense. Agents write units of changes that look good in isolation. They are consistent with themselves and your prompt. But respect for the whole, there is not. Respect for structural integrity there is not. Respect even for neighboring patterns there was not.

The AI had simply told me a good story. Like vibewriting a novel, the agent showed me a good couple paragraphs that sure enough made sense and were structurally and syntactically correct. Hell, it even picked up on the idiosyncrasies of the various characters. But for whatever reason, when you read the whole chapter, it’s a mess. It makes no sense in the overall context of the book and the preceding and proceeding chapters.

After reading months of cumulative highly-specified agentic code, I said to myself: I’m not shipping this shit. I’m not gonna charge users for this. And I’m not going to promise users to protect their data with this.

I’m not going to lie to my users with this.

So I’m back to writing by hand for most things. Amazingly, I’m faster, more accurate, more creative, more productive, and more efficient than AI, when you price everything in, and not just code tokens per hour.

You can watch the video counterpart to this essay on YouTube:

联系我们 contact @ memedata.com