Saltar al contenido

La enseñanza en programación: ¿Bloques o Texto?

Índice

En el mundo cada vez más digitalizado en el que vivimos, la programación se ha convertido en una habilidad fundamental. Sin embargo, la forma en que se enseña y se aprende esta disciplina ha evolucionado significativamente en los últimos años. Una de las discusiones más interesantes en este campo es la elección entre la programación basada en bloques y la programación basada en texto. Cada enfoque tiene sus propias ventajas y desafíos, y la elección entre uno u otro depende de varios factores.

Programación basada en bloques: Un puente hacia el código

La programación basada en bloques se ha vuelto increíblemente popular en los últimos años, especialmente en entornos educativos. Herramientas como Scratch, Blockly, y MIT App Inventor han revolucionado la forma en que los principiantes se acercan a la programación.

Una de las principales ventajas de este enfoque es su accesibilidad. Weintrop y Wilensky (2017) encontraron que “los estudiantes que usaron un entorno de programación basado en bloques mostraron mayores ganancias de aprendizaje y un mayor nivel de interés en futuros cursos de computación” [1]. Esto sugiere que la programación por bloques puede ser una excelente puerta de entrada al mundo de la programación en general.

Recientemente, tuve la oportunidad de usar nuevamente la programación basada en bloques. Mi novia, directora de una escuela pastoral católica, me pidió crear una aplicación para que las personas mayores pudieran ver sus calificaciones de los cursos. Después de considerar varias opciones, decidí utilizar MIT App Inventor 2, una plataforma de programación basada en bloques.

Portada de la app en android

Portada de la app en android

Error en la app en android

Error en la app en android

Consultando datos en la app en android

Consultando datos en la app en android

Compartir notas en la app en android

Compartir notas en la app en android

Parte de los bloques en app inventor para la app en android

arte de los bloques en app inventor para la app en android

La interfaz intuitiva de arrastrar y soltar de App Inventor me permitió crear rápidamente una aplicación funcional, sin tener que preocuparme por la sintaxis o los errores tipográficos que a menudo plagan a los programadores novatos en entornos basados en texto.

Programación basada en texto: El estándar de la industria

Por otro lado, la programación basada en texto sigue siendo el estándar en la industria del desarrollo de software. Lenguajes como Python, Java, y JavaScript dominan el panorama profesional, y por buenas razones. Estos lenguajes ofrecen una flexibilidad y un control que simplemente no es posible con la programación basada en bloques.

Un estudio de Price y Barnes (2015) encontró que “los estudiantes en condiciones de programación basada en texto ven su experiencia como más similar a lo que hacen los programadores profesionales” [2]. Esta percepción puede ser crucial para los estudiantes que aspiran a carreras en el desarrollo de software.

El puente entre bloques y texto

Uno de los desafíos más significativos en la enseñanza de la programación es la transición de los entornos basados en bloques a los basados en texto. Como educadores, debemos ser conscientes de este desafío y buscar formas de facilitar esta transición.

Uno de mis compañeros de trabajo imparte clases en una universidad, ha estado experimentando con este enfoque. En los últimos años, ha ido incorporando gradualmente herramientas como Blockly, Makecode y Code.org en sus clases. Su experiencia sugiere que comenzar con bloques y luego hacer la transición a texto puede ser una estrategia efectiva para muchos estudiantes incluso cuando las carreras universitarias no sean sobre informática.

El papel de los juegos en la enseñanza de la programación

Los juegos están desempeñando un papel cada vez más importante en la enseñanza de la programación, ofreciendo un enfoque divertido y atractivo para aprender conceptos complejos. Varios juegos notables han surgido en los últimos años, utilizando elementos de programación basada en bloques para enseñar conceptos de programación de una manera accesible y entretenida.

Human Resource Machine

Human Resource Machine, desarrollado por Tomorrow Corporation, es un juego de rompecabezas que utiliza la programación visual para enseñar conceptos de assembly. En el juego, los jugadores controlan a un trabajador de oficina que debe realizar tareas utilizando comandos básicos, lo que esencialmente simula la programación a bajo nivel [3].

El juego utiliza una metáfora visual de una oficina corporativa para representar conceptos de lenguaje ensamblador. Los jugadores deben mover objetos entre una bandeja de entrada, una de salida y áreas de almacenamiento, lo que sirve como una introducción intuitiva a conceptos como registros de procesador y memoria principal.

7 Billion Humans

Como secuela de Human Resource Machine, 7 Billion Humans amplía el concepto introduciendo la programación paralela. Los jugadores ahora controlan múltiples “trabajadores” simultáneamente, lo que introduce conceptos más avanzados como la concurrencia y la sincronización [4].

El juego utiliza un lenguaje de programación visual similar al de su predecesor, pero añade la complejidad de manejar múltiples agentes. Esto proporciona una excelente introducción a conceptos de programación más avanzados de una manera visualmente intuitiva.

While True: LEARN()

While True: LEARN() es un juego de simulación que pone a los jugadores en el papel de un especialista en aprendizaje automático y ciencia de datos. Aunque no se centra exclusivamente en la programación basada en bloques, el juego utiliza un sistema visual para representar algoritmos y flujos de datos, lo que lo hace accesible para los principiantes mientras introduce conceptos complejos de ciencia de datos [5].

Pyrates: Un puente entre bloques y texto

Pyrates es un juego serio diseñado específicamente para apoyar la transición de la programación basada en bloques a la programación basada en texto, centrándose en el aprendizaje del lenguaje Python. Este juego ofrece una perspectiva única sobre cómo podría ser el futuro de la enseñanza de la programación [6].

