Opciones para introducir a estudiantes a la programación

Igor Támara
Fundación Educativa y Cultural Támara Patiño
igor@tamarapatino.org

versión 0.1

30 de Octubre de 2005

Este documento presenta algunas opciones para iniciar a los estudiantes en los algoritmos, se busca principalmente que los iniciados se aproximen a problemas, busquen exactitud para presentar sus ideas y tengan clara la diferencia entre estados iniciales, procesos y estados finales. La versión más actualizada de este documento la puede encontrar en http://igor.tamarapatino.org/escritos/programacion/aprendizaje.html


El autor es Igor Támara quien es dueño de los derechos de reproducción

Todas las herramientas aquí presentadas pueden instalarse en Sistemas tipo Unix, y son particularmente sencillas de usar en Debian, puesto que los paquetes están generalmente listos para instalarse. Ninguna de ellas exige el pago de su uso, y pueden instalarse en tantos computadores como se desee.

Se mostrará herramientas que buscan despertar la imaginación para ofrecer soluciones alternativas a problemas, en lugar del uso básico de colores o sonidos, que se podría alcanzar desde edades tempranas.

En este documento se ve al computador como una posibilidad para privilegiar las operaciones lógicas y estructurar el pensamiento para dar soluciones y enfocar los esfuerzos a dar respuestas claras a las preguntas planteadas.

Este documento responde a tres problemas que se presentan usualmente :

En muchos sitios se ha venido enseñando a las herramientas de programación como herramientas de presentación de información; es usual ver que se coloca un botón que muestra información cuando se le hace click, o se coloca un sonido haciendo creer a otros que son programas multimedia; para tales actividades se encuentran los preparadores de presentaciones como Impress de OpenOffice.org, también se puede pensar en el aprendizaje de HTML con la gran ventaja que además se está socializando la información a través de Internet. Básicamente esto no debería considerarse programación.

Los docentes universitarios habrán notado que es muy usual encontrar que las preguntas que se le plantea a los estudiantes son transformadas por estos en preguntas totalmente distintas, a las cuáles buscan dar respuestas intermedias, desembocando en soluciones caóticas y que al final nada tienen que ver con lo preguntado.

Ciertas herramientas tienen una curva de aprendizaje realmente elevada y el programador termina dependiendo más de la herramienta y convirtiéndose en un técnico de la misma, sin capacidad para adaptarse a una nueva, su capacidad de expresión se ve limitada y sus ideas solamente funcionan en una herramienta específica. En ciertas ocasiones se tarda más tiempo aprendiendo a usar el entorno de desarrollo que a tratar de resolver problemas interesantes y que requieren imaginación para su solución.

Por lo tanto con la programación y la algoritmia se pretende dotar a los estudiantes de concentración para resolver problemas y dar soluciones alternativas y reales al enunciado inicial. El computador es un aliado en esta tarea porque hará exactamente lo que el programador indique, paso a paso, y por lo tanto se hará reflexionar y buscar a la persona el sitio en el cuál se está presentando el error o la razón por la cual la respuesta obtenida no es la esperada.

Iniciación con respuestas rápidas

Logo ha sido una de las herramientas preferidas para las construcciones con una respuesta inmediata, consiste de una tortuga que puede llevar a cabo movimientos hacia la izquierda, derecha, puede avanzar hacia atrás y adelante y dejar un rastro tras de sí, cuenta con estructuras de selección e iterativas.

En particular UCBLogo tiene construcciones sintácticas avanzadas y soporte para funciones matemáticas, y permite almacenar y exportar los dibujos con facilidad.

tn/tnlogosample.png

Python por su parte cuenta con un módulo llamado turtle, el cual tiene características parecidas a logo y la sintaxis continúa siendo la de python, a continuación un ejemplo :

 from turtle import *
 def poligono(l,tam) :
   forward(tam)
   right(360/l)
 poligono(5,60)

Que construye una función que crea polígonos, posteriormen se usa para armar un pentágono de lado 60.

Si en Python se desea hacer una prueba y se tiene instaladas las extensiones tk, es muy probable que el módulo turtle esté instalado, basta con invocar la función demo() para ver algunas capacidades.

Estos dos lenguajes anteriores son de scripting, y por lo tanto el código fuente puede compartirse y publicarse con facilidad y replicar las experiencias.

Estructurando las soluciones

Los diagramas de flujo son representaciones que pueden ayudar en la creación de soluciones y algoritmos, y una herramienta que permita seguirlos da a los aprendices una oportunidad para revisar las construcciones hechas en papel. Muchas personas se inician con esta aproximación en la programación

Para dar seguimiento a las soluciones a partir de un diagrama de flujo está DFD(Construido por estudiantes de la Universidad del Magdalena hace unos año), el cuál tiene condicionales, ciclos, expresiones básicas de matemáticas, entrada por teclado y salida por pantalla. DFD puede ser usado en Linux empleando wine.

