martes, septiembre 26, 2006

Otra visión sobre los lenguajes de programación

Uno de los temas más recurrentes en este blog es la programación, y uno de los posts con más éxito (que incluso fue enlazado en la wikipedia como referencia, juas) fue en el que se hablaba sobre los criterios para clasificar y valorar los lenguajes de programación, así que vamos a por otro ;-)

Últimamente, debido a la frustración que me produce Java a veces (a pesar de que me encanta), he estado valorando seriamente otras alternativas para los próximos proyectos informáticos que tenga que afrontar. Desde luego que hay problemas que parece que están pidiendo a gritos un lenguaje de programación en concreto (o mejor dicho, hay lenguajes que se hicieron pensando en un tipo concreto de problemas), pero algo de propósito general que satisfaga las necesidades de un quisquilloso como yo es más complicado.

Durante mi búsqueda del lenguaje que mejor se ajustase al tamaño y la forma de mi polla (sé que es una metáfora burda y grosera, pero escoger lenguaje es como escoger un condón, los hay exóticos que te llaman la atención, con distintas formas, textura y sabores, pero al final lo que buscas es que no te deje tirado) pude averiguar cosas muy interesantes sobre por qué algunos gustan más y otros menos.

La clave está en que hay lenguajes que están pensados para ser un coñazo y otros no. Al ingeniero le gustan los lenguajes coñazo y al programador ultra-friki que llevo dentro no.

Los ingenieros preferimos los lenguajes aburridos por los siguientes motivos:
  • No dejan lugar a la imaginación: las soluciones han de estar pensadas de antemano (por el ingeniero) y la implementación debe ser algo mecánico.
  • Extreman los controles en tiempo de compilación: toda prueba adicional que se le pase al código es poca.
  • Son redundantes: así se controla que un fallo al escribir no pase inadvertido.
  • Son muy explícitos: como los recursos humanos pueden variar, cuanto menos cueste entender el código que ha escrito otra persona, mejor.
  • Son rígidos: no se puede alterar el lenguaje desde el propio programa, por lo que es difícil que haya código engañoso.
En resumen, son lenguajes pensados para gilipollas. Por eso nos encantan, porque sabemos que el mundo está lleno de gilipollas y nos gusta controlar y minimizar los daños que puedan causar.

El lenguaje anti-gilipollas por excelencia es Ada, pero como los gilipollas son muy habilidosos, al final siempre encuentran el modo de cagarla (desactivar verificación de rangos de acceso a los arrays en tiempo de ejecución, usar distintos sistemas de unidades en las medidas...).


Cuando me toca programar a mí, incluso un lenguaje intermedio (más bien tirando a coñazo) como Java me llega a resultar cansino, porque hay cosas que quiero hacer y no puedo porque cualquier gilipollas podría hacerse la picha un lío y cagarla en un santiamén si le dejasen hacerlas.

Para resolver ese tipo de cosas se inventaron los Patrones de diseño, que son recetillas para no tener que andar dándole muchas vueltas a problemas tontorrones, que se presentan con los lenguajes a prueba de tontos por su falta de flexibilidad, cada vez que surgen. Pero eso está muy bien a la hora de diseñar, cuando tienes que implementar unos cuantos te empiezas a cansar.

Así que por otra parte tenemos los lenguajes divertidos, que te permiten hacer más cosas con menos código, al precio de que seguramente tú serás el único que pueda entenderlo después de haberlo escrito (y a veces ni eso). Cuando se trata de un proyecto unipersonal, no sólo te puedes permitir el lujo de utilizar un lenguaje que te permita hacer frikadas con el código, sino que además debes hacerlo si quieres ser altamente productivo.

Hay unos cuantos lenguajes que permiten hacer al programador lo que le dé la real gana, siendo seguramente el más conocido LISP, pero hay otros casos más extremos como el de Pliant (dejo al lector que le eche un vistazo más profundo a ese sistema que parece fascinante)...


Conclusiones:
  • La flexibilidad|complejidad del lenguaje de programación debe ser inversamente proporcional a la complejidad|tamaño del proyecto.
  • Un jefe de proyecto hábil debe encontrar el equilibrio entre las ganancias de productividad que producen los lenguajes avanzados en buenas manos y los problemas que se pueden producir cuando herramientas tan potentes están al alcance de los gilipollas.

3 comentarios:

Lek dijo...

Excelente como siempre... aunque echo de menos una referencia a más lenguajes. Por pedir que no quede :P

fortran dijo...

Los iba a poner, pero pensé que no aportaba gran cosa... pero como veo que al menos hay un interesado, aquí van unos cuantos (sin ponerse uno a rebuscar demasiado) :p

Lenguajes muermo (para ingenieros)
Ada
Pascal
Eiffel
Fortran
Scala
D

Lenguajes guays (para hackers)
LISP
Pliant
C
PERL
PostScript
Ruby


Luego hay casos intermedios, como Python, que aunque es un lenguaje muy flexible tiene un especial énfasis en que el código sea lo más legible posible, o algunos funcionales como Haskell u OCaml, que son muy seguros (en el sentido de que los programas no tienen errores de tipado, punteros nulos, etc.), pero no se aplican en grandes proyectos por lo complicado que es encontrar profesionales que los dominen bien.

En la cojolista de lenguajes de programación clasificados categóricamente de la wikipedia tenemos un montón, y podemos establecer una relación aproximada entre las categorías ingenieriles y las hackeriles (en el sentido de que un hacker es el que juguetea y experimenta con los sistemas)... pero eso ya sí que me parece excesivo, que son 38 categorías y seguramente acabaría diciendo gilipolleces.

Si uno se pone a hurgar en la lista, podrá ver que hay muchos lenguajes excelentes (desde el punto de vista del ingeniero: seguros, rápidos, legibles, mantenibles...) que no se usan ampliamente por el simple hecho de que no han llegado a una masa crítica que anime a usarlos (el mayor miedo que hay es quedarte sin soporte o sin desarrolladores).

Así que si alguno quiere sacar un lenguaje nuevo, que cuide muy mucho el marketing.

Os paso un enlace interesante sobre el desarrollo de un nuevo lenguaje de programación en Sun http://research.sun.com/projects/plrg/

A mí por un lado me llena de expectativas, pero por otro estoy bastante escéptico... será porque me huele a refrito, pero ya veremos :-)

Anónimo dijo...

Buen comienzo