28 December 2009

La elegancia como paradigma de la programación


Tras algún tiempo en esto creo que todos, empezando por uno mismo y siguiendo por universidades y empresas, debemos hacer un esfuerzo en evolucionar tal y como lo hacen los lenguajes de programación. En no quedarnos anclados con las tecnologías y lenguajes por mucho que las dominemos.

Sólo se aprende mediante ejemplos sencillos pero reales. Esto es muy importante. Sólo ante un problema real uno aguza el ingenio y el aprendizaje. El por qué hay problemas donde no debería es otro asunto.


Ejemplo: El Quijote en audiolibro

Queremos escuchar el Quijote en audiolibro. Buscamos en Google y nos encontramos con la agradable sorpresa de que el Gobierno de Aragón ha hecho un gran esfuerzo en grabarlo y dejarlo disponible. Sin embargo, el panorama es el siguiente: A una persona muy astuta le ha dado por colgarlo en una página web por capítulos separados. Son nada menos que 52 para la primera parte y 74 para la segunda. La mayor parte de la gente querrá escucharlo en su mp3 y no hay forma (aparente, a primera vista) de bajárselos con un sólo clic. Sólo necesitamos la friolera de ¡126 clics!

Un grandísmo esfuerzo (lectura, grabación, difusión...) que nos deja con mal sabor de boca por no tener un poco de cuidado al final, en la fase más sencilla. Algo muy típico en los proyectos. ¿Cómo no se les ocurriría poner un sólo fichero .zip o similar (o unos pocos) para descargarlo?


Soluciones

Para el usuario medio, esto supone un verdadero infierno. Tendría que tragarse los 126 clicks o buscar algún gestor de descargas medianamente inteligente. Para colmo, el directorio web está sin permisos de listar, de manera que no se puede hacer un "descárgame todos los ficheros (o todos los mp3) del directorio".

La solución para el iniciado es obvia: hacerse un programa para bajar los ficheros modificando la pequeña parte del nombre que cambia tras una URL común: (URL#Capítulo-01.mp3, URL#Capítulo-02.mp3, etc...).

Nótese el peñazo que supone realizar una tarea tan simple con los lenguajes más difundidos como Java o C#. Bucle, incremento de las cadenas, función para descargar un fichero, etc... Es un ejercicio interesante comprobar lo complicado y largo que puede resultar una tarea tan trivial con estos lenguajes. Tanto que hasta desanima.

Sin embargo compruébese una posible manera de descargarse la primera parte en un sistema con ruby y wget (nótese que la URL es fea de narices gracias a que el mismo experto anterior ha utilizado espacios y acentos en el nombre de los ficheros):

("01".."52").each {|i| `wget http://www.aularagon.org/files/espa/elquijote/p1/Parte%201%20Cap%C3%ADtulo-#{i}.mp3`}

La verdad es que la elegancia, expresividad e integración con el sistema de este lenguaje es bestial. Hace falta haber hecho el ejercicio de escribir un programa equivalente en otros lenguajes para darse cuenta del avance que un lenguaje como éste supone a la hora de pensar.

Sólo mediante su uso en problemas reales o ejercicios estimulantes es como se descubre todo su potencial. Una vez descubierto, es difícil argumentar el uso de cualquier otro lenguaje (por muy difundido que esté) para realizar la misma tarea.

No creo que haya excusa para permanecer ajenos a estos lenguajes y emplearlos para crear soluciones de todo tipo, empresariales incluidas. Y menos sabiendo que existen cosas como jRuby.

No comments: