Hola amigos, comparto con ustedes este artículo que me ha compartido el colega @Reisel del Centro de Tecnologías de Gestión de Datos de la facultad 6.
Mientras el lenguaje más utilizado del mundo cumplió ya sus 20 años, hay muchas voces en el mundo del desarrollo que reniegan de Java.
Es cierto que Java es un lenguaje antiguo, que para muchas tareas es extremadamente verboso y que tiene problemas de base que uno de sus creadores, Joshua Bloch, desgranó en su libro.
Entonces, ¿por qué tantas compañías vuelven atrás y abandonan lenguajes mucho más modernos para utilizar Java? Te voy a presentar unos cuantos ejemplos y veremos si tienen algo en común.
El sorprendente caso de Twitter
En 2011, Twitter, la empresa conocida por ser la mayor plataforma escrita en Ruby, anunciaba que su buscador había sido reescrito en Java, consiguiendo así triplicar su velocidad y reducir en un 50% el consumo de CPU.
Esto significaba que sus servidores ahora podían servir 10 veces más peticiones que anteriormente.
¿Cómo era esto posible? La primera razón fue el cambio de base de datos, de MySQL a Lucene, lo que permitía búsquedas en tiempo real. Pero la segunda, y más importante, el salto a Java dejando atrás Ruby.
Moverse a un lenguaje como Java tiene una implicación aún mayor: comenzar a utilizar la Máquina Virtual de Java (JVM). El runtime de Ruby tiene algunos problemas de rendimiento comparado con la JVM, lo que generaba que un servicio con tanta demanda como es Twitter tuviera problemas cuando había picos en su uso.
Pero las ventajas no acaban aquí: el utilizar la JVM como entorno de ejecución abre la puerta a una gran cantidad de lenguajes que pueden ser utilizados conjuntamente y aplicados donde resulten más eficientes. Por ejemplo Twitter utiliza Scala y Clojure para algunos de sus servicios.
Pero por lo que podemos leer en este artículo del blog de Twitter, el verdadero problema estaba en la escalabilidad de Ruby on Rails para manejar peticiones en tiempo real. Al ser un lenguaje interpretado, el consumo de CPU y memoria se disparaba conforme iba creciendo el número de usuarios.
Uber, la famosa startup, también da un paso atrás
La arquitectura de Uber es un poco diferente, basada en microservicios. Esta filosofía les ha permitido crecer muy rápido y escribir cada uno de estos microservicios en lenguajes muy diferentes. Uber utiliza Node.js, Python, Go, Java y Scala, lo que además les permite contratar ingenieros de forma más rápida al no verse limitados por el el lenguaje.
Pero el usar tantos lenguajes diferentes se convierte en una limitación cuando se tiene que solucionar el mismo problema tantas veces como lenguajes existen. La reutilización se convierte en algo muy complejo.
Por lo que comenta Matt Ranney a InfoQ, nunca se habrían imaginado el coste que suponía el escribir los microservicios en lenguajes tan diferentes.
En Uber decidieron quedarse exclusivamente con dos lenguajes para los nuevos desarrollos: Java y Go. La razón parece ser porque sus sistemas más críticos y que requieren un mayor rendimiento, como son los que calculan rutas y tiempos estimados, están escritos en java.
Netflix
En palabras de Andrew Glover, en el Engineering Manager de Netflix:
“La gran mayoría de los servicios de nuestra arquitectura están desarrollados usando Java y la JVM. Netflix usa una arquitectura sin estado, por lo que según atraemos a más clientes podemos incluir más instancias de forma relativamente sencilla. Tenemos miles de procesos Java ejecutándose todo el tiempo, por lo que según crecemos no nos encontramos con excesivos retos de infraestructura.”
“También utilizamos muchas herramientas de software libre que están basadas en Java, lo que nos hace mucho más sencillo monitorizar, actualizar y escalar nuestros servicios.”
Square
La famosa compañía de lectores de tarjetas par móviles, más conocida entre los desarrolladores (sobre todo Android) por crear algunas de las librerías que todos utilizamos también utiliza Java en sus sistemas críticos. Muy interesante la charla de Bob Lee: On the cusp of a Java renaissance, donde nos cuenta algunas de las razones.
En ella también lo compara con Ruby, y una de las mayores ventajas es la concurrencia. Mientras que Ruby puede manejar unos 10-20 procesos concurrentes por segundo, Java (con algunas tecnologías como Netty) puede superar los 100.000 procesos concurrentes, lo que supone un ahorro considerable en hardware.
Además, debido a la expansion de ambos lenguajes, es mucho más sencillo contratar talento especializado en Java que en Ruby. Este es un aspecto muy importante a tener en cuenta, pues nos encontramos en una situación en el mercado del desarrollo de software donde los perfiles especializados son muy caros y difíciles de encontrar.
Java es una opción muy real
Y como estas, hay muchas otras compañías que utilizan Java en su día a día como lenguaje principal para los sistemas de más alta demanda de sus servicios. ¿Significa esto que el resto de lenguajes no deben utilizarse? No, igual que hemos encontrado estos ejemplos para Java, se podría hacer lo mismo con muchos otros lenguajes.
Lo que significa es que Java está muy lejos de ser un lenguaje extinto, y que hay razones muy claras para tenerlo en cuenta:
- En algunos entornos puede ser la solución más eficiente. En términos de concurrencia es más efectivo que otras tecnologías. También entran en juego otras características como la seguridad.
- Hay una gran cantidad de software libre listo para ser integrado en nuestros proyectos, los que nos puede ahorrar muchísimo tiempo de programación.
- El utilizar la JVM nos abre la puerta para un número mucho mayor de lenguajes que se ejecutan sobre la JVM, como Scala, Clojure o Kotlin, que pueden ofrecernos ventajas sobre Java, y que en general se integrarán muy bien con código ya escrito en este lenguaje.
- Un último punto, y para mí uno de los más importantes: la facilidad de encontrar expertos en Java. Realmente la contratación de talento es un problema que afecta a muchas compañías, y es mucho más sencillo encontrar perfiles Java que en cualquier otro lenguaje menos conocido.
Conclusión
Java y la JVM están aquí para quedarse por mucho más tiempo. No parece que vayamos a ver sus sustitución a corto plazo, ya que muchas compañías de éxito siguen confiando en este lenguaje para sus sistemas más críticos.
Además, el auge de los lenguajes basados en la JVM hacer que podamos tener lo mejor de ambos mundos. Confiar en Java hoy en día no nos limita a usar otros lenguajes más modernos más adelante.
Tomado de:
http://www.genbetadev.com/java-j2ee/por-que-empresas-que-empiezan-con-lenguajes-modernos-se-vuelven-a-java
Comentarios ( 20 )
El articulo original proviene de http://www.genbetadev.com/java-j2ee/por-que-empresas-que-empiezan-con-lenguajes-modernos-se-vuelven-a-java, por favor hagan referencía al articulo oríginal.
LIKE !!!
Me ha sorprendido leer este artículo. Con el auge de los nuevos lenguajes de programación se llega a pensar que los más viejos van quedando atrás, pero a veces creo que es solo cuestión de moda. Cada ves que sale un lenguaje nuevo empieza con buen impulso (generalmente), para al final ceder el puesto (generalmente) a los que sí han demostrado ser los “caballos de guerra”. El C++, que ese sí es más viejito que el Java, se sigue utilizando, y por lo que leo, Java también.
Yo odio a java como nadie(que me ha tocado comermelo con papa varias veces), pero voy a esperar tranquilamente el comentario del cuervo jaja, lo va a sufrir como la “python” cunando se muerde la lengua.
Realmente existen muy buenas soluciones escritas en java que se pueden integrar con otras tecnologías más ligeras para no pegarle tan duro al server, como por ejemplo Elasticserach. Saludos
Yo@ estas dejando que Java te abrace jajajaja ,,, te estas enamorando … No tanto el lenguaje como la JVM es lo que sostiene muchos procesos complejos automatizados 24/7. Saludos
Si es así, ¿porqué google sigue usando python y go?, ¿por qué en facebook usan hack?¿Por qué en github usan ruby? Hay partes en los sistemas en que va mejor una tecnología que otra, me viene a la mente el viejo Oscard Wild “Lo popular nunca es lo correcto”.
todo es por causa de las mujeres http://humanos.uci.cu/2014/02/humor-entre-manos-quien-entiende-a-quien/
Siempre he dicho que no es una casualidad que muchos de los proyectos de la Apache Software Foundation se hagan sobre Java, y aqui entran en cuenta varios factores como los mencionados en el post. Además muchas empresas lo utilizan para procesos críticos, ejemplo LinkedIn ha utilizado Java extensamente, incluso las piezas de su infraestructura que son claves como Kafka (actualmente open source) fueron escritos en Java.
…También entran en juego otras características como la seguridad.
Según recuerdo de una de las ferias de informática, se mostraron gráficos donde JAVA y Flash Player son el Top de agujeros de seguridad en los sistemas operativos. JRE fue eliminado de las actualizaciones de MacOS y reemplazado con una versión propia.
En algunos entornos puede ser la solución más eficiente. En términos de concurrencia es más efectivo que otras tecnologías.
Esto tendría que verlo para creerlo. Por mi experiencia y la de los proyectos que he visto en Java, y aplicaciones sencillas de Internet, Java es un dragón de CPU y Memoria.
Es lo que siempre he pensado y comentado cuando me encuentro con estos debates. No existe ni el mejor lenguaje ni la mejor tecnología y que unos lo usen no significa que para sea una maldición. La mejor solución es donde componentes implementados con diferentes tecnologías se integran. Lo que sí tenemos que pensar que detrás de esas grandes compañías con muchísimo capital, hay expertos con muchísima experiencia y horas-PC para determinar cual es la tecnología que más se adecúa al negocio específico. Pero nada es absoluto. Java es un lenguaje hiperverboso, pero lleva muchos años con soporte y evolucionando (subiendo de nivel), en temas como concurrencia están entre los primeros.
Por un lado la mano de obra que es abundante, y por otro, la gran cantidad de bibliotecas o librerías (como deseen llamarlo) que existen para este lenguaje.
Yo creo que antes de usar el contenido de otro sitio para publicarlo, se debe hacer un poco más de investigación. Por ejemplo con Twitter, primero citan un artículo en su blog que data del año 2011, y segundo, yo no veo Java en ningún lugar en su stack: http://stackshare.io/twitter/twitter
En el caso de Uber si, usan Java, pero también usan Python y Objetive-C, lo mismo con Netflix que también usa Python. Y Square usa Ruby, Swift, Objetive-C, Go..
Entiendo que en la UCI sean fanáticos muchos a Java, pero, tampoco es para tanto. Supongo que estas compañías lo usen para cosas en específico, pero dudo que vuelquen todos su stack sobre esa tecnología.
Mis respetos para quien aportó la información, pero me parece que el artículo está bastante inconsistente: el título dice lo que el contenido no deja claro.
1. Se habla de «¿por qué tantas compañías vuelven atrás y abandonan lenguajes mucho más modernos para utilizar Java?»: Fui al enlace y habían 7 ejemplos de compañías que por muy grandes que puedan ser sus productos, no representan ni el 1% del software que se produce en el mundo.
2. «Java es una opción muy real»: Nadie ha dicho lo contrario, esto parece más que una exposición de argumentos una respuesta a una riña que ninguno de los que lee el artículo tiene referencia.
3. «En algunos entornos puede ser la solución más eficiente: En términos de concurrencia es más efectivo que otras tecnologías»: ¿por fin: la más eficiente o que “otras tecnologías” (cuyo conjunto queda indeterminado quitándole credibilidad a lo que se acaba de argumentar)?
4. «Hay una gran cantidad de software libre listo para ser integrado en nuestros proyectos, los que nos puede ahorrar muchísimo tiempo de programación.»: ahí podría estar hablando de cualquier otro lenguaje popular.
5. «El utilizar la JVM nos abre la puerta para un número mucho mayor de lenguajes que se ejecutan sobre la JVM»: ¿la JVM o Java? Si se habla en términos del lenguaje+JVM no veo la necesidad de mencionar el conjunto de lenguajes que han tenido que proliferar sobre la JVM a falta de ciertas características en el lenguaje original.
6. «la facilidad de encontrar expertos en Java»: Y es así y lo he visto: expertos en Java y en nada más. Que los pones a resolver una situación X con seudocódigo y terminan lanzando la CantFindTheSolutionToThisAlgorithmException(“Sin solución”). Por buenas razones las empresas contratan gente que ha tenido la disposición de aprender tecnologías «underground» porque son los que se adaptan mejor al cambio, porque al final lo que importa es un desarrollador ávido de conocimiento.
Se exponen algunas cosas que pueden ser de interés para la gente. Pero en general me suena melancólico. Sería interesante que se hablara de las bondades del lenguaje y de la JVM, así quien leyera podría interesarse. De lo contrario generaría riñas interminables sobre que es mejor y eso para nada es instructivo.
Saludos.
@whippiii dijo:
“””
expertos en Java y en nada más. Que los pones a resolver una situación X con seudocódigo y terminan lanzando la CantFindTheSolutionToThisAlgorithmException(“Sin solución”).
“””
Patrañas, todo experto en Java sabe que lo primero que tienes que hacer es un CantFindTheSolutionToThisAlgorithmThrowerFactory
Cuidado con lo de “java seguro”, en más de una ocasión ha explotado. Invito a que busquen los CVE. Unos ejemplos:
http://www.csoonline.com/article/2875535/application-security/java-is-the-biggest-vulnerability-for-us-computers.html
http://www.aabri.com/manuscripts/131731.pdf
Estimado @Elav, ante todo un saludo. Tal como usted plantea antes publicar un artículo es importante documentarse al respecto. Claramente este es un articulo bastante “sensacionalista” sobre Java y las tecnologías alrededor de la JVM, a todos nos queda más que claro que no existen balas de platas, cada lenguaje tiene sus ventajas y desventajas pero es innegable que para un lenguaje de “propósito general” Java está bastante bien parado. Afortunadamente muchos de sus problemas se han ido limando con los updates que se han introducido a partir de Java 8 y a futuro se espera sigan introduciéndose mejoras. Son pocas, para no decir ninguna, las empresas que desarrollando sobre un único lenguaje o tecnología porque lo consideran supremo. Esa filosofía la tenemos aquí, donde creemos que las tecnologías son martillos y todo lo que vemos es un clavo. Sin decir que a los desarrolladores nos encanta discutir, da igual si es Linux vs Windows, por IDES o lenguajes, y claro, es eso es sano. Sobre el caso de Twitter en particular que es el que usted comenta, la migración a “Java” ocurrió en el 2009, claramente no es a Java, sino a Scala, lenguaje sobre la JVM. Sobre el stack que nos pide analizar donde usted afirma no ver nada de Java le recomiendo revisar nuevamente un poco más a fondo respecto a Scala (JVM), Apache Storm (Clojure & Java), Hadoop (Java).
Saludos, Reisel.
Estimado @leiserfg la razón por la que en Facebook usan Hack es una pregunta retórica, este lenguaje fue creado precisamente para la HHVM, es un lenguaje propio para una VM propia, es de Facebook y para Facebook. No obstante fueron de los primeros en usar Hadoop en sus infraestructura de almacenamiento y como base de datos para las recuperaciones utilizan HBase y combinan con Cassandra, tecnologías escritas sobre Java. Una pregunta intesante es ¿si en Facebook no usan Java, qué sucede con Buck entonces? Si nos ponemos exquisitos Github utiliza Elasticsearch, esto es tecnología Java también y en el caso de Google, sin entrar en detalles ¿Android, GWT?
Saludos.
@adminroot: Si mi pregunta es retórica no tenías que responderla (para eso son las preguntas retóricas).
bah! en mi modesta opinión: las empresas con sistemas grandes no usan un solo lenguaje, ni siquiera un solo paradigma, Google por ejemplo tiene muchos cabezones especialista en diversas tecnologías, y la empresa les saca provecho, así mismo pasa con otras. Lo q no logro entender es el “dolor” de q no se hable de mi preciado lenguaje etc, etc (gollum gollum). Tb creo q el artículo usa ciertas frases difíciles de comprobar y demasiado absolutas, en definitivas cuentas es bueno saber q esas empresas retoman o cambian parte de sus plataformas a JAVA, pienso q hay más trabajo para programadores en JAVA.