30 Ejecutar un curso con GitHub

GitHub es una plataforma maravillosa para ejecutar un curso. Esto se ha estado haciendo en github.com desde 2014 en STAT 545, un curso de 80 estudiantes de postgrado en análisis de datos con R, y en un segundo gran curso intensivo de código en genómica estadística. Se están ejecutando todos los cursos del Master of Data Science Program de la UBC en una instancia privada de GitHub Enterprise en Canadá.

30.1 Beneficio

Para el instructor

  • Si ya usa Git/GitHub, es extremadamente eficiente usar los mismos flujos de trabajo para administrar los materiales del curso, el trabajo de los estudiantes y la comunicación con los estudiantes y los profesores asistentes
    • Cuando cambie a Git/GitHub y R Markdown, abandonará el viejo “sistema” de aceptar todo tipo de cosas como adjuntos de correo electrónico. Será la primera vez que ejecute el código en los proyectos finales de los estudiantes, porque será tan fácil conseguirlo en la computadora de una manera organizada. Incluso se podrán hacer algunas correcciones como ¡pull requests!
  • Si todavía está en sus primeros días con Git/GitHub, el gran volumen de operaciones y plazos pequeños regulares aumentará su dominio muy rápidamente. ¡La práctica hace la perfección! Sin embargo, no se recomienda ejecutar un curso en GitHub como primer proyecto de control de versiones.

Para los estudiantes

  • Se he encontrado que los estudiantes se ajustan a Git/GitHub con bastante rapidez y realmente les gusta. Les resulta gratificante ver sus hermosos y ricos informes de R Markdown en Internet. Dado que es fácil exponer su trabajo dentro de la clase, se hace un montón de revisión por pares. Parece que la experiencia se extiende alrededor de la clase como un virus. Esto se aplica tanto a la sustancia del curso principal como al flujo de trabajo.
  • Muchos estudiantes están específicamente interesados en aprender Git y GitHub, como un complemento a las habilidades de codificación y analítica que se enseñan en estos cursos. El hecho de que se use para la mecánica del curso mata a dos pájaros con una piedra. Enseñar el uso del control de versiones distribuidas es un objetivo pedagógico válido en sí mismo.

30.2 Configuración para el estudiante STAT 545

Las organizaciones/equipos de GitHub y el API han cambiado durante los 3 años que se ha estado haciendo esto, así que el enfoque ha evolucionado con el tiempo y también está formado por la dura experiencia.

Puntos principales:

  • Crear una organización para el curso.
    • Inmediatamente solicite un Descuento de educación para la Organización, para que usted obtenga repositorios privados ilimitados.
  • Haga que sus estudiantes se registren de forma gratuita, en cuentas en GitHub personales.
    • Anímelos a solicitar un Descuento de educación a nombre propio (también conocido como “Student Developer Pack”). Pero tenga la seguridad de que nada de lo que necesite para la maquinaria de su curso dependerá de esto.
  • Obtenga los nombres de usuario de GitHub de sus estudiantes - ¡puede usarse una Shiny app! – además de un poco de información que le permita vincularlos de nuevo a su lista de cursos oficiales.
  • Crear un equipo de estudiantes y un equipo de profesores asistentes. Se hacen tales equipos para cada curso de la carrera, e.d. 2016_students y 2016_ta.
  • Invite a los estudiantes a unirse a la organización de su curso y al equipo de estudiantes. Lo mismo para profesores asistentes y el equipo de profesores asistentes.
  • Crear un nombre canónico para cada estudiante, basado en la lista oficial de cursos, por ejemplo lastname_firstname.
  • Cree un repositorio para cada estudiante, usando el nombre canónico del estudiante.
    • Este es un repositorio privado dentro de la organización del curso.
    • Desahibilite los wikis y deje que GitHub se autoinicialice o suba inmediatamente los archivos, incluyendo un README, a los repositorios.
    • Darle al equipo de estudiantes el acceso para leer o descargar el repositorio de cada estudiante. Sí, esto les permite ver el trabajo de cada uno. Se discute esto en otra parte.
    • Dar al equipo de profesores asistentes acceso para escribir o hacer push al repositorio de cada estudiante.
    • Añadir al alumno como colaborador con acceso de escritura o a push
    • ¡Desvele estos repositorios personalmente! Wow tal notificación.

¡Esa es la configuración! Aquí se usan los paquetes gh y purrr para grabar todo este trabajo en la GitHub API. En una segunda versión, se publicarán fragmentos de código para las operaciones anteriores.

