Consideraciones en los procesos de enseñanza-aprendizaje para un primer curso de programación de computadores: una revisión sistemática de la literatura

Considerations for the Teaching-Learning Processes of Introductory Programming Courses: A Systematic Literature Review

DOI 10.22430/22565337.1520 Tablas Figuras

Recibido: 25 de septiembre de 2019
Aceptado: 19 de noviembre de 2019

 

Resumen

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.

Abstrac

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.

1. INTRODUCCIÓN

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 [1]. En razón a esto, la programación de computadores capacita a los estudiantes para convertirse en aprendices de por vida, un beneficio muy importante para este mundo de conocimiento en constante crecimiento, ya que pueden transferir sus habilidades a varios dominios en futuros trabajos [2].

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 [3].

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) [4].

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 [5].

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 [6].

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.

2. LA PROGRAMACIÓN DE COMPUTADORES

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 [7].

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 [8], que exige una constante actualización de acuerdo con las tendencias experimentadas en los recientes enfoques emergentes en este campo.

Por otro lado, la programación de computadores permite resolver problemas puntuales que demandan la mediación de objetos tecnológicos [9] con capacidades de procesamiento autónomo, almacenamiento interno o externo, que permitan brindar respuestas a través de los medios demandados. Todo esto se desarrolla mediante metodologías y modelos específicos validados por toda una comunidad.

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 [10].

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 [11].

3. MÉTODO

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 [12]- [16]. El propósito principal era ofrecer una visión general del área de investigación e identificar la cantidad, el tipo de investigaciones y los resultados disponibles, para así construir un esquema de clasificación y una estructura válida.

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 [17].

En la Fig. 1, se presentan las etapas del método definido para esta revisión.

