表示器


Exercism 社群面臨的問題之一,就是該如何為提交許多不同練習解法的許多人,提供有意義的回饋。 為了幫助縮小這項可能極為龐大的工作範圍,解法會被正規化成「表示」。 舉例來說,在 Ruby 軌道上 TwoFer 練習最近收到的 500 份提交中,大約有 380 份會被視為不重複(如果你先把程式碼格式和註解這類小事正規化的話)。 如果你把它們正規化得更徹底(例如把函式或變數名稱也一併正規化),這個數字還會更小,可能只剩下 250 種不重複的做法。 如果 Exercism 社群能針對這 250 種做法提供一些回饋,那麼我們就有望為 TwoFer 未來所有提交中約 99% 預先準備好有效的回饋。 至於概念練習,解法的空間還會更小,因為概念練習會被刻意設計成要用特定方式來解。

_表示器_是一小段程式碼,它唯一的職責就是取用一份解法,並回傳它的正規化表示。

_表示_是把一份解法萃取到它的本質,其中名稱、註解、空白等都已正規化,但仍然能唯一識別所採取的做法。同一個練習的兩種不同解法,不能有相同的表示。

最簡單的表示器,就是只回傳解法原始碼的那一種。 不過,由於我們的目標是讓只在非必要細節上有所不同的解法擁有相同的表示,因此表示器應該套用一個或多個正規化。

一旦我們有了某份解法的正規化表示,一支經過審核的導師團隊就會檢視該解法,並在需要時留下評論。 這些評論之後會自動提交到每一份具有相同表示的新解法上。 對於表示相符的舊解法,則會送出通知。

參與表示器開發

每種語言都有自己的表示器,並以該語言撰寫。 網站則扮演表示器與學生提交內容之間的協調者。

每個表示器都放在 Exercism GitHub 組織中一個名為<track_slug>-representer的儲存庫裡(例如 exercism/ruby-representer)。 你可以在這裡查看現有的表示器。

如果你想參與協助現有的表示器,請在它的儲存庫中開一個 issue,詢問是否有你能幫上忙的地方。 如果你想為目前還沒有表示器的語言建立一個表示器,請依照建立表示器的指示進行。

你可以透過下列文件進一步了解如何打造表示器: