概念練習的目標,是教會學生在某個程式語言中工作所需的關鍵技能。這些練習涵蓋兩個面向:一是在該語言中處理常見事務的方法(例如如何操作字串),二是更貼近該語言特性的做法(例如單子、物件導向程式設計、高階函式)。
概念練習具有以下特點:
練習會依據已教與已學的概念來解鎖。 每個概念練習都必須教授一個或多個概念。 練習也可能有概念上的先修要求,也就是說,必須先完成教授那些先修概念的概念練習,這個練習才會解鎖。
概念練習不應該隨著學習軌道的推進而變得本質上更困難。 一位熟悉語言 X 的老手,應該能在花不超過 5-10 分鐘解每一題的情況下,完成該軌道上的所有概念練習。 由於每個練習的重點都在於讓學習者第一次使用某個概念,而且這位老手已經在語言 X 中理解該概念,練習對他們來說應該相對輕鬆。 後面的練習對不熟悉語言 X 的開發者來說可能感覺更難,但這只是因為後面的練習所教授的概念本身就比較複雜(例如,大多數人都會同意,第一次學習遞迴,比把迴圈從一個語言轉換到另一個語言更複雜)。
概念練習沒有導師引導。 當學生提交的解答讓某個概念練習的測試通過時,我們會確認是否有 Analyzer 或 Representer 可以提供回饋。 如果兩者都沒有,該解答就會直接核准。 這把教學的責任轉移到練習本身,練習必須提供一條清楚的學習路徑,讓學生學會正在教授的概念。