La psicología, como ciencia, ha impregnado profundamente el vocabulario y la visión del mundo tecnológico, tanto de los expertos como de los estudiantes cuando hablan de las experiencias que los motivaron a iniciar la carrera.
Desde el diseño de interfaces hasta la mecánica de los videojuegos, las interacciones entre la mente humana y la tecnología han despertado un interés creciente, especialmente en el contexto del avance de la IA. Este interés se refleja en ejemplos concretos como videojuegos que exploran emociones y dilemas psicológicos.
Títulos como Portal, que combina desafíos espaciales con narrativas que alteran la percepción del espacio-tiempo; Undertale, que aborda la empatía y las consecuencias de las decisiones del jugador; o The Stanley Parable, una metanarrativa que invita al jugador a reflexionar sobre la libertad de elección, evidencian esta confluencia.
Asimismo, áreas como el diseño centrado en el usuario han integrado principios psicológicos para mejorar la experiencia tecnológica. La experiencia de usuario (UX), por ejemplo, aplica conocimientos sobre percepción y toma de decisiones para diseñar interfaces intuitivas y accesibles, mientras que la accesibilidad tecnológica busca incluir a personas con diversas discapacidades.
En paralelo, la tecnología persuasiva, estudiada por expertos como B. J. Fogg [52], utiliza principios psicológicos para moldear el comportamiento humano, lo que puede observarse en aplicaciones que fomentan hábitos saludables o en algoritmos que optimizan la atención del usuario en redes sociales y publicidad digital.
A medida que la IA avanza, también se han perfeccionado las capacidades de chatbots y asistentes virtuales para generar confianza y empatía en los usuarios. Sin embargo, este desarrollo no está exento de desafíos éticos, como los sesgos presentes en los sistemas de IA entrenados con datos humanos.
Además, tecnologías como la realidad virtual (VR) y aumentada (AR) están transformando la manera en que experimentamos el entorno, permitiendo vivencias inmersivas que oscilan entre el entretenimiento y el desarrollo de empatía en simulaciones sociales.
Frente a este panorama, los estudiantes de ingeniería de software se encuentran particularmente familiarizados con conceptos vinculados a la psicología, lo que los distingue de otras ramas de la ingeniería. Esta cercanía disminuye la resistencia a temas interdisciplinarios y refuerza su capacidad para comprender la interacción entre tecnología y comportamiento humano.
Aportes de la psicología cognitiva
La psicología cognitiva, particularmente en el ámbito educativo, estudia los procesos mentales involucrados en la adquisición, procesamiento y aplicación del conocimiento. Uno de sus enfoques fundamentales es comprender cómo las personas desarrollan conceptos abstractos a partir de experiencias concretas, es decir, cómo logran generalizar principios y reglas a partir de ejemplos específicos. En este sentido, varias teorías cognitivas abordan de manera particular el proceso de cómo las personas manejan y organizan la información.
Carga cognitiva y razonamiento analógico
La teoría de la carga cognitiva, desarrollada por Sweller [53], [54], sostiene que el aprendizaje puede verse afectado por la cantidad de información que el cerebro debe procesar en un momento dado. Esta teoría sugiere que el diseño educativo debe tener en cuenta la capacidad limitada de la memoria de trabajo para evitar una sobrecarga que impida la adquisición efectiva del conocimiento. En este contexto, se hace crucial encontrar un equilibrio entre la cantidad de información presentada y la capacidad del estudiante para procesarla sin sentirse abrumado.
Por otro lado, la teoría del mapeo estructural de Gentner [55] se enfoca en cómo las personas usan analogías para comprender conceptos nuevos a través de la transferencia de estructuras de relaciones conocidas a situaciones nuevas. Según Gentner y otros, este proceso permite a los estudiantes generalizar conocimientos y aplicar principios de un dominio a otro, facilitando la adquisición de conceptos abstractos y complejos. Esta teoría resalta la importancia de las relaciones subyacentes entre los elementos de una analogía, lo que puede ser útil en la enseñanza de conceptos que requieren un alto grado de abstracción.
Psicología de la enseñanza de la programación: desafíos cognitivos y paradigmas educativos
La psicología de la programación (PPIG: Psychology of Programming Interest Group) no constituye una disciplina formalizada dentro de los campos académicos tradicionales, como pueden ser la psicología cognitiva o la ciencia de la computación, sino un grupo de interés interdisciplinario que busca explorar y comprender los procesos cognitivos, emocionales y sociales implicados en la práctica de la programación.
Desde 1989, este grupo ha promovido la discusión sobre cómo los programadores interactúan con el código y las herramientas de desarrollo, así como los aspectos pedagógicos y cognitivos de la enseñanza de programación. Por ejemplo, se interesan por dilucidar cuáles son los procesos cognitivos que realizan los programadores, esto es, cómo los programadores comprenden, depuran y optimizan el código a nivel psicológico. En esta línea se ha demostrado que los programadores expertos utilizan patrones reconocibles (schemas) que les permiten procesar información más eficientemente en comparación con principiantes [56].
También investigan cómo las personas adquieren habilidades de programación y qué metodologías pedagógicas son más efectivas. Se ha destacado, por ejemplo, que el uso de pseudocódigo y diagramas conceptuales puede reducir la carga cognitiva durante el aprendizaje inicial [57].
La programación no sólo fue estudiada como tarea individual, sino también con respecto a dinámicas de equipo, especialmente en entornos de desarrollo ágil. Se analiza la motivación, la confianza en las propias habilidades y la percepción de autoeficacia son factores clave en el éxito de los programadores [58].
Otra área de interés ha sido el diseño de entornos de desarrollo integrado (IDEs) y lenguajes de programación puede facilitar o dificultar el trabajo de los programadores. Por ejemplo, los estudios sobre lenguajes visuales y la reducción de errores sintácticos han mostrado beneficios para principiantes [59].
Según los miembros de PPIG, uno de los objetivos centrales es analizar cómo el contexto y las herramientas afectan la experiencia del programador, y cómo estas interacciones pueden optimizarse para mejorar tanto el aprendizaje como la práctica profesional [60].
Sin embargo, debido a su carácter interdisciplinario, sus publicaciones se encuentran dispersas en revistas y conferencias de campos relacionados, como la psicología cognitiva, la educación STEM y la ingeniería de software. Si bien tiene raíces en la psicología cognitiva, su objetivo se centra en los desafíos específicos que enfrentan los programadores y en las maneras en que las personas adquieren, comprenden y aplican habilidades relacionadas con la computación.
Los estudios iniciales sobre el pensamiento relacionado con la programación tienen sus bases en investigaciones de psicología cognitiva sobre la resolución de problemas y el aprendizaje.
Autores como Newell y Simon [61] propusieron modelos teóricos de resolución de problemas que se aplican a la programación, enfatizando el papel del procesamiento de información y la representación mental.
La programación, al igual que otras actividades cognitivamente intensivas, implica procesos como el razonamiento lógico, la memoria de trabajo y la planificación jerárquica.
Desde esta perspectiva, la programación puede considerarse una actividad que combina tanto habilidades de pensamiento abstracto como habilidades prácticas, ya que requiere la creación de modelos mentales precisos para resolver problemas a través de algoritmos y estructuras de datos [62]. A su vez, la carga cognitiva de los programadores se ve afectada por factores como la complejidad del código, la claridad de la documentación y las herramientas disponibles [63].
A nivel internacional, la programación de computadoras hasta hace poco tiempo ha sido ampliamente reconocida como una habilidad compleja y de difícil adquisición [64], [65].
Los factores que dificultan su aprendizaje han sido investigados desde finales de la década de 1970 poniendo el énfasis en estudiar los procesos cognitivos involucrados en la tarea de programar, combinando conocimientos de psicología, informática y educación [66], [67], [68], [69], [70].
Desde los inicios de este movimiento, ya se reconocía que los métodos de programación no solo debían evaluarse por su capacidad computacional, sino también por su impacto en la cognición de los programadores.
Los primeros estudios experimentales sobre cognición en programación resaltaron diferencias fundamentales entre expertos y principiantes. Según Chi [71], [72], los expertos organizan y categorizan la información de forma más abstracta, mientras que los principiantes tienden a centrarse en aspectos concretos y específicos.
Este hallazgo condujo a un cambio de paradigma en la educación: se aceptó que el aprendizaje no dependía únicamente de la edad, sino también del nivel de experiencia en un campo particular.
Así, se creyó que los principiantes tienen dificultades para captar aspectos generales de una situación y suelen emplear enfoques inductivos o “de abajo hacia arriba” para resolver problemas, en contraste con los expertos que tienden a utilizar métodos deductivos o “de arriba hacia abajo” [72]. Sin embargo, cuando estos estudios comenzaron a influir en la comprensión del aprendizaje de la programación, el paradigma estructurado ya era dominante.
Este enfoque, también conocido como top-down o de refinamientos sucesivos, se originó en los trabajos de Dijkstra [73], [74], [75] y Wirth [30], [76]. La programación estructurada se basaba en la descomposición de un programa en módulos abstractos (cajas negras), que luego se refinaban en partes más específicas hasta llegar a fragmentos elementales de código interpretable por un compilador.
Aunque esta metodología representaba un avance respecto a los métodos monolíticos previos, su enfoque deductivo presentaba desafíos para los principiantes. Estudios como los de Hoc [67] demostraron que los novatos no poseían la experiencia necesaria para identificar bloques abstractos al inicio del proceso, prefiriendo trabajar con información concreta o de nivel bajo [77], [78], [79], [80].
Además, dos falsas creencias perjudicaron la enseñanza de la programación estructurada a principiantes. La primera era que este paradigma necesariamente implicaba un enfoque top-down. La segunda asumía que, para obtener programas estructurados, los medios de enseñanza también debían ser estructurados [81].
Según Wirth [82], la creación real de un programa rara vez sigue un proceso tan bien organizado y descendente como postulaba el enfoque clásico. Por el contrario, los principiantes requerían comprender primero los procesos básicos paso a paso antes de abordar estructuras más abstractas [83].
El paradigma de orientación a objetos y sus desafíos
Con el tiempo, independientemente de los aspectos psicológicos de su aprendizaje, el paradigma de orientación a objetos (POO) comenzó a ganar terreno por cuestiones de eficiencia, debido a su énfasis en modularidad, encapsulación y reutilización de código [7], [84].
Desde una mirada inicial e ingenua, este enfoque podría aparentar ser más viable para principiantes porque sus procesos se organizan alrededor de clases y métodos específicos. Sin embargo, enseñar POO a novatos no es posible si estos no tienen conocimientos previos y sólidos sobre programación en general. Conceptos como la herencia, la encapsulación y la abstracción se basan en nociones de programación previas, no son triviales y requieren que el programador tenga ya una visión de la evolución y la complejidad de los sistemas [85], [86], [87].
Diversas estrategias, como la gamificación [88] y el uso de lenguajes multiparadigma como Python, han sido propuestas para abordar estas dificultades pero la abundancia de paradigmas y herramientas puede resultar abrumadora para los estudiantes, complicando aún más el proceso de enseñanza.
El aprendizaje de la programación plantea desafíos significativos en términos de carga cognitiva [53], [54]. Los principiantes deben manipular simultáneamente múltiples elementos recién adquiridos: entrada y salida de datos, estructuras de datos, estructuras de control y la lógica general del programa. Este esfuerzo cognitivo puede ser abrumador, especialmente si los métodos de enseñanza no están alineados con las capacidades iniciales del aprendiz.
La educación en informática ha mantenido el objetivo de enseñar estructuras de datos básicas y procesos elementales de algoritmia sin adherirse a un paradigma específico o a un lenguaje en particular. Para lograrlo, las currículas universitarias incluyen asignaturas de algoritmos y estructuras de datos, con una orientación estructurada que puede aplicarse posteriormente en diversos paradigmas.
Investigaciones recientes sugieren que los principiantes podrían beneficiarse de un enfoque alternativo que combine el trabajo con pequeños bloques funcionales y un ascenso gradual hacia conceptos más abstractos [89]. Este método no abandona la estructuración de datos y procesos, pero evita requerir desde el inicio un diseño descendente completo, facilitando el aprendizaje progresivo.
En ese sentido, reconocer que el proceso de programación es complejo y desafiante para los principiantes es el primer paso para diseñar estrategias pedagógicas que reduzcan la carga cognitiva y faciliten el aprendizaje significativo de esta habilidad esencial.
Aprendizaje por descubrimiento vs aprendizaje por analogía en programación
En la enseñanza tradicional, se dividen las clases en espacios de teoría y espacios de práctica, no siempre articulados. Algunas veces, la teoría tiene sentido en sí misma y la práctica también. Esta última suele consistir en transformar los problemas en ejercicios, y resolver decenas de ejercicios.
Previo al abordaje, de las primeras resoluciones, los profesores suelen presentar un caso paradigmático que ilustra el enfoque deseado, para luego invitar a los estudiantes a resolver, de forma autónoma, otros casos análogos. Si bien esta metodología suele ser efectiva para ejercicios simples, no siempre es útil cuando los estudiantes se enfrentan a problemas cuya solución no puede inferirse a partir de explicaciones previas y, por lo tanto, no logran descubrir por sí mismos.
La expectativa de que los estudiantes “descubran” por sí mismos todas las soluciones puede ser, en algunos casos, excesiva.
El aprendizaje por descubrimiento ha sido valorado desde perspectivas constructivistas por permitir conectar los conocimientos previos del estudiante con los nuevos conceptos que debe aprender. Se supone que el proceso de “descubrir” por sí mismo ayuda a consolidar un entendimiento más sólido. Sin embargo, existen limitaciones en este modelo, especialmente cuando los saberes previos del estudiante son insuficientes para realizar el descubrimiento de manera efectiva.
La alternativa es observar un mayor número de casos resueltos. El análisis de ejemplos resueltos y el establecimiento de analogías también han sido investigados como estrategias pedagógicas efectivas en programación. En este contexto, Sweller señala que el aprendizaje basado exclusivamente en el descubrimiento puede generar una sobrecarga cognitiva innecesaria [90]. Al intentar resolver un problema, los estudiantes deben dividir su atención entre comprender el problema en sí y buscar una solución, lo que puede dificultar la adquisición de los conceptos clave.
Además, la comprensión que se genera a través del descubrimiento está fuertemente influenciada por la capacidad del estudiante para relacionar la nueva información con sus conocimientos previos. Si estos conocimientos son limitados o poco sólidos, el proceso de descubrimiento puede no ser tan efectivo sin una orientación adecuada
El aprendizaje por analogía, en contraste, se basa en presentar dos casos del mismo tipo y realizar las comparaciones necesarias para encontrar la estructura conceptual en común [91], [92], [93].
La teoría del mapeo estructural de Gentner [55] destaca que las analogías son herramientas poderosas porque permiten mapear relaciones estructurales entre casos, no solo atributos superficiales. Por ejemplo, al comparar pseudocódigo con Python, un estudiante puede identificar similitudes en la lógica de control de flujo, pero también distinguir diferencias como la sintaxis. Este tipo de comparación entre situaciones problemáticas y sus soluciones facilita la retención de los aspectos comunes con mayor claridad.
Según Sweller [49], observar y analizar ejemplos resueltos antes de intentar resolver problemas propios resulta más eficiente que el enfoque tradicional de descubrir soluciones desde cero. Esto reduce la carga cognitiva al proporcionar modelos claros de referencia, lo que permite a los estudiantes concentrarse en los aspectos más relevantes del problema sin distracciones innecesarias.
La teoría de la carga cognitiva, propuesta por Sweller [53], [54], sostiene que la memoria de trabajo tiene una capacidad limitada, por lo que el aprendizaje será más efectivo si se minimiza la carga innecesaria. Aplicar esta teoría a la enseñanza de la programación implica varias estrategias clave:
- Observar ejemplos resueltos: Proporcionar ejercicios ya solucionados ayuda a los estudiantes a entender las estrategias utilizadas para resolver problemas similares.
- Fomentar comparaciones explícitas: Pedir a los estudiantes que comparen diferentes soluciones les permite identificar patrones comunes y desarrollar habilidades transferibles.
- Reducir la exploración sin guía inicial: En lugar de esperar que los estudiantes resuelvan problemas por sí mismos desde el inicio, guiarlos hacia los aspectos clave acelera el aprendizaje.
Renkl [94, p. 201], [95] encontró que los estudiantes que analizan ejemplos previamente resueltos desarrollan habilidades de resolución de problemas con mayor rapidez que aquellos que intentan descubrir las soluciones de manera independiente.
Para maximizar los beneficios del aprendizaje por analogía, es importante seguir algunas estrategias adicionales:
- Proporcionar ejemplos resueltos antes de los ejercicios prácticos:
- Mostrar cómo resolver un problema paso a paso y resaltar las decisiones tomadas en el proceso.
- Fomentar la comparación entre ejemplos:
- Diseñar actividades que obliguen a los estudiantes a identificar similitudes y diferencias entre distintas soluciones.
- Incorporar analogías del mundo real:
- Utilizar ejemplos prácticos y cercanos a la vida cotidiana para explicar conceptos abstractos (por ejemplo, comparar una base de datos con una biblioteca organizada por categorías).
- Relacionar pseudocódigo con lenguajes formales:
- Guiar a los estudiantes en la transición entre la lógica estructurada del pseudocódigo y las implementaciones prácticas en lenguajes como Python.
Todas estas actividades conducen a elevar el nivel de abstracción de los conceptos aprendidos en programación.






