Retos para aprender a programar: Desarrollo e implantación de una plataforma de publicación y corrección automatizada de retos de programación
Co-coordinador(a): SERGIO PARAISO MEDINA
memoria >>
Nombre y apellidos | Centro | Plaza * |
ANGEL HERRANZ NIEVA | E.T.S. DE INGENIEROS INFORMÁTICOS | L.D. PRF.COLABORADOR |
CLARA BENAC EARLE | E.T.S. DE INGENIEROS INFORMÁTICOS | L.D. PRF.CONTR.DOCT. |
GUILLERMO ROMAN DIEZ | E.T.S. DE INGENIEROS INFORMÁTICOS | L.D. PRF.CONTR.DOCT. |
JULIO MARIÑO CARBALLO | E.T.S. DE INGENIEROS INFORMÁTICOS | L.D. PRF.CONTR.DOCT. |
LARS AKE FREDLUND | E.T.S. DE INGENIEROS INFORMÁTICOS | L.D. PRF.CONTR.DOCT. R.A. |
MARIA PILAR HERRERO MARTIN | E.T.S. DE INGENIEROS INFORMÁTICOS | TITULAR UNIVERSIDAD |
RAUL ALONSO CALVO | E.T.S. DE INGENIEROS INFORMÁTICOS | TITULAR UNIVERSIDAD |
SANTIAGO TAPIA FERNANDEZ | E.T.S.I. INDUSTRIALES | L.D. PRF.CONTR.DOCT. |
SERGIO PARAISO MEDINA | E.T.S. DE INGENIEROS INFORMÁTICOS | L.D. PRF.AYUD.DOCTOR |
(para PDI/PAS de la UPM, en el resto de casos no se especifica).
Dentro la E.T.S. de Ingenieros Informáticos, y concretamente dentro los planes de estudios del Grado en Ingeniería Informática, del Grado en Matemáticas en Informática y del Doble Grado en Ingeniería Informática y ADE, las asignaturas de la materia Programación son una pieza clave. Una buena base en esta materia es fundamental, tanto para la correcta formación de nuestros egresados y su futura empleabilidad, como para el adecuado desarrollo de asignaturas de otras materias que también se imparten en estos grados. Las asignaturas de la materia Programación requieren una forma de aprendizaje basada en la práctica, pero esta práctica debe ser supervisada para que el aprendizaje sea efectivo y para que el alumno no se habitúe al uso de malas prácticas de programación que lastrarán su futuro desarrollo profesional.
En la enseñanza de la programación, lo habitual es que el alumno tenga que redactar un código fuente que resuelva una serie de requisitos solicitados por el profesor y que este código sea corregido mediante dos vías: (1) una serie de pruebas automáticas que se realizan para comprobar que el código efectivamente cumple los requisitos solicitados y, (2) una revisión, normalmente manual, del código escrito por el alumno para verificar que la solución propuesta es una solución de calidad, es decir, que resuelve el problema propuesto de forma eficiente, que el código cumple los estándares de un código de calidad, que no contiene malas prácticas de programación, etc. La revisión de todos los trabajos prácticos desarrollados por el alumno es una tarea titánica y prácticamente imposible de abordar con garantías dado el alto número de alumnos y la limitación de tiempo del profesorado. A este problema se une el hecho de que el número de horas de asignaturas de programación en los actuales planes de estudios se ha reducido notablemente respecto a planes de estudios anteriores, aumentando la necesidad de la realización de prácticas supervisadas por parte de los alumnos para alcanzar el grado de conocimientos adecuado para su futuro, ya sea profesional o académico.
El presente proyecto pretende fomentar entre los estudiantes el autoestudio en la materia de programación incentivando su participación en tareas complementarias a las realizadas como ejercicios prácticos obligatorios en las distintas asignaturas. Para ello, se plantea crear un sistema de publicación de retos, que se utilizará a lo largo de todo el plan de estudios, planteando al estudiante problemas de diferentes dificultades y añadiendo gradualmente conocimientos de las distintas asignaturas de la materia. Gracias a este sistema el alumno podrá practicar y adquirir las competencias y al mismo tiempo ver las sinergias y puntos en común de las distintas asignaturas de la materia de programación presentes en los grados de informática.
Nótese que el presente proyecto se trata de una continuación de un proyecto de innovación educativa desarrollado durante el año 2022 (https://innovacioneducativa.upm.es/proyectos-ie/informacion?anyo=2021-2022&id=548). En dicho proyecto se llevaron a cabo una serie de tareas de desarrollo y mejora de la plataforma DeliverIt [1,2], habiendo quedado pendientes tanto algunos desarrollos como la evaluación de las mejoras educativas obtenidas a través de la plataforma. Se pretende ampliar la aplicación web para automatizar, no sólo la realización de pruebas sobre el código entregado, sino también permitir llevar a cabo una evaluación de la eficiencia y de la calidad de la solución realizada por el alumno, proporcionándole el feedback que le pueda resultar relevante para mejorar sus conocimientos. De esta forma resolvemos el otro problema: al tratarse de entregas que se pueden revisar de forma automática, los profesores de las distintas asignaturas podrán disponer de múltiples retos/problemas a plantear durante el curso, permitiendo que los alumnos interesados puedan trabajar de forma continua, pero sin la presión de la entrega de unas prácticas evaluables para la asignatura. Asimismo, esta plataforma permitiría poder llevar a cabo un mejor seguimiento por parte del profesor ya que dispondría del código desarrollado por los alumnos y se podría seguir la evolución de estos a lo largo del curso, e incluso a lo largo de todo el itinerario de la materia. De manera recíproca, el profesorado podrá jerarquizar la dificultad de los retos con mayor precisión e identificar fallos recurrentes.
Como punto de partida del proyecto contamos con DeliverIt , una herramienta web que permite la entrega de prácticas y proyectos de programación. En la actualidad, la herramienta tiene un cierto nivel de madurez y con ella se han desarrollado infraestructuras que permiten la captura, compilación y pruebas de proyectos de programación en varias asignaturas de programación de la Escuela. Una de las características que ha facilitado su adopción es que las entregas se prueban en contenedores “estancos”, lo cual aumenta la seguridad y eficiencia del proceso.
Considerando DeliverIt un excelente punto de partida, esta herramienta carece de características fundamentales necesarias para alcanzar todos los objetivos de este proyecto. Por ejemplo, DeliverIt no dispone de la posibilidad de hacer un seguimiento de la trayectoria de un estudiante en su carrera, retroalimentación más allá de los logs de las pruebas automáticas, reusabilidad de los proyectos entre asignaturas o ludificación del proceso de entrega y retroalimentación.
Más concretamente, se pretender que DeliverIt incluya las siguientes funcionalidades no disponibles actualmente: (1) realización de un seguimiento de la evolución de un estudiante, ya sea por parte del profesorado como por parte del propio alumno; (2) introducir métricas de calidad del código: estilo y buenas prácticas, patrones y anti-patrones, tiempos de ejecución y complejidad, pruebas, etc.; (3) desligar las propuestas de ejercicios de las asignaturas de forma que los estudiantes puedan ejercitarse en cualquier momento con contenidos de la materia impartidos en las diferentes asignaturas; (4) evaluar la dificultad de un reto o práctica propuesta, usando información de tiempos para su desarrollo así como de tasas de éxito por parte de los estudiantes; (5) clasificar los retos bajo diferentes taxonomías: dificultad, tipo de problema, tipos de algoritmos, tipos de estructuras de datos, lenguaje de programación, etc.
Referencias bibliográficas
[1] Mareca Mínguez, Andrés (2020). Sistema de entrega Deliverit: prototipo. Proyecto Fin de Carrera / Trabajo Fin de Grado, E.T.S. de Ingenieros Informáticos (UPM), Madrid, España. https://oa.upm.es/63096/
[2] Martín de Pablo, Alberto (2021). DeliverIt 1.0. Back-end. Proyecto Fin de Carrera / Trabajo Fin de Grado, E.T.S. de Ingenieros Informáticos (UPM), Madrid, España. https://oa.upm.es/68467/
El objetivo fundamental del presente proyecto es incentivar la puesta en práctica de los conocimientos adquiridos por los alumnos en la materia de Programación mediante un sistema de publicación y corrección de retos. Actualmente, y debido a la carga de trabajo de los estudiantes, nos encontramos con que la mayoría de los alumnos creen que con ‘entender’ los ejercicios que los profesores plantean en clase, y que terminar las prácticas obligatorias es suficiente para dominar el contenido de las asignaturas. La realidad es que, a pesar de que ellos crean que tienen una idea de cómo resolver los problemas, hay un salto importante hasta que consiguen realmente crear de forma autónoma un programa que solucione los problemas a los que se enfrentan. En la materia Programación, este salto sólo se puede realizar mediante la práctica guiada, el autoestudio y el entrenamiento continuo.
Por ello se pretende desarrollar una herramienta de trabajo que motive a los alumnos mediante un sistema de entrega y corrección inmediata de retos con el que se fomente la implicación del alumno en el autoaprendizaje experiencial en las diferentes asignaturas de Programación. Incentivando esta participación en tareas complementarias a las realizadas como ejercicios en las distintas asignaturas se busca que los alumnos adquirieran las competencias específicas en la materia de Programación de una manera sólida y adaptada a su ritmo de aprendizaje.
Incluyendo esta herramienta en las diferentes asignaturas, el profesorado tendrá la posibilidad de trabajar desde una estrategia de aprendizaje basada en retos y hacerlo de múltiples formas: se podrían plantear retos a los alumnos tanto dentro como fuera del horario de clase; el alumno podría revisar y repasar todas las entregas que ha realizado de cara a la preparación del examen y de las prácticas; se podrían dejar una serie de problemas disponibles para los alumnos de forma que éstos podrían practicar en cualquier momento y lugar; se podrían integrar herramientas de seguimiento del trabajo realizado para permitir al alumno conocer sus avances y mantenerle motivado.
La inclusión de esta herramienta durante la evaluación continua de las asignaturas también pretende fomentar el seguimiento diario del temario de las asignaturas mediante la incorporación de problemas basados en los temas impartidos. Esto permitiría que aquellos estudiantes que suelen ser menos partícipes durante el día a día de una asignatura puedan, mediante la resolución de estos retos, tener un trabajo más constante de la asignatura
Asimismo, mediante esta plataforma se podrían plantear retos fuera de las temáticas específicas de las asignaturas, al estilo de los concursos de programación, de forma que puedan participar alumnos de la Escuela que no necesariamente estén matriculados en asignaturas de la materia y que permitan crear una comunidad que fomente y motive al alumnado para mejorar profundizar en sus conocimientos sobre la materia de Programación.
Mediante este sistema de propuesta de retos/problemas los alumnos podrán, no sólo practicar con los diferentes problemas propuestos, sino recibir una retroalimentación inmediata tanto cuantitativa (puntuación) como cualitativa (indicadores de calidad del código entregado). Consideramos que esta retroalimentación fomentará el estudio autónomo, permitiendo a cada alumno avanzar según sus necesidades y capacidades.
También consideramos que la plataforma ayudará a la labor de los docentes, ya que aquellos errores que puedan ser notificados de manera automática liberarán tiempo para resolver dudas no triviales. Asimismo, el análisis de los datos sobre entregas proporcionados por la plataforma permitirá identificar ejercicios de especial complejidad o posibles conceptos y competencias adquiridos de manera deficiente.
Dado que el presente PIE involucra a las principales asignaturas de la materia Programación existentes en la ETSI Informáticos, este sistema permitirá acompañar y tutorizar a los alumnos a lo largo de sus estudios en la materia de Programación, permitiéndole repasar materias ya estudiadas, descargar los resultados obtenidos y conservar su perfil de aprovechamiento en las materias programación, incluyendo información como los retos superados, su desempeño dentro de cada reto, de cada asignatura, para su posible inclusión en el currículo del alumno. Además, como ventaja adicional, se estudiará la posibilidad de que la información del sistema generado pueda ser usada por el departamento de calidad de la Escuela para la elaboración de informes sobre la calidad de la docencia en esta materia.
Titulación/es Grado: | DOBLE GRADO EN INGENIERIA INFORMATICA Y EN ADE |
Titulación/es Máster: |
|
Nº de Asignatura/s: | 14 |
Centro/s de la UPM: |
|
Aclaración: el plan de trabajo que proponemos se estructura en torno a cinco actividades que se solaparán parcialmente en el tiempo, por lo que nos referiremos a ellas como “tareas”. Las enumeraremos en orden cronológico de mes de inicio del proyecto.
TAREA1: Definición de requisitos del sistema (1 mes, M1)
En esta tarea se estudiarán productos con características alineadas con los objetivos del proyecto. A priori, creemos que existen dos alineamientos posibles:
-
Iniciativas relacionadas con la programación competitiva y jueces en línea como por ejemplo Codechef, Leetcode, HackerRank, o más cercanos en nuestro pais UVA Online Judge o ¡Acepta el reto!
-
Iniciativas relacionadas con la ludificación (gamification) del aprendizaje de la programación incluyendo retroalimentación. Por ejemplo Kahoot, Codio o Codegrade.
El resultado de esta tarea será una lista de requisitos del sistema a desarrollar que tendrá en cuenta la propia idiosincrasia de la escuela y de la enseñanza de la programación en la misma. El desarrollo de esta tarea se llevó a cabo completamente en el proyecto anterior, pero los resultados obtenidos serán revisados para evaluar posibles nuevas funcionalidades que puedan ser de interés en la plataforma.
TAREA 2: Desarrollo (5 meses, M2-M6)
Los trabajos desarrollados a lo largo del proyecto anterior han permitido que la plataforma permita integrar tanto diferentes asignaturas como diferentes entornos y lenguajes de programación. Asimismo, la plataforma ha sido instalada en el dominio https://deliverit.fi.upm.es/ y actualmente está siendo utilizada para la entrega y evaluación de prácticas en tres asignaturas diferentes. En dos de estas asignaturas, “Algoritmos y Estructura de Datos” y “Programación I” se están llevando a cabo entregas desarrolladas en Java, mientras en la asignatura “Programación Lógica” se están llevando a cabo entregas desarrolladas en el lenguaje de programación Prolog. También se ha avanzado en el uso de herramientas de evaluación automática de código para la generación automática de feedback para los alumnos, encontrándose en la actualidad en fase de prueba.
Los nuevos desarrollos pretenden añadir las nuevas funcionalidades previamente descritas y se centrarán en los siguientes puntos: en ampliar la retroalimentación de las entregas realizadas de los alumnos, en el seguimiento de la evolución de un estudiante, en la evaluación de la dificultad de un reto o práctica propuesta, en introducir métricas de calidad y estilo de código en la retroalimentación, en desligar los ejercicios de las asignaturas para disponer de un perfil de seguimiento del alumno y en clasificación de retos basadas en múltiples categorías.
TAREA 3: Creación de un conjunto inicial de retos (3 meses, M4-M6)
Para poder evaluar el éxito de nuestra propuesta será necesario disponer de una serie de retos con los que alimentar el sistema. Nuestra intención es adaptar prácticas y/o problemas de examen ya existentes en las diferentes asignaturas para crear una batería de retos en el nuevo sistema. Como ya se ha indicado, en la actualidad el sistema se encuentra funcionando en tres asignaturas y se prevé ampliar su uso, tanto en nuevas asignaturas, como en la publicación de retos que puedan ser transversales a diferentes asignaturas.
TAREA 4: Piloto (2 meses, M7-M8)
En esta tarea realizaremos una prueba piloto donde varios grupos de alumnos, y profesores, usarán el sistema desarrollado. En el diseño del piloto y en su ejecución se formarán diferentes grupos de estudiantes de diferentes años, retos en el ámbito de asignaturas, retos fuera de las asignaturas, y profesores que no hayan participado en el desarrollo del sistema (con el objetivo de evitar sesgos de los creadores en los resultados finales).
TAREA 5: Evaluación (1 mes, M8)
Para medir los resultados del proyecto, usaremos diferentes técnicas, desde entrevistas y cuestionarios sobre la experiencia de estudiantes y profesores hasta análisis estadísticos del uso del nuevo sistema.
El seguimiento del proyecto se realizará mediante un equipo de trabajo en Teams. Se intentará aplicar metodologías de trabajo ágiles en la medida de lo posible, manteniendo el número de reuniones al mínimo. Estimamos necesarias al menos una reunión al mes con todos los participantes para vigilar el cumplimiento del plan de trabajo, así como reuniones semanales de los participantes en cada una de las tareas.
Podemos destacar los siguientes hitos:
-
Revisión del documento de requisitos iniciales de la herramienta.
-
Incluir nuevos retos y prácticas que se usarán en el piloto.
-
Informe de experiencia de uso.
-
Desarrollo de las funcionalidades relacionadas con la publicación de retos y con el seguimiento del trabajo de los alumnos.
-
Definición de la forma de evaluación de las mejoras obtenidas.
-
Evaluación de la plataforma.
-
Informe final del proyecto.
La herramienta que proponemos en este proyecto tiene una gran variedad de aplicaciones con potencial de mejora de la calidad educativa, tanto dentro de una asignatura (planteando ejercicios para el seguimiento activo, así como repaso para examen, prácticas, etc.) como para adquirir competencias transversales a varias asignaturas, o directamente independientes de una asignatura en particular (preparación para concursos de programación, apoyo a talleres específicos, enseñanza inter pares y learning by teaching, etc.). No obstante, aun cuando partimos de una herramienta ya existente, la mayor parte del tiempo en nuestro plan de trabajo se dedica al diseño, desarrollo y validación de las nuevas funcionalidades, quedando poco más de un mes para poder evaluar posibles efectos positivos de la plataforma. Por tanto, la evaluación será fundamentalmente cuantitativa, quedando un análisis más profundo de cómo la herramienta puede ayudar a la mejora educativa para una fase posterior durante 2023.
Entre las cosas que podremos evaluar prevemos:
-
Estadísticas sobre uso de la plataforma: volumen de problemas cargados, accedidos y resueltos. Tiempos y número de intentos entre entregas incorrectas y correctas. Alumnos participantes y su distribución, etc. Uso por asignaturas, tipo de reto, etc.
-
Encuestas a los distintos usuarios de la herramienta (tanto proponentes de retos como resolutores) sobre la experiencia de uso. Obtención de sugerencias de mejora.
-
Se realizará un estudio con los resultados de las pruebas de evaluación continua que hayan tenido lugar a lo largo de desarrollo del proyecto.
Los productos concretos resultantes del proyecto son:
-
Aplicación web (ya sea dentro o fuera del sistema DeliverIt) para ofrecer una experiencia de usuario acorde a los requisitos propuestos en la tarea 1. Dicha experiencia de usuario estará muy orientada a la retroalimentación, evaluación y autoevaluación del propio estudiante en un contexto más bien lúdico y competitivo.
-
Nueva infraestructura para Deliverit en forma de biblioteca o componentes que permita usar la herramienta fuera del contexto de una asignatura, permitiendo el seguimiento de la evolución de un estudiante a lo largo de la materia Programación. Asimismo el sistema permitirá evaluar la dificultad de un reto, conectar con herramientas de métricas de calidad del código, clasificar y añadir nuevos retos.
-
Colección de retos de programación para el aprendizaje de la programación.
Creemos que el sistema resultante podría ser usado en toda la Universidad Politécnica de Madrid por otros profesores que deseen participar en la elaboración de nuevos retos o adaptar los ya existentes. También dentro de la UPM, cualquier alumno interesado en el aprendizaje de la programación podría usar el sistema, de forma libre (usando su correo UPM) o, por ejemplo, dentro de los cursos de programación organizados por el ICE.
Dado que el desarrollo del sistema pretende hacerse bajo licencias de software libre, creemos que existe un potencial de transferencia fuera de la institución o que incluso la propia UPM podría usarlo como herramienta de marketing.
-
Divulgación de la herramienta en redes sociales de la Escuela y la UPM, así como en sesiones concretas de las asignaturas involucradas.
-
Página web de la herramienta para facilitar la incorporación de la herramienta en otras escuelas. Se acompañará con la divulgación de la herramienta en jornadas de la UPM y otros centros donde se expondrá la herramienta y el material promocional (roll-up, poster y/o dípticos).
-
Presentación de la herramienta en los canales oficiales y redes sociales de la escuela y la universidad. Vídeotutoriales.
-
Artículo de innovación educativa que incluya la presentación de la herramienta y los resultados obtenidos en los pilotos llevados a cabo en las asignaturas de programación de los distintos grados involucrados.
Varios de los miembros del equipo hemos colaborado con el capítulo ACM de la UPM para la participación de estudiantes en concursos de programación como el Ada Byron, así como en la organización de charlas y talleres de programación. Creemos que esta colaboración podría traer una serie de ventajas al proyecto. Por una parte, puesto que el piloto propiamente dicho tendrá lugar en una fase tardía del plan de trabajo, parte de las pruebas que tendrán lugar en M5—M6 podrían llevarse a cabo en un contexto de preparación para concursos de programación o cualquier otro taller que el capítulo tenga planificado en dichas fechas. Asimismo, la experiencia del capítulo en experiencias formativas próximas al aprendizaje inter pares y el learning by teaching proporcionará una realimentación muy valiosa desde el punto de vista del alumnado.