Explicando el bajo nivel de programación de los estudiantes es un artículo escrito por los doctores Francisco J. Gallego Durán -un clásico por estos lares-, Patricia Company Rosique, Rosana Satorre Cuerda y Carlos Villagrá Arnedo, ganador del Premio 2017 al mejor artículo de JENUI (Jornadas sobre Enseñanza Universitaria de la Informática) en el ámbito de SISTEDES (Sociedad de Ingeniería de Software y Tecnologías de Desarrollo de Software). En dicho artículo se plantea una problemática -el deterioro en la calidad de los programas de los estudiantes de cuarto curso-, se formula una hipótesis y se pone a prueba dicha hipótesis con una acción también con amplia cobertura en estas páginas: CPCRetroDev.
El problema
El análisis de cientos de ejemplos de código lleva a detectar un problema importante a la hora de formar buenos ingenieros, viendo como el código escrito por los alumnos de cuarto curso, alumnos a los que se les asume una serie de conocimientos suficientes, no llegaba al nivel esperado, mostrando severas carencias tanto en términos de aplicación de alto nivel como de conceptos fundamentales. No es que los programas no funcionen -nadie podría obtener un título si no es capaz de resolver las prácticas-, sino que el código generado dista de ajustarse a unos estándares de calidad exigibles a los que, no lo podemos olvidar, están a punto de ser ingenieros informáticos.Los requerimientos a un ingeniero informático van mucho más allá de saber programar en tal o cual lenguaje; un buen ingeniero debe entender cómo funcionan las cosas para poder formular la forma más eficiente se resolver un problema. De ahí la crítica importancia de que, de manera aparentemente generalizada, los estudiantes de ingeniería, en un curso tan avanzado como es el cuarto, arrastren carencias que deberían estar solventadas desde los inicios de su carrera.
Primer diagnóstico
Tras analizar los datos y realizar una serie de encuestas entre los alumnos, se detecta que es un problema bastante generalizado, lo que implicaría una carencia en el propio proceso de enseñanza y aprendizaje. No es que la comunidad educativa haya dejado abandonados a los estudiantes, ni mucho menos, pues se han lanzado diversas iniciativas de cara a motivar a los estudiantes; es que éstos modelizan erróneamente los conceptos básicos de bajo nivel (del compilador hacia "abajo").A esta hipótesis se llega tras cuatro años de observación y utilizando teorías actuales de psicología. El problema no radica en la dificultad per se de los conceptos básicos; es que no se les dedica el tiempo suficiente o no se les da la importancia debida en la actualidad. Así, mientras se le da mucha importancia a los niveles más altos dentro del modelo conceptual que sustenta el proceso para diseñar la solución a un problema (programa - saber manejar el lenguaje de programación de alto nivel), no se le da la suficiente a la otra parte de la ecuación (máquina - bajo nivel).
Aunque hay ciertas diferencias curriculares en los primeros cursos de Ingeniería de cada Universidad, es común una cierta tendencia a pasar por alto el bajo nivel y optar por lenguajes de alto nivel, con predilección por la enseñanza de modelos y paradigmas, pero descuidando los cimientos sobre los que se asientan, en última instancia, esos conceptos mismos: media un abismo, en términos de conceptos, entre la ejecución de un binario por parte del procesador y el código fuente del que se generará ese binario.
Otro error determinante que suelen cometer algunos docentes es dar por sabidos conceptos básicos que para ellos son claros y están más que asumidos. A todos nos ha pasado alguna vez, sobre todo en materias de ciencias, que un profesor emplee conceptos sin explicar su significado, simplemente porque asume que deberíamos conocerlos, y no siempre es el caso. Otro ejemplo más tonto aún: cuando tuve conocimiento de este artículo por boca de Fran Gallego tuve que buscar en internet que significaba JENUI y SISTEDES ya que, en un pequeño lapsus, Fran dio por hecho que yo sabía a qué se refería y no vio la necesidad de explicarme el significado de dichos acrónimos.
¿Qué ocurre cuando los estudiantes modelizan erróneamente conceptos base? Pues, entre otros problemas, resulta en dificultades para implementar soluciones de software desde cero. Sin olvidar un problema mucho más grave aún: ni siquiera son conscientes de tener ese problema; enfrentados a su código y destapada la baja calidad del mismo, la respuesta de los estudiantes no podía ser más desoladora:
- "Así funciona"
- "¿Eso no lo optimiza el compilador?"
- "El código lo copié y lo adapté"
- "En la empresa X me han dicho que programo muy bien"
Comprobando la hipótesis: CPCRetroDev
Con vistas a pasar de las palabras a los hechos, nace el CPCRetroDev. Cualquier lector de RetroManiac ya conoce a estas alturas la brillante iniciativa pedagógica que se esconde detrás del CPCRetroDev. La creación de videojuegos es una de las motivaciones principales de los estudiantes del Grado en Ingeniería Multimedia, por lo que ponerles manos a la obra es una motivación extra para los estudiantes. El hecho de tener que utilizar una máquina tan limitada como el Amstrad CPC, con su procesador de 4 MHz y sus 64 KB de RAM, puede suponer un factor desmotivante para algunos, pero resulta un reto para otros, con su factor extra de motivación.Independientemente del caso, para lo que sirve la tarea es para que los estudiantes se den cuenta por sí solos de la baja calidad del código generado cuando los recursos no son ilimitados. Cuando cada byte de memoria y cada ciclo de reloj cuenta, cada instrucción superflua supone una losa en el resultado final del proyecto. Enfrentados con un problema de limitación de recursos, los estudiantes tienden a tomar en consideración todas las herramientas a su alcance, incluso aquellas que han podido desdeñar en el pasado, como pueda ser un dominio en profundidad del compilador.
Para observar hasta qué punto el CPCRetroDev y, por consiguiente, la programación en una máquina de recursos limitados como puede ser el Amstrad CPC, supone un verdadero espaldarazo a la hipótesis formulada previamente, se realizaron encuestas entre los alumnos antes y después de participar en la actividad. En dicha encuesta se observa un cambio interesante en relación a preguntas como «valora tu nivel de programación» o «qué deberías hacer para mejorarlo», lo que permite afirmar que el CPCRetroDev contribuye decisivamente a concienciar a los estudiantes sobre el problema de la calidad del código y a proporcionar una motivación extra para solventarlo.
¿Es el CPCRetroDev la solución al problema?
La respuesta a la pregunta es no. El CPCRetroDev ha servido para que los estudiantes sean conscientes de los hándicaps con los que llegan a un estadio tan avanzado de sus estudios, y aporta un extra de motivación, pero, en sí mismo, no ataca la raíz del problema. No confirma al cien por cien la hipótesis que explicaría la baja calidad del código escrito por los estudiantes, pero sí muestra los suficientes indicios acerca de por dónde pueden ir los tiros como para animar a otros investigadores a profundizar en el tema.Por otro lado, las pertinentes explicaciones de conceptos y herramientas en clase, necesarias para que los alumnos puedan enfrentarse con cierta garantía al reto que supone crear un videojuego para una máquina limitada como es el Amstrad CPC, supone una buena base sobre la que empezar a corregir el problema. El hecho de que estos alumnos se enfrenten a veteranos de la escena de todo el mundo supone el enésimo aliciente para que se tomen muy en serio el tema y sean capaz de dar lo mejor de sí mismos. Nadie quiere empezar su futura y brillante carrera en el mundo de los videojuegos pariendo un "truño" de proporciones bíblicas que además quede a disposición de todo el mundo, dejando el pertinente rastro en Internet y pudiendo convertirse en un futuro dolor de cabeza a la hora de solicitar un empleo si caemos en las manos de un recruiter hábil.
La solución está en los orígenes: el Ensamblador
Existe un cierto consenso ante la idea de que los chicos y chicas que tuvimos un ordenador de 8 bits en nuestra infancia e hicimos algunos pinitos en BASIC contábamos con una ventaja de base respecto a nuestros compañeros con menos suerte. El aprendizaje de ciertos conceptos de programación a una edad temprana nos proporcionó las herramientas para solucionar problemas básicos pero, lo que es más importante aún, nos dio una serie de habilidades lógicas a la hora de atacar los problemas, las temáticas o los proyectos.De una manera similar a lo ocurrido hace décadas, el conocimiento del bajo nivel a la hora de programar, y el enfrentarse a una máquina de recursos limitados desde los inicios del proceso formativo en la universidad, puede suponer la diferencia entre buenos y malos programadores. Es por ello, con vistas a dar un paso más en la confirmación de la hipótesis a la vez que poner los primeros mimbres para resolver el problema, que desde este curso académico los estudiantes de la Universidad de Alicante estudiarán ensamblador de Z80 en el primer curso, sustituyendo a lenguajes de alto nivel, con vistas a reforzar el aprendizaje de los conceptos base mediante una correcta modelización mental.
Éste es un proceso que requerirá de su tiempo para comprobar si, tal y como plantea la hipótesis, da resultado, pero desde un punto de vista lógico todo parece indicar que así debería ser. Volviendo a nuestra común afición, tenemos también una buena noticia para nuestros lectores, al menos para aquellos que han tenido la paciencia de llegar hasta aquí: el curso de ensamblador de Z80, formado por material audiovisual desarrollado para un fácil entendimiento, estará disponible en un futuro cercano para todo el público, no solo los estudiantes de la universidad.
Volver la vista atrás para mirar al futuro
En resumidas cuentas, las máquinas de nuestro pasado como, en este caso, el Amstrad CPC, pueden jugar un rol primordial a la hora de enseñar buenos hábitos de programación a las futuras generaciones de ingenieros informáticos encargadas de maravillarnos con los últimos desarrollos en tecnología puntera. Se cierra así un círculo con los orígenes, en lo que casi es una alegoría de los tiempos pretéritos en el que el sabio, perdido el ardor de la juventud, transmitía su sabiduría a las nuevas generaciones, encargadas de mejorar el conocimiento depositado en ellas y transmitirla, nuevamente y con mejoras, a la generación siguiente una vez, alcanzada su edad madura.Nadie hubiera pensado que una computadora de 1984, treinta años después de su lanzamiento, y un venerable lenguaje de programación como es el ensamblador, con más de 60 años a sus colectivas espaldas, podrían jugar un rol importante en la educación de las futuras generaciones de ingenieros, y sin embargo, aquí estamos, con serios indicios de que pueden ser la solución al problema de la errónea modelización de conceptos base de las Ingenierías Informáticas, resultando en la formación de mejores programadores. Y pensar en la de veces que nos dijeron que era una pérdida de tiempo...
Lee el artículo original "Explicando el bajo nivel de programación de los estudiantes" en la web de AENUI