还记得吗,那时候用自动补全就意味着你并不是在“真正”编程?

autocomplete

一个真实的Stack Overflow 问题来自将近 15 年前。人们真的在怀疑自动补全是不是错的。

现在看看我们。

很长一段时间里,我有一个非常简单的方法来衡量自己是否在成为更好的开发者:

我自己能写多少代码?

  • 我能记住语法吗?
  • 我能在不查任何东西的情况下构建这个组件吗?
  • 我能在不求助于人的情况下解决这个 bug 吗?
  • 我能盯着一个空白文件,完全凭记忆把它变成软件吗?

我觉得很多自学成才的开发者都吸收了这种观念的某个版本:

  • 如果你需要 Stack Overflow,你就是在作弊。(与此同时,我们中有一半人把它固定在标签页里。)
  • 如果你需要查文档,说明你并没有真正掌握它。
  • 如果你太频繁地使用自动补全,你就是在变懒。

而现在,在 AI 时代:

如果代码是模型写的,那你真的构建了任何东西吗?

我以前对这个问题担忧的程度,超过了我愿意承认的。

我不再这样了。

在构建了更多软件、弄坏了更多软件、调试了更多软件,并维护了那些五分钟前看起来还完全正常的代码之后,我开始用非常不同的方式衡量自己的能力。

问题不是:

我个人敲了多少行代码?

问题是:

  • 我理解这个系统在做什么吗?
  • 我能识别出它什么时候出错吗?
  • 当顺利路径消失时,我能调试它吗?
  • 我能解释为什么架构是现在这个样子吗?
  • 我能在不破坏三个不相关功能的情况下修改它吗?
  • 我下个月能维护它吗?
  • 我愿意为结果负责吗?

这些问题最终被证明要比敲代码难得多。

代码生成现在是简单的部分

这就是 2026 年编程的奇怪之处。

你可以描述一个想法,几乎瞬间就能得到数百行看起来合理的代码。有时这些代码甚至能运行。最初几次,这感觉像魔法。

然后你构建了一些复杂的东西。突然之间,模型会:

  • 修好一个 bug,又制造出另一个
  • 重复其他地方已经存在的逻辑
  • 自信地误解你的架构
  • 通过了测试,却违反了实际需求
  • 添加你从未要求的抽象
  • 移除你并未意识到依赖于其他东西的行为
  • 解决的是你描述的问题,而不是你实际遇到的问题

然后你意识到一件重要的事。

生成代码从来都不是工作的全部。它只是最显眼的那部分。

最难的技能变成了判断什么时候出了问题

AI 实际上让我花了更多时间思考软件。不一定是敲软件。而是思考它。

当一个智能体产出一份实现时,我必须问:

  • 它为什么选择这种做法?
  • 这个该放在这里吗?
  • 这个状态归正确的组件所有吗?
  • 我们是在修复根因还是在掩盖症状?
  • 当它失败时会发生什么?
  • 当它运行两次时会发生什么?
  • 当用户做了完全不讲理的事情时会发生什么?
  • 这份实现和代码库的其余部分一致吗?

以及我个人最喜欢的:

它为什么能跑通?

最后一个问题很重要,因为能跑的代码和你理解的代码不是一回事。

我不希望我的项目里有那种像是神谕递给我的神秘造物一样的软件。如果我解释不了它,我就还不信任它。

调试改变了我对作者身份的看法

写代码感觉很有产出。调试则教会你,你是否真正理解了自己构建的东西。

这两者之间有很大区别:

“AI 创建了这个功能。”

以及:

“AI 创建了一份初始实现,我发现了状态为什么会在组件之间泄漏,追踪了回归,修改了所有权模型,测试了边界情况,并验证了修复。”

第二种经历让你对系统了解得多得多。

而在某个时刻我意识到:那也是编程。也许更重要的是,那是工程。

作者身份不只是按下产生字符的按键。

  • 它是做决策。
  • 它是理解后果。
  • 它是拒绝糟糕的做法。
  • 它是决定什么该留下。

我曾以为需要帮助就意味着我不够好

自学成才可能会制造出一种奇怪的不安全感。

总有一个你不知道的概念。总有一个更懂网络的开发者。总有一个能面不改色解释内存管理的人。总有一个仓库,里面每个文件看起来都像是用外星语言写的。

于是你开始把独立当作能力的证明。

“如果我能不靠帮助做到这件事,那我一定真的属于这里。”

AI 直接戳中了那种不安全感。因为现在帮助永远都在。而且它能做很多事。

我不得不停止追问使用帮助是否让我的技能失效。开发者一直都在使用工具:

  • 文档是工具。
  • 库是工具。
  • 框架是工具。
  • 编译器是工具。
  • 搜索引擎是工具。
  • IDE 是工具。

AI 是另一个极其强大的工具。

有趣的问题不是这个工具是否参与其中。有趣的问题是当这个工具出错时会发生什么。

AI 生成代码的速度比我理解它的速度还快

ai

这大概是我发现的最大危险。

生成速度很诱人。你添加功能的速度可以快过你为它们建立心智模型的速度。

一个提示变成三个文件。另一个提示变成一个抽象层。再一个提示悄悄改动了某个你并不知道是承重结构的东西。

然后有一天某个东西坏了,而你站在一个名义上属于你、却无法向任何人解释——包括你自己——的代码库里。

这就是陷阱。过去的瓶颈是我写代码的速度。现在是理解代码的速度,而工具不会慢下来等我。

所以我不得不养成几个习惯:

  • 在接受 diff 之前先读它。全部读完。
  • 让模型解释它的选择,然后检查这个解释是否真的和代码相符。
  • 让改动小到我能装进脑子里。
  • 测试不合理的情况,而不只是顺利路径。
  • 如果我无法解释它为什么能工作,它就不上线。

这些习惯没有一个和打字有关。全都和理解有关。

我现在用的记分牌

我不再数行数了。我问自己是否理解我交付的东西,是否能在它坏掉时修好它,以及我是否愿意为它背书。

而下面这件事让我确信旧的记分牌是错的。

我的 GitHub 账号已经超过十年了。

其中很长一段时间,它很安静。我经历过职业中断。我换过方向。生活做了生活该做的事。

然而在过去一年里,我创建和维护的项目比那十年加起来还多。

我不认为这是巧合。

我不是说这些工具替我写好了作品集。仍然得有人决定要做什么、调试它、发布它,并让它持续运行。但过去那套衡量标准,我能仅凭记忆、独自一人、从一个空白文件开始做出这一切吗?,一直在悄悄阻止我把事情做完。

一旦我不再用它,我就开始动手构建了。