Uno de los problemas que enfrenta la comunidad de Exercism es cómo dar retroalimentación significativa a muchas personas que envían muchas soluciones a muchos ejercicios diferentes. Para ayudar a reducir el alcance de esta tarea potencialmente enorme, las soluciones se normalizan en «representaciones». Por ejemplo, de los 500 envíos más recientes al ejercicio TwoFer del track de Ruby, alrededor de 380 se considerarían únicos (si normalizas cosas triviales como el formato del código y los comentarios). Si los normalizas aún más (normalizando cosas como los nombres de funciones o variables), ese número se reduce todavía más, así que podrían quedar solo 250 enfoques únicos. Si la comunidad de Exercism puede dar retroalimentación sobre esos 250 enfoques, la esperanza es que tendremos retroalimentación válida preparada para ~99% de todos los envíos futuros de TwoFer. Con los ejercicios de concepto, el espacio de soluciones será aún más pequeño, porque los ejercicios de concepto estarán diseñados deliberadamente para resolverse de una manera específica.
Un Representer es un fragmento de código que tiene la única responsabilidad de tomar una solución y devolver una representación normalizada de ella.
Una representación es la extracción de una solución a su esencia, con nombres, comentarios, espaciado, etc. normalizados, pero que todavía identifica de forma única el enfoque adoptado. Dos maneras diferentes de resolver el mismo ejercicio no deben tener la misma representación.
El Representer más simple es el que simplemente devuelve el código fuente de la solución. Sin embargo, como nuestro objetivo es que las soluciones que solo difieren en detalles no esenciales tengan la misma representación, el Representer debería aplicar una o más normalizaciones.
Una vez que tengamos una representación normalizada de una solución, un equipo de mentores verificados revisará la solución y la comentará (si es necesario). Esos comentarios se enviarán automáticamente a cada solución nueva que tenga la misma representación. También se enviará una notificación para las soluciones antiguas que tengan una representación coincidente.
Cada lenguaje tiene su propio representer, escrito en ese lenguaje. El sitio web actúa como el orquestador entre el representer y los envíos de los estudiantes.
Cada representer vive en la organización de Exercism en GitHub, en un repositorio llamado <track_slug>-representer (por ejemplo, exercism/ruby-representer).
Puedes ver los representers existentes aquí.
Si quieres participar en ayudar con un Representer existente, abre un issue en su repositorio y pregunta si hay algún lugar donde puedas ayudar. Si quieres crear un Representer para un lenguaje que actualmente no tiene uno, sigue las instrucciones para crear un Representer.
Puedes usar los siguientes documentos para aprender más sobre cómo construir un representer: