Temario


Un track de Exercism completo tiene dos tipos de ejercicios: ejercicios de concepto y ejercicios de práctica. Son fundamentalmente distintos y se complementan muy bien.

Los ejercicios de concepto de un track son ejercicios diseñados para enseñar conceptos individuales que constituyen la base de un lenguaje de programación concreto. Estos conceptos forman un temario.

Esta documentación contiene indicaciones y consejos sobre cómo diseñar con éxito un temario para tu track.

El objetivo de un temario

El objetivo final de un temario es que los estudiantes lleguen a sentirse cómodos leyendo y escribiendo código idiomático en el lenguaje objetivo.

Cada ejercicio de concepto está muy enfocado. Es un paso pequeño y muy concreto que acerca al estudiante a comprender algo sobre el lenguaje. Solo se apoya en conceptos que ya se han introducido antes.

Al resolver el ejercicio, el estudiante empieza a familiarizarse con el concepto. La comprensión llega principalmente de la práctica, y mucho menos de las explicaciones. El contenido explicativo está ahí para introducir al estudiante en las ideas que necesita para resolver el ejercicio (de ahí la elección del nombre del fichero: «introduction.md»).

Queremos que los estudiantes empiecen a escribir código de inmediato, sin tener que entenderlo todo de antemano. Para lograrlo, pasamos por alto algunos detalles y dejamos muchas cosas sin explicar. Simplificamos y proporcionamos stubs de código cuando es posible. Esto reduce la carga cognitiva de empezar y da tiempo y espacio para que los conocimientos se asienten. Con este enfoque no decimos que el estudiante no necesite saber esas cosas, sino que no necesita saberlas todavía.

A menudo, los primeros ejercicios tienen que contener código poco idiomático. Esto se debe a que, al principio, el estudiante todavía desconoce gran parte del lenguaje y la mayoría de los conceptos aún no se han introducido. Al permitir código poco idiomático en los primeros ejercicios, los estudiantes pueden dar muchos pasos pequeños en terreno conocido en lugar de unos pocos pasos grandes en terreno desconocido. El resultado es que llegan antes a la etapa del código idiomático y con menos fricción.

Estructura básica

Los ejercicios se estructuran como un árbol, con un ejercicio introductorio en la cima como punto de partida. Los ejercicios posteriores enseñan conceptos que dependen de haber entendido otros conceptos que se enseñan antes.

Portar y tomar prestado

Puede merecer la pena ver cómo otros tracks de otros lenguajes han desarrollado sus ejercicios de concepto. Puedes encontrar ejemplos de ejercicios de concepto de otros tracks aquí.

Dicho esto, si decides usar otros ejercicios como punto de partida para los tuyos, asegúrate de que el ejercicio resultante trate sobre el concepto tal y como existe en tu lenguaje. A veces los conceptos difieren de forma sutil, a veces de forma radical. Y a veces los conceptos no existen en absoluto en otros lenguajes.

El temario, y por tanto el árbol de conceptos, debe representar los conceptos que existen en este lenguaje concreto.

No incluyas conceptos solo porque otros tracks lo hagan.

En algunos casos puede resultar tentador incluir un concepto porque la gente suele tener que sortear su ausencia usando conceptos que sí existen. En lugar de hacer eso, introduce el concepto que el lenguaje sí utiliza, y plantéate añadir un ejercicio que explique cómo usarlo en ese tipo de situaciones.

Por ejemplo, en Go no hay enums. En su lugar, el árbol de conceptos de Go introduce las constantes y enseña a usarlas en el tipo de situación en la que podrías usar enums en otros lenguajes.

Pedir ayuda

No dudes en pedir ayuda. Es mejor preguntar de antemano o mientras trabajas en un ejercicio que debatirlo durante la revisión de código.

En GitHub puedes mencionar al equipo @exercism/learning-mode. En el foro de Exercism, abre un issue en la categoría Exercism Support.

Primeros pasos

Nuestra experiencia nos ha enseñado que la forma más pragmática de desarrollar un temario es hacer crecer el árbol de conceptos de forma orgánica, empezando por los conceptos más sencillos. No hace falta diseñarlo todo de antemano y, de hecho, suele ser útil no pensar demasiado a largo plazo.

Empezamos con el mínimo indispensable de conceptos, los más fundamentales para escribir cualquier cosa en el lenguaje. También procuramos empezar por los conceptos que resultan más familiares al desarrollador medio. Lo familiar es bueno. Lo familiar no confunde.

Recuerda que, aunque la meta sea escribir código idiomático, las piedras que llevan hasta ahí no siempre son idiomáticas. Usar lo que resulta familiar (aunque no sea un gran ejemplo de código en ese lenguaje) ayuda a que el estudiante avance más rápido hacia el objetivo de un código más típico del lenguaje.

Desarrollar el primer ejercicio

En lugar de intentar trazar todo el árbol de conceptos de antemano, empieza simplemente por el primer ejercicio. El objetivo del primer ejercicio es que el estudiante empiece a aprender con la menor fricción posible. Está dando el primerísimo paso para familiarizarse con el aspecto que tiene el código en este lenguaje. Puede que escriba un pequeño fragmento de código o, quizá, solo un par de añadidos a un stub para completar el ejercicio. El estudiante ya ha resuelto «Hello, World!» para poder acceder a este ejercicio. Pero en «Hello, World!» solo cambia el texto. Puede que toda la sintaxis del lenguaje le siga resultando desconocida. Trata de optimizar para conseguir un logro rápido y que el estudiante se familiarice lo suficiente con lo más básico de la sintaxis como para seguir avanzando con confianza.

Lee más sobre cómo desarrollar el primer ejercicio.

Los siguientes ejercicios

El primer ejercicio debería desbloquear un puñado de ejercicios que introduzcan conceptos fundamentales. Serán cosas como primitivos o tipos básicos y operaciones sencillas con esos tipos.

Lee más sobre cómo desarrollar los siguientes ejercicios.

¿Y después qué?

Aquí es donde a menudo empieza a ponerse interesante. Hay tantísimo que podrías introducir en este punto. ¿Cómo decides qué conceptos abordar después?

En realidad da bastante igual. Siempre que empieces por algún sitio que parezca razonable, irá bien.

Lee más sobre qué entendemos por «razonable» en el contexto de ampliar el árbol de conceptos.

No conviertas ejercicios de práctica

Un buen ejercicio de concepto está extremadamente enfocado y, idealmente, enseña un solo concepto. Normalmente habrá una única forma esperada de resolverlo. Esto contrasta con los ejercicios de práctica, que son abiertos y se prestan a la exploración.

Un buen ejercicio de concepto suele ser un mal ejercicio de práctica, y viceversa. Como los objetivos de los ejercicios de práctica y los ejercicios de concepto son completamente distintos, no cogemos ejercicios de práctica para convertirlos en ejercicios de concepto. Todos los ejercicios de concepto los escribimos desde cero o los basamos en historias creadas expresamente para enseñar conceptos sencillos.

Fomentamos pasar por alto los detalles

A veces tendrás la sensación de estar en un callejón sin salida. El concepto A requiere entender el concepto B, y el B requiere entender el A.

En ese caso, simplifica. Pasa por alto parte de la complejidad de uno para que los estudiantes se familiaricen con el otro. No pasa nada por decir que algo se introducirá con más profundidad más adelante y que, por ahora, al estudiante le basta con entender este único detalle.

Los conceptos se entienden con más profundidad por etapas y con el tiempo.

Seleccionar historias

Un ejercicio de concepto siempre tiene una historia.

Si haces un fork de un ejercicio de otro track, el ejercicio ya tendrá una historia. En ese caso, ya lo tienes todo listo.

Para ver si hay historias existentes que puedas usar o ejercicios de los que puedas hacer fork, consulta la lista de historias.

Si tienes un concepto pero no una historia, te recomendamos escribir un ejemplo de código pequeño y sencillo que use el concepto que estás introduciendo. Después, elabora la historia a partir del código. Que la historia sea absurdamente sencilla. No tiene que ser buena ficción. No necesita una trama sólida ni desarrollo de personajes. Puede ocupar solo un par de líneas.

Comparte tus ideas de historias con el equipo de Exercism. Tenemos mucha experiencia ideando historias adecuadas.

Cuando tengas una historia, probablemente tengas que retocar un poco el código para que encaje con ella.

Contribuciones de la comunidad

Trabajar en un temario implica dos actividades separadas pero entrelazadas:

  1. Diseño del temario: seleccionar y ordenar los conceptos
  2. Implementación de los ejercicios: escribir la documentación y crear ejercicios que enseñen esos conceptos

Hemos comprobado que lograr que la comunidad en general contribuya a implementar los ejercicios es divertido y enriquecedor. Sin embargo, el diseño del temario en sí es más fácil de abordar con un equipo pequeño de colaboradores que estén todos implicados en comprender el temario completo con todas sus complejidades.

Dicho esto, recomendamos que el equipo de diseño del temario implemente primero los cinco o seis primeros conceptos, antes de abrirlo a las contribuciones de la comunidad. Así se asegura que las personas del equipo principal de diseño del temario entiendan el proceso por sí mismas antes de tener que revisar pull requests de personas de la comunidad en general.

También es más fácil crear issues para estos conceptos de nivel más alto y suele ser más divertido para los miembros de la comunidad trabajar en ellos, ya que hay menos restricciones de las que preocuparse.

Crear issues

Todavía no hemos averiguado cuál es la mejor forma de crear issues para crear ejercicios de concepto.

En algunos tracks hemos probado a crear ejercicios separados para el concepto en sí y para el ejercicio. En otros hemos probado a hacer issues con una lista de comprobación que ir completando. En general, creemos que sigue siendo demasiado intimidante y nos gustaría encontrar una forma mejor.

Habla con nosotros sobre el proceso cuando empieces a crear issues y haremos todo lo posible por ayudarte a decidir cómo proceder.

Actualizaremos la documentación a medida que aprendamos mejores formas de abordarlo.