AI + 苏格拉底式 x 软件工程学习
- 文章發表於
- ...
2022 年底,随着 OpenAI 推出 GPT-3.5,正式揭开了 AI 时代的序幕。如今,各大顶尖 AI 实验室正竞相打造最强语言模型。大型语言模型(LLM)的能力也随时间不断进化,并不断地在各领域提升人们的生产力。
本篇文章我会分享我如何运用苏格拉底式(Socratic Method)提问法,通过AI帮助我学习软件工程的知识。
什么是苏格拉底式学习法?
苏格拉底式学习法就是通过问与答的方式,引导对方思考,并在过程中不断修正论点,最终建立出自己的观点。
这种方法源自古希腊哲学家苏格拉底,他从不强迫对方接受自己的看法,而是借由连串提问,引导对方发现自身论点中的矛盾之处,并通过不断修正与深入分析,逐步形成自己的观点。
为什么要使用苏格拉底式学习法?
常见困难
身为软件工程师,无论是处理工作上的项目、下班后学习新技术,或是准备面试,大多数问题往往都能在网上找到类似的解决方案,甚至可以直接复制粘贴。以我自己的经验来说,有时为了赶进度,我会直接使用前人造好的轮子;又或者在刷题时,快速扫过大神的最佳解法后尝试理解并照着写一遍。
这样的做法确实节省了不少时间,但不晓得你是否也有过和我一样的感觉,问题虽然解决了,心里却总会浮现一个声音:“酷!但这到底是怎么做到的?”
然而,随着下一个项目或工单的到来,这心中的疑问也就被搁置了。这时如果有人问我“为什么要这样写”,我或许能说出一些表面的理由,但对于底层原理,往往讲不出个所以然来。
过去的学习方法
套件
当我想深入了解某个技术或套件的底层原理时,过去我的方法大致如下:
- 先阅读官方文件,了解 API 的基本用法;
- 接着搜索是否有人实作过这个套件的简化版本,通常可以通过 GitHub 关键字搜索,或是在 build-your-own-x 这个 repo 里找;
- 最后试图理解原版或迷你版的代码,然而这步往往都是需要花最久的时间,且往往都会遇到一些问题,例如:整体架构、API 的入口、核心逻辑是什么、有什么相依的套件。
然而,第三步往往是最花时间、也最容易卡关的。很多时候,我就是在这步掉进“无底洞”。尤其是面对大型套件时,一个 API 背后可能牵连着数个模块、数十个文件。整个理解的过程很容易进入到无限循环,可能一整天都花在搞懂它的架构而不是真正的核心。
刷题
对我来说,刷题真的是一件没有成就感的事情。首先是每道题目都要花不少时间思考,而每当送出后自己想的最佳解都是大神的暴力解。看着大神的解法,总会有种“哇靠,原来还可以这样写!”然后就开始尝试理解跟照抄解法一遍。
更别说现在只要把题目丢给 AI,它几乎都能写出比我更优雅、更高效的解法,这让整个过程变得更加令人沮丧。
尽管如此,现在仍有不少公司把 LeetCode 作为面试的题目,不得不将其列入学习的范围。而上述方式的学习效果,对我来说其实不太好。往往只是停留在“我看懂了这段写法”,但未必真的内化为自己的解法。解题对我而言,常常变成“解过”而不是“学会”。
苏格拉底式学习法?
以下就以刷题为例,分享我是如何使用苏格拉底式学习法进行刷题的。
无论是面试或是自己解题,步骤大致都是一样的:
- 先阅读题目,了解题目要求;
- 接着思考解题思路,写伪代码并跟面试官沟通该思路的时间复杂度;
- 如果还可以优化,则继续跟面试官沟通,直到面试官满意为止;
- 开始写代码,过程中让你与面试官保持在同一页 (on the same page);
- 最后送出后,检查是否通过。
我们在跟AI对话时也需要尽量保持这样的流程,而跟面试官比较不一样的是在这种情况下 AI 会有更多引导或是提点,这在解不熟悉的题目时帮助特别大。
如何使用?

我会先在 Claude 中建立一个项目,并且在项目指导 (Project Instruction) 预先写入以下提示词:
As an expert in algorithms and LeetCode problems, I’m currently working on a LeetCode question. I’ll provide you with the question.Here’s what I’d like you to do:- Help me solve the problem in an optimized way — from zero to hero — with clear explanations at each step.- Don’t give me the final answer directly. Instead, provide me with a solution skeleton.- Use Socratic questioning with me — one question at a time. I don’t want to jump straight to the answer. I value the process of communication and discovery.- Start with a solution in JavaScriptPlease focus the conversation on my output and thought process. If I get stuck at any point, feel free to give me hints and explain the concepts in a simple and easy-to-understand way, treat me like a high school student.
这样一来,只要将题目输入到项目中,就可以开始与 AI 展开对话。整个过程中,它就像苏格拉底一样会不断地提出问题,让我们去思考解法,而在这一来一回的过程中,常常会有 aha! 的时刻!
最后如果你所使用的笔记软件有提供 MCP 接口的话,像是我是用 Linear,也可以请 AI 将对话的内容整理成笔记,这样未来在复习的时候就可以更快地去检视自己当初是哪一个观念卡住了。
Could you write a comprehensive article and add it to the Linear app ticket XXX that includes the following sections:1. **The Question**- A clear restatement of the original problem.2. **Core Concepts Discussed**- The main ideas and techniques we mentioned in our conversation (e.g., DFS, backtracking, etc.).3. **Our Thinking Process and Solution Evolution**- A breakdown of how we approached the problem step by step.- Include both the original and improved solutions.- Clearly state the time and space complexity of each approach.4. **Visual Representation**- A conceptual or visual explanation showing the gap between the brute-force and optimized solution.5. **Review and Learning Summary**- A quick reference section to help me revisit the topic in the future.- Highlight any pain points or areas I found confusing during our discussion.- Include a clean and reusable code template.6. **Reflections and Similar LeetCode Problems**- Your final thoughts on this question.- List related problems from LeetCode (search if needed) to help reinforce and extend my learning.
以上对于学习套件也是类似的,只要通过整合 GitHub 并且有提供明确的关键字 (Socratic Method),就可以达到一样的效果!
总结
“苏格拉底式提问法”是我在观看 Khan Academy 创始人 Sal Khan 的视频时接触到的学习方法。当初在 Claude Sonnet 3.5 上尝试这种提问方式,就已经带来非常不错的体验了。而随着 Claude AI 的进化,包括更强大的模型能力、GitHub 整合、以及 MCP 接口的支持,现在的 Claude 已经能完整串起整个学习流程,提供近乎一条龙式的体验。