停止复制粘贴:如何利用 AI 进行“苏格拉底式调试”以真正理解你的代码
How to use AI code assistants for "Socratic debugging" to understand errors deeply instead of just copying the fix.

停止复制粘贴:如何利用 AI 进行“苏格拉底式调试”以真正理解你的代码

Advertisement

我们都有过这种经历。

现在是晚上 11:30。截止日期就在明天早上。你的 React 组件正在报错,而错误信息完全让人摸不着头脑。

你的大脑已经宕机了。你盯着控制台日志,叹了口气,选中了错误信息。

Ctrl+C。

你切换标签页到 ChatGPT 或 Claude。

Ctrl+V。

“修复这个,”你输入道。

AI 吐出一段代码。你把它粘贴回编辑器。错误消失了。应用能跑了。你提交代码然后去睡觉。

但这里有一个令人不安的真相:你实际上并没有修复那个 bug。

是 AI 修复了它。你只是充当了剪贴板。

如果我让你解释为什么这个修复有效,或者底层的逻辑缺陷是什么,你能做到吗?对于我们中的许多人来说,诚实的回答是“不能”。

这就是“复制粘贴陷阱”。它不仅在你的代码库中建立了技术债务,更糟糕的是,它在你的大脑中建立了技术债务。

有一种更好的方法。它被称为苏格拉底式调试(Socratic Debugging),这就是你如何将 AI 从拐杖转变为世界级导师的方法。

能力的错觉

Image

当我们依赖 AI 编写代码时,我们会感觉很高效。

我们看到功能被构建出来。我们看到工单移动到“完成”。这感觉像是进步。

但在生产理解之间存在巨大的差异。

当你复制粘贴一个解决方案时,你绕过了挣扎的过程。而挣扎正是学习发生的地方。

神经科学告诉我们,当大脑尝试解决问题、失败、然后找到解决方案时,它会建立新的通路。

如果你跳过了失败和探索的过程,你就跳过了神经的生长。

“脆弱代码库”问题

当你粘贴你不理解的代码时,你引入了脆弱性。

也许 AI 使用了一个你并不完全掌握的库。也许它处理了一个特定的边缘情况,但忽略了其他三种。

六个月后,当那段代码崩溃时,你将不知道如何修复它,因为你从一开始就不知道它是如何工作的。

你变成了自己仓库里的陌生人。

“终身初级”综合症

高级工程师之所以高级,不是因为他们打字更快。

他们之所以高级,是因为他们对系统如何运作有着稳固的心智模型。他们能预测 bug 可能藏在哪里。

如果你将调试工作外包给大语言模型(LLM),你就停止了构建这些心智模型。你冒着技能停滞的风险,无论你工作了多少年,依然是一个“初级”开发者。

进入苏格拉底式调试

Image

那么,我们该如何解决这个问题?我们要禁止 AI 吗?

绝对不是。AI 是我们拥有的最强大的学习工具。我们只需要改变我们与它对话的方式。

我们需要使用苏格拉底教学法

苏格拉底是一位希腊哲学家,他不给答案。相反,他提问。他通过挑战学生的假设,引导他们自己发现真理。

苏格拉底式调试意味着要求 AI 把你当作学生,而不是客户。

不要索取代码,而是索取提示。

不要索取解决方案,而是索取概念性的解释。

你利用 AI 来模拟与一位耐心的、专家级的高级工程师进行结对编程,而这位工程师希望来掌握键盘。

理解力的提示词框架

Image

要做到这一点,你必须打破自己的习惯。你必须克制问“我该如何修复这个?”的冲动。

以下是我用来强迫 AI 进入“老师模式”的具体提示词。

1. “不要修复它”提示词

当我卡住了但想学习时,这是我的首选提示词。

提示词: “我下面的代码有一个 bug。请不要给我解决方案的代码。相反,请问我 3 个引导性问题,帮助我自己发现 bug。请扮演苏格拉底式导师的角色。”

为什么它有效: 它迫使你回头看你的代码。

AI 可能会问:“检查第 45 行。变量 user_id 在进入循环之前的数据类型是什么?”

突然间,你开始思考了。“哦,它是一个字符串,但我正在将它与整数进行比较。”

发现了这个 bug。多巴胺带来的快感属于你。下次你会记住这个错误的。

2. “解释逻辑”提示词

有时代码能运行,但你不知道为什么。也许你是之前粘贴的代码,或者你正在阅读遗留代码库。

提示词: “用通俗易懂的语言解释这个函数的控制流。不要给我看代码。像我是初级开发人员一样,一步一步带我过一遍逻辑。”

为什么它有效: 它将语法转化为概念。

它迫使你想象数据在应用程序中的移动。这构建了我们之前谈到的心智模型。

3. “小黄鸭”提示词

小黄鸭调试法是一种经典的调试技术,即你对着一个无生命的物体说话。AI 让这只鸭子能回话了。

提示词: “我将解释我对为什么会发生这个 bug 的假设。听我的逻辑,并告诉我我的推理是否合理,或者我是否做出了错误的假设。”

为什么它有效: 它验证了你的思考过程。

如果你说,“我认为 API 超时了”,AI 可能会说,“这是可能的,但看错误日志,状态码是 500,而不是 408。这暗示了什么?”

它纠正了你的调试策略,使你成为更敏锐的调查员。

一个真实场景

让我们看看这在实践中是什么样子的。

想象一下,我正在写一个 Python 脚本来处理一个名字列表,但它一直崩溃并报 IndexError

老方法(复制粘贴陷阱)

我: “这是我的代码。它报 IndexError。修复它。”

AI: “这是修复后的代码。你在使用 range(len(list) + 1) 进行迭代,这导致了越界。把它改成 range(len(list))。”

我: 粘贴代码。 “谢谢。”

结果:我修复了 bug,但我并没有真正思考差一错误(off-by-one errors)。下周我可能会犯同样的错误。

新方法(苏格拉底式调试)

我: “我在这个循环中遇到了 IndexError。不要告诉我答案。给我一个关于我的逻辑哪里出错的提示。”

AI: “仔细看看你的 for 循环定义。如果你的列表有 5 个项目,有效的索引是多少?你的循环试图访问的最大数字是多少?”

我: “有效索引是 0 到 4。我的循环一直到... 哦等等。range(6) 是 0, 1, 2, 3, 4, 5。所以它试图访问索引 5,但这并不存在。”

AI: “完全正确。你将如何调整范围以确保它在最后一个有效索引处停止?”

我: “我只需要去掉 + 1。”

结果:我想象了数组。我在脑海中计算了索引。我理解了边界条件。我真正学到了东西。

为什么这能让你成为 10 倍效能的开发者

以这种方式使用 AI 会更慢。

我想明确这一点。它需要 5 分钟而不是 5 秒钟。

在时间紧迫时,复制粘贴是很诱人的。但如果你着眼于长远,苏格拉底式调试是职业生涯的作弊码。

你会变得独立

最终,你将不再那么需要 AI。你会开始问自己 AI 曾经问过你的那些问题。

你会自然地检查数据类型。你会自然地寻找差一错误。AI 的“声音”变成了你的内心独白。

你会搞定面试

技术面试基本上就是苏格拉底式的调试会议。

面试官让你解决一个问题并解释你的思考过程。

如果你过去一年只是在粘贴代码,你会大脑一片空白。

如果你过去一年都在与 ChatGPT 辩论逻辑,你会表达清晰、自信,并且能够解释你写的每一行代码背后的“为什么”。

结语:夺回键盘

生成式 AI 是一个工具。一把锤子可以盖房子,也可以砸扁你的拇指。这取决于你如何挥动它。

当我们利用 AI 来绕过理解时,我们正在自动化我们自己的淘汰过程。我们将自己训练成了一台我们不理解的机器的纯粹操作员。

但当我们利用 AI 来加深理解时,我们就成了超级学习者。

所以,下次你在控制台看到红色的错误信息时,停下来。

先不要伸手去按复制快捷键。

打开你的聊天窗口并输入:“帮我理解这个,但不要替我解决它。”

未来的你会为此感谢你的。

🔥 Share this Insight

𝕏 Post
How to use AI code assistants for "Socratic debugging" to understand errors deeply instead of just copying the fix.

停止复制粘贴:如何利用 AI 进行“苏格拉底式调试”以真正理解你的代码

我们都有过这种经历。 现在是晚上 11:30。截止日期就在明天早上。你的 React 组件正在报错,而错误信息完全让人摸不着头脑。 你的大脑已经宕机了。你盯着控制台日志,叹了口气,选中了错误信息。...

My Core Pick.
mycorepick.com

Advertisement

Back to Posts