Durante las últimas semanas he estado echándole un vistazo al "lenguaje" de programación Scratch. El objetivo de Scratch es que el principiante en programación (se piensa principalmente en niños) no tenga que vérselas con la sintaxis del lenguaje de turno y disponga de un entorno amigable y visual. Así, en lugar de escribir código, el niño manipula bloques visuales, como piezas de lego, con los que se montan los "códigos" (llamados "bloques" en terminología de Scratch).
No tengo claro si esto realmente puede facilitar el aprendizaje a los más pequeños. En todo caso, Scratch para un programador resulta cuando menos problemático. A veces cosas sencillas de hacer en cualquier lenguaje, en Scratch resultan cosas engorrosas de hacer o enrevesadas. Hay, además, un buen número de limitaciones: no es posible realizar baterías de tests, no hay forma eficaz de construir imágenes mediante código, y un largo etcétera.
Me resulta particularmente irritante que los procedimientos no sean realmente funciones, el hecho de que no puedan devolver valores, y en su lugar haya que modificar variables de estado, que en muchas ocasiones tienen que ser inevitablemente globales. No es una buena forma de aprender principios esenciales de programación.
No obstante, por hablar de alguna cosa buena, siempre desde el punto de vista de un programador, Scratch, a diferencia de App Inventor, otro sistema parecido a Scratch, sí proporciona ciertas opciones de orientación a objetos gracias a la idea de "clonación" (se pueden crear objetos a partir de prototipos) y a través de un sistema de paso de "mensajes" (los objetos pueden pasar y recibir cierta clase elemental de mensajes). Eso sí parece bueno en cuanto a presentar al niño ciertos fundamentos serios de programación.
Pero, sin duda, la mayor ventaja de Scratch es que con él va incluida una plataforma que permite subir a la nube las aplicaciones que se van construyendo y ejecutarlas desde el navegador. Esto libera al programador de buscarse la vida con JavaScript o similares, al menos hasta el momento en que WebAssembly sea lo suficientemente maduro como para cubrir esta imperiosa necesidad independientemente del lenguaje. Eso sí, Scratch desgraciadamente require Flash, una tecnología obsoleta, pero es de esperar que esta situación sea temporal.
Pero basta de introducciones, el objetivo de esta entrada no era hablar de Scratch, sino simplemente informar de que he creado algunos pequeños juegos en Scratch que tal vez sean útiles para los estudiantes de música. No están bien verificados, y están hechos algunos con prisa y todos sin especial atención al atractivo visual, pero ahí van por si a alguien le interesa entrenarse en un contexto más o menos lúdico:
- Entrenamiento en el reconocimiento de intervalos
- Entrenamiento en el reconocimiento de acordes de séptima
- Entrenamiento en el reconocimiento y memorización de secuencias melódicas dentro de la tonalidad
- Entrenamiento en la lectura musical para guitarristas (en inglés)
Algunos comentarios a estas aplicaciones, por orden de importancia.
La segunda aplicación, la del reconocimiento de acordes, es un tanto problemática. La mediocre calidad (midi inevitablemente) de la salida hace el reconocimiento de acordes bastante más difícil de lo que realmente es y debería ser; la ausencia de un sonido real, con todos sus armónicos, aquí es una importante desventaja.
La tercera aplicación sobre memoria dentro de la tonalidad genera secuencias melódicas aleatorias. Aunque dentro de la tonalidad, éstas pueden ser en ocasiones forzadas, y además no hay variación métrica alguna. Esto es artificial, pero un programa con secuencias melódicas más naturales y con métricas variadas es totalmente otro cantar, nada que se pueda hacer en unas horas y con Scratch, requeriría inteligencia artificial, sin duda, y un lenguaje de programación de verdad. En todo caso, tal como está, creo que sigue sirviendo, al menos como puro y duro entrenamiento de la memoria y el reconocimiento auditivo.
Las tres primeras aplicaciones poseen su interfaz en castellano, pero el código está, salvo mínimas excepciones necesarias, en inglés, ya que son meras copias de las versiones inglesas que hice en primer lugar.