Um dos problemas que a comunidade do Exercism enfrenta é como dar feedback significativo a muitas pessoas que apresentam muitas soluções para muitos exercícios diferentes. Para ajudar a reduzir o âmbito desta tarefa potencialmente enorme, as soluções são normalizadas em "representações". Por exemplo, das 500 submissões mais recentes ao exercício TwoFer no percurso Ruby, cerca de 380 seriam consideradas únicas (se normalizares aspetos triviais como a formatação do código e os comentários). Se as normalizares ainda mais (normalizando coisas como nomes de funções ou de variáveis), esse número fica ainda menor, pelo que pode haver apenas 250 abordagens únicas. Se a comunidade do Exercism conseguir dar algum feedback sobre essas 250 abordagens, a esperança é que tenhamos feedback válido preparado para ~99% de todas as submissões futuras do TwoFer. Com os Exercícios de Conceito, o espaço de soluções será ainda menor, porque os Exercícios de Conceito são deliberadamente concebidos para serem resolvidos de uma forma específica.
Um Representer é um pedaço de código que tem a única responsabilidade de receber uma solução e devolver uma representação normalizada dela.
Uma representação é uma extração de uma solução à sua essência, com nomes, comentários, espaçamento, etc. normalizados, mas que ainda identifica de forma única a abordagem seguida. Duas formas diferentes de resolver o mesmo exercício não podem ter a mesma representação.
O Representer mais simples é aquele que se limita a devolver o código-fonte da solução. No entanto, como o nosso objetivo é ter a mesma representação para soluções que só diferem em detalhes não essenciais, o Representer deve aplicar uma ou mais normalizações.
Assim que tivermos uma representação normalizada para uma solução, uma equipa de mentores verificados analisa a solução e comenta-a (se for necessário). Esses comentários são depois enviados automaticamente a cada nova solução com a mesma representação. Será enviada uma notificação para soluções antigas com uma representação correspondente.
Cada linguagem tem o seu próprio representer, escrito nessa linguagem. O site funciona como o orquestrador entre o representer e as submissões dos estudantes.
Cada representer vive na organização do Exercism no GitHub, num repositório chamado <track_slug>-representer (por exemplo, exercism/ruby-representer).
Podes consultar os representers existentes aqui.
Se quiseres ajudar num Representer que já existe, abre um issue no respetivo repositório a perguntar se há alguma forma de ajudares. Se quiseres criar um Representer para uma linguagem que ainda não tem nenhum, segue as instruções para criar um Representer.
Podes usar os seguintes documentos para saberes mais sobre como construir um representer: