表示器


Exercism 社区面临的问题之一,是如何为许多人提供有意义的反馈,而这些人针对许多不同的练习提交了许多解答。为了帮助缩小这项可能极其庞大的任务的范围,提交的解答会被归一化成“representation”。例如,Ruby 轨道上 TwoFer 练习最近收到的 500 份提交中,大约有 380 份会被认为是独特的(前提是你对代码格式、注释之类无关紧要的东西做了归一化)。如果再把它们进一步归一化(比如把函数名或变量名也归一化),这个数字还会更小,可能只剩下 250 种独特的思路。如果 Exercism 社区能为这 250 种思路提供一些反馈,那么我们就有望为 TwoFer 今后约 99% 的提交准备好有效的反馈。有了概念练习,解空间还会更小,因为概念练习会被刻意设计成以特定方式求解。

一个 Representer 是一段代码,它唯一的职责就是接收一份提交的解答,并返回它归一化后的 representation。

一个 representation 是把一份提交的解答提炼到本质,其中的名称、注释、空格等都已归一化,但仍能唯一标识所采用的思路。同一道练习的两种不同解法,不能有相同的 representation。

最简单的 Representer 就是直接返回提交的解答的源代码。不过,我们的目标是让只在无关紧要的细节上有差异的提交的解答拥有相同的 representation,因此 Representer 应当应用一种或多种归一化。

一旦某份提交的解答有了归一化后的 representation,一个经过审核的导师团队就会查看它并发表评论(如有必要)。之后,这些评论会被自动提交到每一份 representation 与之相同的新提交的解答上。对于 representation 匹配的旧提交的解答,则会发送一条通知。

为 Representer 做贡献

每种语言都有自己的 representer,用该语言编写。网站则充当 representer 与学员提交之间的协调者。

每个 representer 都位于 Exercism GitHub 组织下名为<track_slug>-representer的代码仓库中(例如 exercism/ruby-representer)。你可以在这里查看现有的 representer。

如果你想参与协助某个现有的 Representer,可以在它的代码仓库里开一个 issue,问问有没有你能帮上忙的地方。如果你想为一种目前还没有 Representer 的语言创建一个,请按照创建 Representer的说明来做。

你可以通过以下文档了解更多关于构建 representer 的内容: