domingo, 11 de octubre de 2015

1. Por qué Gobstones es importante (o "Why Gobstones matters")

El enfoque didáctico Gobstones.


  Comienzo este blog para ir volcando las razones tras las decisiones que nos llevaron al diseño de Gobstones con la idea de, por un lado, explicitarlas, por otro, documentarlas, y finalmente, para fortalecerlas a través de la discusión. Hay muchos aspectos a tratar especialmente respecto de qué características (o su ausencia) son fundamentales a la propuesta de este enfoque didáctico, sin las cuales no sería Gobstones. También vale la pena discutir sobre el objetivo original de esta propuesta, y cómo se amplió con el tiempo, y qué características deben cambiar para ello. Finalmente, hay cuestiones relacionadas con las herramientas de soporte, y cómo éstas contribuyen a realzar la secuencia Gobstones.

  Lo primero a considerar es el objetivo básico original de Gobstones, y su contexto, para situar las decisiones y apreciar el valor de las características elegidas para lograr el objetivo.

  El *objetivo primario* del enfoque didáctico Gobstones es servir para que una persona con cero conocimientos previos de programación pueda *aprender los conceptos fundamentales* vinculados con esta disciplina, de manera tal de ser capaz de solucionar problemas sencillos mediante el uso de programas. Para este aprendizaje no necesita conocimientos previos de matemáticas ni de lógica, aunque es útil si los tiene.
  La *idea fundamental* detrás del aprendizaje propuesto es *formar la capacidad de pensar en términos de abstracciones*, siendo capaces de explicitar las mismas y expresarlas en términos de herramientas básicas de lenguajes de programación. Y como objetivo adicional, los conceptos aprendidos deben ser lo suficientemente generales y transversales para permitir posteriormente el aprendizaje de cualquier forma de programación (o sea, de cualquier lenguaje en cualquier paradigma).

  El propósito original de Gobstones fue servir en un primer curso universitario de programación con la intención de sentar las bases conceptuales sobre las que las siguientes materias construyesen conocimientos más específicos. Sin embargo, Gobstones demostró ser útil también para jóvenes de nivel secundario, y también tener algunas características que lo hacen interesante incluso para personas que no tienen intenciones de volverse programadores.
  El enfoque Gobstones sirvió como una de las bases de inspiración para las propuestas de la Iniciativa Program.AR, y el lenguaje Gobstones forma parte del conjunto de herramientas de aprendizaje recomendadas como parte de esta iniciativa. Estamos trabajando activamente en mejorar tanto el lenguaje como las herramientas asociadas. Además, Gobstones es el lenguaje elegido por Mumuki para la enseñanza de los fundamentos de la programación. Puede encontrarse toda la información sobre Gobstones en el sitio oficial, o alternativamente, en la página de Gobstones en Github.

  El enfoque didáctico propuesto con Gobstones es osado: elimina elementos que muchos programadores consideran imprescindibles (como variables -- al menos por buena parte del curso --, E/S, estructuras de datos, etc.) y resignifica otros usualmente tratados como accesorios (como los procedimientos o los parámetros) o totalmente ignorados en cursos tradicionales (como las precondiciones). Además hace énfasis desde el principio en cuestiones de estilo (buena elección de nombres, indentación, comentarios) que otros cursos introductorios no resaltan o simplemente lo dejan librado al azar.

  Todas estas cuestiones hacen que Gobstones importe y vale la pena detenerse en las mismas. En próximos posts desarrollaremos dichas ideas. La intención es que haya un post por semana, aproximadamente, y que se puedan generar discusiones interesantes a partir de cada uno, porque Gobstones importa.

PD: El currículum propuesto por este enfoque didáctico (resumido) es el siguiente:
  1. Comandos primitivos, secuencias, bloques.
  2. Procedimientos simples. Contratos: propósito y precondiciones.
  3. Cuestiones de estilo: comentarios, indentación, elección de nombres.
  4. Repetición simple.
  5. Alternativa condicional.
  6. Expresiones.
  7. Funciones simples.
  8. Parámetros.
  9. Repetición indexada.
  10. Repetición condicional. Recorridos simples.
  11. Variables y memoria. Recorridos más complejos.
TRANSVERSALMENTE: Modelos de Representación, codificación vs. visión abstracta.
  Para ver el currículum completo y detallado, consultar el libro "Las bases conceptuales de la programación".