Introducción
Hoy en día los programas de computadora son usados constantemente en múltiples dispositivos como PC, smartphones, tabletas, robots y muchos otros dispositivos, por lo que los programas de computadora se han convertido en un elemento muy importante en la vida del ser humano (Mutiawani et al., 2017). Por tanto, se debe contar con profesionales que sepan programar para satisfacer las necesidades de programas de computadora en las distintas áreas en las que se desenvuelve el ser humano.
La programación de computadoras, en general, es difícil y requiere una dedicación importante de tiempo para su aprendizaje (Watanabe et al., 2001). El aprendizaje del diseño y programación orientada a objetos es desafiante para principiantes, en especial para estudiantes que ya están familiarizados con el paradigma de los lenguajes procedimentales, por lo que es una tarea difícil pasar de un paradigma a otro (Yulia y Adipranata, 2010).
El propósito de la enseñanza de la programación además de adquirir habilidades en el uso de herramientas también es el de obtener experiencia en la solución de problemas durante el proceso de programación (Watanabe et al., 2001).
Uno de los principales problemas en el aprendizaje de la programación es la habilidad para resolver problemas y el conocimiento de matemáticas, añadiéndose los desafíos de (i) mantener la motivación y el compromiso de los estudiantes en el proceso de aprendizaje, y (ii) encontrar métodos y herramientas adecuados para la enseñanza en las instituciones educativas (Pessoa, Lisboa y Pontual, 2019).
Se han realizado múltiples estudios secundarios que muestran el esfuerzo por reconocer (Saito et al., 2017) y estudiar la enseñanza-aprendizaje de programación en la educación básica (Borges et al., 2018; Szabo et al., 2019; Vinueza, Córdova y Rodas, 2019) y superior (Lara, Neri y Cota, 2019; Pessoa, Lisboa y Pontual, 2019). En estos estudios se muestra una diversidad de técnicas y herramientas, una de las más resaltantes es la creación de juegos (Abbasi, Kazi y Khowaja, 2018) para apoyar este proceso. Sin embargo, existe una gran necesidad de continuar buscando alternativas que permitan: (i) fomentar diálogo entre comunidades de educación básica y superior, (ii) clarificar el concepto de resolver problemas de programación, (iii) entender el no uso de los métodos de enseñanza prometedores, (iv) poner al descubierto herramientas para esta labor (Pessoa, Lisboa y Pontual, 2019) y que se ajusten al contexto latinoamericano.
Por todo lo expuesto, es importante hacer un mapeo tanto en educación superior como en el sistema escolar porque la realidad del Perú y Latinoamérica es distinta a la de EE.UU. y otros países que imparten la programación y el pensamiento computacional en los contenidos curriculares de los niveles de educación básica. Por lo que en el contexto de varios países de Latinoamérica puede ser importante conocer las estrategias en todos los niveles de educación para diseñar estrategias que ayuden a cerrar las brechas en la enseñanza-aprendizaje de programación.
En la primera parte se presentan los conceptos de enseñanza-aprendizaje en la programación de computadoras. En la segunda parte se explica la metodología utilizada con la técnica PICO (Petersen, Vakkalanka y Kuzniarz, 2015). En la tercera parte se presenta el análisis y las discusiones de la literatura revisada. Por último, las conclusiones y los trabajos futuros.
Metodología
Se ha realizado un mapeo sistemático de literatura que cubre estudios primarios orientados a contribuir en la mejora de la enseñanza y el aprendizaje de la programación, publicados en el periodo 2010-2020 y teniendo en cuenta la metodología de Petersen, Vakkalanka y Kuzniarz (2015). Este trabajo tiene tres preguntas de investigación generales y diez preguntas específicas.
RQ1. ¿Cuál es la orientación de los artefactos propuestos para mejorar la enseñanza-aprendizaje de programación?
RQ1.1 ¿Qué tipos de artefactos se han propuesto para mejorar la enseñanza-aprendizaje de programación?: herramientas, métodos, técnicas, guías, enfoque.
RQ1.2 ¿Qué estrategias didácticas se emplean para la enseñanza-aprendizaje de programación?
RQ1.3 ¿Qué tipo de herramientas de software se emplean para la enseñanza-aprendizaje de programación?: aplicaciones web, escritorio, móvil.
RQ1.4 ¿A qué enfoque de programación están orientadas las investigaciones?
RQ1.5 ¿A qué lenguajes de programación se orientan los artefactos a los que hacen referencia los estudios primarios?
RQ2. ¿Cuál es el alcance pedagógico de los artefactos a los que hacen referencia los estudios primarios?
RQ2.1 ¿Cuál es el alcance a nivel curricular de los artefactos a los que hacen referencia los estudios primarios?: todo el currículo, un curso, una sesión.
RQ2.2 ¿A qué nivel de educación están orientados los artefactos a los que hacen referencia los estudios primarios?
RQ2.3 ¿A qué tipo de entorno de enseñanza-aprendizaje se orientan los artefactos a los que hacen referencia los estudios primarios?: presencial, b-learning o e-learning.
RQ3. ¿Cuál es la metodología de investigación que han seguido los estudios primarios que se han propuesto para mejorar la enseñanza-aprendizaje de programación?
RQ3.1 ¿De qué manera se han evaluado los artefactos a los que hacen referencia los estudios primarios?: experimentos, casos de estudios, encuestas, etc.
RQ3.2 ¿Cuál es el alcance a nivel de investigación de los artefactos a los que hacen referencia los estudios primarios?: propuesta, implementación, evaluación.
Las bases de datos utilizadas en esta investigación fueron IEEE-Xplore, ACM Digital Library, ScienceDirect y Scopus. Se determinó la cadena de búsqueda basada en el método PICOC, del que solo se utilizó PIC, adecuándolo al contexto de la investigación.
La cadena de búsqueda genérica, que fue afinada durante tres iteraciones en las bases de datos para mejorar la precisión de los resultados, es la siguiente:
(guideline OR device OR tool OR method OR “didactic strategy” OR approach OR “evaluation method”) AND (“teaching programming” OR “programming teaching” OR “programming learning”) AND language AND computer.
Los resultados fueron filtrados mediante los criterios de inclusión y exclusión siguientes: (ci-1) artículos de tipo estudio primario, (ci-2) artículos en idioma inglés, (ci-3) artículos que presentan herramienta, enfoque o guía para la enseñanza-aprendizaje de la programación, y (ci-4) artículos que indiquen haber realizado algún tipo de aplicación práctica.
La cadena de búsqueda fue adaptada a la sintaxis de cada base de datos y los resultados fueron extraídos en una hoja de cálculo para la caracterización según las preguntas de investigación, a la vez fueron filtrados por etapas, aplicando los criterios de inclusión y exclusión.
La búsqueda de artículos relevantes para la revisión siguió el proceso descrito en la figura 1. La búsqueda automática en las cuatro bases de datos arrojó 1984 artículos potencialmente relevantes. En la segunda etapa del proceso de selección, al eliminar artículos duplicados se conservaron 1428. En la tercera fase se realizó una lectura rápida por pares (lector y revisor) del artículo, y así se identificaron aquellos artículos que cumplían los criterios de inclusión y exclusión, quedando 433. En la cuarta y última etapa se realizó la lectura completa y por pares y se procedió a categorizarlos, quedando finalmente 268 artículos categorizados.
No se utilizaron preguntas de calidad, ya que es un mapeo sistemático del que no se debía descartar ningún artículo luego de los criterios de inclusión y exclusión. El resultado de cada etapa se puede revisar en: https://github.com/jcastillo85/TeachSoftFramework.
Resultados
Las investigaciones sobre la enseñanza de programación han tomado fuerza en los últimos cinco años. En la figura 2 se muestra que durante los años 2010 al 2015 las publicaciones se han mantenido en promedio entre 10 y 15, pero se ve una tendencia a crecer a partir del 2015, llegando a un pico de más de 40 artículos publicados en el año 2019. Es de interés global la necesidad de proponer y buscar soluciones para mejorar esta área, sin embargo, Asia tiene un porcentaje superior a las demás regiones.
RQ1. Orientación de los artefactos encontrados
Las investigaciones revisadas muestran que la mayoría de los esfuerzos se ha centrado en crear y validar propuestas de estrategias y metodologías para la enseñanza de programación (Figura 3).
No obstante, hay escasos trabajos encontrados que presenten guías, métodos e instrumentos de evaluación para la enseñanza-aprendizaje, lo que muestra oportunidades de investigaciones para estos componentes. También se aprecian pocos esfuerzos de estudios del proceso de enseñanza y su interpretación e impacto a través de una malla curricular.
En la Figura 4 se muestra que el 46% de las investigaciones encontradas ha realizado y evaluado los artefactos propuestos, el 21% aplicó en algún contexto y evaluó los resultados, un 20% solo evaluación y un 10% solo propuesta. Pero son pocos los artefactos de tipo herramientas para ayudar al proceso de enseñanza. Esto permite notar una necesidad por hacer investigaciones que generen herramientas que ayuden al proceso de enseñanza de programación, así como para la evaluación de este tipo de enseñanza.
Las estrategias didácticas aplicadas son por mucho las de aprendizaje basado en resolución de problemas, seguido de aprendizaje basado en software y aprendizaje basado en juegos. Por último, se han presentado otras propuestas que no han sido muy exploradas.
Según la Figura 5, el aprendizaje basado en resolución de problemas ha mantenido el interés a largo de los años en comparación con los otros enfoques; sin embargo, el aprendizaje basado en software y basado en juegos también han mantenido un ritmo constante, notándose el interés por estas dos últimas estrategias.
El 55% de las investigaciones encontradas se ha enfocado en la enseñanza-aprendizaje de programación utilizando aplicaciones web, seguido de un 40% de aplicaciones de escritorio (Figura 6). Aún no se han desarrollado muchas aplicaciones móviles; sin embargo, muchas de las aplicaciones web propuestas podrían haberse desarrollado para ser de diseño responsivo. Las aplicaciones de escritorio para la enseñanza de programación han tenido un ritmo relativamente creciente a lo largo de los años, pero las aplicaciones web empezaron a superar ligeramente a las de escritorio a partir del año 2015.
Según la Figura 7, los enfoques de programación más utilizados han sido la estructurada y la orientada a objetos, siendo casi el 90% del total de artículos encontrados. Muchos de los artículos se centran en personas que recién inician en la programación, usando programación estructurada para este fin, por ello la gran cantidad de artículos encontrados se basa en la programación estructurada. Estos dos enfoques se han mantenido como los más usados a lo largo de los años.
Java es uno de los lenguajes de programación más utilizados para la enseñanza de programación, así como C/C++/C#, a lo largo de la última década. La Figura 8 muestra que hay variedad en los lenguajes que se han usado para este fin, pero se debe resaltar que muchas propuestas son agnósticas al lenguaje de programación; es decir, la enseñanza de programación no siempre se debe centrar en un lenguaje de programación. Otro punto para resaltar es la presencia de Scratch como un lenguaje bastante usado para la enseñanza de programación, sobre todo a nivel escolar.
RQ2. Alcances pedagógicos de los artefactos encontrados
Según la Figura 9, el 77% de las investigaciones se ha centrado en el tratamiento y la evaluación durante el periodo de duración de un curso, un 14% en una o algunas de las sesiones del curso. Solo el 8% ha tenido en cuenta a todo el currículo, haciendo notar la escasez de investigaciones en este último alcance. A lo largo de los años la aplicación en un curso ha sido el objetivo de las investigaciones encontradas.
De acuerdo con la Figura 10, casi el 70% de las investigaciones encontradas se ha centrado en la educación a nivel universitario, sobre todo en la región asiática, con menor intensidad a nivel secundaria y un poco menos en primaria. Sin embargo, se evidencia el esfuerzo que se ha realizado en estos dos últimos niveles, indicando que se impulsa el aprendizaje de programación desde la niñez a nivel mundial, con un ligero esfuerzo mayor en Europa. Asimismo, cabe resaltar que alrededor del 3% de las investigaciones se han centrado en el nivel K-12, que va desde la enseñanza en jardín inicial hasta el nivel secundario y es adoptado por algunos países como Estados Unidos, Inglaterra, entre otros.
Según la Figura 11, el 47% de investigaciones se ha enfocado en el aprendizaje presencial, la otra mitad se ha proyectado al aprendizaje e-learning y b-learning. Solo un 14% ha hecho investigaciones exclusivas para e-learning. Esto hace notar la versatilidad de las herramientas construidas para aprendizaje tanto presencial como e-learning. A lo largo de los años las investigaciones se han enfocado en lo presencial, pero en el último año las investigaciones sobre b-learning han superado los esfuerzos del aprendizaje presencial, indicando la necesidad de impulsar esta área.
Según la Figura 12, la mayoría de los estudios se ha centrado en la educación superior tanto en entornos presenciales como b-learning o e-learning. Aún no hay muchos esfuerzos a nivel escolar. En todos los niveles se encontraron más trabajos de aplicación durante un curso, en su mayoría aplicados a nivel superior universitario.
RQ3. Metodología de los artefactos encontrados
En la Figura 13 se aprecia que el 46% de los artículos encontrados ha realizado propuestas e implementación de evaluación del artefacto propuesto, un 10% ha presentado una propuesta y la ha implementado, pero sin presentar evidencias de su evaluación. Un 22% de trabajos se implementa mediante casos o experimentos, además se evalúan los resultados obtenidos. Un 21% se ha dedicado a evaluar artefactos existentes con resultados favorables. El ritmo de estos tipos de investigación se ha mantenido bajo el mismo patrón a lo largo de los años.
El 50% de las investigaciones revisadas se ha centrado en hacer experimentos académicos, lo cual es lógico debido a que los artículos se basan en la enseñanza de programación a nivel académico. Sin embargo, según la Figura 14 también se han encontrado trabajos de tipo casos de estudio con un 18%, así como pruebas piloto, cuestionarios y otros en menor cantidad.
Según la Figura 15 se ha realizado un gran número de experimentos académicos y casos de estudios aplicados en la educación superior. También existen esfuerzos realizados en los otros niveles de educación. Sin embargo, es notoria la necesidad de explorar aún más la educación a nivel de escuelas y explorar más artefactos a nivel de educación superior.
Respecto a la modalidad de enseñanza se tiene que 47% de la enseñanza de programación es presencial y 15% a distancia o e-learning, lo cual difiere de lo encontrado por Borges et al. (2018), quienes determinaron que el 78% de la enseñanza de programación era presencial y 2% a distancia.
Sobre el nivel educativo en el que se enseña programación, se encontró que más del 50% de los estudios se centró en la enseñanza de programación a nivel universitario, seguido de la enseñanza a nivel secundario, lo cual concuerda con lo encontrado por Borges et al. (2018) y Pessoa, Lisboa y Pontual (2019), quienes encontraron que la enseñanza de programación se enfoca mayormente en educación superior y que además se han incrementado los proyectos de enseñanza de programación para niños y adolescentes.
La estrategia didáctica que se encontró en un porcentaje del 14% es el de aprendizaje basado en juegos, lo que también había identificado Abbasi, Kazi y Khowaja (2018) al analizar estudios que buscan aportar en el aprendizaje de la programación orientada a objetos mediante “juegos serios”.
Además, Saito et al. (2017) encontraron que el software de juegos es muy adecuado para el aprendizaje introductorio de programación, identificando 24 herramientas de software de juegos para enseñar programación, dentro de estas herramientas estaban Alice y Scratch, herramientas que también se identificaron en el presente trabajo. Respecto a Scratch el 8.7% de los artículos estudiados muestra a Scratch como la herramienta utilizada para la enseñanza de programación. Respecto a Alice, Costa y Miranda (2017) encontraron que la herramienta tuvo un impacto positivo en el rendimiento de los estudiantes y Vinueza, Córdova y Rodas (2019) identificó que Alice es efectivo para el aprendizaje de introducción a la programación, pero ambos coinciden en la existencia de pocas investigaciones en Latinoamérica, lo que se evidencia en la presente investigación con dos estudios (que representa el 0.7%) que reportan a Alice como herramienta para enseñar programación.
En esta investigación se encontró que aproximadamente el 10% de los estudios sobre enseñanza de programación está enfocado a niños de nivel K-12, lo que concuerda con Szabo et al. (2019), quien exploró el desarrollo de la enseñanza de programación introductoria en el nivel K-12, en el periodo 2003 a 2017, identificando un fuerte crecimiento de la enseñanza de programación en este grupo de edad.
Lara, Neri y Cota (2019) encontraron que los lenguajes de programación más citados para enseñanza de programación paralela son C (29%) y C++ (23%), lo que difiere con lo encontrado en la presente investigación, donde se tienen porcentajes de 13.9% y 9.8% en investigaciones relacionadas con la enseñanza de programación usando C y C++ respectivamente. Lara, Neri y Cota (2019) también encontraron que la educación a distancia para enseñar programación era reciente y por esto solamente el 8% de los estudios utiliza la educación a distancia para la enseñanza de la programación paralela, mientras que en la presente investigación se obtuvo que el 15% de investigaciones se orientan al entorno de enseñanza a distancia o e-learning.
Limitaciones del estudio
Se han utilizado cuatro bases de datos conocidas, sin embargo, existen otras bases de datos donde se podría encontrar artículos que aportan a la investigación. Además, la heterogeneidad de los estudios permite llegar a conclusiones parciales, siendo necesario realizar otros estudios más profundos.
Conclusiones
La investigación en enseñanza de programación de computadoras es un tema que ha empezado a tener fuerza a partir de 2015. A nivel mundial creció el interés por aportar en el tema mediante propuestas y herramientas que sean de utilidad para este fin, con Java como lenguaje predilecto, pero muchas de estas propuestas también son agnósticas al lenguaje de programación. Las investigaciones en su mayoría se han centrado en la enseñanza basada en problemas, basada en software y basada en juegos.
La mayoría de propuestas ha sido a nivel de curso, encontrándose pocas propuestas a nivel de malla curricular. Además, gran parte de los trabajos se centran en la educación superior universitaria y están enfocados en la enseñanza presencial, pero también en el b-learning. Sin embargo, según la apreciación de los autores, en los años sucesivos las investigaciones sobre e-learning deberían aumentar por la necesidad que se ha presentado con la crisis de pandemia por COVID 19 a nivel mundial.
Los artefactos propuestos en su mayoría han sido validados durante la investigación en gran parte por experimentos académicos y casos de estudio, de los que han resultado estrategias y metodologías propuestas para sustentar este proceso de enseñanza. Sin embargo, no se han encontrado muchos aportes sobre guías, herramientas y métodos de evaluación.
Por último, este mapeo sistemático de literatura ha dejado notar la madurez de algunos campos de la enseñanza de programación de computadoras, al tiempo que muestra oportunidades de investigación en otras áreas tales como métodos de evaluación y herramientas. Por lo tanto, como trabajo futuro, se deben proponer guías, herramientas y métodos de evaluación que ayuden al proceso de enseñanza-aprendizaje de programación de computadoras considerando los hallazgos encontrados en este trabajo.