viernes, 14 de mayo de 2021

Un ejemplo de uso de la programación informática en el trabajo del aula

Para bien o para mal ---tengo mi opinión al respecto, que no viene al caso---, la cantidad de tareas administrativas o burocráticas que los docentes tienen que realizar anualmente es mucho mayor de lo que la gente que no está en esta profesión podría imaginar. Es durante los preliminares y finales de los cursos cuando estas obligaciones aumentan hasta el punto de llegar a ser extenuantes.

Todo lo que sea reducir la carga de trabajo mecánico en las actividades de este tipo redunda en beneficio de la enseñanza, porque permite concentrar esfuerzos y tiempo en los aspectos creativos de la docencia.

Un ejemplo son los exámenes. En mi centro de trabajo se trata de pruebas de acceso que deben ser evaluadas siguiendo unos determinados protocolos. Se trata básicamente de aplicar en la examen los criterios de evaluación de la programación del curso al que el aspirante solicita el acceso con el fin de determinar su grado de competencia. Hoy en día, este tipo de evaluaciones se realiza mediante rúbricas que miden el nivel del aspirante en relación con los contenidos evaluables del curso correspondiente.

Lo que esto supone administrativamente para el profesor que examina o el departamento al que pertenece es como mínimo lo siguiente:

  1. Crear rúbricas para cada uno de los exámenes.
  2. Rellenar dichas rúbricas durante el examen.
  3. Calcular in situ los resultados de la evaluación con las ponderaciones que correspondan.
  4. Generar un informe con los resultados obtenidos.

Hasta ahora estas operaciones se vienen realizando en la mayor parte de los centros a mano. Las rúbricas, previamente elaboradas con un procesador de textos por los jefes de departamento a partir de la programación actual, se marcan durante el examen. Las calificaciones parciales y finales se calculan tras el término del examen, ya sea con papel y lápiz, con calculadora o, en el más sofistacado de los casos (infrecuente, sin duda) mediante una hoja de cálculo creada ex profeso para cada rúbrica. Finalmente, el informe de los resultados se rellena a mano sobre modelos creados con procesadores de texto.

Es demasiado trabajo innecesario, con varios pasos intermedios donde los errores pueden colarse inadvertidamente. Me pareció que era hora de automatizar el proceso en alguna medida.

Mi primer objetivo fue resolver las fases 2 y 3 de la lista anterior de tareas necesarias.

La actividad de cumplimentación de las rúbricas y realización de los cálculos de la evaluación, debería poder realizarse con un dispostivo de fácil acceso en el lugar del examen, digamos, un teléfono móvil. La tecnología que inmediatamente se presenta como la ideal es la de una página web estática, esto es, que no requiere acceso a servidores web, pero diseñada con la capacidad de adaptarse dinámicamente a cada situación concreta. Una solución que debe implementarse mediante HTML, CSS y JavaScript. El profesor accede a esa página previamente almacenada en su móvil, rellena los formularios que corresponden a las rúbricas del examen y la página computa automáticamente los resultados adecuadamente ponderados. Enviar el formulario significa, en este contexto (donde no se envían a un servidor web), guardar las anotaciones para su posterior procesamiento.

La generación del informe con los resultados del examen puede resolverse mediante un programa que transforme el resultado guardado previamente a través de la interfaz web en un documento pdf. Para ello, una buena opción es echar mano de un lenguaje de propósito general que proceda a analizar (parsing) el resultado y produzca una cadena de texto o fichero fácilmente convertible a pdf. Mi solución concreta ha sido utilizar el lenguaje de programación Racket para convertir el resultado guardado desde la interfaz web como fichero json a markdown, que luego el programa Pandoc se encarga de transformar directamente a pdf.

Crear una página web estática para cada tipo de examen es también demasiado repetitivo y mecánico. Una solución es especificar examenes con un determinado formato, idealmente uno que pueda entender con facilidad cualquier profesor o jefe de departamento. Una especificación de esta clase, más sencilla incluso que markdown, ya que apenas etiqueta el texto y usa sólo los espacios de indentación para marcar las secciones, podría tener el siguiente aspecto:


Título del examen

Título de rúbrica 1|Ratio
  Titulo de la Dimensión 1
    Nivel 1
    Nivel 2
    ...
  Título de la Dimension 2
    Nivel 1
    Nivel 2
    ...
  ...
  
Título de rúbrica 2|Ratio
...

Una vez establecido un formato como el anterior, podemos diseñar un programa que transforme ficheros con esta estructura a una página html que se atenga a la forma concreta que espera la interfaz web diseñada previamente. De nuevo, he usado Racket para implementar dicha operación.

Finalmente, es posible también automatizar, al menos en alguna medida, la propia generación de rúbricas a partir de la programación de la asignatura. La única condición necesaria es que la programación sea fácilmente procesable. Afortunadamente, la programación de mi asignatura está escrita en Markdown y sus diferentes secciones siguen un esquema muy formalizado de exposición. Cumplida esta condición, es relativamente sencillo diseñar un programa semejante a los anteriormente descritos que transforme los contenidos evaluables de la programación en un examen con el formato indicado más arriba.

Todo este grupo de pequeños programas puede más tarde agruparse para una ejecución secuencial a través, por ejemplo, de un script del shell.

Acabaríamos con un diseño, basado en sucesivas transformaciones del mismo contenido, ejecutadas por transformadores escritos en distintos lenguajes de programación:

                       formato       lenguaje del transformador/aplicación
                       -------       -------------------------------------
  Programación
     |                 markdown      Racket
     |
     |
  Examen/Rúbricas
     |                 txt           Racket
     |
     |
  PáginaWeb            html          JavaScript
     |
     |
     |
  Resultado            json          Racket
     |
     |
     |
  Informe              markdown      Pandoc
     |
     |
     |
  Informe              pdf

Es probable que en el futuro inmediato, cuando se pase de la simple alfabetización en nuevas tecnologías a la impartición real de materias especialidades en este ámbito, cualquier profesional de nivel universitario tenga los suficientes conocimientos técnicos en programación como para diseñar sus propios programas exactamente a la medida de sus necesidades, demanda que muy difícilmente las aplicaciones de propósito general pueden cubrir. En ese momento, toda la cantidad de trabajo innecesario o monótono que realizan estos profesionales podrán realizarlos las máquinas de acuerdo con lo que su diseño indique.