Lo que NO debe hacer (voz de la experiencia, aquí):

NO permita que los estudiantes creen sus propios repositorios.

  • Tendrá una convención de nomenclatura y nunca, jamás, la seguirán.
  • Necesita tener derechos de administrador sobre su repositorio de curso, por lo que puede manipularlo a voluntad a través de la API de GitHub. Usted les pedirá que le agreguen a usted y a los profesores asistentes como colaboradores, pero no todos logran ejecutar esta tarea.
  • Usted querrá hacer varias operaciones a granel en los repositorios y su trabajo de API será más simple si los repositorios pertenecen en la misma organización vs bucles de reposición aleatoria de propiedad de personas al azar, sujeto a sus caprichos.

30.3 El flujo de tareas

En clase, los estudiantes toman posesión de sus repositorios, desde RStudio mediante File > New Project. Ellos hacen la mayor parte de su curso aquí: es un directorio en su computadora, un repositorio en Git asociado con GitHub remoto, y un proyecto de RStudio.

Normalmente, la tarea se realiza en R Markdown, usando el formato de salida github_document. Ellos hacen commit y push .Rmd,.md, y cualquier archivo necesario, tal como figuras.

Las tareas se presentan al abrir un issue:

  • El nombre del issue es “Mark homework x of lastname_firstname”. De acuerdo, no es así, pero puede soñarlo.
  • El cuerpo debe contener el SHA de su último commit, etiqueta(s) para la calificación del profesor asistente o el equipo de profesores asistentes, e, idealmente, enlaces a los archivos a calificar.

Los profesores asistentes dejan comentarios aquí. Las calificaciones reales se almacenan en otro lugar y se distribuyen por correo electrónico. A medida que los profesores asistentes califican, cierran los asuntos.

Después de la presentación de tareas, asignamos aleatoriamente a cada estudiante para revisar el trabajo de dos compañeros. Cada tarea de revisión por pares toma la forma de un issue asignado al revisor. Los estudiantes dejan comentarios entre sí aquí. A medida que los profesores asistentes califican, leen y evalúan estas revisiones de pares (¡también calificadas!) Y cierran los asuntos.

30.4 GitHub como sistema de gestión de cursos

2017-05-29 Esta sección fue eliminada de un artículo que Jenny Brian está escribiendo. Es parcialmente redundante con lo anterior y los dos se fusionarán.

STAT 545 es un curso de análisis y manipulación de datos de la University of British Columbia. Jenny Brian fue la instructora a cargo durante varios años, lo que coincidió con su propia adopción de Git / GitHub. GitHub se utiliza para administrar el desarrollo del material del curso, para presentar el sitio web del curso, para crear un foro de discusión y para alojar todo el trabajo presentado por los estudiantes.

Dado que los estudiantes deben presentar su trabajo y proporcionar revisión por pares del trabajo de otros a través de GitHub, el uso de control de versiones alojado es una parte explícita, aunque modesta, del curso. El sitio web Happy Git and GitHub for the useR tiene instrucciones probadas en batalla para la configuración y el uso temprano. Los estudiantes alcanzan las competencias básicas con bastante rapidez y les resulta gratificante ver sus reportes de R Markdown formateados y ricos en figuras en Internet. Dado que es fácil exponer su trabajo dentro de la clase, se lleva a cabo la revisión por pares, lo que ayuda a la experiencia a difundir rápidamente a través del grupo.

30.4.1 Usar una GitHub Organization

Las GitHub Organizations son “cuentas compartidas donde grupos de personas pueden colaborar en muchos proyectos a la vez”. Esta es la estructura más apropiada para administrar los recursos del curso, ya que puede otorgarse a los profesores asistentes y estudiantes diferentes niveles de acceso a varios repositorios. El acceso se puede controlar a nivel de usuario individual o, más convenientemente, para Equipos completos. El equipo de profesores asistentes comparte acceso de escritura con el instructor en un repositorio privado para asuntos internos. Se proporciona a cada estudiante su propio repositorio privado para los cursos y se otorga a otros miembros del equipo de estudiantes acceso de lectura, para facilitar la revisión por pares. Hay un repositorio público que sustenta el sitio web del curso (ver abajo). Se tiene otro repositorio público que existe únicamente para que los Issues que se puede utilizar como un foro de discusión.

