El número erróneo or the lost pocholas

El viernes había quedado de encotrarme con Alejo para hablar un poco y tomarnos unas pocholas. Ese mismo día debía llevar la maleta de viaje, pues me iba a quedar en casa de Alexandra y al día siguiente nos íbamos para Villa de Leyva al "XVI Festival de las Luces" [1]. El caso es que con el bolate del viaje llevé el número equivocado del celular de Alejandro y no pude llamarlo pa' concretar la tomata :-( . El resultado: Las dudas existenciales me aquejan.

Como acto de exorsismo y ante los infructuosos intentos pasados de encuentro persona a persona con Alejo voy a escribir parte de esas dudas. Tal vez el sólo escribirlas o el encontrar parte de la solución en los escritos de otros pueda ayudar a disiparlas.

Como recordarán dije que iba a aprender a programar "en serio". Y decidí empezar con un paradigma declarativo en lugar del paradigma imperativo tan de moda en la Universidad. Escogí la programación funcional como mi parcela dentro del paradigma declarativo y Scheme en particular como el lenguaje de expresión. Empecé haciendo unos ejercicios, a modo de calentamiento para realizar el solucionario del libro "How to Desing Programs", de los cuales sólo públiqué una primera respuesta. Hasta aquí las cosas iban bien.

Luego vino la lectura "Revenge of the nerds", recomendada en el WebLog de Sergio y la percepción de que los lenguajes de programación estaban fracturados, alentada por la reflexión de Javier sobre la fractura de las matemáticas también. Así que la cosa se tornó hacía la separación sintáctica y semática de los lenguajes y la equivalecia final, considerándolos como autómatas finitos desde el punto de vista de Turing, pero este es un punto que sólo voy a mencionar porque ahí no radica la parte más recurrente de mi inquietud. Vayamos al siguiente punto.

Paul Graham, el autor de "Revenge of the nerds" dice que, aunque pueda sonar incómodo, hay lenguajes de programación mejores que otros. Paul, que es experto en Lisp, dice que Lisp es mejor y que los demás lenguajes se están volviendo más "cool" al parecerse más a Lisp. Esto no es de extrañar, viniendo de un experto en Lisp. Una contra argumentación dice que, si fuera un experto en Haskell, diría que los lenguajes se hacen más poderosos en la medida en que se parecen a Haskell. Sin embargo la argumentación de fondo es que un lenguaje es más poderoso en la medida en que permite mayor cercanía entre el pensamiento y la expresión del mismo. Al final ¿no debería ser ese el objeto de los lenguajes (el hablado, el gestual, el formal, etc), como medios de expresión del pensamiento?

Desde esta panorámica la idea de un lenguaje sucinto es la afirmación de esa poca distancia. Consideremos este par de ejemplos de código, que resuelven el mismo problema en dos lenguajes distintos:

El primer ejemplo es debido a Alejo:

En Haskell se tiene

hyp x y = x * x + y * y
map (hyp 5) [1..5]

Mientras que en Scheme un código para realizar la misma labor es:

(define (hyp x)
  (let ((x2 (* x x)))
    (lambda (y) (+ x2 (* y y)))))
(map (hyp 5) (list 1 2 3 4 5)) ,

El segundo ejemplo es cortesía de Carl McTague, un participante en la lista de usuarios del programa de álgebra computacional Maxima:

En Haskell se tiene:

filter f [] = []
filter f (x:xs) | f x = x : r
          | otherwise = r
where r = filter f xs

En Scheme un código equivalente para la misma labor sería:

(define (filter f list)
(cond ((null? list) ())
      ((f (car list)) (cons (car list) (filter f (cdr list))))
      (else (filter f (cdr list)))))

Indudablemente, los ejemplos de Scheme son menos sucintos, eso implica que Haskell "es más poderoso" que Scheme (o Lisp por extensión)? O tendríamos lenguajes ditintos que simplemente son apropiados para labores distintas y por tanto "más poderosos" en el ámbito específico de esas tareas (lo cual al final sólo confirmaría la idea de la fractura del lenguaje)?

Por otro lado, gracias a un enlace en el Blog de Nelsón y a un hilo en la lista de Maxima, me encontré leyendo sobre Literate Programming (LP). Creo que la combinación con Extreme Programming (XP) harían de estas técnicas una combinación ganadora (XLP). Sin embargo esto lo dice alguien que no tiene ni idea de las dos, y con mucho sueño para extenderse demasiado sobre la argumentación :-) .

Este es sólo el preámbulo de algunas de las dudas, que son de esas que no se resuelven bien, con todas las neuronas funcionando al 100% en la cabeza. Se requiere de unas pocholas en el sistema para lograr la lucidez. Recuerden lo que dice la propaganda : "El exceso de neuronas es perjudicial para la salud". Se corre el riesgo de que se ocurran ideas... por eso hay que matar la neuronas redundantes con alcohol :-).

[1] XVI Festival de las Luces: Allá me encontré con Raimundo y todo el mundo, gente que no veía hace años y gente que sólo había visto por televisión.

Comments

Comments powered by Disqus