新增初始練習


實作完hello-world練習後,下一個任務就是再實作 20 個以上的練習。

練習類型

你可以實作的練習分成兩種:

  • 概念練習:用來教導學生一個或多個概念。更多資訊請參閱說明文件。
  • 實作練習:用來練習已經學過的概念。更多資訊請參閱說明文件。

一般來說,我們建議新的 track 先從實作練習開始,因為它們比較容易實作,事前也不用想太多。等你的 track 順利運作之後,隨時都可以再加入概念練習。

挑選練習

為了協助各 track 實作實作練習,我們建立了 exercism/problem-specifications 儲存庫。 這個儲存庫收錄了超過 100 個實作練習的中繼資料,各個 track 可以據此實作出自己版本的這些練習。 因此,你會看到許多不同的 track 都實作了相同的練習。

那麼,該怎麼從這 100 多個練習中挑出 20 個以上呢? 以下提供一些建議。

挑選能讓學生練習多種不同概念的練習

這 100 多個練習所涵蓋的概念非常多元。 你應該以能讓學生練習多種不同概念的練習為目標。 所以,與其實作 20 個都繞著字串打轉的練習,不如盡量挑選著重不同概念的練習。

以下列出一些概念及對應的範例練習:

概念 練習
位元操作 allergies, secret-handshake
布林 leap
類別 circular-buffer, robot-name
並行 bank-account
條件式 raindrops
日期與時間 gigasecond, meetup
相等性 clock
浮點數 darts, space-age
惰性 alphametics, zebra-puzzle
陣列 resistor-color, spiral-matrix
迴圈 collatz-conjecture, protein-translation
映射 nucleotide-count
數字 leap, grains
隨機性 dnd-character, robot-name
字串 bob, isogram,
樹狀結構 binary-search-tree, pov

挑選難度各異的練習

有些練習實作起來會比其他練習困難。 你應該挑選難度各異的練習:一些簡單的、一些中等難度的,再一些困難的。

練習的難易程度取決於幾個因素,例如涉及的概念,以及這個 track 使用的程式語言。 不妨看看其他已經實作過同一個練習的 track 是怎麼寫的,這樣會更容易抓到實作起來大概會是什麼樣子。

以下列出一些難度分級及對應的練習:

挑選適合你 track 的練習

不是每個練習都適合你的 track。 你應該只挑選適合自己 track 的練習;與其實作一個不合理的練習,還不如不要實作。 舉例來說,lens-person 練習要學生操作 lenses,但許多程式語言並不支援。

如果你發現某個練習不適合你的 track,可以把它的 slug 加到 track 的 config.json 檔案裡的exercises.foregone陣列中。 這樣一來,工具就會忽略這個練習。

範例課程大綱

為了讓這些建議更具體一點,以下是一個初始練習挑選的範例:

練習 難度 概念
hello-world 簡單 無(初始練習)
leap 簡單 數字、布林
gigasecond 簡單 日期與時間
isogram 簡單 字串
resistor-color 簡單 陣列
nucleotide-count 簡單 映射
collatz-conjecture 簡單 迴圈
darts 簡單 浮點數
two-fer 簡單 字串格式化、選擇性引數
high-scores 簡單 集合處理
raindrops 中等 條件式
bob 中等 字串
allergies 中等 位元操作
series 中等 例外
circular-buffer 中等 類別
meetup 中等 日期與時間
yacht 中等 陣列
dominoes 困難 元組、惰性
diamond 困難 字串格式化
alphametics 困難 惰性
forth 困難 解析

實作練習

挑好想放進 track 的練習之後,下一步就是把它們實作出來。 新增實作練習的說明文件中有詳細的步驟,說明如何新增一個實作練習。