INTRODUCCIÓN
Las estrategias pedagógicas cumplen un papel importante en los procesos de enseñanza y aprendizaje, pues ayudan a mejorar la motivación, participación, colaboración e interacción entre estudiantes y profesores (Burch y Melby, 2019; Chinchilla y Gómez, 2020). La implementación de estrategias de aprendizaje puede ser útil en la gestión académica del estudiante, mejorar su rendimiento y aportar en la generación de nuevo conocimiento significativo basado en el autoaprendizaje (Montero y Benavides, 2015). Actualmente dichas estrategias buscan soluciones que ayudan a mejorar las destrezas de los estudiantes para la solución de problemas (Bravo et al., 2013). En este sentido, estrategias como el aula invertida (AI) y el aprendizaje colaborativo (AC) surgen para mejorar hábitos de aprendizaje, pensamiento crítico y la colaboración en el intercambio de conocimiento de los estudiantes (Amresh et al., 2013). El AI se ha enfocado en el aprendizaje mixto, donde el estudiante alcanza sus propias bases a través del autoaprendizaje y en clase resuelve dudas con apoyo del profesor. Por su parte el AC, se enfoca en la construcción de habilidades que le permiten al estudiante tener bases que no se encuentran en la enseñanza tradicional de un curso (Fortanet van Assendelft, 2013).
Implementar estas estrategias pedagógicas puede ser un proceso difícil, sin la ayuda de herramientas y tecnologías que controlen el proceso formativo y evaluativo del estudiante. En este sentido, la implementación de tecnologías y técnicas computacionales de inteligencia artificial han mejorado el intercambio de un espacio real a uno virtual de forma natural, logrando adaptarse a las necesidades específicas de cada estudiante (Mok, 2014; Salazar Ospina et al., 2017). Entre las diferentes aplicaciones de la inteligencia artificial como apoyo al aprendizaje de programación, aparecen sistemas de recomendación, plataformas virtuales de aprendizaje, soporte de colaboración a través de formación de grupos, identificación de perfiles, chat de soporte automático, evaluación y realimentación de código fuente, toma de decisiones a través de visualizaciones, entre otros (Billis y Cubenas, 2020).
El propósito de este artículo es identificar el estado actual del AI y el AC, las tecnologías, estrategias y herramientas existentes, y el papel de la inteligencia artificial como apoyo para el aprendizaje de los cursos de programación. Así, el documento se ha organizado de la siguiente forma. En la metodología se detallan las preguntas investigativas, las fuentes de información, cadenas de búsqueda, filtros para los datos, análisis y presentación de la información. En “Análisis de información” se describe el proceso utilizado para la identificación y el procesamiento de las referencias. En “Resultados” se presenta el estado actual del AI y AC, y los aportes de la inteligencia artificial a los cursos de programación, por último, se mencionan las tendencias y los logros que se proponen alcanzar los autores.
METODOLOGÍA
Siguiendo las fases para realizar una revisión sistemática propuesta en Kitchenham et al. (2007), se especifican las preguntas de investigación, selección de fuentes de información y se desarrolla un protocolo de revisión y análisis.
Preguntas de investigación
Se plantearon preguntas de interés que identifican el estado actual a partir de dos estrategias pedagógicas utilizadas para apoyar el aprendizaje de la programación: ¿Cuál es el estado actual de las tecnologías, estrategias y herramientas basadas en aprendizaje activo y el aprendizaje colaborativo como apoyo al aprendizaje de la programación?; ¿cómo el aula invertida y el aprendizaje colaborativo a través de técnicas computacionales de inteligencia artificial apoyan los cursos de programación?; ¿cuál es el papel de la inteligencia artificial en el aprendizaje de los cursos de programación?
Fuentes de información y cadenas de búsqueda
En la tabla 1, se muestran cinco funciones de búsquedas específicas y los registros por cada consulta para las fuentes de datos: Scopus, Web of Science (WoS), ACM Digital Library, IEEE Xplore, ScienceDirect y GitHub. Las funciones de búsqueda se construyeron con palabras claves afines al tema de investigación con ayuda de profesores e investigadores expertos en el tema.
Tabla 1 Funciones de búsqueda, fuentes de datos y registros totales por consulta

