Consejos para enseñar usando Live Coding

11

Estoy involucrado en un curso de programación y algoritmos de primer año. En una conferencia reciente, decidí presentar el material usando codificación en vivo , lo que esencialmente significaba que me sentaba detrás del teclado y escribía código y lo evaluaba, usando emacs para facilitar el proceso.

Esto fue bastante exitoso y los estudiantes comentaron cuánto apreciaban el formato más (inter) activo. Como este fue mi primer intento de usar este formato de enseñanza, sé que no funcionó perfectamente. Algunos de los problemas estaban relacionados con no ser tan inteligente con emacs como debería ser, y otros tenían que ver con permitir que las preguntas de los alumnos me alejaran demasiado de mi guión. Sé que puedo hacerlo mejor.

¿Cuáles son algunas pautas para dar conferencias (y otras demostraciones) usando conferencias de codificación en vivo?
¿Cuáles son las trampas a evitar?

Dave Clarke
fuente
2
Tengo mis reservas sobre la codificación en vivo (principalmente en relación con el rendimiento y la ilusión de comprensión). Sin embargo, dos sugerencias: 1) ¿Ha considerado utilizar los sistemas de respuesta del aula para estructurar las preguntas? 2) No tengo idea de lo práctico que es eso, pero usar algo como ideone.com puede ser interesante porque los estudiantes pueden acceder a su código después de la conferencia y ejecutarlo sin tener que instalar cosas.
Raphael
@Raphael: Recibí su atención mucho mejor que antes, lo que sin duda es una ventaja. Tus dos sugerencias son muy buenas. 1) Actualmente solo las personas que realmente siguen ofrecen algún tipo de retroalimentación. 2) Mi idioma no está en la lista. Dicho esto, todo el código está disponible en diapositivas (que ignoré).
Dave Clarke el

Respuestas:

8

Aquí hay algunos consejos y dificultades que he recopilado después de usar la codificación en vivo durante una semana, y de hablar con un colega.

Hacer

  • Prepara un guión para seguir e intenta seguirlo.
  • Limpie los buffers con frecuencia para centrarse en la parte relevante.
  • Comience de nuevo para cada nuevo tema.
  • Usa una fuente más grande.
  • Domina la herramienta que estás utilizando para evitar perder demasiado tiempo en trivialidades.
  • Tener funciones de fondo precodificadas. Si no es particularmente relevante, asegúrese de que puedan importarse, en lugar de aparecer en el archivo de trabajo.
  • Idealmente trabaje en un idioma que le brinde comentarios inmediatos. Los idiomas con un shell interactivo son los mejores en este sentido.
  • Cuando use un tipeado, proporcione el tipo esperado de la función que está escribiendo. Esto proporciona una luz de guía para los estudiantes.
  • Cometer errores libremente (aunque no demasiados). Revise cómo se deben solucionar.
  • No lo olvide: una imagen vale más que mil palabras: las diapositivas intercaladas y el pizarrón negro funcionan con su sesión de codificación.
  • Tenga diapositivas de resumen para los puntos que ha cubierto
  • A veces, al modificar el código, tal vez haga una copia y modifique la copia. Esto proporciona un punto de comparación.
  • Limpie el código periódicamente.
  • Acepte que cometerá errores y permita abiertamente que los estudiantes lo corrijan, esto facilita su trabajo y los capacita.
  • Escribe el código en tu propio estilo. Por ejemplo, puede haber copiado el código de otro lugar. Pero esto será difícil de reproducir. Mejor escribirlo en tu propio estilo. Por ejemplo, siempre escribo funciones curriculares, porque programo principalmente Haskell. Pero Standard ML usa el idioma con menos frecuencia. Esperar funciones curry es el error más común que hago en clase.
  • Físicamente, asegúrese de tener bien configurado su espacio. Buen teclado, a la altura correcta, cables todos en los lugares correctos, obstáculos físicos fuera del camino, etc. Tómese un minuto antes de comenzar a hacer que su espacio trabaje para usted, no en su contra.
  • Un enfoque es escribir lo que digan los estudiantes, incluso si está mal. Esto hace que los estudiantes hagan la codificación y la reparación. Es una buena idea limpiar el código al final. Este enfoque puede crear un modelo de atención e interacción en el aula, porque los estudiantes deben prestar atención para seguir lo que está sucediendo.

NO HACER

  • No optimice su código sobre la marcha ni lo rompa de tal manera que no pueda arreglarlo.
  • Evita hablar con la computadora. ¡Habla con los estudiantes!
  • Evite escribir demasiado, especialmente del código repetitivo. Utiliza tu entorno para ayudarte a escupir las plantillas por ti.
  • Si usa un editor de texto, evite desplazarse constantemente. Causará mareos por el movimiento de aquellos que intentan seguir.
  • Si usa un editor de texto, antes de hacer cambios radicales en su código, advierta a los estudiantes que lo hará, para que puedan seguir lo que está sucediendo.
Dave Clarke
fuente
1
¿Cuantos estudiantes hay en tu clase? Me gustan sus DO hacia la interactividad, pero me pregunto cómo eso se escala a 50, 100, 250 estudiantes.
Raphael
1
¿Publican su código después de la clase? Me imagino un repositorio de Github donde los estudiantes pueden navegar a través de diferentes versiones que usted creó (tal vez incluyendo una versión pulida y de comentarios que nunca apareció en clase) y ver las diferencias. También podrían clonar el repositorio para usar fácilmente algoritmos una vez escritos como subrutinas en su tarea (si eso es conveniente).
Raphael
1
¿Prepara pruebas unitarias para ejecutar su código? No estoy seguro de si eso es apropiado en cada clase (¿se enfoca en aprender los principios de lenguajes de programación, desarrollo de software o algoritmos?) Pero podría enseñar algunas de las mejores prácticas en el camino.
Raphael
2
1) 128 personas se inscribieron para la clase, aunque aparecen entre 60 y 80. 2) Ya tengo el código en las diapositivas, pero no las uso. Entonces, los estudiantes tienen una versión de lo que hago, nunca ninguno de los pasos intermedios. No estoy realmente seguro de lo interesante que es tener todas las variaciones. 3) No, no lo hago, aunque escriben especificaciones informales. El objetivo es aprender un primer lenguaje de programación y algunos algoritmos / estructuras de datos. Sin embargo, estoy de acuerdo. Las pruebas unitarias son algo que consideraremos integrar más fuertemente en el curso. Gracias por las preguntas / consejos implícitos.
Dave Clarke el