jueves, mayo 29, 2008

Ruby, Python, Groovy y compañía nunca reemplazarán a Java

Últimamente, día sí y día también no cesan en la web artículos donde pronostican la muerte de Java para ser reemplazado por cualquiera de los nuevos lenguajes de moda. Y por fin encuentro un artículo (en inglés) 13 reasons why Ruby, Python and the gang will push Java to die… of old age donde puedes encontrar 13 razones contundentes donde afirman todo lo contrario. El autor se documenta a partir de varios índices de popularidad: TIOBE Index y langpop.com. Coincido en la mayoría de puntos con el autor, pero aquí voy a describir por encima sólo las que me parecen más importantes.


Para empezar vayamos analizando la siguiente gráfica que mide la popularidad de los lenguajes (mayo 2008):

Lo que más llama la atención, además de que Java sea el primero, es que los lenguajes con una sintaxis parecida a Java: C, C++, Java y C# forman el 49,915% de popularidad, casi la mitad que todo el resto de lenguajes. De aquí podemos obtener la primera razón:

1) Los programadores que quieran cambiar de lenguaje, tendrán que hacer más esfuerzo al aprender un lenguaje con una sintaxis muy diferente a la de Java, porque, además de la sintaxis, tienen conceptos también bastantes diferentes.

Si echamos un vistazo al grupo de los candidatos: Python + Ruby + Lisp/Scheme + Lua + SmallTalk + Haskell + Groovy + Erlang + Caml + Scala = 8,985 %. Podemos concluir la segunda razón:

2)Es una cifra insignificante comparada con la primera, además, estos 10 lenguajes hacen mucho ruido, son muchos y los programadores no tenemos tiempo para evaluarlos todos y seguir de cerca su evolución. Si quisiésemos reemplazar a Java por uno de estos diez, ¿cuál elegirías?

Sigamos analizando otra gráfica: la tendencia de popularidad de los últimos 7 años:


En un vistazo rápido podemos ver una tendencia al alta de la popularidad general de todos los lenguajes, hay algunas variaciones temporales, pero a la larga, nada cambia significativamente.

Razón número 3: No hay presión sobre los programadores para que cambien de lenguaje, el mercado ya es estable, los lenguajes que ya existen funcionan aceptablemente bien para lo que fueron diseñados, así que los jefes de proyecto no tienen porqué obligar a los programadores a aprender nuevos lenguajes. Para mí es la razón la más importante de todas.

Otra gráfica interesante es la evolución en las tendencias de trabajo:


Razón número 4: No hay un gran incentivo para cambiar de trabajo, aprender un nuevo lenguaje no tiene porqué traducirse en un aumento de sueldo, al menos, a corto plazo.

Otro hecho importante que hay que tener en cuenta es que los lenguajes populares deben de tener un éxito relativamente rápido, si los programadores ven una evolución muy lenta sobre un lenguaje con varios años de vida, entonces la conclusión es que no merece la pena aprender ese lenguaje, si no ha tenido éxito, por algo será.
Como curiosidad, aquí muestro una lista de los lenguajes pretendientes y sus años de nacimiento:
Ruby (mid 1990s), Python (1991), Lisp (1958), Scheme (1970s), Lua (1993), Smalltalk (1969-1980), Haskell (1990), Erlang (1987), Caml (1985), OCaml (1996), Groovy (2003), Scala (2003)
y aquí la lista con los lenguajes más populares y sus años de nacimiento: C (1972), C++ (1983), Java (1995), C# (2001), BASIC (1964), Pascal (1970), FORTRAN (1957), Ada (1983), COBOL (1959).

La conclusión que saco de aquí es que estos lenguajes han perdido ya el tren, si de verdad desbancarían a Java, ya lo tendrían que haber hecho.

Para terminar, mi conclusión final es que Java será remplazado por un lenguaje que herede todo lo que tenga Java pero que corrija los fallos que tiene Java. Por ejemplo, Java nació a partir de los problemas que los programadores sufrían con C y C++ (complejidad y gestión de memoria). Al evitarle al programador tener que gestionar la memoria, los programadores se evitaron un montón de rompederos de cabeza corrigiendo bugs generados por los memory leaks.

Que quede claro que no desaconsejo nunca aprender o usar alguno de estos lenguajes, de hecho intento seguir la evolución y aprender alguno de ellos (en concreto Ruby y Python), me parecen muy interesantes algunas características y peculiaridades de las que Java podría incorporar.

6 comentarios:

javi santana dijo...

