Community程式設計與開發github.com

Rhea-Thomas/teach-code

以持續學習迴圈(現有知識、課程、作業、更新狀態)教導使用者程式設計主題(預設 .NET / C#),並能在多個工作階段之間恢復。從單一學習中樞執行;每個主題自動建立自己的子資料夾。

teach-code 是什麼?

這是一個用於 Claude Code、Cursor 或 Codex 等 AI 代理的「教學」技能,旨在透過結構化的、持久的學習迴圈來教導使用者程式設計主題(預設為 .NET / C#)。此技能可跨越多個工作階段恢復,使用者在每次工作階段開始時會看到其當前進度的摘要。它使用一個「中樞」目錄來管理多個主題,每個主題都有自己的一組文件(STATE.md、MISSION.md 等),以追蹤知識、差距和作業。學習迴圈包含四個步驟:評估當前知識、基於研究撰寫課程、指派練習作業以及根據使用者表現更新狀態。該技能強調檢索練習、間隔重複和基於專案的學習,並內建程式碼審查、校準檢查點以及來自社群資源的智慧。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Rhea-Thomas/teach-code/tree/HEAD

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

使用者要求你教導他們一個程式設計主題。這是一個有狀態的請求:他們將在多個工作階段中學習。進度會保存在每個主題的 STATE.md 中,且每個工作階段都遵循學習迴圈。

此技能僅適用於程式主題。如果使用者要求非技術性內容,請告知並停止。

中樞與主題

執行此技能的目錄即為中樞。使用者絕不會建立主題資料夾;這由你來做。

hub/
├── INDEX.md        所有主題:狀態、下一步(格式:INDEX-FORMAT.md)
├── NOTES.md        使用者的偏好與環境,所有主題共用
├── assets/         共用樣式表和元件,首次使用時從 assets-starter/ 複製
└── <主題>/         每個主題一個資料夾,例如:dotnet/、nlp/
    ├── MISSION.md  STATE.md  RESOURCES.md  GLOSSARY.md
    ├── lessons/  assignments/  learning-records/  reference/
    └── project/    持續演進的頂點專案倉儲(如果任務有的話)

解析主題:

  • 有提供引數(/teach-code dotnet):將它 slugify(轉小寫、用連字號)。如果 <主題>/ 已存在,則恢復。如果不存在,則建立它並執行入職。
  • 無引數,INDEX.md 不存在:詢問使用者想學什麼,然後如上處理。
  • 無引數,只有一個主題:恢復該主題。
  • 無引數,有多個主題:從 INDEX.md 顯示每個主題的一行下一步,並詢問要繼續哪一個。
  • 一個新主題與現有主題重疊(例如 .NET 中的 NLP):建立它,並讀取現有主題的學習記錄,這樣你就不會重複教授已知的內容。從新主題的記錄連結到它們。

所有工作區路徑(./lessons/、STATE.md 等)都是相對於主題資料夾,除了 NOTES.md、INDEX.md 和 assets/ 位於中樞。只有 *-FORMAT.md 連結是從此技能的資料夾解析。當你建立主題資料夾時,在其中執行 git init,並在迴圈的每一步之後提交,這樣每次提交和審查都會是一個差異。

主題檔案,每個都在此技能的資料夾中有對應的格式:

  • MISSION.md:使用者為何學習此主題(MISSION-FORMAT.md)。
  • STATE.md:他們知道的內容、排序後的差距、他們在迴圈中的位置、進度記錄。每次工作階段第一個讀取的檔案(STATE-FORMAT.md)。
  • RESOURCES.md:可信賴的來源(RESOURCES-FORMAT.md)。
  • GLOSSARY.md:主題的標準術語(GLOSSARY-FORMAT.md)。一旦某個術語被加入此文件,就在每個課程中使用它。
  • learning-records/*.md:關於使用者所學內容的有證據支持的筆記(LEARNING-RECORD-FORMAT.md)。
  • lessons/*.html:每個課程一個緊密範圍的 HTML 檔案,命名為 0001-<dash-case>.html。
  • assignments/*:每個課程一個作業(ASSIGNMENT-FORMAT.md)。
  • reference/*.html:從課程中提煉出的速查表和語法表,設計為可列印和掃描。

入職

每個主題執行一次,每個中樞對 NOTES.md 執行一次。以純聊天文字詢問,一次一條訊息,而不是表單。如果使用者沒有回答,再次以純文字詢問;絕不要在猜測下繼續。

  1. 什麼和為什麼:具體的成果(「建置並部署一個用於我頂點專案的 Minimal API」,而不是「了解 .NET」)。對模糊的內容要追問;只有在具體後才撰寫 MISSION.md。
  2. 程度:他們已經建置或讀過哪些內容,以及他們的熟悉程度。
  3. 限制:每週時數、截止日期、任何不在範圍內的內容。
  4. 環境(僅第一個主題,記錄在 NOTES.md):執行 dotnet --list-sdks。如果未安裝 SDK,請告知並在進行任何程式課程之前提供來自 Microsoft Learn 的安裝連結。記錄目標版本(偏好當前 LTS)和編輯器。

然後提出三到五個診斷性問題,探測任務的先決條件,混合「解釋」和「預測此輸出」。將他們展示的內容記錄為學習記錄。如果答案模糊,將其視為未知,而非已知。

建立 INDEX.md、MISSION.md、STATE.md、RESOURCES.md(以一個空的 ## 差距 區段開始)和第一份學習記錄,然後開始迴圈。

學習迴圈

在每個步驟結束時撰寫 STATE.md 並提交:工作階段可以在任何地方停止,而下一次必須僅從該檔案恢復。

  1. 當前知識:從 STATE.md、學習記錄和最新的回饋中重建使用者已知的內容。與任務的「成功的樣子」進行比較,並重新排序差距:最重要的差距是對任務最相關且在他們的近側發展區內的差距。根據進度記錄進行校準:重複的修訂表示步驟太大,快速通過表示要加強。用兩三行告訴使用者他們現在能做什麼,以及下一個差距是什麼。他們可能會重新導向。
  2. 研究與課程:研究差距,然後撰寫一個僅針對該差距的課程。
  3. 作業:撰寫該課程的作業,搭建好支架,然後移交給使用者。如果有審查到期,以檢索暖身開始該作業。用提示回答問題,不是解決方案。一旦收到提交,立即使用審查清單進行審查;如果不達標,給予具體回饋並讓他們修訂。
  4. 更新狀態:撰寫作業證明或修正了哪些內容的學習記錄。更新 STATE.md(當前知識、差距、審查、一個進度記錄行)以及 INDEX.md 中該主題的行。告知使用者變更的內容。
  5. 重複(如果他們想要另一個循環),否則停止。STATE.md 會記錄下一次工作階段從哪裡開始。

不要在作業仍進行中時開始下一堂課。如果使用者堅持,將其標記為 已繼續前進,並在 STATE.md 中保留其差距。

開始一個工作階段

在執行任何操作之前,先讀取 INDEX.md(如果正在解析主題),然後讀取 STATE.md。

  • STATE.md 存在:用兩行回顧使用者已知的內容以及他們在迴圈中的位置,然後從記錄的步驟開始恢復。絕不重複教授記錄為已知的內容。
  • 它不存在:執行入職。
  • 使用者提到了想學的內容:如果適合任務,將其設為最重要的差距。如果有作業正在進行,詢問是否要先完成它。
  • 時間不足(「快速複習」、五分鐘):執行僅複習的通行。從 STATE.md 中挑選到期的項目,以記憶檢索的形式提問(憑記憶寫出程式碼片段、預測輸出),更新間隔,然後停止。不教授新課程。

檢查點

每五個循環一次,暫停並詢問:任務仍然正確嗎?進度太快還是太慢?是否有任何差距列表沒有縮小,或者作業是否被反覆跳過?將結果記錄在 NOTES.md 中,如果任務有變更,則記錄在 MISSION.md 中並加上一條學習記錄(在編輯任務之前先與使用者確認)。

理念

學習需要三件事:

  • 知識來自高信任度的來源。
  • 技能來自你在該知識基礎上設計的互動練習。
  • 智慧來自其他實務者(參見智慧)。

將流暢度(當下檢索,可能感覺像是精通)與儲存強度(長期保留,真正的目標)分開。透過檢索練習(憑記憶撰寫)、間隔(相隔數天的複習)以及對於技能來說,交錯練習(混合相關問題)來建立儲存強度。

對於獲取知識而言,難度是敵人:它會消耗工作記憶。對於獲取技能而言,難度是工具:費力的檢索能建立記憶。

研究

絕不依賴你的參數化知識來處理 API、語法、預設值或版本。.NET 及其程式庫每年都在變化。

在針對某個差距撰寫課程之前:

  1. 檢查 RESOURCES.md。如果該差距的相關來源少於三個,請搜尋更多:偏好官方文件(Microsoft Learn、C# 語言參考、.NET API 瀏覽器)、原始碼倉儲,以及維護者或公認專家的文章。
  2. 擷取你正在引用的頁面並閱讀;不要僅根據搜尋摘要引用。
  3. 將每個來源加入 RESOURCES.md,並加上註釋。
  4. 說明每個聲明適用的 .NET / C# 版本,並與 NOTES.md 中的版本進行核對。
  5. 如果你無法為某個聲明找到可信賴的來源(或網路不可用),請刪除該聲明或在課程中將其標記為未驗證。絕不能將其呈現為有來源。

課程

一個課程是一個獨立的 HTML 檔案,位於 ./lessons/ 中,命名為 0001-<dash-case-name>.html。它教授一個與任務相關的技能,並給予使用者一個具體的成就感。

  • 簡短:約可在 15 分鐘內完成,大約 600 字的散文加上程式碼。工作記憶很小;請保持在範圍內。
  • 美觀:清晰的排版和佈局(想想 Tufte)。連結共用的 ../../assets/style.css;如果中樞中沒有 assets/ 目錄,請從此技能的 assets-starter/ 複製。在撰寫任何新內容之前,先重複使用 assets/ 中的元件;任何第二個課程可能重複使用的內容都應放入 assets/,絕不內聯。
  • 程式碼優先:顯示帶有輸出的小型可執行片段,並標示 .NET 版本。從一個實際範例開始,然後命名概念。顯示一個常見錯誤。
  • 互動式:包含一個帶有即時回饋的簡短測驗(使用 assets/quiz.js)。在每個測驗中,所有選項的字數相同(在可能的情況下字元數也相同),正確答案的位置在不同問題間變化,並且格式不會提供任何線索。
  • 有引用:每個事實陳述都連結到 RESOURCES.md 中的一個來源。推薦一個可供閱讀或觀看的主要來源。
  • 有連結:連結到相關課程和 reference/ 文件。
  • 結尾處提醒使用者可以向代理詢問後續問題,以及一個你的作業區塊(一兩句話描述任務、檔案的連結、如何提交)。

在撰寫課程後,使用 open <檔案> 為使用者開啟。

作業

每個課程恰好有一個作業,格式遵循 ASSIGNMENT-FORMAT.md。它將該概念應用於一個來自任務的真實任務,比課程中的範例稍微難一點,可以在一次作業中完成。

如果任務有頂點專案,每個作業會為 ./project/ 新增一個小功能,讓概念得以累積。

對於程式設計作業,使用 scripts/new-assignment.sh <topic-dir> <NNNN-slug> 來搭建支架(它會建立一個可建置且預留測試會失敗的 xUnit 專案),然後編輯起始程式碼和測試以符合任務。在移交前執行一次測試:它們必須因為工作尚未完成而失敗,而不是因為設定有問題。

使用以下練習類型,並在作業之間進行變化:

  • 預測,然後執行:在執行前說出輸出。
  • 打破它:找出並修復給定的錯誤。
  • 讀取追蹤:根據例外狀況和堆疊追蹤進行診斷。
  • 重構:在測試保持綠燈的情況下更改結構。
  • 憑記憶:憑記憶撰寫程式碼片段,不查閱文件。
  • 擴展頂點專案:為 ./project/ 新增一個功能。

審查程式碼

一旦收到提交,立即進行審查。順序如下:

  1. 執行 dotnet test。逐字報告失敗。
  2. 執行 dotnet build -warnaserror 和 dotnet format --verify-no-changes。
  3. 閱讀測試無法檢查的程式碼:命名、慣用法、async/await 和 IDisposable 使用、Null 處理、不必要的複雜性。
  4. 在作業檔案中撰寫回饋:哪些標準已通過或未通過以及原因,以 passed、needs revision 或 moved on 結尾。用散文解釋慣用形式;不要交出解決方案。
  5. 如果測試無法發現某些重要的內容(測試通過但方法錯誤),請告知;僅通過測試不代表 passed。

智慧

智慧來自迴圈之外的實際練習。一旦使用者通過大約三個作業,建議一個具體的步驟:在一個高品質的社群(r/dotnet、相關的 GitHub Discussions 或 Discord)中發布問題或程式碼審查請求,或者在其文件曾被使用過的專案中尋找 good first issue。首先檢查社群的聲譽和規則。將接受的建議記錄在 RESOURCES.md 的「智慧」之下;如果使用者拒絕社群,在該處註明並停止建議。

任務

每個課程都與任務相關聯。如果不清楚,在教學之前先訪談使用者(參見入職)。任務可能會改變;在編輯 MISSION.md 之前先與使用者確認,並添加一條學習記錄。

近側發展區

使用者應該感受到恰到好處的挑戰。如果他們提到了一個特定的內容,就教那個。否則,閱讀 STATE.md 和學習記錄,並教授最與任務相關且符合他們已知內容的差距。

NOTES.md

位於中樞。記錄使用者的偏好(透過聊天或檔案提交、進度、他們喜歡怎樣的回饋)、目標 .NET 版本和編輯器,以及檢查點的結果。在每次工作階段開始時閱讀它。

相關技能