lunes, 7 de diciembre de 2015

9. Dejá vù (o "Hay repeticiones y repeticiones y repeticiones")

La necesidad de separar cada concepto, pero abstrayéndolos.

 
  En Gobstones existen 3 formas diferentes de repetición: la repetición simple, la repetición condicional y la repetición indexada.
  La repetición simple consiste sencillamente de un número y un bloque a repetir:
  •   repeat (10)
  •    { Poner(Verde) }
Esta porción de código describe la repetición de la acción de poner una bolita verde 10 veces.
  La repetición condicional precisa de una condición para decidir cuándo dejar de repetir, por lo que es útil cuando no se conoce de antemano el número de repeticiones:
  •   while (puedeMover(Este))
  •    { Poner(Rojo); Mover(Este) }
En este ejemplo, no tenemos forma de saber a qué distancia se encuentra el borde, pero la repetición se encarga de llegar hasta el mismo.
  Finalmente, la repetición indexada es una forma de repetición que se basa en una secuencia de valores predefinidos, haciendo que cada iteración varíe según la información de la secuencia:
  •   foreach color in [Azul, Negro, Rojo, Verde] 
  •    { Poner(color) }
En este ejemplo, cada repetición pone una bolita de un color diferente. Entonces, el índice (en este caso, color) expresa la variación, tomando un valor diferente en cada repetición.

  Un programador experimentado podría indicar que no hace falta tener 3 formas, ya que con una de ellas pueden expresarse las demás (aunque utilizando algunos elementos adicionales como variables o estructuras de datos, o ignorando algunas características).  Por ejemplo, la repetición simple puede obtenerse a partir de la repetición indexada de la siguiente manera
  •   foreach i in [1..10] 
  •    { Poner(Verde) }
Esta porción de código es equivalente al ejemplo de repetición simple inicial (se itera sobre los valores del 1 al 10, pero el índice no se usa en la repetición, logrando el mismo efecto que una repetición simple).

   Entonces, ¿por qué tener 3 formas de repetición?

  Una característica importante de Gobstones es que los conceptos que se busca transmitir aparecen en forma pura. Por ejemplo, en el caso de las repeticiones, eso significa que cada repetición aparece con su forma más natural, sin necesidad de combinarse con otras herramientas para proveer soluciones sencillas. Esto facilita la comprensión del concepto por parte del estudiante, y permite que ese concepto sea presentado de manera natural en el momento correcto del currículum. Por ejemplo, si Gobstones no tuviese repetición simple, para explicar inicialmente el concepto de repetición deberíamos hablar de índices y variaciones que no aparecen en la forma más natural (más simple) de repetición, y de esa manera complicaríamos al estudiante la incorporación del concepto.

  De la misma forma, expresar repetición simple utilizando repetición condicional requiere comprender el uso de variables, que son una herramienta mucho más compleja que el sencillo concepto de repetición. Y para poder expresar repetición indexada en su forma completa utilizando repetición condicional es preciso contar con estructuras de datos (listas, por ejemplo), para poder tener almacenadas todas las variaciones necesarias (si la variación fuese regular, podría alcanzar con variables). Por otra parte, la repetición condicional trae consigo la posibilidad de que los programas no terminen, algo que con la repetición simple es sencillamente imposible. De esta forma, si enseñamos primero repetición condicional y variables para poder enseñar el concepto de repetición simple, es como enseñar a alguien a correr los 100 metros llanos para enseñarle a caminar... La didáctica, en este caso, debe ser tenida en cuenta.

  Por esto es que sostenemos que no es necesario enseñar variables y repetición condicional para poder aprender el concepto de repetición, y por eso Gobstones elige separar estas cuestiones en sus formas puras. Si bien puede utilizarse cualquier lenguaje para enseñar a programar, es mucho más fácil hacerlo cuando los conceptos aparecen de forma pura. Y por eso, Gobstones es importante.

1 comentario:

  1. Soy relativamente nuevo en el mundo de la programación y estoy cursando en la UNQ. Aprendí a programar antes de aprender Gobstones, es decir, ya manejaba todos los conceptos que se dan en Introduccion a la programación. Aún así, la forma de dar los conceptos me parece que lleva a una buena práctica: En mi trabajo acostumbro ver código con foreach...break; dado que el lenguaje lo permite o la utilización de variables por que si, sin siquiera pensar en procedimientos o funciones. Por qué es importante? Porque programar, puede hacerlo cualquiera(como yo), pero para hacerlo bien se necesita un poco más

    ResponderEliminar