Recibido: 25 de septiembre de 2019
Aceptado: 19 de noviembre de 2019
Los procesos de enseñanza-aprendizaje en la formación de futuros constructores de software han tomado especial importancia en los últimos años, al punto de que esta ya no es una preocupación exclusiva del campo ingenieril, sino en ella convergen profesionales de diversas áreas como la psicología, la pedagogía, el diseño gráfico, las licenciaturas, etc. Aunque existen algunos trabajos desarrollados, no se encuentra un estudio sistemático que recopile las principales problemáticas y las prácticas actuales para afrontar un primer curso de programación. Es por eso que en este artículo se presenta una revisión sistemática de la literatura, con el propósito de exponer los estudios adelantados en los primeros cursos de programación de computadores, en carreas profesionales que forman constructores de software. Con este objetivo, se hizo una exploración en cuatro bases de datos de referencias bibliográficas de publicaciones científicas, en las cuales se hallaron 106 estudios divulgados en los últimos siete años. Tras una detallada inspección, se determinó que 46 de estos coinciden con los criterios de la revisión, lo que da como resultado la recopilación de las principales experiencias y prácticas reportadas en el proceso de enseñanza-aprendizaje de la programación de computadores. Además, la revisión sistemática permitió determinar las problemáticas asociadas, un listado de 33 herramientas de software, 36 estrategias de trabajo, 18 consideraciones metodológicas, importantes recomendaciones y las tendencias futuras para afrontar un primer curso de programación de computadores. Este artículo es una fuente importante de partida para trabajos futuros que pretendan seguir aportando experiencias que beneficien tanto a estudiantes como a docentes en este complejo campo de la enseñanza-aprendizaje de la programación de computadores.
Palabras clave: programación de computadores, enseñanza-aprendizaje, revisión sistémica, primer curso de programación.
In recent years, software development teaching-learning processes have taken on special importance because they are no longer exclusive of engineering fields; they are also applicable to various areas such as psychology, pedagogy, graphic design, and education. Although the literature includes some studies in this regard, none of them compiles the main problems and current practices of introductory programming courses. Therefore, this article presents a systematic review of literature on introductory programming courses in undergraduate programs. For that purpose, we searched four databases of bibliographical references of scientific publications and found 106 studies published in the last seven years. A detailed inspection determined that 46 of them met the criteria of this review. As a result, we compiled 33 software tools, 36 work strategies, and 18 methodological considerations, as well as important recommendations, experiences, practices, problems, and future trends related to introductory computer programming courses. This article is a starting point for future work that further benefits students and professors in the complex field of computer programming teaching-learning.
Keywords: Computer programming, teaching-learning, systematic review, first programming course.
Son muchos los beneficios de aprender a programar computadores, uno de estos es que permite el desarrollo de diversas competencias como el pensamiento crítico, el análisis de conceptos y la resolución de problemas; además, los estudiantes aprenden a trabajar en grupos y a colaborar entre ellos, en su esfuerzo por desarrollar programas ejecutables, mientras se ejercitan en el intercambio de conocimientos y la comunicación de ideas [
En los últimos quince años ha existido una fuerte corriente que propone un mayor rigor en la investigación en el área de la enseñanza de la informática [
Este esfuerzo se ha con-centrado mayoritariamente en el aprendizaje de la programación, dado su papel introductorio y central en esta disciplina. Esta corriente investigadora también se aprecia en otras inge-nierías, representadas por la American Society for Engineering Education (ASEE) y el Insti-tute of Electrical and Electronic Engineers (IEEE); sin embargo, ha sido el Special Interest Group in Computer Education (SIGCSE) de ACM el que ha dado el mayor impulso a la ense-ñanza de la informática como campo de investigación (a veces llamado Computing Education Research, CER) [
A pesar del avance tecnológico del que somos testigos en la actualidad, existen diversos problemas derivados de la deficiente fundamentación en los procesos de aprendizaje tanto de los presentes como de los futuros profesionales de la industria del software, cuyos in-convenientes se originan desde el curso de programación inicial, posiblemente desarrollado en su primer año de ingreso a la universidad o institución de formación [
Dichos problemas se deben a múltiples circunstancias que surgen por el desconocimiento de conceptos fundamentales de programación, la falta de habilidades para modelar y construir un programa computacional e incluso la poca disciplina al momento de la construcción cognitiva requerida para enfrentar los fundamentos de programación [
De lo anterior se puede deducir que la programación de computadores es sin duda un campo que reviste especial importancia en muchos sentidos. La dimensión que abarca el valor de los datos en este momento da cuenta de la magnitud de la programación. Basta con mencionar el alcance del tratamiento de datos automatizados en entidades gubernamentales, bancarias, de salud, empresariales, del sector educativo, entre otras, cuyos sistemas de in-formación o aplicaciones computacionales son de vital importancia para competir en el ejercicio misional propuesto o simplemente para reportar información a sus organismos de vigilancia y control.
Dado el panorama descrito, la responsabilidad recae finalmente en el programador de computadores, por lo cual su proceso de formación debe ser adecuado y riguroso. Esto se convierte en un reto no solo para el docente a cargo, sino para los centros educativos, la industria y la misma la comunidad académica y científica, que deben propender por la búsqueda constante de metodologías, métodos, enfoques, mecanismos y nuevos descubrimientos en los procesos de enseñanza y aprendizaje.
El objetivo principal debe ser motivar y formar al futuro profesional de la industria del software, con miras al bienestar del ser humano y al desarrollo ingenieril y tecnológico.
Este artículo tiene como fin presentar al lector los resultados de una revisión sistémica de literatura acerca de los procesos de enseñanza-aprendizaje, para un primer curso de pro-gramación de computadores, reportados en la literatura científica. En dicha revisión se en-contraron hallazgos que permiten determinar las problemáticas que enfrentan tanto estudian-tes como profesores y las prácticas actuales propuestas en la formación de programadores de computadores.
El documento cuenta con las siguientes secciones: en la sección 1, se plantea una preám-bulo acerca de la importancia de la programación de computadores y de su proceso de ense-ñanza-aprendizaje; en la sección 2, se hace un acercamiento a la programación de compu-tadores; en la sección 3, se formula y detalla el método de investigación; en la sección 4, como resultado del proceso, se exponen los hallazgos encontrados; en la sección 5, se pone a consideración la discusión de resultados; finalmente, la sección 6 contiene las conclusiones, seguidas de las referencias que soportan el estudio.
La programación no es únicamente escribir código fuente, ya que este es el resultado de una serie de actividades previas que le garantizan cualidades como flexibilidad, robustez y concordancia con los objetivos planteados. Por esta causa, un programa informático es una colección de instrucciones, que al ejecutarse efectúa actividades específicas, a través de un sistema de cómputo. Para su escritura y ejecución, necesita un lenguaje de programación que tiene una sintaxis, con la cual fija las normas de codificación y una semántica que le permite plasmar sus objetivos en un entorno formal [
Programar computadores requiere mucha dedicación, lo cual se refleja en el tiempo invertido para esta actividad; además, en este proceso tanto el estudio de temáticas como el desarrollo de ejercicios puntuales no garantizan su efectivo aprendizaje. En consecuencia, es necesario incorporar este nuevo modelo mental [
Por otro lado, la programación de computadores permite resolver problemas puntuales que demandan la mediación de objetos tecnológicos [
La resolución de problemas mediante programación precisa una serie de conocimientos y habilidades en campos como el modelado (lógica matemática y procedimental), la ingeniería con sus arquitecturas y procesos de software y la computación con sus algoritmos, herramientas, técnicas y metodologías de programación [
Finalmente, no podemos hablar de programación de computadores sin referirnos al término software como un programa o aplicativo compuesto de una serie de instrucciones, que emplea datos para hacer tareas específicas, mediante un sistema de cómputo que puede desempeñar hasta acciones dotadas con patrones inteligentes, a través del hardware provisto [
Para la revisión sistemática de la literatura presentada en este artículo, se utilizó un enfoque de procesos investigativos de la Ingeniería de Software [
Este enfoque es uno de los más utilizados por los expertos, debido a que genera conocimiento mediante publicaciones contenidas en documentos producto de procesos investigativos [
En la Fig. 1, se presentan las etapas del método definido para esta revisión.
3.1 Preguntas de investigación
El objetivo de este estudio fue presentar los resultados de la aplicación de una revisión sistemática de la literatura científica relacionada con la enseñanza/aprendizaje de los fundamentos de programación. Para la construcción del estado del arte, se formularon las siguientes preguntas:
La estructuración de estas preguntas se hizo mediante el Modelo pico con su variante pipoh [
3.2 Búsqueda
La estrategia de búsqueda propuesta consistió en la exploración de los términos generales en bases de datos especializadas.
En las bases de datos seleccionadas, se aplicaron los términos de búsqueda combinados con sinónimos, con el propósito de cubrir una mayor cantidad de documentos a evaluar. En la Tabla 2, se exponen los términos con sus respectivos sinónimos y filtros.
El proceso de búsqueda se adelantó en las bases de datos mencionadas en la Tabla 3, con base en campos como: título, palabras, resumen y documento completo.
En la Tabla 4, se muestran las cadenas de búsqueda resultantes para cada término, junto con sus sinónimos y sus correspondientes filtros.
Cabe anotar que la búsqueda planteada se llevó a cabo desde el año 2012, debido a la calidad de los aportes académicos y científicos reportados en los bancos de datos validados por esta misma comunidad, que actualmente son considerados como elementos primordiales en el campo de la enseñanza/aprendizaje de los fundamentos de programación.
3.3 Selección
Todos los estudios contemplados en esta revisión fueron analizados; en su proceso de evaluación, se tuvieron en cuenta los ítems: título, palabras clave, resumen, introducción, antecedentes, estado del arte, metodología, resultados y conclusiones.
Así mismo, se definieron criterios de inclusión y exclusión en su revisión.
El criterio de inclusión definido es: documento científico relacionado con estudios de procesos de enseñanza aprendizaje de los fundamentos de programación para estudiantes de carreras universitarias o sus sinónimos de búsqueda. De la misma manera, los criterios de exclusión definidos son: estudios que no tengan su correspondiente cita bibliográfica, el documento no contiene los términos o sinónimos de búsqueda, solo experiencias con primeros cursos de programación de computadores y los documentos no están disponibles para descarga.
La selección de las fuentes primarias se hizo en cuatro momentos (debido a que se consideraron cuatro bases de datos especializadas), cada uno de estos con tres fases: fase 1: eliminación de artículos duplicados; fase 2: eliminación de artículos no descargables y fase 3: aplicación de criterios de inclusión y exclusión.
Debido a que en esta revisión sistemática se utilizaron cuatro bases de datos con sus sinónimos y filtros —en cada una de las cuales se aplicaron tres fases—, fue necesario hacer la consulta en diversas fechas como se observa en la Tabla 5.
Como resultado de la búsqueda en las bases se encontró un total de 106 estudios y al aplicar los criterios de inclusión y exclusión se obtuvo un total de 50 documentos.
3.4 Evaluación de calidad
En el proceso de evaluación de calidad de los documentos aquí seleccionados, se tuvieron en cuenta siete criterios: procedencia de las fuentes, relevancia del contenido, impacto del estudio, objetivo de la investigación, contexto del estudio, objetividad del diseño metodológico y rigurosidad científica en el análisis de los datos. Estos siete criterios obedecen a tres elementos importantes de la gestión de calidad: planificación, organización y control.
Además, la evaluación realizada sobre los escritos en mención implicó la lectura y análisis completo de los 50 documentos con sus procesos de eliminación de artículos duplicados, eliminación de artículos no descargables y la aplicación de criterios de exclusión e inclusión, cuyo proceso se expone en la Tabla 6.
En la Tabla 7 se presentan las referencias de los 50 artículos estudios contemplados en esta revisión sistemática ordenados por su año de publicación.
Fuente: elaboración propia.
3.5 Extracción de datos y síntesis de resultados
Dado que el objetivo principal de este estudio sistemático es determinar el estado del arte de los procesos de enseñanza-aprendizaje de los fundamentos de programación, una vez hecha la búsqueda de los términos en cada base de datos y aplicadas en cada una de ellas las tres fases, a continuación, se presentan los hallazgos en los archivos pertinentes con sus correspondientes citas de autor.
Los resultados obtenidos con el proceso de revisión sistémica de la literatura se presen-tan exponen a continuación, organizados en cinco secciones para afrontar un primer curso de programación de computadores: herramientas utilizadas en la enseñanza-aprendizaje de la programación, estrategias, consideraciones metodológicas, recomendaciones y tendencias de la programación de computadores.
4.1 Problemas en la enseñanza/aprendizaje de la programación de computadores
Tanto la enseñanza como el aprendizaje de la programación de computadores son tema de estudio de varios autores. Debido a las dificultades reportadas, se han adelantado diversas investigaciones que proponen la construcción de metodologías, técnicas y herramientas que tratan de aportar soluciones a los problemas encontrados en los dos ámbitos [
El aprendizaje de la programación computacional es complejo para muchos estudiantes noveles y, al mismo tiempo, se convierte en un desafío para los docentes [
Además de generar un nuevo conocimiento, el aprendizaje de la programación se consolida como una herramienta eficaz para la solución de problemas [
La literatura científica reporta problemas tanto en el proceso de enseñanza guiada por los docentes como de aprendizaje por parte de los estudiantes, al enfrentar el estudio de los fundamentos de programación. Las principales dificultades en la enseñanza/aprendizaje se describen a continuación.
4.1.1 Dificultades en el aprendizaje de la programación de computadores
La asimilación de los fundamentos de programación o el diseño de algoritmos básicos no es una tarea fácil para el estudiante, debido a que involucra aspectos que van desde la motivación por aprender hasta el análisis de sus propios estilos de aprendizaje, el conocimiento de experiencia previas, la facilidad de interpretar conceptos nuevos, entre otros [
Así mismo, a pesar de culminar un curso de programación de computadores, algunos estudiantes no adquieren las habilidades básicas [
El proceso de aprendizaje requerido en la programación de computadores se considera una tarea difícil, pues los estudiantes deben tener destrezas en el campo cognitivo de orden superior como la resolución de problemas, el desarrollo y la aplicación de modelos mentales o matemáticos y la generación de algoritmos.
A su vez, deben estar dispuestos a aprender diversas sintaxis y semánticas requeridas para codificar programas de computadores [
Dann, Cooper y Pausch [
A nivel internacional se han llevado a cabo muchas investigaciones que reportan carencias frente a la asimilación de los diversos conceptos fundamentales de programación, pero son escasos los estudios que expongan de forma clara y contundente el fundamento científico de la estructura de esta destreza [
Aun cuando la familiarización con las computadoras sugeriría que el aprendizaje podría ser más fácil hoy en día, en la actualidad, los estudiantes continúan enfrentando dificultades en cursos de programación [
Baldwin y Kulijis [
En este momento, se cuenta con muchos recursos didácticos disponibles para el aprendizaje de la lógica de programación y su codificación; no obstante, aún no existen entornos completos ni tampoco metodologías precisas que conlleven un aprendizaje efectivo con base en las características individuales de los estudiantes [
Otra dificultad de los estudiantes frente a un primer curso de programación es el manejo de una terminología totalmente desconocida en su entorno experiencial; por ejemplo, la concepción de una variable, el manejo de memoria asignado a un estado o, simplemente, el concepto de tipado de datos, hacen aún más confuso el aprendizaje en esta primera etapa [
En el mismo sentido, algunos autores argumentan que la complejidad presentada en la estructura sintáctica del código también dificulta los procesos de aprendizaje; de igual forma ocurre con la mala calidad de los instrumentos de aprendizaje existentes y el débil desarrollo de las destrezas necesarias para afrontar un problema [
Asimismo, los estudiantes encuentran inconvenientes en la interpretación de los enunciados planteados, que pueden ser consecuencia de problemas relacionados con la deficiencia en procesos de abstracción [
A parte de los problemas mencionados, tanto universidades como instituciones educativas aún siguen discutiendo sobre cuál debe ser el paradigma de programación apropiado para un primer curso de programación de computadores.
Esta discusión se centra principalmente en aquellos de mayor utilización como el paradigma estructurado, el orientada a objetos, el orientado a eventos o el funcional [
Evidentemente, en un periodo de tiempo corto, el estudiante se enfrenta a una cantidad de nuevos y extraños conceptos que terminan haciendo más compleja la adopción de los estamentos necesarios para la construcción de programas computacionales [
Otra de las dificultades para el aprendizaje de la poo son las constantes actualizaciones de los entornos de programación, debido a su alto contenido profesional, que abarca una amplia disponibilidad de herramientas que resultan desconcertantes para un estudiante novato [
De acuerdo a la revisión sistemática de la literatura en estudio, en la Tabla 8 se exponen los principales hallazgos en torno a las dificultades presentadas por los estudiantes en el aprendizaje de la programación de computadores y el análisis de sus principales causas y efectos.
4.1.2 Inconvenientes en la enseñanza de la programación de computadores
La literatura científica reporta varios inconvenientes respecto a la enseñanza de la programación de computadores. El primero de estos es la incertidumbre, al abordar un primer curso, frente a la secuencia de los saberes como object-first o procedural-first; aunque existen algunos estudios, aún se hace complejo tomar una decisión soportada totalmente con elementos de juicio que determinen la mejor alternativa [
A su vez, la enseñanza de la programación de computadoras establece un reto para el docente, quien, aparte del proceso metodológico, debe poner a prueba la acción didáctica a fin de contar con recursos significativos que guíen al estudiante de manera adecuada en la asimilación de los conceptos necesarios.
Esta es una tarea compleja si se tiene en cuenta que los estudiantes son novatos y muchos no poseen experiencia alguna en programación [
Infortunadamente, los mecanismos de instrucción en la iniciación a la programación de computadores tienen un proceso limitado de acuerdo con los avances científicos y tecnológicos vivenciados. A pesar de la aceptación de la existencia de la problemática por parte de la comunidad académica y científica, las metodologías desarrolladas en las aulas de clase aún contemplan los mecanismos de vieja escuela, basados en modelos de imitación y caracterizados por la exposición de una solución propuesta por el docente ante un determinado problema, con la esperanza de que el estudiante lo implemente en su modelo mental [
De acuerdo al reporte científico publicado en la literatura, la enseñanza de la programación es el área en la que se concentra la mayor preocupación [
Los escritos existentes afirman que mayormente son los profesores quienes no inducen procedimientos adecuados que conduzcan a la búsqueda clara de una solución a los problemas de sus estudiantes, sin contar con técnicas de autorregulación del conocimiento que beneficien los procesos meta-cognitivos como la planeación, el control y la evaluación del estudiantado. De igual forma, no proponen mecanismos introspectivos de evaluación y, finalmente, el aprendizaje se reduce a la simple explicación brindada en ese momento por el profesor, quien acude al planteamiento de situaciones demostrativas que no dan cuenta de un proceso cognitivo completo, requerido para que el estudiante asimile plenamente el conocimiento [
Entre las metodologías existentes para enseñar a programar, hay una que consiste en hacer que el estudiante resuelva una cantidad importante de ejemplos y situaciones problemáticas, con el propósito de hacer codificación, probar sus diseños y corregirlos, hasta que el ejercicio quede completamente correcto. Muchas veces lo anterior genera que el estudiante dedique mucho tiempo a resolver problemas sintácticos del lenguaje y, en ocasiones, a establecer una disputa absurda con el computador, lo que deriva en acciones preocupadas por sobrepasar dicho error, en lugar de determinar un procedimiento lógico enfocado en la solución del problema planteado y no en el manejo del lenguaje [
Por otro lado, desde hace mucho tiempo, la enseñanza de los fundamentos de programación de computadoras se ha convertido en un desafío tanto para los mismos docentes como para los profesionales de diversas áreas de las ciencias sociales.
Esto ocurre en tanto que fortalece el dominio y conocimiento de uno o más lenguajes de programación y permite desarrollar destrezas para resolver problemas, construir algoritmos que modelen las soluciones planteadas y determinar la validez de dichas soluciones, con aquellos estudiantes de un curso introductorio de programación que, en muchos casos, ingresan por primera vez a un centro de formación profesional o tecnológico [
Como resultado de la revisión sistemática de la literatura, en la Tabla 9 se presentan los hallazgos sobre los inconvenientes que enfrentan los docentes en los procesos de enseñanza de la programación de computadores y el análisis de sus principales causas y efectos.
4.2 Herramientas utilizadas en la enseñanza-aprendizaje de la programación de computadores
La revisión sistémica permitió determinar las herramientas de software utilizadas para la enseñanza-aprendizaje en un primer curso de programación de computadores clasificadas en cinco categorías como lo muestra la Tabla 10.
Visualización o simuladores de algoritmos. Son herramientas que permite hacer un seguimiento paso a paso de cada una de las instrucciones de un algoritmo de forma gráfica y/o mediante datos. En esta categoría se encuentran las siguientes herramientas:
Raptor [
PSeInt. Herramienta de desarrollo de lógica computacional, diseñada especialmente para estudiantes novatos. Cuenta con una interfaz simple que mediante un pseudo-lenguaje, posibilita diseñar algoritmos de una forma sencilla con el propósito de que el estudiante afiance su estructura lógica procedimental [
FreeDfd. Es el sucesor del Smart DFD y permite modelar gráficamente un algoritmo o diagrama de flujo, a la vez es posible su ejecución con sus opciones de edición [
Jeliot 3. Es un visualizador para códigos Java, cuenta con una pantalla de seguimiento tanto de variables como de llamadas a métodos, la cual se refresca con forme avanza la secuencia de instrucciones, permitiéndole al estudiante determinar paso a paso el comportamiento del código fuente [
Herramientas de evaluación automática. Estas herramientas desarrollan procesos de verificación de instrucciones de forma estática o en ejecución tanto en editores de código como en editores gráficos. En esta categoría se encuentran:
Juegos educativos centrados en la enseñanza de una unidad específica de aprendizaje[
Juegos educativos centrados en la enseñanza de unidades múltiples de aprendizaje. Al igual que en la anterior categoría, se toman como base algunos juegos ya desarrollados para adelantar el proceso de enseñanza. En esta categoría se suscriben:
Ambientes colaborativos. Son entornos de aprendizaje diseñados para la adecuada interacción entre estudiantes, con el objeto de generar procesos de aprendizaje comunes. Entre los ambientes colaborativos reportados para un primer curso de programación están:
Como resultado del proceso de la revisión literaria, se presenta en la Tabla 11 un análisis más amplio de las herramientas utilizadas en un primer curso de programación de computadores.
4.3 Estrategias utilizadas en la enseñanza-aprendizaje de la programación de computadores.
La revisión sistemática reportó las siguientes estrategias, tipificadas según su aplicabilidad en tres tipos, propuestas por los autores del presente estudio como lo muestra la Tabla 12.
Sistemas de visualización. La visualización en procesos de software ayuda a representar de manera gráfica el contenido de un algoritmo o código fuente [
Marcos de trabajo. Frittelli et al. [
Estrategias de intervención. Silva et al proponen combinar técnicas de aprendizaje colaborativo con programación de pares [
Pair programming. O programación colaborativa, se caracteriza por el trabajo de dos programadores de forma colaborativa en un computador, diseñando un mismo algoritmo y al mismo tiempo codificándolo y la probándolo [
Pair programming es una propuesta pedagógica que se ha estudiado de forma amplia [
Evaluación de código por pares. Corresponde a una actividad colaborativa con el propósito de ofrecer retroalimentación a los estudiantes involucrados. La evaluación de código por pares puede convertirse en una estrategia que permite al estudiante desarrollar sus fortalezas y debilidades, plantear y cumplir objetivos en común, fortalecer la capacidad metacognitiva, su pensamiento crítico, y sus habilidades profesionales [
Entorno virtual colaborativo inteligente. Es la integración de los Entornos Virtuales Colaborativos con la Inteligencia Artificial [
El componente inteligente hace referencia a la interacción de bases de conocimientos mediadas con estrategias pedagógicas que dan cuenta a estados de indagación realizadas por el aprendiz [
Tutoría de compañeros. Es una experiencia compartida entre una persona que ha tenido una apropiación específica de una temática (mentor de compañeros) y una persona que desconoce el tema (el compañero aprendiz) [
MOOC. Corresponde a Cursos en línea masivos y abiertos que incluyen herramientas de discusión para que los estudiantes generen una dinámica activa en la discusión de temas puntuales [
La construcción de conocimiento se fundamenta en la discusión social generada como base del razonamiento pedagógico incorporado [
Paradigma de programación y lenguaje de programación. Robins et al [
Programación de procedimientos. Establece un estilo de aprendizaje sencillo ideal para un novel programador [
Lenguajes con una sintaxis simple. Koulouri et al [
Curso de pre-programación. Silva et al [
Herramientas de soporte. Silva et al [
Juegos serios. Un número creciente de docentes / investigadores proponen la incorporación de juegos educativos (o juegos serios) en la enseñanza de la programación de computadoras con el objetivo de reforzar la motivación instintiva a través de estudiantes desafiantes, despertando su curiosidad y dándoles una sensación de control e imaginación [
Juegos educativos. Una propuesta interesante para aliviar los problemas enfrentados es la incorporación de juegos educativos dentro de cursos de programación informática [
Pseudolenguajes. Su utilización es importante en los primeros cursos de programación, estos tienen como ventaja que se puede configurar en idiomas locales y algunos se complementan con editores gráficos y pueden hasta generar código fuente en lenguajes de programación formal [
Proyectos. Buscan la manipulación de ciertos entornos simulados con el propósito de generar situaciones previstas y no planeadas para forzar al estudiante a resolverlas mediante algoritmos y así contribuir con su razonamiento lógico [
Entornos. Permite la construcción de entornos simulados desde cero mediante procesos algorítmicos que incluyen modelamiento matemático que posteriormente el estudiante manipula y edita de acurdo a los objetivos planteados [
Creación de videojuegos. Consiste en creación de un entorno de juego partiendo desde cero, contemplando adecuadamente metodologías que permitan integrar las buenas prácticas de programación ya conocidas [
Baldwin y Kulijas [
Enfoque de la espiral Herbert
Este proceso resulta ser extenso por lo que es necesario que exista una motivación constante durante todo el curso [
Máquinas de estados finitos. Para la enseñanza de los fundamentos de programación Hartman, Nievergelt y Reichert [
Analogías. Es una importante técnica utilizada por muchos docentes para la enseñanza de los fundamentos de programación, la cual toma la analogía para acercar al estudiante al concepto técnico y poder así buscar un significado más acorde a su experticia. Una analogía básicamente tiene un concepto fuente y el objetivo, donde el concepto que es familiar al estudiante es el llamado fuente y el resultante del proceso de abstracción se denomina objetivo [
Ambientes colaborativos. Los entornos colaborativos logran potenciar tanto el auto aprendizaje como fortalecer el razonamiento y el aprendizaje colaborativo [
Metáforas. Son consideradas como una interesante herramienta didáctica y facilitan la enseñanza de un concepto abstracto [
Clases magistrales y de laboratorio [
Robots. Se han convertido en didácticas del aprendizaje constructivo en los cursos iniciales de programación ya que posibilitan la experimentación en tiempo real [
Aprendizaje Basado en Problemas (ABP). Es un enfoque que ubica al estudiante como protagonista de en la adquisición de conocimiento realizando un aprendizaje por descubrimiento y construcción, el cual tiene como actividades: la búsqueda de información, seleccionarla, su organización y la resolución de problemas [
Realidad Aumentada. La inclusión de la realidad aumentada como herramienta didáctica permite motivar de una manera fácil la atención del estudiante y combinándola adecuadamente con la complejidad de los conceptos que debe enfrentar en un primer curso de computación se obtienen interesantes resultados que favorecen el aprendizaje [
Realidad Mixta. Facilita el aprendizaje activo, permitiendo al estudiante interactuar con su entorno inmediato.
Algunos docentes han combinado el aprendizaje de los fundamentos de programación con procesos de realidad mixta mediante un entorno natural, buscando la adquisición de aprendizaje significativo [
Guerreo et al [
Su propósito es contribuir a la realización de mayores cantidades de ejercicios por parte del estudiante obteniendo retroalimentación rápida, a su vez para que el profesor dedique sus esfuerzos a la consolidación de la lógica de programación.
En este grupo se encuentran: Ceilidh, BOSS, CourseMarker, Web-CAT, BOSS2, SAC, Automata, eGrader, Pythia, CAP, AUTOLEP, Virtual ProgrammingLab (VPL), YAP3 + APAC, IT VBE y PETCHA.
Herramientas multimedia. Mediante la integración de recursos como textos, imágenes, videos, etc. contribuyen con el proceso de aprendizaje del estudiante.
Entre ellos se encentran: cursos dentro del LMS de programación y herramientas de software que mediante videos y screencast ayudan al estudiante en la búsqueda de ideas para resolver problemas de programación [
Sistemas inteligentes de tutoría conformadas por herramientas de soporte a la escritura de código fuente en un programa computacional.
Estas herramientas tienen mecanismos acordes a las capacidades de resolución de problemas con que cuente el estudiante.
Entre ellas se encuentran: LispTutor, PROUST, MENO II, ELM-PE, ELM-ART, M -PLAT, CPP-Tutor, C++ STL y Prog-Tool.
Herramientas para aprendizaje visual. Son herramientas que a través de representaciones gráficas de un algoritmo y/o del seguimiento en la ejecución de un código fuente, ayudan en el proceso de aprendizaje de programación. Entre ellas se encuentran: Logo, Robot Karel20, JKarel Robot, Turingal, Scratch, Greenfoot, Alice, PLM, Robot Scribbler.
4.4 Consideraciones metodológicas en un primer curso de programación de computadores
La revisión sistemática también las siguientes consideraciones metodológicas las cuales se han categorizado como lo muestra la Tabla 13.
Por su parte, Romero y Rosero [
En este sentido, Kaasbøll [
Por su parte, Silva et al.[
Rodríguez [
Estos proyectos están orientados al desarrollo de una característica o propuesta sugerida por el investigador y, en general, integran herramientas existentes con metodologías.
Por su parte, Olague et al.[34] determina que uno de los estilos de aprendizaje más utilizado por los estudiantes de un primer curso de programación es el modelo vark: kinestésico-auditivo, visual-kinestésico-lectoescritura y kinestésico-auditivo-visual lectoescritura, que actúa como la combinación de los estilos anteriores. Como resultado propone establecer las diversas estrategias de enseñanza mediante acciones de predominancia práctica sobre las teóricas; asimismo, los ejercicios planteados deben tener significancia en el aspecto vivencial del estudiante. Los autores también afirman que el constructivismo es el que se adecua mejor a los principios del enfoque kinestésico y que es necesario que en el proceso de enseñanza de los fundamentos de programación se incorporen estrategias de explicación visual, auditiva y escrita, para que el estudiante cuente con los tres estilos de aprendizaje y pueda elegir el que más se ajuste a sus necesidades de aprendizaje.
De acuerdo a las metodologías de enseñanza aplicadas en los cursos de programación, Ortega et al.[
Sáez et al. [30] sugieren tres tipos de problemas para implementar algoritmos:
Por su parte, Hernández et al.[5] establecen que los retos que plantea la didáctica de la programación de computadoras han sido abordados desde tres diferentes enfoques:
Finalmente, Insuasti [
En este punto es apropiado formular algunas recomendaciones para afrontar un primer curso de programación de computadores, de acuerdo a los resultados obtenidos en la revisión sistemática de la literatura.
Los dos enfoques de mayor utilización en la enseñanza de los fundamentos de programación son el enfoque de objetos y el de programación estructurada [
Sin embargo, al tratar de estudiarlos en cursos continuos y en este orden, Sheard y Hagan [
En consecuencia, se recomienda comenzar con el enfoque estructurado (bottom-up) y luego con la orientación a objetos. Esta propuesta fue aceptada por muchas instituciones en su componente curricular y derivó en la obtención de mejores resultados académicos en los estudiantes [
Por otra parte, Herbert [
Por su parte, Dann, Cooper y Pausch [
Así mismo, Ali [
Silva et al.[
Entonces, el hecho de contar en un currículo con un primer curso de algoritmos y fundamentos de programación es una buena opción que contribuye con las habilidades mínimas necesarias para la solución de problemas computacionales del estudiantado [
Aunado a lo anterior, se debe tener en cuenta que el objetivo particular de la enseñanza de la programación debe centrarse en el desarrollo de pensamiento computacional y algorítmico para el desarrollo de problemas, mas no en la mera escritura de secuencias para ejecutarlas en un computador [
Para iniciar a estudiantes en la programación, se deben estimar dos situaciones [
Rodríguez [
4.5 Tendencias de la programación de computadores
Trejos [
Asimismo, existen otras tendencias que por el momento parecen distantes, pero pueden convertirse en realidad en un futuro no muy lejano, entre ellas están:
Estos, aparte de incorporar líneas de código mediante comandos de voz, se encargarán de todos los procesos requeridos en la construcción, validación, documentación y actualización de software de calidad.
Respecto a las dificultades en el proceso de aprendizaje de la programación, la gran mayoría de autores consultados en la revisión sistemática focalizan el problema principalmente en la experiencia previa del estudiante al enfrentarse a los diversos conceptos abstractos (que a primera vista no tienen para él equivalencia en la vida real) de un primer curso de programación de computadores. Sin embargo, también encuentran relevantes algunos inconvenientes relacionados con los estilos de aprendizaje, las limitaciones en su capacidad de abstracción, la cantidad de tiempo —escaso para asimilar cantidades enormes de conceptos nuevos— y los continuos cambios en los entornos de programación.
Asimismo, la investigación arroja que, a pesar de que la enseñanza de la programación se ha fortalecido en los últimos tres decenios, aún no existe un consenso en las actuales universidades e instituciones de educación superior que forman constructores de software a nivel profesionales en la forma en que se debe afrontar un primer curso de programación, especialmente, en lo relacionado con los mecanismos de instrucción, las herramientas, las metodologías, las didácticas, los saberes, las competencias, los modelos y demás elementos necesarios para lograr importantes resultados en este campo.
Los estudios revelan que, en la orientación del primer curso de programación, aún se sigue el modelo por imitación de la escuela tradicional, en el cual la didáctica gira en torno a la explicación por parte del profesor, quien todavía guarda la esperanza de que el estudiante descubra los modelos propuestos a través de la solución de ejercicios demostrativos, en los no se prevén los procesos introspectivos de planeación, control y evaluación con el rigor adecuado.
De igual manera, en la enseñanza de la programación de computadores confluye el desarrollo de muchas habilidades como la resolución de problemas, el modelado de situaciones o problemas, la incorporación de la eficiencia en soluciones, el dominio de uno o varios lenguajes de programación, entre otras. Estas hacen más complejo el objetivo de asumir y cumplir el propósito fundamental de dicho curso.
Acerca de las herramientas reportadas para asumir un primer curso de programación de computadores, se puede apreciar que existen varios esfuerzos para facilitar el aprendizaje al estudiante novel, que van desde herramientas de visualización de algoritmos y programas hasta la adaptación de tecnologías emergentes como en el caso de la realidad aumentada y la realidad mixta, para apoyar los procesos de abstracción. Además, se puede apreciar que el campo de los juegos tanto en su creación como en su utilización en un primer curso despierta una motivación adicional en el estudiante.
Por otra parte, se observa una interesante cuantía de estrategias de enseñanza-aprendizaje adaptadas y desarrolladas para guiar en el proceso tanto a estudiantes como a docentes, en las cuales la revisión sistemática registra un equilibrio entre la cantidad de estrategias centradas en el aprendizaje frente a las centradas en la enseñanza. Aunado a esto, se evidencia que las estrategias colaborativas hacen un importante aporte al proceso de enseñanza-aprendizaje al incorporar técnicas de colaboración y cooperación en los estudiantes. Asimismo, se debe resaltar la incorporación de estrategias clásicas que van desde las clases magistrales y el laboratorio hasta las utilizadas en otras áreas del saber cómo las analogías y las metáforas.
En cuanto a las consideraciones metodológicas, se puede establecer que no existe un consenso en métodos de enseñanza ni en procesos de aprendizaje establecidos, pese al momento e importancia del software en la actualidad. Igualmente, existe una importante cantidad de propuestas de modelos didácticos, enfoques pedagógicos, estilos de aprendizajes y metodologías de enseñanza propias y adaptadas, que establecen algunos lineamientos para los docentes nuevos o aquellos que buscan perfeccionar su metodología de enseñanza, para abordar un primer curso de programación de computadores, con grupos de estudiantes que varían en expectativas y capacidades en cada periodo académico.
Por su parte, en la revisión sistemática se hallaron importantes recomendaciones para afrontar un primer curso de programación, muchas de las cuales sugieren fortalecer los niveles de abstracción mediante el desarrollo del pensamiento algorítmico. Así mismo, se espera que estos puedan ser potenciados con herramientas de visualización y la utilización de un lenguaje de programación que minimice su sintaxis de codificación, gracias al uso de ejemplos inicialmente relacionados con experiencias ya adquiridas por los estudiantes. Tal es el caso de la física, la química, la matemática, la geometría y la estadística, entre otras disciplinas, que pueden ser combinadas con sucesos cotidianos cercanos a sus experiencias (por ejemplo, el sistema cuantitativo de notas, las compras, la facturación, etc.), para luego formular pequeños proyectos, en los que puedan adoptar algunas de las herramientas, metodologías y estrategias individuales y colectivas citadas anteriormente.
Finalmente, la revisión sistemática genera un hallazgo de las futuras tendencias que tiene la programación de computadores, las cuales se orientan al tratamiento del diseño de software para generación y adaptación de código automático e inteligente, con tendencias hacia la virtualidad, animación y proyección 3D.
Hoy en día son evidentes los esfuerzos de docentes e investigadores enfocados en el estudio de los procesos de enseñanza-aprendizaje para un primer curso de programación, debido a su importancia e incidencia en el desarrollo de las habilidades de los estudiantes tanto en su vida académica como en el futuro desarrollo profesional en la construcción de software.
Por este motivo, para este artículo se adelantó un método de revisión sistemática de literatura (sección 3), que permitió recopilar, sintetizar y categorizar los hallazgos de experiencias relacionadas con los procesos de enseñanza-aprendizaje en un primer curso de programación de computadores, reportado en la educación superior.
Como resultado, se obtuvo un total de 106 estudios en cuatro bases de datos de publicaciones científicas de los últimos siete años, que incluyeron criterios de búsqueda de término principal con sus correspondientes sinónimos y filtros adicionales (sección 3.2), de los cuales, quince fueron duplicados y 41 excluidos previa aplicación de la evaluación de calidad (sección 3.4), de acuerdo a los criterios de selección establecidos (sección 3.3). En esa medida, los 50 estudios restantes permitieron dar respuesta a las preguntas de investigación formuladas en esta revisión sistemática.
Los hallazgos reportados en la sección 2 responden a las preguntas RQ1 y RQ2 y permiten determinar que existen varios problemas relacionados con los procesos de enseñanza/aprendizaje tanto por parte de los estudiantes como de los docentes a cargo de los cursos. Dichos problemas incluyen inconvenientes en los estilos de aprendizaje, falta de experiencias previas, nivel de abstracción en los conceptos, tiempo de estudio, cantidad de conceptos, inadecuadas técnicas de estudio, inexistencia consensos en torno a las herramientas, metodologías, didácticas, saberes, competencias, modelos y demás elementos necesarios para afrontar un primer curso de programación.
En la Tabla 1 se resumen las 33 herramientas que dan respuesta a la pregunta RQ3, explicadas por extensión en la sección 4.1, categorizadas en herramientas de visualización o simuladores de algoritmos, evaluación automática, juegos educativos centrados en la enseñanza de una unidad específica de aprendizaje, juegos educativos centrados en la enseñanza de unidades múltiples de aprendizaje y ambientes colaborativos.
En la Tabla 2, se categorizan 36 estrategias para un primer curso de programación, que dan respuesta a la pregunta RQ4 y clasificadas en colaborativas, centradas en el aprendizaje y centradas en la enseñanza, las cuales se detallan en la sección 4.2.
Como respuesta a la pregunta RQ5, hay 18 consideraciones metodológicas vinculadas a modelos didácticos, enfoques pedagógicos, componente lúdico, estilos de aprendizaje y estructura curricular.
Están resumidas en la Tabla 3 y descritas en la sección 4.3. Además, entre los hallazgos de la revisión sistemática, hay una interesante cantidad de recomendaciones para afrontar un primer curso de programación, las cuales responden a la pregunta inicial y establecen al menos un punto de partida a tener en cuenta tanto para los docentes novatos, en la orientación de un primer curso, como para aquellos que ya han tenido experiencia y buscan nuevas alternativas para mejorar los resultados obtenidos hasta el momento.
Dichas recomendaciones se presentan con detalle en la sección 4.4. Finalmente, ante la pegunta RQ6, se encontró una categorización de las posibles tendencias de la programación de computadores que se amplían en la sección 4.5 y se enmarca en el tratamiento de código fuente, su adaptación y su tendencia hacia el desarrollo emergente tecnológico.