AI + Socratic 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 已經能完整串起整個學習流程,提供近乎一條龍式的體驗。