Igual que java pasó a ser un lenguaje muy popular por razones como la productividad debido a su api y gestión de memoria, tarde o temprano le llegará su san martín si sigue el camino actual.

Java es actualmente, de largo, mucho menos productivo que otros lenguajes como los que mencionaes y eso a las empresas les interesa mucho. Ahora java tiene una inercia enorme y es difícil que una empresa mude toda su tecnología a otro lenguaje/framework, pero paulatinamente la gente (programadores, empresarios...) se dan cuenta de este detalle y no dudo que tratarán de aprovecharlo.

Bloggingg dijo...

Claro que a Java le comerá el terreno algún lenguaje más productivo, pero esto no será dentro de poco, ni mucho menos, y tampoco será uno de estos 10 lenguajes el ganador.
Si ahora toda la gente opina que son más productivos, ¿por qué no lo eran también a mediados de los 90 cuando nacieron Ruby o Python? Hay que recordar que estos lenguajes tienen el mismo tiempo que Java, y no triunfaron en su tiempo.

Conozco RoR, y hoy por hoy, no puede competir con Java en muchos aspectos, quizás sea más divertido e incluso, el lenguaje en sí más productivo, pero la inmensa cantidad de librerías, documentación, gente con experiencia en la plataforma, herramientas, etc... pesan más sobre esta supuesta productividad.

javi santana dijo...

gracias a dios no todo es web... por otro lado... por qué la gente eligió vhs y no beta? era acaso mejor vhs? en este caso beta desapareció (del mundo de consumo), pero en este caso python, ruby, etc han seguido.

PHP triunfó y mira ahora :)

Chema dijo...

No tomaría como argumentación la fecha de aparición de cada lenguaje para valorar su "influjo" en el mundillo de los lenguajes de programación. Si bien Guido von Rossum ideó el lenguaje python en 1991, no fue hasta el año 2000 con python 1.5.2 cuando empezó a ser popular y a recibir contribuciones de una nutrida comunidad de programadores. Si de java podríamos hablar que lleva ya 6 ó 7 encarnaciones diferentes (algunas de ellas, como java 1.2, rompedoras con versiones previas), de python podemos decir que ya está a punto su 3ª encarnación, con apoyo de grandes empresas como google o microsoft, recibiendo el nombramiento de "lenguaje del año 2007" y aumentando su ritmo de su desarrollo frenéticamente como nunca se había visto en su corta vida.

En cuanto a Ruby, no lo conozco tanto, pero parece que anda algo atascado para sacar su versión 1.9. Todavía es pronto para hablar de lo que puede deparar este lenguaje, pero Sun parece que lo tiene en consideración en sus herramientas de desarrollo, tanto Ruby on Rails como JRuby (Ruby para JVM).

En cuanto a productividad, es un mito que la productividad dependa del lenguaje de programación: depende de la metodología. Los lenguajes "dinámicos" se adaptan muy bien a las "metodologías ágiles", razón principal por la que una empresa puede preferir uno de estos lenguajes frente a lenguajes estáticos como java ó C#.

Bloggingg dijo...

Tienes razón en varias cosas, tan importante como la fecha de aparición de un lenguaje es la fecha en la que nace una versión rompedora, como la java 1.2, que revolucionó el lenguaje.

Otro punto importante, que sí es muy influyente para el éxito o fracaso de un nuevo lenguaje de programación, es el apoyo que tenga detrás de las grandes, como pueden ser google, microsoft, ibm, etc..., si no tiene el apoyo de algunas de estas, es muy difícil que triunfe realmente.

Y por último, estoy de acuerdo también, que el lenguaje que se use, no afecta significativamente a la productividad, o al menos al éxito o fracaso de un proyecto. Hay factores mucho más importantes que el lenguaje en que se desarrolle.

javi santana dijo...

El lenguaje no es un factor crítico, desde luego, en mi opinión es más importante la experiencia del equipo etc... pero hay casos en que si lo es, pongamos aplicaciones embebdias que requieran cierta velocidad o proyectos de desarrollo corto donde no puedes entretenerte oliendo rosas.

Y el lenguaje, en mi opinión, sí afecta a la productividad, por varias razones, algunas objetivas y otras subjetivas... por ejemplo, hacer una lista en python y filtrarla es cuestión de segundos, sin embargo en java es un infierno de news cuando no tienes que recurrir a librerías como Collections, etc, etc aparte, un programador feliz es mucho más productivo, y decidme hay algo más gratificante que programar en python :P