tn/tndfd.png

Por otra parte Richard E. Pattis ideó un lenguaje de programación llamado Karel, el cuál tiene un robot que recibe ordenes básicas y cuenta con la posibilidad de construir otras órdenes a partir de las funciones básicas, una implementación de esta idea está en GvR, el cual fue creado por estudiantes de un colegio en XXXXXX y fue hecho con Python.

tn/tngvr.png

El programador puede crear mundos y además debe crear programas para hacer que el robot recorra los mundos, cumpliendo labores específicas. Una vez que se creen soluciones para los mundos, estos pueden extenderse o llevar la imaginación más lejos para proponer otras pruebas interesantes.

La gran ventaja de GvR es que trae lecciones propuestas, las cuáles facilitan el trabajo del profesor y permite a los estudiantes avanzar cada uno a su propio ritmo.

En estas dos aproximaciones se puede llevar a cabo ejecuciones paso por paso y ejecuciones completas de los algoritmos creados mostrándose paso a paso las instrucciones en las cuáles está en ejecución el programa en cada momento.

Interactividad

Las herramientas vistas hasta ahora no se enfocan a permitirle al usuario interactuar activamente, o en general no presentan entornos gráficos con los cuáles se pueda llevar a cabo producciones llenas de coloridos o gradientes de color o sonido con facilidad.

Usar varios dispositivos de entrada se convierte en algo complejo con cualquier lenguaje de programación, porque en general hay que tener en cuenta las funciones de respuesta y actuar frente a cada evento en consecuencia.

Una de las posibilidades que se puede explorar es Squeak, que fue inicialmente propuesto por Macintosh(Laboratorios de Apple), actualmente en Extremadura(España) se está promoviendo este entorno de programación que está apoyado en Smalltalk como lenguaje de programación.

tn/tnsqueak.png

Este es el punto de quiebre en el cual se pensaría en cuándo elegir un entorno de desarrollo y cómo enfocar el aprendizaje o cómo hacer inmersión en los lenguajes de programación; posiblemente vale la pena intentar hacer pruebas con esta opción, aunque la curva de aprendizaje para el docente puede ser alta.

Por otra parte las aplicaciones construidas abiertamente generalmente son pensadas para que puedan ser extendidas, y con Python se puede hacer extensiones a Gimp, a Blender e Inkscape aplicaciones que ofrecen funciones listas para ser empleadas con un lenguaje de scripting, de los cuáles el más popular por su sencillez en la sintaxis en este momento es Python.

Retos y Creaciones reales

En este recorrido y muestra de herramientas se puede apreciar que hay gran cantidad de opciones para iniciar a los estudiantes en la programación de computadores, y después de un buen tiempo de haber sido docente en universidad y colegio y viendo la evolución de la programación de computadores es claro que las herramientas simplemente facilitan la inmersión en el mundo de la algoritmia, y no es la fuente fundamental para lograr una motivación inicial.

Por ejemplo, en los años 80 había programadores en computadores Commodore 64, Tandy Color Computer II, los cuales eran computadores pequeños con poca capacidad de procesamiento que se conectaban a un televisor y permitían a los iniciantes construir algoritmos para producir juegos pequeños en Basic. El resultado de tal generación de programadores son los juegos tridimensionales y de Realidad Virtual de hoy en día, sin desconocer el trabajo que se ha llevado a cabo en Universidades y el avance de las capacidades de procesamiento de los equipos de ahora, el avance en Matemáticas y en general en Ciencias de la computación, pero el principal eje de desarrollo es la motivación personal, al saber que se podrían hacer construcciones interesantes.

Qué se requiere entonces? La falta de herramientas o el costo de las mismas no es el limitante, ni una excusa válida. Se necesita generar contenidos y hacer trabajo colaborativo para que las estrategias docentes exitosas sean compartidas y se pueda replicar aquellas experiencias en las cuáles los estudiantes han publicado los trabajos que han hecho, por pequeños que sean, ya que sus contribuciones serán aliciente y reto para los nuevos programadores.

Vale la pena repensar al computador como un espacio de producción y de trampolín para la imaginación, y no como una simple consola de videojuegos o como un dispositivo que reemplaza al teléfono o que es un electrodoméstico que reemplaza al equipo de sonido o un dispositivo para ver películas.

Dónde hay más personas interesadas en estas aproximaciones? En SLEC(Software de Libre Redistribución y Educación en Colombia) hay un espacio para compartir experiencias, y hay colegios en los cuáles los estudiantes han producido contenidos, juegos e incluso servicios web, hay oportunidades, retos y personas para compartir.

Para encontrar más información