Los lenguajes visuales son de verdad una gran idea. Mucho de lo que hacemos en programación tiene que ver en cómo se presentan las cosas en la pantalla. Esto lo hacen por ejemplo, Visual BASIC, Delphi, C++ Builder, etcétera. Pero un paso más allá es que la parte de la generación de código sea visual, de manera tal que el programador arme con bloques como si fuesen piezas de un rompecabezas, las cosas que debe poner. Visualmente hay instrucciones que no son compatibles con otras y entonces no encajan las piezas del rompecabezas, para seguir con la analogía, y entonces el programa simplemente no compila.

Scratch es un lenguaje que hace esto (y si no me equivoco, es un sistema creado en el MIT). Snap! es otro lenguaje con estas características de programar usando bloques gráficos. Fue escrito por Jens Mönig y Brian Harvey en la Universidad de California (Berkeley) y su nombre original era «Build Your Own Blocks» (BYOB), que indica precisamente dónde se detiene Scratch, que limita la cantidad de bloques que se pueden usar. Snap! toma características de Scheme y es un lenguaje idóneo para una seria introducción de la computación en secundaria,  preparatoria o incluso en los primeros semestres de una carrera.

El lenguaje vio la luz pública en el 2011 cuando se adoptó en un curso introductorio de ciencias de la computación para estudiantes sin prerrequisitos en cómputo, en la mencionada universidad. El curso se llamó «La belleza y el goce de la computación» (Beauty and Joy of Computing (BJC)). También se está usando para que los profesores sin «background» técnico aprendan un lenguaje de programación.

Para los desarrolladores que quieran obtener el código fuente, Snap! es gratuito y de código abierto y se distribuye de acuerdo a la licencia Affero de GNU. La versión 4.0, que es la que se libera, Jens Mönig dice que el lenguaje combina la gramática de Scratch con las estructuras dinámicas de Scheme, recursión, cálculo lambda, etcétera y que permite crear estructuras de control propia (bucles, loops pues, map/reduce), sin tener que preocuparse del stack. Nótese que Snap! permite convertir código arbitrario de Javascript en bloques gráficos, es decir: «su mecanismo de codifiicacón puede trascompilar scripts gráficos en código arbitrario en modo texto, ofreciendo una doble transición entre bloques y texto.

A mí, sin embargo, me queda duda si es una buena idea introducir este tipo de lenguajes de programación cuando finalmente son como «experimentales», pues no se usan para programación en serio. ¿No sería bueno de una vez introducir un lenguaje moderno directamente en lugar de pasar por este tipo de lenguajes que sí, son simpáticos pero que se vuelven obsoletos en la medida que no se usan por comunidades enteras.

Referencias:

Snap!
Snap 4.0 Manual de referencia
i-programmer