A principios de septiembre de 2021, por fin se lanzó Exercism v3. Angelika Tyborska es una de las personas clave de mantenimiento que nos ayudaron a llegar a la meta. Además de ser cocreadora de los ejercicios de aprendizaje y el temario de Elixir, Angelika fue una voz clave a lo largo de todo el desarrollo de la v3, aportando ideas y perspectivas durante todo el proceso de construcción. Es una contribuyente clave de Exercism.
En esta presentación en video, Angelika nos explica qué problemas buscaba resolver la v3, algunas de las incorporaciones clave de la plataforma y cómo encaja todo, explorando los Analyzers, los Representers y los nuevos ejercicios de aprendizaje.
Transcripción
Historia de Exercism
Exercism ya tiene un buen tiempo de existir. Lo creó por primera vez Katrina Owen en 2013 como una herramienta para sus estudiantes. En la v1, era solo una colección de ejercicios de práctica interesantes. En la v2, se convirtió en una plataforma de mentoría de código gratuita.
v3 🚀 01.09.2021
El 1 de septiembre se lanzó la versión 3 de Exercism.
En este video te voy a contar los cambios de la v3, te explicaré por qué se hicieron y cómo van a mejorar tu experiencia en Exercism.
Sobre mí
Esta soy yo [foto mostrada en 0:38]. Soy Angelika. Junto con Tim, mi compañero en el mantenimiento, construimos las herramientas y más de 30 ejercicios de aprendizaje para el track de Elixir de Exercism v3. Creo que, en su nueva forma, Exercism tiene el potencial de convertirse en la mejor herramienta para aprender nuevos lenguajes de programación.
¿Qué hay de nuevo en la v3?
¿Qué hay de nuevo en Exercism v3? La respuesta corta: muchísimo.
Todos los cambios importantes que se introdujeron en la v3 están pensados para resolver los mayores problemas que la gente tenía en la v2.
Los problemas de la v2
Hay tres problemas clave que la v3 aborda.
Uno: la configuración inicial difícil; dos: practicar código sin aprender; tres: el tiempo de respuesta largo de los mentores.
Problema 1. Configuración inicial difícil
Problema número uno: la configuración inicial difícil. Para empezar con Exercism, necesitas instalar la CLI de Exercism, el lenguaje de programación que quieras probar, y sentirte cómodo en la terminal. Tienes que configurar tu editor para que haga resaltado de sintaxis del nuevo lenguaje, y así sucesivamente. Para los desarrolladores avanzados, toda esa configuración es una pérdida de tiempo incómoda. Pero para los principiantes, puede ser un obstáculo imposible de superar.
La solución: dejar que la gente programe en el navegador. Sin configuración inicial.
Para hacerlo posible, Exercism ahora tiene un editor web, y cada lenguaje de programación tiene su propio Test Runner, dedicado a ejecutar los tests de los ejercicios de Exercism.
Editor web
Este es el editor web [captura mostrada en 2:25]. Tiene dos paneles: el código fuente a la izquierda y las instrucciones y la suite de tests a la derecha.
No tiene funciones sofisticadas, porque su objetivo no es reemplazar tus herramientas favoritas. Su objetivo es que puedas posponer la instalación de todas las herramientas y dependencias necesarias hasta que te sientas más cómodo con el nuevo lenguaje de programación y sepas que quieres seguir trabajando con él.
El editor web es totalmente opcional. Puedes seguir usando la CLI y trabajar con tus herramientas favoritas en tu propia computadora.
Test Runners
Para que el editor web sea usable, tiene que haber una forma de ejecutar los tests contra la solución que escribes en el navegador. De eso se encarga un Test Runner.
Cada lenguaje de Exercism tiene su propio Test Runner. El Test Runner se encarga de reportar los resultados de los tests, pero eso no es todo. También necesita extraer el cuerpo del test para que sepas qué código se está ejecutando y puedas interpretar el mensaje de error, y además capturar la salida del test para que puedas depurar tu código en el navegador usando puts, print, console.log o la función de impresión que ofrezca tu lenguaje.
Los Test Runners son fundamentales para resolver ejercicios en el navegador, pero también se usarán en las soluciones enviadas a través de la CLI. Cuando exploras las soluciones de la comunidad de un ejercicio, o cuando le das mentoría a un estudiante, puedes ver si la solución pasa los tests sin tener que descargarla y ejecutarla localmente.
Problema 2. Práctica de código sin aprendizaje
Problema número dos: Exercism es una plataforma para practicar código, pero no ofrecía ningún recurso para aprender un lenguaje específico desde cero. Tenías que hacerlo en otro lugar primero.
Los ejercicios de Exercism estaban diseñados para ser interesantes y desafiantes, pero a veces incluso los más fáciles son demasiado difíciles para ser el punto de entrada a un nuevo lenguaje de programación. Esto es especialmente cierto cuando intentas aprender un lenguaje con una sintaxis completamente distinta o que incluso usa un paradigma de programación diferente.
La solución: ofrecer aprendizaje junto con la práctica.
Con la incorporación del temario y los ejercicios de aprendizaje, Exercism ahora es una excelente herramienta para sumergirte directamente en un nuevo lenguaje de programación.
Temario
¿Qué es un temario? Un temario es un árbol de conceptos que componen cada lenguaje de programación. El temario es exclusivo de cada track de Exercism, porque cada lenguaje de programación es diferente y tiene conceptos distintos.
Los conceptos dependen unos de otros y forman distintas ramas del árbol. Necesitas aprender el concepto anterior de la rama para desbloquear el siguiente.
Por ejemplo, este es el comienzo del temario de Elixir [captura mostrada en 5:10]. Empieza con un concepto llamado «basics», que cubre: cómo definir un módulo, cómo definir una función con nombre y dónde encontrar la documentación de la biblioteca estándar. Este conocimiento es necesario para todos los ejercicios de Exercism. Necesitas aprender basics para desbloquear cualquier otro concepto. Puedes aprender, por ejemplo, sobre Boolean, y una vez que sabes Boolean, puedes aprender sobre la expresión cond, y así sucesivamente.
Para que te hagas una idea, este es el temario completo de Elixir [captura mostrada en 6:16]. Por ahora contiene más de 50 conceptos, pero todavía hay que ampliarlo.
Arriba encontrarás conceptos como: strings, listas, mapas y tuplas. En el medio están: el módulo Enum, las expresiones regulares, los structs y la escritura de typespecs. Y al final están: los protocolos, los procesos y las tareas.
Ejercicios de aprendizaje
Aprendes los conceptos del temario resolviendo ejercicios de aprendizaje. Los ejercicios de aprendizaje son distintos de los ejercicios de práctica. Están diseñados para enseñar conceptos de programación a estudiantes que no conocen en absoluto el lenguaje de programación en cuestión, pero que sí conocen al menos otro lenguaje y los conceptos básicos de programación.
Introducción
Cada ejercicio de aprendizaje empieza con una introducción. La introducción describe información básica sobre los conceptos que enseña ese ejercicio. La mayoría de los ejercicios de aprendizaje enseñan un solo concepto, pero hay excepciones.
Este ejemplo muestra una introducción sobre los mapas de Elixir [captura mostrada en 7:12]. Explica qué son los mapas, cómo definir un mapa, cómo acceder a un valor de un mapa, etcétera. Contiene algunos ejemplos de código para mostrar la sintaxis nueva, pero no demasiados, para que no puedas simplemente copiar y pegar la introducción y resolver el ejercicio.
Instrucciones
Después vienen las instrucciones. Las instrucciones de los ejercicios de aprendizaje se dividen en tareas pequeñas. Las tareas están diseñadas para animar al estudiante a usar las partes más importantes de cada concepto.
Por ejemplo, el ejercicio de aprendizaje que enseña mapas hará que el estudiante cree un mapa, luego lea un valor de un mapa, luego actualice un valor en un mapa, luego obtenga todas las claves de un mapa, y así sucesivamente.
Cada ejercicio de aprendizaje tiene una historia, pero la historia no es tan importante. Está ahí para que no tengas que usar valores sin sentido como «foo bar» y «1 2 3», pero no juega un papel importante en el ejercicio como sí ocurre en los ejercicios de práctica.
Pistas
Cada tarea viene con una pequeña lista de pistas por si el estudiante se atasca. Las pistas a menudo revelan qué función específica usar en cada tarea y te llevan a la documentación de esa función.
Practicar los conceptos
Pero resolver un solo ejercicio de aprendizaje no alcanza para dominar de verdad el concepto. También necesitas practicarlo. Por eso revisamos todos los ejercicios de práctica que ya existían en la v2 y elegimos algunos que pueden usarse para practicar cada concepto.
Así se ve un solo concepto en el árbol [captura mostrada en 9:01]. Los puntos representan ejercicios. El primer punto, con el ícono de la bombilla, es un ejercicio de aprendizaje, y los demás puntos son ejercicios de práctica.
Así se ve un concepto después de resolver algunos ejercicios [captura mostrada en 9:37]. Fíjate que algunos de los ejercicios de práctica de este concepto siguen bloqueados, aunque el ejercicio de aprendizaje esté completado. Esto se debe a que los ejercicios de práctica no se limitan a practicar un solo concepto. Puede que necesites aprender más conceptos, además de átomos [concepto mostrado en la captura], antes de que se desbloqueen esos ejercicios.
Se supone que los ejercicios de aprendizaje son triviales para quienes ya dominan un lenguaje determinado. Pero no te preocupes, son totalmente opcionales. Puedes cambiar del modo de aprendizaje al modo de práctica, lo que te da acceso inmediato a todos los ejercicios de práctica interesantes sin tener que recorrer el temario primero.
El temario = un esfuerzo enorme
Un detalle importante que tengo que mencionar para ajustar tus expectativas es que desarrollar el temario es un esfuerzo ENORME. No todos los tracks tienen suficientes mantenedores activos como para tener un temario listo ahora mismo.
En el momento en que grabo este video [4 de septiembre de 2021], los ejercicios de aprendizaje solo están disponibles en: Common Lisp, C#, Elm, Elixir, F#, Go, Java, JavaScript, Python, Ruby, Rust y Swift. El track de Julia lanzará su temario pronto.
Problema 3. Tiempo de respuesta largo de los mentores
Problema número tres: el tiempo de respuesta largo de los mentores. No todos los tracks tienen suficientes mentores. Algunos tracks tienen tan pocos mentores que el tiempo de espera para recibir mentoría puede llegar a un mes. Esto siempre ha sido extremadamente desalentador para los estudiantes. Es un problema tan central para Exercism que se está abordando desde 3 ángulos distintos.
Comentarios automatizados
La solución número 1 es ofrecer comentarios automatizados. Gran parte de los comentarios que los mentores escriben a los estudiantes son repetitivos. Poder detectar errores comunes de forma automática y reportárselos directamente al estudiante marca un antes y un después.
Recibir comentarios automatizados sobre errores comunes le permitirá al estudiante mejorar su solución incluso antes de pedir mentoría, lo que también hará más fácil el trabajo del mentor. Les ahorrará a los mentores tener que mencionar detalles tediosos como snake_case frente a camelCase y les permitirá centrarse en la esencia de la solución. En algunos casos, los comentarios automatizados serán suficientes para que el estudiante quede conforme y ni siquiera pida mentoría.
En la v3 hay dos tipos de herramientas para los comentarios automatizados: los Analyzers y los Representers.
Analyzers
El Analyzer es una herramienta que busca características específicas en una solución y le devuelve al estudiante una lista de comentarios predefinidos sobre lo que encuentra. Qué características busca depende por completo del lenguaje y del ejercicio específico.
Por ejemplo, Elixir tiene una convención de nombres muy específica para las funciones y las variables. Una de las comprobaciones que hace el Analyzer de Elixir en todos los ejercicios es revisar todos los nombres de variables y de funciones. Si encuentra un nombre que no está escrito con snake_case, le recuerda al estudiante la convención de nombres.
Otra comprobación que puede hacer el Analyzer de Elixir es detectar el uso de un módulo específico. Por ejemplo, esta comprobación [captura mostrada en 13:20] de no usar el módulo Enum es específica del ejercicio de aprendizaje de recursión. Usar el módulo Enum va en contra del propósito del ejercicio de aprendizaje, así que el Analyzer le recordará al estudiante que no lo haga y que use recursión en su lugar.
Representers
La segunda herramienta que nos ayudará a ofrecer comentarios automatizados en Exercism es el Representer. El Representer toma la solución y elimina las partes no esenciales. Normaliza el formato, elimina comentarios y documentación, y reemplaza los nombres de funciones y variables por marcadores de posición.
La salida del Representer se llama representación. Cada solución que se envía a Exercism pasará por el Representer y su representación se guardará en la plataforma junto con la solución.
Los mentores tendrán entonces acceso a una interfaz donde pueden explorar las representaciones de las soluciones enviadas. Para cada representación única, un mentor puede dejar comentarios sobre esa representación. Luego, esos comentarios se mostrarán a todos los estudiantes que envíen una solución similar que tenga la misma representación. Un mentor solo tiene que escribir los comentarios una vez y los comentarios pueden llegar a todos los que los necesiten.
Los Representers ya están implementados y desplegados para algunos lenguajes, pero en el momento en que grabo este video [4 de septiembre de 2021], la interfaz para los mentores todavía no existe en la plataforma, así que hay que esperar un poco hasta que esta funcionalidad esté completamente disponible.
Evitar sesiones de mentoría no deseadas
Otra solución para las colas de mentoría largas es evitar las sesiones de mentoría no deseadas. En la v2, la mentoría era obligatoria para los ejercicios principales. Enviar un ejercicio principal significaba que solicitabas mentoría automáticamente, y no podías avanzar al siguiente ejercicio principal sin la aprobación de un mentor. Muchos estudiantes aprendían el lenguaje resolviendo los ejercicios principales, así que necesitaban la mentoría para que los guiara en el proceso de aprendizaje.
Esto ya no es así. El papel didáctico de los ejercicios principales y la aprobación de los mentores lo asumieron los ejercicios de aprendizaje y los Analyzers. En la v3, la mentoría siempre es opcional y hay que solicitarla de forma explícita.
Solicitud de mentoría
Para solicitar mentoría, necesitas responder 2 preguntas: ¿Qué esperas aprender de este track? y ¿Cómo puede un mentor ayudarte con tu solución? Al saber de antemano qué espera el estudiante de la sesión de mentoría, el mentor puede elegir las solicitudes de mentoría que mejor se ajusten a sus conocimientos y a su estilo de mentoría, lo que hace más probable que ambas partes terminen satisfechas con la sesión.
Cola de mentoría y favoritos
En la nueva cola de mentoría, los mentores pueden ver estadísticas sobre el historial de mentoría del estudiante. Pueden ver qué estudiante nunca recibió mentoría antes y podría necesitar una revisión más cuidadosa, y qué estudiante ya pasó por mentoría muchas veces y entiende cómo funciona.
Los mentores también pueden por fin encontrar a estudiantes a los que dieron mentoría antes y desarrollar una relación con ellos. Los mentores incluso pueden agregar estudiantes a favoritos y usar eso para priorizar la mentoría de estudiantes con los que antes tuvieron una buena experiencia.
Listas de bloqueo
Después de cada sesión de mentoría, tanto el estudiante como el mentor tienen la opción de bloquear a la otra persona. Hay dos listas de bloqueo: estudiantes bloqueados y mentores bloqueados. Si yo, como mentor, te bloqueo a ti como estudiante, es posible que más adelante tú me des mentoría a mí. La otra persona, por supuesto, no tendrá idea de que la bloquearon, así que no puede tomar represalias contra ti.
Puedes bloquear a alguien por cualquier motivo, pero si está infringiendo el Código de Conducta, asegúrate de reportarlo también de forma explícita para proteger a los demás usuarios.
Mitigar las consecuencias negativas de las esperas largas
Por último, el último paso para lidiar con el problema de las esperas largas es asegurar que, aunque a veces tengas que esperar, las consecuencias negativas de la espera sean mínimas. En la v3, esperar mentoría no te impide resolver otros ejercicios. Puedes seguir avanzando por el track.
Cualquiera de las dos partes puede terminar una sesión de mentoría. Si eres estudiante y no te gusta el enfoque que está tomando un mentor en particular contigo, siempre puedes pedir un enfoque diferente, o puedes optar por salir de la sesión. Sin importar cómo termine la sesión de mentoría, el estudiante puede solicitar una nueva sesión de mentoría con otro mentor para la misma solución.
Cupos de mentoría
En cada track puedes tener de 1 a 4 cupos de mentoría. Tener varios cupos de mentoría te puede ayudar cuando quieres solicitar mentoría para un ejercicio difícil que tiene menos probabilidades de recibir mentoría rápido, y aun así poder recibir mentoría en otros ejercicios al mismo tiempo.
Los cupos de mentoría se pueden desbloquear ganando reputación. La reputación se otorga por publicar tus soluciones para que todos las exploren, por dar mentoría a estudiantes y por contribuir a cualquiera de los repositorios de Exercism. Esto significa que los estudiantes que contribuyen más a la plataforma pueden conseguir más mentoría.
Resumen
Esas son algunas de las principales formas en que Exercism cambió el 1 de septiembre de 2021.
Agregamos los ejercicios de aprendizaje para que puedas aprender sin salir de la plataforma, un editor web para que puedas programar sin instalar nada, y los Analyzers y Representers para que puedas recibir comentarios automatizados de inmediato. También eliminamos muchos bloqueos frustrantes del proceso de mentoría.
Y hay mucho más por explorar: nuestra sección de contribución, las insignias, los nuevos perfiles, una página de trayectoria con todo tu historial de Exercism y mucho más.
Pásate por exercism.org y pruébalo.
Gracias.