GitHub anima activamente el uso de su plataforma en la enseñanza. Como instructor puede solicitar una cuenta de organización gratuita que proporciona funciones normalmente disponibles sólo en planes pagados, como repositorios privados. De hecho, GitHub proporciona herramientas para flujos de trabajo de enseñanza específicos a través de GitHub Classroom, aunque no Jenny Brian no lo usa. La profesora Brian comenzó a enseñar con GitHub varios años antes de que esto existiera y desarrolló una manera diferente de usar la plataforma. También se encuentra que los recursos de GitHub Education se orientan más hacia la informática que la ciencia de los datos.

30.4.2 GitHub Pages para el sitio web del curso

Todo el contenido del curso se proporciona en el sitio web STAT 545. Cada página se genera a partir de un documento de Markdown de R que se procesa a HTML localmente utilizando el paquete rmarkdown, conservando el Markdown intermedio. Estas páginas son una mezcla de prosa y código R, que refleja la codificación en vivo realizada en clase. Todos estos archivos y su historial se pueden explorar en el repositorio de origen. El equipo de profesores asistentes tiene permiso para escribir en este repositorio, lo que significa que pueden (¡y lo hacen!) ayudar a mantener el sitio web. También se reciben correcciones tipográficas y otros aportes del mundo en general, ya que esto es totalmente público.

Si estuviera empezando desde cero hoy, seguiría usando R Markdown, RStudio y GitHub Pages (ver más abajo), pero actualizaría a un enfoque más moderno y automatizado para renderizar las páginas. Ahora se recomienda R Markdown sitios web, bookdown, o blogdown para administrar el proceso de creación de un sitio web estático a partir de un conjunto grande e interrelacionado de archivos .Rmd.

GitHub ofrece varias maneras de alojar un sitio web directamente desde un repositorio, conocido colectivamente como GitHub Pages. El sitio web STAT 545 es una página Organization Page que utiliza un dominio personalizado, stat545.com, en lugar del prefijoorgname.github.io.

Este sistema para administrar el contenido del curso es un gran ejemplo de integración del trabajo y compartirlo. Se analizan datos en vivo en clase, usando R, basado en los scripts del sitio web. Se vuelven a renderizar los .R o .Rmd asociados, se validan los archivos modificados, se hace push y se ven reflejados de inmediato en http://stat545.com. No hay separación entre tener una idea, implementarla y postearla en el website.

30.4.3 Repositorios privados específicos para estudiantes

Al principio del curso se obtienen los nombres de usuario de GitHub para los estudiantes registrados, a través de una Shiny app, y se les invita a unirse al curso Organization. Luego se crea un repositorio privado por estudiante, en la STAT 545 Organization. El estudiante seleccionado tiene acceso de escritura y los otros estudiantes tienen acceso de lectura. Esto es algo polémico, debido a la posibilidad de hacer trampa, pero he visto más pros que contras con esta configuración, en el contexto STAT 545. En otros contextos, también he usado un repositorio por estudiante por asignación de tareas, lo que le permite mantener los repositorios completamente privados hasta la presentación de tareas, y luego aumentar su visibilidad durante el marcado y la revisión por pares. Algunos cursos funcionarán mejor con un modelo u otro.

Cada estudiante hace su trabajo en este repositorio, presentando una asignación importante aproximadamente una vez por semana. La primera tarea es simplemente reclamar el repositorio y crear un README, lo que demuestra que tienen toda la configuración de software relevante y que pueden escribir un poco de Markdown. Cada semana abordamos un nuevo análisis de datos o una tarea manipulación de datos, con cada vez más autonomía para la independencia. La tarea se implementa en los documentos de Markdown de R, se procesan en Markdown y se hace push a GitHub. Los estudiantes envían su trabajo abriendo un issue en su repositorio, nombrando la tarea en el título, proporcionando el SHA del commit final asociado y enlazando al archivo .md principal. Se dejan comentarios como retoralimentación en el issue u, ocasionalmente, se proponen cambios en el código a través de “pull requests”. Dos pares son seleccionados al azar para revisar cada tarea, un proceso que también se implementa a través de GitHub Issues.

Al final del curso, el estudiante (¡y su instructor!) pueden visitar el repositorio para encontrar una secuencia organizada y navegable de ~10 tareas. Cada estudiante se va con documentación auto-escrita de todo lo que ha hecho, listo para consultar en futuros proyectos. Las últimas asignaciones requieren escribir un paquete en R o una Shiny app, que generalmente realizan en repositorios públicos bajo sus propias cuentas. Terminan el STAT 545 con varios meses de experiencia en Git / GitHub y el inicio de un portafolio de datos científicos.