Según un estudio realizado por Branthôme (2022), Pyrates incorpora características de la programación basada en bloques que han demostrado ser beneficiosas para los principiantes. Algunas de estas características incluyen:

  1. Consulta frecuente del memo de programación: Pyrates proporciona una referencia fácilmente accesible para los comandos y estructuras de Python, similar a la paleta de bloques en los entornos de programación visual.
  2. Retroalimentación útil del analizador de sintaxis: El juego ofrece mensajes de error claros y útiles, una característica que los entornos de bloques suelen manejar bien al prevenir errores de sintaxis.
  3. Transición gradual: Pyrates está diseñado para facilitar la transición de la programación basada en bloques a la basada en texto, ofreciendo un paso intermedio entre estos dos enfoques.

Sin embargo, el estudio también reveló algunas limitaciones:

  1. Control de ejecución: Se encontró que el juego no fomentaba suficientemente la reflexión sobre el código, un aspecto importante en la programación basada en texto.
  2. Necesidad de más pasos de transición: Aunque Pyrates facilita la transición, el estudio sugiere que aún falta un paso más hacia la práctica clásica de programación.

Estas observaciones subrayan la complejidad de diseñar herramientas que efectivamente unan la brecha entre la programación basada en bloques y la basada en texto. El autor del estudio sugiere modificar el control de ejecución para promover una mayor reflexión y menos acción inmediata, así como explorar las estrategias de codificación de los estudiantes mediante algoritmos de minería de datos para mejorar aún más la herramienta [6].

Godot: Programación visual en motores de juegos

Más allá de los juegos diseñados específicamente para enseñar programación, es importante mencionar cómo los motores de juegos modernos están incorporando la programación basada en bloques. Godot, un motor de juegos de código abierto que ha ganado una gran popularidad, ha adoptado un sistema de programación visual llamado VisualScript [6].

VisualScript permite a los desarrolladores crear lógica de juego utilizando nodos y conexiones en lugar de código texto tradicional. Este enfoque visual tiene varias ventajas:

  1. Accesibilidad: Hace que el desarrollo de juegos sea más accesible para aquellos sin experiencia previa en programación.
  2. Visualización del flujo: Permite a los desarrolladores ver claramente el flujo de ejecución del programa.
  3. Integración con GDScript: Se integra perfectamente con el lenguaje de scripting basado en texto de Godot.
  4. Curva de aprendizaje suave: Ofrece una forma más intuitiva de empezar a desarrollar juegos.

El horizonte emergente: LLM e IA en programación

Es importante mencionar la creciente influencia de los Modelos de Lenguaje de Gran Escala (LLM) y la Inteligencia Artificial (IA) en la programación. Herramientas como GitHub Copilot y ChatGPT están transformando la forma en que interactuamos con el código, lo que podría tener implicaciones significativas para la enseñanza de la programación, tanto en entornos basados en bloques como en texto.

Sin embargo, dado que el impacto completo de estas tecnologías es un tema complejo y en constante evolución, un análisis detallado está fuera del alcance de este artículo. Este es un área que merece un estudio más profundo y sin duda será crucial en el futuro de la educación en programación.

Conclusión: No es una cuestión de “o”, sino de “y”

Después de considerar todos estos factores, creo que la pregunta no debería ser “¿bloques o texto?”, sino “¿cómo podemos usar ambos de manera efectiva?”.

La programación basada en bloques es excelente para introducir conceptos de programación, fomentar la creatividad y mantener a los estudiantes motivados. Por otro lado, la programación basada en texto es esencial para aquellos que quieren llevar sus habilidades al siguiente nivel y prepararse para carreras en el desarrollo de software.

Como educadores y profesionales de la tecnología, nuestro objetivo debería ser crear un camino de aprendizaje que aproveche las fortalezas de ambos enfoques. Podríamos comenzar con bloques para introducir conceptos fundamentales, usar herramientas híbridas para facilitar la transición, y finalmente pasar a entornos basados en texto para preparar a los estudiantes para el mundo profesional.

En última instancia, la elección entre bloques y texto dependerá de factores como la edad del estudiante, sus objetivos de aprendizaje y el contexto en el que se está enseñando. No hay una solución única para todos, pero con un enfoque equilibrado y bien pensado, podemos ayudar a más personas a descubrir la alegría y el poder de la programación.

¿Qué opinas? ¿Has tenido experiencia con ambos tipos de programación? ¿Cómo crees que deberíamos abordar la enseñanza de la programación en el futuro?.


Referencias:

[1] Weintrop, D., & Wilensky, U. (2017). Comparing block-based and text-based programming in high school computer science classrooms. ACM Transactions on Computing Education (TOCE), 18(1), 1-25.

[2] Price, T. W., & Barnes, T. (2015). Comparing textual and block interfaces in a novice programming environment. In Proceedings of the eleventh annual International Conference on International Computing Education Research (pp. 91-99).

[3] Tomorrow Corporation. (2015). Human Resource Machine. http://tomorrowcorporation.com/humanresourcemachine.

[4] Tomorrow Corporation. (2018). 7 Billion Humans. http://tomorrowcorporation.com/7billionhumans.

[5] Luden.io. (2019). While True: LEARN(). http://luden.io/wtl/.

[6] Branthôme, M. (2022). Pyrates: A Serious Game Designed to Support the Transition from Block-Based to Text-Based Programming. In Educating for a New Future: Making Sense of Technology-Enhanced Learning Adoption (EC-TEL 2022) (pp. 31-44). Springer International Publishing.

[7] Godot Engine. (2020). VisualScript. Godot Documentation. https://docs.godotengine.org/en/stable/getting_started/scripting/visual_script/index.html