Fuente: elaboración propia.
Luego de obtener los registros, se usó la metodología PRISMA (Moher et al., 2010), para filtrar la información con base en cuatro criterios: información incompleta, nombre repetido de publicación, calidad de la conferencia o revista, no DOI, bajo número de citas, estrellas, copias y tenedores. Finalmente se obtuvieron 210 registros: 166 documentos y 44 repositorios.
Análisis de información de referencias
Para responder a las preguntas planteadas, se procesan las referencias utilizando diferentes implementaciones. Se construye un flujo de trabajo basado en tres procesos (figura 2): i) Las referencias; por un lado, con ayuda de NER-Spacy (Vychegzhanin y Kotelnikov, 2019), se extraen las características de los repositorios: citas, año, autor, copias, tenedores, estrellas y actualizaciones; por otro, se extraen las características de los documentos científicos: año, palabras clave, resumen, DOI, autores y organizaciones. ii) Las características extraídas son procesadas con NER-Spacy, para obtener entidades específicas, por ejemplo: técnicas, estrategias, métodos, tipo de tecnología, tipo de software y lenguajes de programación. iii) Se construyeron dos visualizaciones: la primera se construye a partir de la librería D3 (Bostock, s. f.) para visualizar la evolución tecnológica de los proyectos más relevantes, estrategias de aprendizaje, tipos de tecnologías y los lenguajes de programación utilizados en los últimos siete años. La segunda se construye con la herramienta SASR (Guerrero, 2019), para clasificar a través de una ontología de datos que contiene las líneas y sublíneas de las ciencias de computación, tomadas del Sistema de Clasificación por Computadora (CCS) (Association for Computing Machinery (ACM), s. f.).
RESULTADOS
En esta sección se presentan los hallazgos a partir del año 2013; el análisis muestra el estado actual de las tecnologías, estrategias y herramientas basadas en AI y el AC. También el papel actual y las tendencias de la inteligencia artificial como apoyo en el aprendizaje de los cursos de programación.
Estado actual del aula invertida y el aprendizaje colaborativo
Para identificar el estado actual de las tecnologías, estrategias y herramientas se realizó la categorización de la información de las referencias, según el año de publicación. En esta sección se responde a la pregunta ¿cuál es el estado actual de las tecnologías, estrategias y herramientas basadas en aprendizaje activo y el aprendizaje colaborativo como apoyo al aprendizaje de la programación?
Estado actual del aula invertida
En las figuras 2 y 3, se observan el avance del aula invertida donde encontramos diferentes implementaciones y estrategias que han servido de apoyo en el aprendizaje de la programación.

Fuente: elaboración propia
Figura 2 Evolución de tecnologías, estrategias y herramientas basadas en aula invertida (2013-2016)

