Representadores


Uno de los problemas a los que se enfrenta la comunidad de Exercism es cómo ofrecer comentarios útiles 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 últimos envíos al ejercicio TwoFer del track de Ruby, unos 380 se considerarían únicos (si se normalizan cosas triviales como el formato del código y los comentarios). Si se normalizan aún más (normalizando, por ejemplo, nombres de funciones o de variables), ese número se reduce todavía más, así que puede que solo haya 250 enfoques únicos. Si la comunidad de Exercism puede aportar comentarios sobre esos 250 enfoques, la esperanza es tener comentarios válidos preparados para en torno al 99 % de todos los futuros envíos de TwoFer. Con los ejercicios de conceptos, el espacio de soluciones será aún más reducido, porque los ejercicios de conceptos estarán diseñados deliberadamente para resolverse de una forma concreta.

Un representer es un fragmento de código cuya única responsabilidad es tomar una solución y devolver una representación normalizada de ella.

Una representación es la extracción de una solución hasta su esencia, con nombres, comentarios, espaciado, etc. normalizados, pero que sigue identificando de forma única el enfoque adoptado. Dos formas distintas de resolver el mismo ejercicio no pueden tener la misma representación.

El representer más simple es el que se limita a devolver el código fuente de la solución. Sin embargo, como nuestro objetivo es que tengan la misma representación las soluciones que solo difieren en detalles no esenciales, el representer debería aplicar una o varias normalizaciones.

Una vez que tenemos 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 entonces automáticamente a cada nueva solución que tenga la misma representación. También se enviará una notificación para las soluciones antiguas que coincidan en su representación.

Contribuir a los representers

Cada lenguaje tiene su propio representer, escrito en ese lenguaje. La web actúa como 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 consultar los representers existentes aquí.

Si te gustaría participar y ayudar con un representer que ya existe, abre una issue en su repositorio preguntando en qué puedes ayudar. Si quieres crear un representer para un lenguaje que todavía no tiene ninguno, sigue las instrucciones para crear un representer.

Puedes consultar los siguientes documentos para aprender más sobre cómo crear un representer: