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.