Fuente: Elaboración propia
Figura 3 Evolución de tecnologías, estrategias y herramientas basadas en aula invertida (2017-2020)
Entre los años 2013 y 2016 se utilizaron varias estrategias que aportaron al aula invertida como apoyo al aprendizaje de la programación, el primer aporte se basó en la interacción individual, donde el estudiante adquiere unos conocimientos y desarrolla ejercicios relacionados a código fuente de forma individual, aquí el profesor se enfocó en el análisis y comprensión de los contenidos y la motivación del estudiante por el aprendizaje. Luego se implementó el aprendizaje semipresencial que combina la presencialidad (desarrollo de actividades en el aula) con el trabajo en línea (uso de internet y herramientas digitales) para cambiar los procesos de enseñanza/aprendizaje, pasando del trabajo individual al colaborativo, apoyando el desarrollo de programas en parejas y pequeños grupos. Después se incorporaron videos realizados por los profesores al proceso de enseñanza, los estudiantes generaban su visualización en jornadas extraclase y usaban la clase presencial para el desarrollo de ejercicios y proyectos de programación, con la retroalimentación del profesor y el apoyo de los compañeros (Bachelor y Bachelor, 2019; Nunn et al., 2016).
Durante estos años se encuentran proyectos relevantes para el apoyo del aprendizaje, tecnologías como sistemas de gestión de contenidos (CMS, por su sigla en inglés), entorno virtual de aprendizaje (EVA) y objetos virtuales de aprendizaje (OVA), han evolucionado desde su implementación con escasos elementos de configuración y poco material disponible, hasta sistemas que integran metodologías para fortalecer el desarrollo del aprendizaje de manera intuitiva, la educación basada en proyectos y las comunidades de aprendizaje autónomo (Barik et al., 2013; Grover et al., 2014). En el desarrollo de herramientas y estrategias se encuentran trabajos basados en aula invertida para la enseñanza de lenguajes de programación como Python, Ruby, Objective-C, JavaScript, R y Swift en cursos gratuitos (Ahmed et al., 2016; Hayashi et al., 2015; Pe Rosiene y Rosiene, 2015), que implementan estrategias como cuestionarios informados, evaluadores de código fuente, juego de roles, entre otras, que se apoyan en videos interactivos, debates virtuales, plataformas con compiladores en línea y tecnologías como recursos educativos abiertos (OER, por su sigla en inglés) (Johnson et al., 2016).
En 2017 y 2018 se implementaron varias estrategias a los procesos de enseñanza, por ejemplo, la evaluación automática, que utiliza una metodología de evaluación en línea y que permite detectar de las preguntas a evaluar cuáles se contestan correctamente y cuáles no, tras realizar el estudio previo del material correspondiente a programación. También se implementó la tutoría en línea, donde el estudiante solicita al profesor una orientación a través del sistema de gestión de aprendizaje y el docente la realiza sin necesidad de tener presencialidad con el estudiante, estas tutorías se pueden grabar y sirven de soporte para el aprendizaje de otros estudiantes.
Así mismo se implementaron ejercicios con retroalimentación que apoyaron los procesos de aprendizaje de los cursos de programación a través de la identificación de errores comunes de los estudiantes durante la generación de código fuente. De la misma forma se utilizó la gamificación que ayudó a mejorar la motivación de los aprendices frente al desarrollo de las actividades propuestas en los cursos (Criollo-C y Luján-Mora, 2018; Llorente et al., 2020).
Todas estas estrategias se soportan con tecnologías como los MOOC (massive open online course), se caracterizaron por dar respuesta y evaluar contenidos en tiempo real, múltiples configuraciones para la formación de grupos y diferentes formas de evaluación en los cursos; todos estos elementos han contribuido a mejorar los procesos educativos y formativos. También se han integrado sistemas virtuales de tutoría en línea con retroalimentación, ejercicios de autocomprobación y tareas calificadas automáticamente (Clark et al., 2016; Seeling, 2016), todo esto soportado con herramientas de evaluación automática de código y uso de herramientas como Blackboard (Blackboard.es, s. f.), Udere, Kattis, Baekjoon y Judge Node (Juan, n. d.).
Desde 2019 se han implementado diferentes estrategias como el aprendizaje basado en problemas, debates en línea, juego de roles, aprendizaje personalizado, clase doble, entre otros, que han aportado a la enseñanza de la programación. Por ejemplo, la comunicación entre el docente y el estudiante mejoró, y en algunos casos es personalizada, esto permite aclarar dudas o necesidades específicas para cada alumno. Los estudiantes avanzan según su ritmo de aprendizaje y el docente puede generar retroalimentación sobre temas específicos del curso. También se mejoró la motivación de los estudiantes, porque están buscando constantemente soluciones a los problemas propuestos por el profesor. Además, las clases se pueden desarrollar sin la presencia de los docentes porque existen plataformas y materiales digitales que se pueden acceder y estudiar según la disposición de los estudiantes. La visión del aula invertida está enfocada en proyectos de plataformas de aprendizaje como Google Classroom, Coursera, Facebook, Learn, Platzi, donde se mejoran los procesos de aprendizaje con la implementación de asistentes virtuales que adaptan las clases a las necesidades del estudiante. Proyectos como Lopukhova et al. (2020) y Tong et al. (2020) muestran información, implementaciones y comparaciones de diferentes asistentes virtuales y nuevas formas de educación virtual que ayudan al estudiante tener una clase virtual dinámica, activa y con muy pocos recursos de software.
Estado actual del aprendizaje colaborativo
Las figuras 4 y 5 muestran los avances del aprendizaje colaborativo, donde se encuentran diferentes implementaciones y estrategias que han servido de apoyo en el aprendizaje de la programación.

Figura 4 Evolución de tecnologías, estrategias y herramientas basadas en aprendizaje colaborativo (2013-2016)

