超越记忆与能力错觉
Beyond Recall and the Illusion of Competence

原始链接: https://var0.xyz/posts/beyond-recall-and-the-illusion-of-competence.html

关于人工智能在编程领域的辩论往往偏离了重点,过多关注代码的“作者身份”,但这从来都不是软件工程的主要目标。一个系统的真正掌控权在于理解,而非仅仅是敲出语法。 AI 辅助编程的危险不在于它生成了代码,而在于它诱导开发者将“思考与调试”外包出去。当开发者依赖 AI 修复错误而不去探究根本原因时,他们便无法建立起关于系统运作的必要思维模型。这创造了一种“能力的幻觉”,一旦 AI 失效或出现复杂的意外问题,开发者就会束手无策。对于初级开发者而言,这一点尤为有害,因为它跳过了那些能构建深厚专业知识、虽耗时却至关重要的调试过程。 解决方案并非拒绝 AI,而是有策略地利用它来处理模板代码和语法,同时保持对架构和设计决策的掌控权。随着编写代码变得廉价,开发者的价值正在向更高层次的专业能力转移:即系统集成、故障模式分析、权衡取舍以及系统架构。最优秀的开发者将是那些既利用 AI 加速工作,又始终担当系统核心架构师角色的人。

这份 Hacker News 讨论探讨了人工智能所带来的“能力错觉”,即开发者可以在不理解底层系统的情况下生成可运行的代码。 核心观点包括: * **依赖的危险性:** 参与者警告称,在不理解“为什么”的情况下反复使用 AI 修复代码会导致系统极其脆弱。当复杂系统崩溃时,依赖 AI 的用户将缺乏修复系统所需的基础知识。 * **技能的重新定义:** 许多人认为,开发者的真正价值始终在于系统级的理解能力和判断力,而非单纯的代码产出速度。AI 迫使工程师的角色发生转变,工作重心日益转向架构设计、问题识别以及对 AI 输出结果的验证。 * **“产品”导向:** 评论者强调,代码仅仅是工具,真正的价值在于解决商业或产品问题。如果用 AI 更快地构建出错误的东西,那只是在“加速制造遗留代码”。 * **适应与演进:** 虽然有人担心 AI 会使基础编程技能过时,但也有人认为这是一种必要的演进。他们建议,成功现在需要将 AI 作为“认知伙伴”来掌握,同时在架构决策和解决问题上保持严格的把控权。
相关文章

原文

There seem to be two dominant opinions about AI and programming. One says AI is mostly useless because it writes horrible code and fixing its mistakes takes longer than writing the code yourself. The other says that AI-generated code is so good that it will eventually make programmers obsolete.

I think both arguments focus on the wrong thing because they focus on who writes the code.

We never wrote all the code

I've never considered that the ability to recall syntax and typing code from memory to be particularly important to my job. I use documentation. I search the internet. I copy examples from Stack Overflow. I read blog posts. I look at code written by colleagues.

In a modern software system, this is almost unavoidable anyway. A typical application might involve TypeScript, Python or Go, YAML, Dockerfiles, SQL, configuration files, CI pipelines and a dozen other technologies. Nobody has every detail of all of them memorized.

So if copying a useful piece of code from Stack Overflow has always been acceptable, why would asking a machine to produce that code be fundamentally different?

Ownership was never about authorship

There's another reason I don't find the "AI writes the code" argument particularly convincing: We have always worked on systems we didn't write.

You inherit a service from another team. Someone who left the company wrote half of it. Three people contributed to the part you're responsible for, and you don't even remember who wrote which function. Yet after working with the system for long enough, you start to think of it as yours. Why?

Not because you wrote every line. Because you understand it.

You know what it does. You know why it behaves the way it does. You know where its boundaries are, what its dependencies are, and what happens when something goes wrong.

That's what ownership actually feels like.

The dangerous thing to outsource

This is where I think AI-assisted programming gets interesting. The problem isn't that the machine writes the code, the problem is that it's very easy to let it take over the thinking as well.

There's a huge difference between saying "I understand what needs to happen; write this for me" and saying "make this work" and then accepting whatever comes back.

In the first case, you've delegated typing, while in the second you've delegated understanding. And those are not remotely equivalent.

Debugging is where it becomes obvious

Writing code is surprisingly easy to outsource. Debugging is much harder to outsource without giving up something important.

When you debug a system yourself, you're forced to construct a model of it. You have an expected outcome. Something different happened. So you work backwards: what should have happened? What would have needed to happen to produce the observed result? Where in the chain did reality diverge from your expectations?

After enough of these exercises, you develop something incredibly valuable: an intuition for how systems behave.

I've worked with developers who didn't have this skill. When something broke, they changed things at random. They simply shot in the dark until eventually something worked, but they had no idea why. That's not debugging.

AI makes it remarkably easy to fall into exactly this pattern. Give the machine the error, let it propose a fix, try the fix, report the next error, repeat until the tests pass. You can produce working software without ever developing a useful mental model of the software you're producing.

The illusion of competence

This is what worries me more than AI replacing programmers. AI can create the illusion that you understand a system because it can make the system work for you. You ask a question and get an answer. You encounter an error and get a patch. The patch doesn't work, so you provide the new error and get another patch. Eventually the machine finds something that works.

From the outside, this looks like competence. But if you don't understand why the solution works, you're not actually becoming more capable. You're becoming dependent on the machine to maintain the illusion.

And the consequences become particularly serious when something happens that the machine can't solve, or you just run out of tokens. At that point you need the mental model you never built.

This matters even more for juniors

For experienced developers, there's at least a large reservoir of knowledge built from years of working through problems the hard way, but for someone starting today that experience may never accumulate in the same way.

If every frustrating debugging session can be handed to an AI, there's little incentive to spend four hours figuring out why a system behaves the way it does. And those four hours are not wasted time. They're where the mental model comes from.

You don't learn systems by successfully changing them, you will be able to successfully change them once you are able to explain why they fail.

Don't outsource the understanding

I don't think the answer is to stop using AI, quite the opposite. Use it aggressively. Let it write the boilerplate. Let it remind you of syntax. Let it explore an unfamiliar library. Let it implement the tedious parts.

But keep the important part for yourself.

You should understand the problem. You should decide what the system should do. You should make the architectural decisions. You should be able to explain how the pieces fit together and why they were designed that way.

Let the AI write the code, not design the solutions.

The developer becomes more architectural

If writing code becomes cheap and accessible to everyone, then writing code stops being much of a differentiator. The developers who stand out will be the ones who understand systems.

Architecture. Integration. Distributed systems. Observability. Failure modes. Boundaries. Trade-offs. The things that exist around the code rather than inside it.

In that sense, AI may actually push developers toward a more architectural role.

The best developers won't be the ones who refuse to let the machine write their code. They'll be the ones who use the machine to understand their systems better, while remaining firmly in control of the decisions.


I made a video version of this discussion if you'd rather watch it: Beyond recall: The role of the Software Engineer in the age of AI.

Thanks for reading.

联系我们 contact @ memedata.com