Fig. 1. Estructura de la revisión sistemática de la literatura. Fuente: autores

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:

  • RQ1: ¿Qué problemas de aprendizaje se han reportado en los estudiantes de fundamentos de programación?
  • RQ2: ¿Qué inconvenientes se reportan en la enseñanza de los fundamentos de programación?
  • RQ3: ¿Qué herramientas tecnológicas de enseñanza-aprendizaje se utilizan en un primer curso de programación de computadores?
  • RQ4: ¿Qué estrategias de enseñanza-aprendizaje se aplican en un primer curso de programación de computadores?
  • RQ5: ¿Existen algunas consideraciones metodológicas para enfrentar un primer curso de programación de computadores?
  • RQ6: ¿Qué tendencias tiene la programación de computadores que puedan cambiar los actuales procesos de enseñanza/aprendizaje?
  • La estructuración de estas preguntas se hizo mediante el Modelo pico con su variante pipoh [18], cuyos conceptos se detallan en la Tabla 1.

     

    Tabla 1. Definición de los conceptos generales con PIPOH. Fuente: autores

    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.

    Tabla 2. Término sinónimos y filtros para componer la cadena de búsqueda. Fuente: autores

    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.

    Tabla 3. Término principal y base de datos. Fuente: autores

    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.

    Tabla 4. Cadena de búsqueda. Fuente: autores

    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.

    Tabla 5. Fechas de consulta y descarga de archivos. Fuente: autores

    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.

    Tabla 6. Evaluación de calidad en procesos de búsqueda y selección>. Fuente: autores

    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.

    Tabla 7. Estudios incluidos en revisión sistemática. Fuente: autores

    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.

    4. RESULTADOS

    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 [19].

    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 [20]. Para afrontar la asimilación de los fundamentos de programación son necesarias determinadas habilidades cognitivas, entre ellas, la abstracción, las aptitudes lógico-matemáticas y la capacidad para solucionar problemas algorítmicamente. Los factores de motivación y didácticas aplicadas son importantes para el proceso de enseñanza, al abordar los conceptos fundamentales de programación en el aula de clase [21].

    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 [19].

    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 [22]-[25].

    Así mismo, a pesar de culminar un curso de programación de computadores, algunos estudiantes no adquieren las habilidades básicas [21], de lo que se infiere que la programación es una disciplina difícil de aprender. Informáticos, pedagogos y psicólogos llevan décadas investigando las dificultades que encuentran los alumnos para su aprendizaje [4].

    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 [26], lo que muchas veces deriva en que algunos sientan frustración y, en casos extremos, se retiren de sus programas de estudio [26]-[28].

    Dann, Cooper y Pausch [29] determinan la existencia de cuatro elementos que complican el aprendizaje de la programación: metodologías de enseñanza inapropiadas para el tratamiento de la sintaxis en la codificación de programas; la falta de un resultado tanto de los cálculos como del seguimiento de la estructura del programa al mismo tiempo, cuando se ejecuta un código; la dificultad en la asimilación de lógica computacional y, finalmente, la inapropiada utilización de los procesos de diseño algorítmico.

    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 [30]. A pesar de que en la actualidad existen varias metodologías, enfoques, métodos y herramientas de enseñanza-aprendizaje de los fundamentos de programación, no hay una solución que satisfaga todas las necesidades por consenso [31], [22] y que logre cumplir con éxito los objetivos de los estudiantes del siglo xxi [1].

    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 [1]. Los amplios estudios de investigación adelantados en las últimas dos décadas indican que estas dificultades aún están presentes y los estudiantes parecen estar menos interesados en la programación [32], [1].

    Baldwin y Kulijis [21], [33] identifican otros factores que obstaculizan el aprendizaje de la programación de computadores en los estudiantes como en el caso de los complejos procesos cognoscitivos requeridos en las primeras etapas de estudio, ya que estas involucran tareas de orden superior del pensamiento como la planificación, el razonamiento y la misma solución de problemas. A esto obedece la importancia de desarrollar ciertas habilidades del pensamiento antes de enfrentar un curso de programación de computadores; esto se convierte en un factor decisivo para el correcto aprendizaje de la lógica computacional [21].

    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 [34].

    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 [35].

    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 [21].

    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 [36]. En razón a esto, algunos estudiantes de los primeros cursos que no logran alcanzar las habilidades necesarias para la comprensión de los fundamentos de programación, adquieren una actitud de rechazo ante el proceso de aprendizaje [21], [37]-[39].

    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 [40]. El proceso de aprendizaje en cada uno de estos, trae consigo un sinnúmero de inconvenientes, por ejemplo, el problema del aprendizaje de la poo radica en que requiere la integración de varios elementos como la asimilación del paradigma orientado a objetos, el manejo de un entorno de desarrollo y su correspondiente lenguaje de programación, la incorporación de una metodología adecuada de desarrollo, el dominio del mismo lenguaje unificado de modelado, la concepción de patrones y la lógica necesaria de abstracción, para finalmente convertirla en código de programación [41].

    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 [42].

    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 [41]. Igualmente, los métodos de estudio inadecuados se convierten en un gran problema al momento de consolidar la lógica del pensamiento y el desarrollo de habilidades cognitivas requeridas en la codificación de un programa de computador [43].

    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.

    Tabla 8. Dificultades causas y efectos del aprendizaje de la programación en un primer curso. Fuente: autores

    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 [ 44].

    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 [40].

    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 [45].

    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 [46].

    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 [47].

    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 [48].

    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 [40].

    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.

    Tabla 9. Inconvenientes causas y efectos de la enseñanza de la programación en un primer curso. Fuente: autores

    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.

    Tabla 10. Categorías y herramientas para un primer curso de programación de computadores. Fuente: autores

    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:

       FLowchart INTerpreter o FLINT [49]: Flowchart Interpreter o también FLINT, permite la representación de algoritmos mediante diagramas de flujo con sintaxis minimalista. FLINT facilita la retroalimentación continua de su código interpretado, y cuenta con herramientas de seguimiento propicias para programadores iniciales [26].

       Raptor [50]. Es una herramienta tanto para aprendizaje como para la enseñanza de la lógica de programación, permitiéndole al estudiante modelar y codificar algoritmos de una forma gráfica, y a la vez también ejecutaros. Raptor no es un lenguaje de programación, sino un simulador de algoritmos provisto de una interfaz fácil de usar [26].

       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 [51].

       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 [51].

       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 [52], [53].

    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:

  • TRY [54]: suministra al estudiante retroalimentación de forma instantánea y compara paso a paso lo ejecutado con lo esperado. Además, el estudiante puede hacer varios intentos para alcanzar su respuesta, bajo la restricción a cierto número de ensayos, mediante los cuales se busca invitarlo a analizar sus procedimientos antes de intentar nuevamente [20].
  • PSGE [55]: surge como resultado de tri e incluye un módulo de conceptos de prueba de programas, a través de el acrónimo sprae (Specification, Premeditation, Repeatability, Accountability, Economy), con el propósito de establecer un ciclo de vida de tareas de programación que pueden ser cuantificadas y calificadas de forma automática. Aunado a lo anterior, este ciclo cuenta con tres etapas: especificación de tareas, un módulo para distribuir tareas y probar programas acordes a un plan determinado [20].
  • TRAKLA [56] permite evaluar automáticamente algoritmos; mediante su interfaz gráfica de usuario, el estudiante construye sus propios diseños, bajo la limitación a un determinado número de intentos de ejecución, establecidos en su configuración inicial con el fin de evitar que abuse de la técnica de prueba y error [20].
  • CourseMaker [57]: es auto compilado en Java y posibilita la configuración de seguimiento dinámico de interpretación de código y de pruebas estáticas de compilación. Asimismo, cuenta con un módulo de registro del proceso de compilación en MySQL [20].
  • AutoLEP [58]: hace un análisis estático en códigos, cuyas pruebas dinámicas no son suficientes, incluido el manejo de marcadores en puntos específicos que requieren análisis de comportamiento especial [20].
  • Visual DaVinci: es un entorno integrado de desarrollo (ide) de programación para la representación y ejecución de algoritmos, con el objetivo de facilitar la enseñanza y el aprendizaje en los primeros cursos de programación de computadores. Fue desarrollado por la Universidad Nacional de La Plata [19].
  • Juegos educativos centrados en la enseñanza de una unidad específica de aprendizaje[1]. Este enfoque toma como base los juegos ya construidos para la enseñanza de los fundamentos de programación. A esta categoría pertenecen las siguientes herramientas de software.

  • Catacumbas: es un juego tridimensional multijugador, que tiene como objetivo enseña a los estudiantes cómo declarar variables y usar declaraciones y bucles if simples y anidados [ 1]. El juego registra puntajes de experiencia para cada alumno y proporciona mensajes explicativos como un mecanismo de andamiaje [59], [60].
  • Salvar a la princesa Sera: es un juego de dos dimensiones que permite a los estudiantes escalar a través de mensajes explicativos dirigidos al jugador [1]. Los estudiantes deben completar una serie de misiones para progresar en la trama del juego; con este objetivo, finalizan las líneas de código que resultarán en un programa ejecutable. De esta forma, aprenden el algoritmo de ordenación rápida junto con bucles simples y anidados con el uso de un microlenguaje [59], [60].
  • EleMental: la recurrencia: es un juego tridimensional que tiene como objetivo enseñar a los estudiantes a ejecutar la recursión y la búsqueda transversal en profundidad, para lo cual deben utilizar el lenguaje de programación C # [1]. Dos avatares, llamados Ele y Cera, ayudan a los estudiantes durante el juego de varias maneras; por ejemplo, una vez que se escribe el código, Ele cruza el árbol binario según cómo se implementa el código escrito, mientras que Cera explica exactamente qué está produciendo el código en un momento específico [61].
  • Castillo de Wu: es un juego de rol bidimensional que tiene como objetivo enseñar a los estudiantes loops y arreglos, por medio de actividades interactivas [ 1 ].El juego faculta la administración de matrices mediante el cambio de los parámetros dentro de los bucles, y el movimiento de los personajes a través de la ejecución de bucles anidados [62].
  • Robozzle: es un juego de acertijos en línea que proporciona una serie de comandos predefinidos, listos para usar y no muestra ningún código real [1]. Los usuarios pueden ejecutar sus funciones y ver cómo se mueve su héroe en todo el mundo; por lo tanto, pueden detectar fácilmente los errores que han cometido y volver a programar en consecuencia [63].
  • LightBot: es análogo a Robozzle, corresponde a un juego basado en acertijos y se puede jugar en línea. Incluye un conjunto de comandos, con los cuales el estudiante establece acciones secuenciales, aunque no es un lenguaje de programación [64].
  • TALENT: utiliza un micro lenguaje para la enseñanza algorítmica de enunciados y bucles. Por cada jugador, se usa un avatar en forma de arqueólogo, mediante el cual el estudiante interactúa con el entorno virtual, desarrolla actividades específicas y recolecta elementos para luego exponerlos en un museo [65].
  • Gidget [66]: es una herramienta de programación elemental que consiste en programar en un robot la corrección de fallas para poder completar misiones establecidas previamente [67].
  • 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:

  • Robocode: es un entorno bidimensional que tiene como objetivo enseñar programación de computadoras usando el lenguaje Java. El juego se compone de un editor de programación, robots y una arena virtual, y los estudiantes deben programar un robot que compita contra otros en la arena [1]. Durante su construcción, el robot hereda métodos básicos que luego pueden ser extendidos por los estudiantes, de acuerdo con el comportamiento que esperan de sus robots en la arena [68].
  • M.U.P.P.E.T.S.: tiene por objeto preparar al estudiante para la asimilación de la concepción de la orientación a objetos, a través de un entorno tridimensional colaborativo y la utilización del lenguaje de programación Java. La metáfora del juego consiste en que el estudiante debe construir un robot, el cual lucha en una arena virtual con otros robots, mediante la escritura de líneas de comando en un entorno de desarrollo integrado [69].
  • Prog & Play: es un entorno de juego en el que los usuarios programan sus avatares, que son héroes y pueden conformar estrategias entre sí para poder subsistir la mayor cantidad de tiempo. Permite al estudiante elegir el idioma de codificación en Scratch, C, Ada, OCaml y Compalgo [70].
  • PlayLogo3D: es un juego de roles tridimensional, que hace posible la interacción entre múltiples usuarios y tiene como objetivo enseñar conceptos básicos de programación informática estructurada [1]. El mundo virtual consiste en la nave espacial X-15, localizada en una constelación de la galaxia de Andrómeda, donde cada año se celebra un concurso entre pilotos-robots [71].
  • Gidget: es un juego basado en la web, en el que los estudiantes pueden programar utilizando un lenguaje de programación simplificado, creado específicamente para el juego, con el fin de aprender a diseñar y analizar algoritmos básicos [1]. Un robot llamado Gidget tiene problemas con una parte de su software y, por lo tanto, no puede completar sus tareas; los estudiantes son llamados para ayudar a Gidget, ya sea para arreglar las líneas de código incorrectas o completar el código que falta dentro de los programas [72].
  • Scratch: Brennan y Resnick [73], [74] lo describen como un entorno de programación para la construcción de historietas —aplicaciones interactivas—, que cuenta con una enorme comunidad en línea para compartir con otros usuarios.
  • Snap! [74], [75]: es una extensión de Scratch y es un lenguaje de programación visual, que presenta opciones de configuración para abordar cursos iniciales de programación en cualquier nivel educativo.
  • Train B&P [76]: mediante un sistema basado en ferrocarriles, apoya los procesos de aprendizaje de los fundamentos de programación [67].
  • Entorno Cubik [77]: posee un editor y traductor de algoritmos a código fuente, que faculta la escritura de programas con enfoque estructurado o modular, ya que se fundamenta en el paradigma imperativo [78].
  • 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:

  • EclipseGavab [79]: es una versión de Eclipse, personalizada y pensada en el ejercicio docente, que combina el aprendizaje colaborativo con el enfoque de aprendizaje basado en proyectos; además, el estudiante puede escribir su código en lenguajes Pascal, C y Java [80].
  • Virtual Programming Lab (vpl) [81]: es un laboratorio de programación soportado en Moodle, lo cual flexibiliza el desarrollo de software de manera virtual al aprovechar los mismos recursos del gestor de contenidos. Esta herramienta fue diseñada por el Departamento de Informática y Sistemas, de la Universidad de Las Palmas de Gran Canaria [80].
  • Ambiente Instruccional SABATO [82]: es una herramienta que combina el aprendizaje colaborativo apoyado por computador, conocido por sus siglas cscl (Computer Support for Collaborative Learning), y el Aprendizaje Basado en Problemas, bajo las siglas abp [80].
  • COLLECE: diseñado como soporte a la programación colaborativa, en procesos tanto de desarrollo de software profesional como de enseñanza-aprendizaje en el aula de clase. Dispone de herramientas de edición remota para edición de código, control y asignación de tareas, entre otras [4].
  • COLLECE 2.0: es una extensión de collece, que integra el ide de Eclipse en un entorno con varios plugins como recursos para programadores que mejoran el contexto colaborativo de su antecesor [ 4] [83].
  • 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.

    Tabla 11. Características de las herramientas computacionales para un primer curso de programación. Fuente: autores

    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.

    Tabla 12. Tipificación de estrategias para un primer curso de programación. Fuente: autores

    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 [84]. Hoy en día hay una amplia variedad de sistemas de visualización de algoritmos y programas que apoyan los procesos tanto de enseñanza como del fundamento de programación [53]. Los sistemas de visualización permiten además simbolizar ideas abstractas mediante elementos gráficos [85], para guiar al estudiante de una forma más simple tanto para la evaluación de su modelo como para la cimentación de su constructo en búsqueda del desarrollo de pensamiento algorítmico.

    Marcos de trabajo. Frittelli et al. [40] concluyen que la adecuada utilización de ejemplos de matemática y geometría como marcos de trabajo, introducen elementos favorables acordes con las vivencias de los estudiantes al momento de afrontar un primer curso de programación.

    Estrategias de intervención. Silva et al proponen combinar técnicas de aprendizaje colaborativo con programación de pares [26] para un primer curso de programación de computadores con el propósito de fortalecer la formación de profesionales en construcción de software.

    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 [86], [17].

    Pair programming es una propuesta pedagógica que se ha estudiado de forma amplia [87], [88] y como resultado se ha comprobado que ha mejorado los procesos de aprendizaje en los cursos introductorios de programación, incrementando la confianza en sus integrantes haciendo del aprendizaje un momento divertido.

    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 [89], [17].

    Entorno virtual colaborativo inteligente. Es la integración de los Entornos Virtuales Colaborativos con la Inteligencia Artificial [17]. Por ende, es un sistema computacional creado para que un usuario interactúe con otros del mismo tipo o con partes del entorno con el fin de consolidar experiencias de aprendizaje en condiciones espacio temporales distintas.

    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 [90].

    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) [17]. Este modelo colaborativo propicia un aprendizaje encaminado al beneficio muto con elementos innovadores y conlleva a superar problemas generalmente de comprensión ocasionados por la diferencia de conocimientos entre el docente y el estudiante [91].

    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 [17].

    La construcción de conocimiento se fundamenta en la discusión social generada como base del razonamiento pedagógico incorporado [92].

    Paradigma de programación y lenguaje de programación. Robins et al [93] y Pears [94] resaltan la importancia de enseñar un primer curso de programación combinando un paradigma con un lenguaje de programación de computadores.

    Programación de procedimientos. Establece un estilo de aprendizaje sencillo ideal para un novel programador [95]. Lenguaje de programación actual. De Raadt et al. [96] junto con Dingle y Zander [97] proponen el iniciar con un lenguaje de programación acorde a la actualidad de los tiempos y a las necesidades de la industria.

    Lenguajes con una sintaxis simple. Koulouri et al [98] con Mannila y De Raadt [99] recomiendan el iniciar con un lenguaje de programación Python o Eiffel los cuales tienen sintaxis simples ya que facilitan el aprendizaje en las condiciones de un primer curso de programación.

    Curso de pre-programación. Silva et al [26], Davies et al. [100] y Rizvi et al [101], consideran pertinente incluir un curso de pre-programación antes de comenzar con el curso de Programación de Computadores en el que únicamente se estudie el desarrollo de pensamiento algorítmico.

    Herramientas de soporte. Silva et al [26] recomienda el uso de herramientas de soporte de programación con estudiantes noveles para así mejorara los procesos de compresión de las temáticas estudiadas.

    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 [1].

    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 [1].

    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 [67].

    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 [67].

    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 [67].

    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 [67]. La construcción de entornos de juego básicos permite una motivación mayor en el estudiante al momento de enfrentar un primer curso de programación [40]. Desarrollo de Modelos mentales.

    Baldwin y Kulijas [33] proponen que es posible en un primer curso de programación de computadoras el desarrollo de métodos para construir o mejorar sus propios modelos mentales a través de interfaces de usuario, analogías y metáforas y la referenciación espacial.

    Enfoque de la espiral Herbert 102] establece que la enseñanza más adecuada de los fundamentos de programación a los estudiantes se hace a través de una explicación inicialmente ‘suave’ y luego se debe ir añadiendo mayor complejidad.

    Este proceso resulta ser extenso por lo que es necesario que exista una motivación constante durante todo el curso [21].

    Máquinas de estados finitos. Para la enseñanza de los fundamentos de programación Hartman, Nievergelt y Reichert [39], proponen las ‘Máquinas de Estados Finitos’ con el propósito de involucrar al estudiante en un contexto de juego. En este proyecto el estudiante puede aprender y simular el concepto de condicionales y ciclos. El objetivo de utilizar las máquinas de estado finito es la utilización de la gamificación en el proceso de aprendizaje de los fundamentos de programación [21].

    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 [103]. Dunican [35] propone analogías para enseñar declaraciones a través de juguetes infantiles; para el maneo de listas con cajas, y el concepto de matriz mediante un casillero de correspondencia [21].

    Ambientes colaborativos. Los entornos colaborativos logran potenciar tanto el auto aprendizaje como fortalecer el razonamiento y el aprendizaje colaborativo [104]. Por esto, los ambientes colaborativos permiten que el aprendizaje de los fundamentos de programación se realice en un entorno con ciertos niveles de interactividad entre los estudiantes que beneficia directamente los procesos de adquisición de conocimiento [80].

    Metáforas. Son consideradas como una interesante herramienta didáctica y facilitan la enseñanza de un concepto abstracto [105]. En el ámbito universitario ha tomado interés la utilización de metáforas especialmente en los primeros cursos de programación con el propósito de contextualizar al acercar al estudiante a un concepto abstracto [105], [106], lo cual está soportado por diversos estudios en los cuales por ejemplo se han utilizado metáforas para explicar conceptos como objetos, vectores, memoria dinámica, etc. [107].

    Clases magistrales y de laboratorio [85]. Son las más utilizadas en la mayoría de universidades e instituciones educativas, se caracterizan porque los temas estudiados en el aula de clase pueden reforzarse con herramientas didácticas en el tiempo independiente del estudiante, quedando el laboratorio como un lugar de encuentro dedicado a solución de ejercicios prácticos fundamentados en la teoría. En estos entornos, los estudiantes tienen un comportamiento generalmente pasivo, restringiendo en muchas ocasiones sus habilidades [108].

    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 [85]. Uno de los mayores representantes en esta categoría son los kits de Robots Lego Mindstorms NXT mediante los cuales algunos docentes enseñan los fundamentos de programación [109].

    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 [110]. Existen varias experiencias reportadas en la utilización de este enfoque en la enseñanza en las ciencias de la computacionales ya que la computación se basa en problemas y por la misma característica de actualización continua que conllevan los procesos tecnológicos [85].

    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 [111].

    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 [53].

    Guerreo et al [112] clasifica en cuatro categorías a las herramientas utilizadas para la enseñanza-aprendizaje de la programación: Herramientas de calificación automática. Están dirigidas a la automatización de la calificación de ejercicios en el ámbito de la programación.

    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 [113>]; utilización de imágenes intuitivas que visualicen paso a paso la ejecución de cada instrucción de un código fuente [114]; la incorporación de un diario en el LMS como registro del proceso llevado a efecto durante el tiempo de aprendizaje [115].

    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.

    Tabla 13. Categorización de metodologías para un primer curso de programación. Fuente: autores

    Por su parte, Romero y Rosero [47] determinan que, a lo largo de la historia, en la enseñanza de la programación han convivido diversos enfoques y tendencias [116] y que en la actualidad no hay una decisión única en la selección de métodos de enseñanza ni en los enfoques didácticos a utilizar.

    En este sentido, Kaasbøll [117] plantea tres modelos didácticos clásicos en la enseñanza de la programación:

  • Escalera semiótica: se basa en la utilización de lenguajes como partida de los procesos de enseñanza de los fundamentos de programación, bajo una concepción de secuencias sintácticas, semánticas y pragmáticas.
  • Objetivos de taxonomía cognitiva: se basa en la taxonomía por objetivos de Bloom y se enfoca en el uso de instrucciones para cimentar el desarrollo algorítmico en una actividad.
  • Resolución de problemas: es un clásico modelo de aprendizaje ampliamente validado y reconocido por la comunidad académica y científica.
  • Por su parte, Silva et al.[26] proponen dos elementos a considerar en el proceso de enseñanza-aprendizaje de la programación de computadores:

  • Enfoque pedagógico: existen diversos enfoques en la enseñanza de los fundamentos de programación como el paradigma de programación, en el lenguaje utilizado, el uso de herramientas de simulación y la visualización, entre otros.
  • Factores del estudiante en el aprendizaje de la programación: entre las características estudiantiles más analizadas están: el género, los antecedentes matemáticos, la experiencia previa en programación y la motivación.
  • Rodríguez [45] sugiere la siguiente clasificación para la enseñanza de los fundamentos de programación, de acuerdo al componente lúdico:

  • Desarrollo instruccional orientado hacia el paradigma: Dr. Java y Bluej son los proyectos más representativos de este enfoque.
  • Desarrollo instruccional basado en videojuegos: Scratch es el mayor representante de este enfoque; además, también se encuentran proyectos como Greenfoot y Alice, que han logrado un avance significativo en la reducción del abandono o pérdida de los cursos de programación que los contemplan.
  • Desarrollo instruccional enfocado en temáticas particulares: este enfoque combina una herramienta de programación existente con una metodología de desarrollo de software como xp (eXtreme Programming), adri (Approach Deployment Result Improvement), etc.
  • 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.[4] concluyen que se puede determinar que el punto de vista no solo es constructivista, sino construccionista, es decir, se asume que los alumnos aprenden según construyen artefactos, en este caso programas o algoritmos. Adicionalmente, determinan que se ha desarrollado una gran variedad y número de sistemas para el aprendizaje de la programación en niveles universitarios y de forma muy simplificada, entre los cuales se pueden distinguir dos clases [118]: (1) la mayor parte de los sistemas usados para aprender a programar ayudan a comprender la mecánica de la Programación, bien de forma estática o dinámica; (2) otros sistemas facilitan que el alumno aprenda a programar mientras hace alguna tarea que le interesa como jugar.

    Sáez et al. [30] sugieren tres tipos de problemas para implementar algoritmos:

  • Problemas tipo uno: el estudiante solo se enfoca en acciones de codificación y depuración de sus ejercicios planteados y puede incluir la asistencia del profesor para afianzar el proceso de descubrimiento de sus habilidades de programación.
  • Problemas tipo dos: para la implementación de los algoritmos, el estudiante se enfoca en cuatro acciones: analizar el problema, diseñar el algoritmo, codificar y depurar la propuesta de solución con ejercicios que admitan la inserción de estructuras lógicas de mayor complejidad de forma gradual.
  • Problemas tipo tres: el estudiante centra su atención en las cuatro acciones ya mencionadas, pero con problemáticas que incorporen complejidad al más alto grado, con el fin de retar cada vez más al estudiante a reformar su estructura mental frente a la solución de problemas.
  • 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:

  • Un primer enfoque se centra en la metodología del proceso didáctico.
  • Un segundo enfoque se centra en las formas de enseñanza y plantea didácticas propias.
  • Un tercer enfoque se centra en los contenidos para plantear alternativas y así fortalecer las habilidades en los estudiantes.
  • Finalmente, Insuasti [21] presenta dos sugerencias relacionadas con la evaluación en los resultados obtenidos en un primer curso de programación de computadores, las cuales se pueden clasificar en:

  • Sugerencias simples: referidas en el cambio del lenguaje de programación.
  • Sugerencias detalladas: relacionadas con los modelos y paradigmas apropiados en la enseñanza de los lenguajes de programación.
  • 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 [21].

    Sin embargo, al tratar de estudiarlos en cursos continuos y en este orden, Sheard y Hagan [119] establecieron que los estudiantes se enfrentaban a un choque conceptual que les generaba confusión.

    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 [ 119].

    Por otra parte, Herbert [120] concluye que, al reducir elementos en la sintaxis de un código, incluir explicaciones visuales en el manejo de sus líneas y brindar las mejores alternativas de solución, es posible mejorar el aprendizaje de los fundamentos de programación [21].

    Por su parte, Dann, Cooper y Pausch [29], [21] establecen que el desarrollo de pensamiento algorítmico, el manejo de la abstracción y la percepción en detalle de la realidad son las competencias que un estudiante de un primer curso de programación debe afianzar [21].

    Así mismo, Ali [121] recomienda incluir en los ejemplos de clase de los cursos introductorios de programación problemas cotidianos que estén en el campo de dominio de los estudiantes, con el objetivo de obtener mejores niveles de abstracción.

    Silva et al.[26] sugieren dos opciones pedagógicas para mejorar los procesos tanto de enseñanza como de aprendizaje de un primer curso de programación: la inclusión de un curso de preprogramación y el uso de un tipo específico de herramienta de apoyo a la programación [26]. De hecho, la introducción de un curso de preprogramación, denominado también CS0, demostró que los estudiantes que tomaron aquellos cursos en los que se enseñaba la resolución de problemas, el desarrollo de algoritmos, la generación de pseudocódigos y la diagramación, podían usar un pseudocódigo de forma más consistente que otra cohorte [101].

    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 [41].

    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 [122].

    Para iniciar a estudiantes en la programación, se deben estimar dos situaciones [74]:

  • Formación en las universidades: considera la posibilidad de medir los niveles de abstracción en los estudiantes de un primer curso de programación.
  • Mecanismos de selección: permitirían evaluar habilidades de abstracción antes de inscribirse en la universidad.
  • Rodríguez [45] afirma que, en la actualidad, el lenguaje de programación Python es uno de los protagonistas en la enseñanza de la programación [123] y tiene su mayor aceptación en muchos centros de estudio de Estados Unidos.

    4.5 Tendencias de la programación de computadores

    Trejos [9] propone nuevas tendencias de la programación en un futuro cercano, entre las cuales destacan:

  • La programación literaria: pretende excluir al código fuente entre el programador y la máquina, para dejar únicamente soluciones mediadas por lenguajes naturales.
  • La programación inteligente: busca obtener programas de cómputo que se actualicen automáticamente, según las necesidades de los usuarios y sin la intervención de un programador [124].
  • La programación virtual: esta tendencia aspira a que el software no se limite únicamente a sentencias de código, sino que desarrolle soluciones que den respuestas correctas a situaciones específicas. Aunque en la actualidad esta tendencia está en teoría, no se descarta la posibilidad de implementarla en un futuro próximo.
  • La programación para la animación: ese tipo de programación busca duplicar la realidad con el más mínimo detalle en entornos virtuales, lo que le permite al usuario interacciones como aquellas que desarrolla en su vida real.
  • 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:

  • Aprendizaje Basado en Investigación (abi): las nuevas tendencias autodidactas proponen nuevos escenarios para el aprendizaje de la programación, enmarcados en procesos investigativos de alto nivel que los estudiantes de educación superior puedan llegar a desarrollar, con el objeto de profundizar y ampliar los conocimientos iniciales en forma exponencial.
  • Programación infantil: aunque hoy en día muchos países han integrado cursos para el desarrollo del pensamiento computacional en sus currículos de educación primaria y secundaria, sin el propósito de formar desarrolladores de software, sino como un nuevo enfoque para solucionar problemas de la vida real, existe la posibilidad de contemplar cursos completos de programación de computadores a temprana edad en niños en etapa escolar, debido a su gran potencial para aprender fácilmente y desarrollar software.
  • La programación 3D: puede llegar a convertirse en un paradigma formal y, a pesar de que, por el momento, solo es una proyección desde contextos bidimensionales, se espera el desarrollo del hardware adecuado para su potencialización.
  • Programación natural: en un futuro, los programadores ya no se preocuparán por escribir sus propias líneas de código mediante lenguajes de programación formales, pues contarán con contextos enriquecidos por el reconocimiento de audio, video y procesamiento inteligentes.
  • 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.

  • Programación por etapa de vida: llegará un momento en que la gran mayoría de las personas tendrán conocimientos de programación y, según su etapa de vida (niñez, adolescencia, juventud, adultez, ancianidad), se dedicarán a construir aplicaciones en beneficio de sus propias necesidades.
  • 5. DISCUSIÓN

    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.

    6. CONCLUSIONES

    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.

    7. REFERENCIAS