Fuente: elaboración propia
Figura 5 Evolución de tecnologías, estrategias y herramientas basadas en aprendizaje colaborativo (2017-2020)
Entre 2013 y 2016, diferentes estrategias se implementaron y evolucionaron, por ejemplo: los debates, los cuales fueron claves para la programación grupal y la programación en parejas; estas ayudaron a generar estrategias colaborativas para apoyar el aprendizaje de la programación integrando diferentes herramientas y tecnologías (Hayashi et al., 2015), mejorando los procesos académicos, despertando habilidades y destrezas que le permiten al estudiante ser un profesional idóneo en la industria. Entre estos años, además surgen modelos de colaboración y cooperación que fomentan la inteligencia colectiva (Suárez Valencia et al., 2015), asimismo la implementación de técnicas computacionales para guiar grupos y herramientas de codificación y discusión colaborativa (Sun et al., 2019).
Entre 2017 y 2018 se encuentran diferentes herramientas basadas en la evaluación colaborativa a través de jueces virtuales (Hidalgo Suárez et al., 2018) que permiten evaluar código fuente de manera sintáctica y semántica en proyectos colaborativos, ofreciendo realimentación grupal. En estos años toma fuerza la programación grupal apoyada en herramientas virtuales que realizan el seguimiento del proceso de un grupo de estudiantes (Amarasinghe et al., 2017; huei Wang y Liao, 2017). La gestión de proyectos de programación con diferentes formas de pensar lleva a que se construyan metodologías que faciliten la configuración de equipos dependiendo de las habilidades de cada estudiante; en este sentido aparece el colaborativo apoyado por computador (CSCL), que busca integrar profesor, tecnología y estudiantes para obtener lo mejor de cada uno y generar estrategias para la toma de decisiones en el proceso de aprendizaje (Mader y Bry, 2019; Sánchez-Azqueta et al., 2019; Viberg et al., 2020); cursos de programación basados en las habilidades cognitivas y emocionales (Avry et al., 2020; Awidi y Paynter, 2019); hasta plataformas que unen la gestión y diseño de cursos de programación basados en la colaboración (Suárez Valencia et al., 2015), donde se puede evaluar y realimentar conocimientos grupales e individuales y generar estrategias para la toma de decisiones. Este tipo de plataformas promueven el aprendizaje de la programación a partir de jueces virtuales con capacidad de evaluar el código sintáctico y semántico (Sun et al., 2019), utilizan algoritmos para identificación de perfiles, gestión de grupos y evaluación de conocimientos a través de rúbricas.
A partir de 2019, se han implementado redes de conocimiento, redes sociales de los estudiantes y aplicaciones virtuales didácticas basadas en aprendizaje colaborativo apoyado por computador (CSCL), con el propósito de mejorar el aprendizaje colaborativo de los estudiantes Xie et al., 2020), usando las redes sociales de los estudiantes, aplicaciones virtuales didácticas basadas en aprendizaje colaborativo apoyado por computador (CSCL).
La inteligencia artificial para el aprendizaje de los cursos de programación
La tecnología y la educación actualmente se encuentran en su punto de exploración, donde la integración del aula invertida y la colaboración cumplen un papel importante en el proceso de formación del estudiante, buscando mecanismos de interacción lo más cercanos al aula de clases tradicional. Las técnicas de inteligencia artificial han ayudado a mejorar los procesos adecuándose a las necesidades de los estudiantes, logrando que la educación tradicional se pueda apoyar en la educación virtual, generando asistentes inteligentes, evaluadores de código automáticos, identificación de perfiles, sistemas de recomendación, etc. En esta sección se abordan las preguntas ¿cómo el aula invertida y el aprendizaje colaborativo a través de técnicas computacionales de inteligencia artificial apoyan los cursos de programación?, y ¿cuál es el papel que tendrá la inteligencia artificial en el aprendizaje de los cursos de programación?
En la figura 6 se muestran las referencias según las técnicas computacionales a partir del Sistema de Clasificación de Computación de ACM. Se detallan los artículos y proyectos (puntos negros: artículos, puntos blancos: repositorios), esta clasificación indica la tendencia del uso de las técnicas de inteligencia artificial.

