domingo, 25 de octubre de 2015

3. ¡Motívame otra vez!

Las herramientas son hijas de la necesidad.

 

  Una de las características más importantes de el enfoque didáctico Gobstones surgió de manera natural durante los primeros dictados que hicimos de la misma, y no está vinculada estrictamente con la temática técnica de la programación. Nos referimos a la manera de presentar cada concepto y herramienta nueva: en lugar de simplemente explicar el concepto y luego ver cómo se puede aplicar, la idea es que antes de presentar un concepto o herramienta específica se propone a los estudiantes un ejercicio que resulte o bien complejo o bien imposible sin dicha herramienta, y se les permite intentar solucionarlo con las herramientas que tienen hasta ese momento. Luego de que los estudiantes han conseguido una solución, o se han frustrado por la imposibilidad de encontrarla, recién entonces se propone la nueva herramienta. Aprendimos luego que esta forma de trabajo tiene un nombre en pedagogía: aprendizaje por indagación.

  Al hacerlo de esta manera, los estudiantes experimentan a través de su propia experiencia la utilidad de la herramienta, y el concepto involucrado se fija con muchísima más facilidad que si sólo se explicase de manera teórica. En cursos con estudiantes de secundaria (14 años), sin formación previa en programación, luego de haber utilizado esta técnica un par de veces, los estudiantes pedían una herramienta nueva (y en algunos casos hasta dedujeron la herramienta necesaria), mostrando de esa manera que comprendían perfectamente la motivación provista por los ejercicios propuestos.

  Por ejemplo, antes de presentar el concepto de repetición simple (repeat), se les proponen problemas que requieren utilizar secuencias de cientos o miles de comandos idénticos (como ser, realizar un programa que coloque 1000 bolitas rojas en la celda actual), lo cual, con las herramientas manejadas hasta ese momento (comandos primitivos, secuencias, procedimientos simples) es engorroso, pues requiere 1000 copias en secuencia del comando Poner (los más adelantados en ocasiones lo solucionan con 100 procedimientos que colocan 10 bolitas, o 10 procedimientos que colocan 100 bolitas, mostrando así que entendieron perfectamente el uso de procedimientos -- volveremos sobre este tema y su utilidad para enseñar otros conceptos en futuros posts; otros descubren que pueden hacerlo con la herramienta 'copiar&pegar' del editor de texto, mostrando que sólo falta que formalicen ese concepto en una herramienta específica -- el repeat).
  Esto mismo se hace con todos los conceptos: procedimientos, alternativa condicional, repetición condicional, parámetros, etc. Por ejemplo, en el caso de procedimientos, cuando solo poseen comandos primitivos y secuencia, se les propone como ejercicio que dibujen un cuadrado, luego dos cuadrados y luego cuatro cuadrados. El programa resultante es una enorme secuencia incomprensible de comandos primitivos, y ahí se presenta la herramienta de definición de procedimientos, como una forma de definir nuevos comandos -- en este caso DibujarCuadrado(). Luego se les pide que vuelvan a realizar la solución, pero esta vez utilizando la nueva herramienta y se analiza la nueva solución -- que ahora solo tiene 4 comandos básicos.

  Sorprendentemente, esta forma de enseñar resulta mucho más difícil para personas que ya traen conocimientos previos de programación, pues al conocer la herramienta que se pretende motivar u otras que también sirven para solucionar el problema, tienen dificultades para imaginar soluciones simples, que no utilicen más que los conceptos básicos presentados hasta ese momento.
  Entendemos esta dificultad como una falencia de la forma tradicional de aprender a programar, que da por sentadas todas las herramientas de programación en lugar de motivarlas, y que privilegia algunas soluciones sobre otras, sin tener en cuenta el contexto en el que se inscribe la solución propuesta. Un ejemplo de esto se vé con la idea de variable como espacio de memoria: al programar en un contexto funcional, donde no existe memoria (y consecuentemente las variables no describen espacios de memoria), los programadores tradicionales tienen muchísimas dificultades para imaginar soluciones adecuadas, incluso ante programas sencillos. Estamos convencidos que el ejercicio de intentar encontrar soluciones con un conjunto limitado de herramientas es extremadamente adecuado para la formación de habilidades genéricas fundamentales para programar en cualquier paradigma.

  Como dijimos, el aprendizaje por indagación no está vinculado técnicamente a la temática de la programación. Sin embargo hemos comprobado que es tan útil e importante, que creemos que es otro de los pilares sobre los que se construye el enfoque didáctico Gobstones.