Fuente: elaboración propia
Figura 6 Clasificación de las referencias según las categorías de la CSS-ACM
Actualmente, la implementación de inteligencia artificial en las estrategias pedagógicas ha mostrado avances significativos en el aprendizaje de la programación, utilizando procesamiento del lenguaje natural, aulas cibernéticas que registran las conferencias de forma automática y se almacenan en línea. Estas herramientas permiten crear mesas de trabajo donde el docente interactúa con sus estudiantes y desarrolla el aprendizaje activo y colaborativo (Burch y Melby, 2019). Basados en aprendizaje automático, por un lado, se encuentran implementaciones de algoritmos de evaluación integral difuso para el análisis de códigos fuente, a partir de los árboles sintácticos (Lei et al., 2017). Por otro lado, proyectos que implementan técnicas de análisis de datos con agrupamiento jerárquico aglomerado para analizar la secuencia de aprendizaje exploratorio del estudiante, identificando comportamientos relacionados con el aprendizaje y agrupando secuencias de aprendizaje similar (Trivodaliev et al., 2017). Proyectos basados en minería de datos educativos, que combinan métodos de seguimiento grupal, ayudan a identificar y seguir el proceso de los estudiantes, con el fin de observar las limitaciones y desafíos frente el aprendizaje (Sheard et al., 2013). Estrategias de aprendizaje para reforzar los comportamientos del aprendizaje y las características de los estudiantes en clase de programación (Abirami y Kiruthiga, 2018). Por último, según la clasificación, donde hay mayor aporte de la inteligencia artificial es en la implementación de técnicas de asociación, clasificación y agrupación de estudiantes con asistentes virtuales autónomos (Billis y Cubenas, 2020).
La visión de la inteligencia artificial está basada en la implementación de framework educacionales (Fernández-Cerero y Fernández-Montes, 2020) que integran componentes virtuales como tableros digitales, asistentes virtuales, jueces automáticos de código desde diferentes plataformas. La tendencia está en la implementación de arquitecturas basadas en la nube (educación en la nube) que son nuevas implementaciones que apoyan académicos y estudiantes a través de gamificación, colaboración abierta y distribuida, entre otras técnicas que mejoran el aprendizaje (Zhang et al., 2020): clases adaptativas que involucran la parte cognitiva, abstracta y lógica con técnicas de deep learning en el aprendizaje virtual (Gren, 2020; Ramaprasad et al., 2020); plataformas que ayudan a mejorar la experiencia de aprendizaje en los estudiantes, donde su conocimiento se va generando según sus preferencias de estudio y experiencias de aprendizaje (Algayres y Triantafyllou, 2020; Ciolacu et al., 2019).
CONCLUSIONES
Este trabajo presenta el estado actual del AI y el AC como apoyo para el aprendizaje de la programación de computadores; las tecnologías, estrategias y herramientas existentes, y el papel que tendrá la inteligencia artificial para el aprendizaje de los cursos de programación. Se encontró que los elementos identificados ayudaron a mejorar los procesos formativos de los estudiantes, con evaluación automática de código, ejercicios con retroalimentación, tutoriales interactivos, programación en parejas y ejercicios de programación grupal, que se basaron en la integración de algoritmos de inteligencia artificial.
Luego de realizar la investigación, se puede concluir que, desde la aparición de las herramientas virtuales, la implementación de inteligencia artificial se ha convertido en una necesidad para la educación virtual, porque potencia la forma de entender y aprender, adaptándose a las necesidades específicas del estudiante. A futuro, la inteligencia artificial tendrá un papel muy importante en la implementación de algoritmos para la identificación de aprendizaje personalizado a partir del aprendizaje automático, procesamiento de lenguaje natural, aprendizaje profundo, analíticas de aprendizaje y minería de datos; que se integran a plataformas virtuales capaces de extraer información de redes sociales con valor agregado para generar estrategias de evaluación y realimentación en los procesos formativos de los estudiantes. Sin embargo, aún quedan preguntas abiertas de exploración, para determinar mejoras en los niveles de aprendizaje tradicional y la implementación de estrategias virtuales.
En trabajos previos relacionados al AI y el AC se identificaron aportes significativos relacionados con el aprendizaje de la programación, que han abordado la evaluación automática de código fuente, la identificación de estudiantes en riesgo y el trabajo colaborativo. Sin embargo, como trabajo futuro se propone trabajar en la retroalimentación de los ejercicios de programación, con el fin dar respuesta a los inconvenientes y malas prácticas que se pueden presentar durante la escritura del código fuente. De esta forma se puede apoyar el proceso de aprendizaje, mejorando el interés y la motivación del aprendiz por el desarrollo del software.
De las herramientas basadas en aula invertida y la colaboración encontrada en este artículo, las que más se destacan como apoyo al aprendizaje del curso de programación, son: EdX, Coursera, Caccoo, Socrative, y las que usan inteligencia artificial son: M-IDEA, UNCode, MyLAB programming.