Java cumple hoy 20 años. El 23 de Mayo de 1995 vió la luz de forma pública, durante la conferencia SunWorld ¡Qué tiempos! La compañía Sun Microsystems presentó el lenguaje en el que había estado trabajando durante más de cinco años de forma interna el equipo de James Gosling (el padre de la criatura). Un auténtico lenguaje moderno concebido para funcionar en cualquier dispositivo, esa fue la idea.
Para acompañar el anuncio de esa fecha, el pelotazo fue que se integraría con el navegador Netscape, el nacimiento de los Applets de Java. La web empezaba a asomar su potencial e hizo virar el rumbo del lenguaje. Dándole popularidad y cierta omnipresencia en cualquier navegador y sistema operativo.
Java, sin duda, es uno de los lenguajes más populares de la actualidad. Desde 2010 es propiedad de Oracle, el gigante tecnologico que aglutina toda su tecnología. Su influencia es tremenda en distintos ámbitos de programación. Representa una pieza fundamental en el negocio de muchas compañías, debido a su fuerte presencia gracias a sus numerosas herramientas empresariales, tanto en la cara más front de web, de aplicaciones en el cliente o en el servidor.
Es el principal lenguaje en el que ha desarrollado su carrera profesional muchos programadores. Seguro que tú estás entre ellos. Así que tenemos mucho que agradecerle, aunque alguna vez nos cabree.
Y como usuario, no creas que no te toca tu parte: Java ha sido ese componente presente en muchos navegadores hasta hace bien poco. Los applets que comentamos eran “la moda” y muchas páginas web de su tiempo te exigían instalarlo para ejecutar cierta funcionalidad. Hasta entonces imposibles de otro modo. Y, por supuesto, infinidad de aplicaciones de escritorio que necesita la JRE (el entorno de ejecución de Java para funcionar), casi todos como usuarios nos ha tocado instalar para ejecutar alguno de esos programas. También fue fundamental para posibilitar las primeras aplicaciones en esos móviles que admitían J2ME. Y por supuesto, es la pieza fundamental sobre el se sustenta Android, aunque algunos quieran matarlo de forma precipitada.
Un nacimiento lleno de anécdotas, incluso en el nombre
En 1991, Sun Microsystem decidió invertir en la creación de un nuevo lenguaje que bebiera de lo mejor de cada uno de los existentes hasta la fecha. Llegó para cubrir una necesidad: poder se ejecutado en cualquier plataforma, introduciendo el concepto de máquina virtual.
El equipo de Jame Gosling, conocido como Green Team, trabajó 18 meses en las oficinas de Menlo Park (California) en crear lo que aún sin nombre se conocía como The Green Project. Más tarde pasó a llamarse Oak, aunque se descartó al ser una marca registrada. Finalmente llegó el nombre definitivo: Java.
Hay distintas anécdotas sobre la elección de este nombre. Las más extravagantes cuenta que es el acrónimo surgido del nombre de sus principales creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros, incluso se limitan a definirlo como un acrónimo inventado: Just Another Vague Acronym("sólo otro acrónimo ambiguo más"). Pero el que más fuerza toma, simplemente lo justifica por el tipo de café disponible en la cafetería más cercana dónde trabajaban sus creadores. De hecho, es uno de los símbolos más reconocidos de Java en muchas aplicaciones y plataformas.

Write Once, Run Anywhere ("Escríbelo una vez, ejecútalo en cualquier lugar")
Este era el principal leitmotiv que tenía en la cabeza James Gosling. Cualquier aplicación escrita en Java podría ejecutarse de la misma forma en cualquier hardware, independientemente de la plataforma.
En ocasiones, un quebradero de cabeza, debido a distintas razones: sobre todo por las implementaciones que ha sufrido esa máquina virtual JVM oficial y derivadas en los distintos sistemas operativos. Microsoft fue demandada por la propia Sun Microsystem debido a que no respetaba las implementaciones de compatibilidad de ciertos componentes en su implementación para Windows, causa que fue ganada y el gigante de Redmond tuvo que pagar 20 millones.
Sun desde el principio aportó su propia JVM, HotSpot, como referencia oficial de la especificación pero cualquiera era libre de implementar la suya. En teoría las plataformas debería ser compatibles y no lo son al 100%. De hecho, hasta la liberación del código de Java, la comunidad de software libre, encabezada por Richard Stallman abogaba por el uso de IcedTea como la plataforma libre para evitar caer en la trampa de un lenguaje cuya plataforma y APIs no eran del todo libres.
Finalmente, Java fue re-licenciado en 2006 con una GPL que aseguraba que nadie era propietario del lenguaje. Cosa que Sun Microsystem apoyó desde el principio, aunque no fue hasta la fecha dónde fue ratificado. Oracle tuvo que asumirlo, muy a su pesar, en las diligencias abiertas en el juicio contra Google por el uso de ciertos componentes propios de librerías internas de Java.
¿Dónde funciona Java?
La parte de servidor de aplicaciones, quizá sea una de las partes más populares. Numerosos desarrolladores se dedican a esta faceta. Sin entrar en aspectos muy técnicos, su base está sustentado por la especificación de Servlets y JSP.
Las tecnologías en el servidor han servido para popularizar distintos framework como Struts o Spring Framework, en esta última además a crear un auténtico ecosistema de plataformas bajo el sustento de Pivotal. Pero sin duda, la Apache Foundation ha sido uno de los mayores contribuidores. Y no podemos olvidar a contenedores de aplicaciones como Tomcat, JBoss o Jetty que han dado el sustento necesario para poder ejecutar en servidor aplicaciones web. Podemos decir que Java está presente en infinidad de tecnologías de servidor.
Aplicaciones de escritorio. Existen a día de hoy infinidad de aplicaciones creadas utilizando el JRE (el entorno de ejecución necesario). JAVA aportó, además de la propia plataformas, librerías como Swing o AWT para la creaciones de interfaces gráficas
En el navegador web, aunque cada vez menos. Sobretodo desde que los navegadores se pusieran serios a la hora de permitir la ejecución de Applets sobre plugin obsoletos con innumerables fallos de seguridad. Aún así existe aún complementos en los distintos navegadores para usarlos. Desde sus inicios, aunque alcanzó una gran popularidad, no llegaron a ser algo realmente eficiente debido a sus limitaciones de velocidad y su gran tamaño en una época en la que el ancho de banda de las conexiones era limitado.
Aplicaciones móviles tanto las primeras aplicaciones J2ME, como las actuales aplicaciones desarrolladas para Android. Java es el lenguaje principal de uno de los sistemas operativos más numerosos en smartphones. Gran parte de su ejecución se basa en Java y componentes de su máquina virtual.
¿Cómo ha cambiado la forma de programar Java en estos 20 años?
Recordar cómo era el mundo de la programación en 1995 no es tarea fácil. La programación orientada a objetos existía, pero raramente era usada en las aplicaciones que conocíamos. Pero lo más llamativo era el tema de tener que recompilar y empaquetar la aplicación que estamos casi para cualquier arquitectura, distintas versiones del sistema operativo, por ejemplo el caso de UNIX, generar el código máquina particular, etc.. Java llegó con su máquina virtual prácticamente portable sin problemas a cualquier configuración, y sobretodo, sin tener que hacer modificaciones en nuestro código.
En estos 20 años de historía, Java ha alcanzado una cifra de popularidad enorme entre la comunidad de desarrolladores. Desde hace ya unos años forma parte del Top TIOBE de los lenguajes más utilizados. Más de 9 millones de programadores lo utilizan a diario, según diversas estimaciones.
Sus referentes fueron: Smalltalk del que adquirió el carácter orientado a objetos, un recolector de memoria inspirado en Lisp, las interfaces múltiples y la herencia única de Objective-C, la documentación en línea de CWeb, los tipos primitivos y el control de estructuras de C, el tipado de objeto de Ada. De todos adquirió lo mejor y depuró algunas características.
Java introdujo características hasta ahora no vistas, como la comprobación de excepciones, el uso de Unicode. Pero sus piezas angulares fueron, sobre todo, la idea que cualquier programa estaba compuesto por clases y objetos reutilizables y la incorporación de un Garbage Collection que facilitaba la liberación de memoria hasta entonces realizada a niveles más bajos de programación.
Como comentábamos al principio, Java asomó la cabeza, de forma inesperada y casi dando un giro a lo que se planteó inicialmente, en los primeros navegadores: Netscape fue su empujón con los Applet y el recién nacido mundo web. Paradójicamente nunca funcionaron bien, ni siquiera eran capaces de interactuar con el HTML o el JavaScript de la época, pero fueron necesarios para ciertas funcionalidades de las páginas web de la época.

Pero donde, sin duda, Java es popular es la parte del servidor dónde ha creado un amplio ecosistema de programación basado en Servlet y JSP. Basado en Java Entreprise Edition ha construido un gran número de herramientas: framework como Spring o Struts, servidores como Tomcat, el uso de bases de datos Hibernate, JPA, etc.. Toda una interfaz de conexión de red, porque Sun siempre tuvo la idea de que “The Network is The Computer”.
También tenemos que dar gracias, que sobre Java se crearon las primeras herramientas para hacer test unitarios como JUnit de la mano de Kent Beck y Eric Gamma. TDD nació de allí.
Una generación de nuevos lenguajes han crecido bajo su JVM como Groovy o Scala y muchos más. Muchos de ellos completando lo que le faltaba a Java. Siendo sinceros, han pasado 20 años y evidentemente hay cosas que han quedado obsoletas y llenas de burocracia sintáctica.
Sun Microsystems fue la creadora del lenguaje pero realmente no fue la que mayor beneficio sacó de él economicamente. Hay que remarcar su influencia en el mundo de la programación también fue vista en el negocio del software. Compañías como IBM u Oracle han crecido sacando proyecto de él. Esta última acabó comprando Sun y llevándose Java y el resto de tecnologías Open Source (como MySQL anteriormente compradas).

Las críticas a Java
El rendimiento ha sido siempre mirado con lupa. La máquina virtual de Java fue pensada para abstraer del hardware, sin dar acceso directo a los recursos y generar los bytecodes independientes de la plataforma. Todo ello sumaba latencia, aunque esta JVM ha sido afinada y en un tiempo adecuado de “calentamiento” de recursos puede alcanzar valores realmente eficaces, Java siempe ha llevado consigo la etiqueta de lenguaje lento.
Quizás lo más preocupante ha sido el famoso Day-Zero de seguridad que llevó a una alarma social de la necesidad de tener instalado Java en el navegador con la gran cantidad de software malintencionado que podría atacar los applets con versiones comprometidas de Java. Siempre ha sido recomendable disponer de la última versión parcheada, evitando que usuario no muy expertos en programación dieran excesivos permisos a un software firmado por alguien sospechoso.
El lenguaje en sí ha ido quedando obsoleto con el tiempo. El salto de funcionalidad entre versiones no ha sido tan generoso como nos gustaría. Problemas de compatibilidad aún hacen que muchos sigan programando en Java 7, en lugar de su última versión como Java 8. Agrietado por el tiempo que paso entre una versión y otra, casi 8 años.
Un futuro marcado por el rendimiento y su verdadera vocación multiplataforma
El futuro obvio de Java es su próxima versión (Java 9) anunciada con fecha exacta para el 22 de septiembre de 2016. Con él llegarán características para hacerlo más flexible como la modularidad. A día de hoy Java es enorme, si queremos usar una de sus APIs necesitamos traernos todo.
También incorporará nuevos estándares integrando JSON Light Weight que muchos agradecerán al trabajar con bases de datos noSQL, también la incorporación del futuro estándar de HTTP2 (sobre todo en la faceta de lenguaje del servidor). Y, finalmente, la optimización de la JVM tanto la caché de código como la del compilador.
Todas estas mejoras vienen empujadas por sus competidores en el terreno del rendimiento y modularidad. Y uno de los que está pegando fuerte es Node.js, creando un ecosistema parecido a Java entorno a JavaScript.
Java tiene una fuerte presencia en el mundo móvil con Android. Google tiene mucho que decir sobre ese tema. Ya se ha rumoreado recientemente su salida de Android a favor de otros lenguajes, aunque es muy muy pronto para matarlo: Go o Dart está verdes aún.
Su piedra en el camino es el rendimiento y la versatilidad. El futuro estará marcado por la Internet de las cosas. Varios lenguajes ligeros se posicionan para situarse en ese paradigmático objetivo de ser multiplataforma, paradójicamente ese fue el enfoque por que nació Java, quizás lo consiga después de estos 20 años.
Foto | Flickr
Ver 72 comentarios
72 comentarios
nvidia
El Java desaparecerá de casi todos lados como el Flash, tiempo al tiempo.
galboterix
Felicidades a todo el equipo que hizo posible su nacimiento! A disfrutar los años que le queden, espero que muchos! hahaha
lordfairfax.fairfax
>> 20 años de Java: ¿En qué quedó el sueño de programar una vez, ejecutar en cualquier lugar?
Pues quedó en la realidad porque yo programo con Eclipse en Windows y el .war que genero se ejecuta luego en la JVM de un servidor AIX perfectamente, hoyga.
Una pequeña errata: "parecido a Java entorno a JavaScript", debería ser "en torno", separado.
Por lo demás, buen articulo.
jcperan
Bajo mi opinión, Java marco una filosofía que otros (como .net) han heredado. La máquina virtual permite la separación entre el hardware y el software. Puede gustarnos mas o gustarnos menos pero esa filosofía es la que que se está imponiendo tras 20 años de historia.
Es más lento (o no con el hardware actual), más avanzado o menos, pero está marcando unas pautas en el desarrollo de los lenguajes de programación.
ze_rovira
Curioso el gráfico de lenguajes más utilizados. Los de C seguimos siendo mayoría... esto es contando C++ o no?
cebado
"Pero el que más fuerza toma simplemente lo justifica por el tipo de Java que disponible en la cafetería más cercana dónde trabajaban sus creadores."
¿Alguien me lo explica? No entiendo nada.
frobs
Buenas,
En mi opinión no entiendo tanta radicalidad...en afirmaciones como...Java tiene un rendimiento malisimo, o Java esta condenado a desaparecer.
Sinceramente, no entiendo vuestro punto de vista...¿Por que ha de desaparecer?¿Por que queréis que desaparezca?
En primer lugar dudo mucho que desaparezca, por una sencilla razón si vais a cualquier empresa grande, véase consultora/charcutera, usará dos lenguajes principalmente Java y .NET para sus productos, si creéis que van a dejar de usar Java en sus productos algunos de los cuales desarrollan desde hace años estáis muy equivocados...Si queréis un ejemplo podéis mirar las aplicaciones bancarias que todavía están escritas en COBOL y siguen manteniéndose en COBOL.
En segundo no seamos FanBoys...Java es mas lento que C....si y que C++ también...pero si alcanzáis grandes consumos de ram es por que (perdón por la expresión) estáis haciendo código de mierda, existen muchas formas de optimizar el ByteCode que genera Java usando buenas practicas, otra cosa es que queráis aprenderlo, o que os lo den hecho.
Si queréis un ejemplo practico una aplicación web hecha con el framework web Spark servida por Winstone Lite consume 12 Megas de Ram....¿12 Megas de ram para tener una aplicación web funcionando os parece un abuso? ¿un derroche de Ram? ¿En serio?
Twitter no usa .NET, ni Facebook, no se...¿Podéis decirme alguna gran empresa de comunicaciones de las que ahora despuntan que use .Net? De verdad es que no me suena ninguna....solo es curiosidad...en mi opinión esas empresas saben bastante bien lo que hacen...
¿Existe en C++, C, o .NET algo parecido a vert.x un framework web pensado para que todas las operaciones sean non-blocking al mas puro estilo Node pero corriendo sobre ese lenguaje?
¿O una tecnología como Apache Spark para la computación distribuida en clustering?
Cada lenguaje/plataforma tiene un propósito, Java no es la respuesta a todo, es la respuesta a un tipo determinado de problemas, al igual que .NET, C, C++, Python, Ruby, Rust......
Pensemos un poco antes de criticar o despreciar algo que lleva 20 años entre nosotros...y que esta el primero en la lista TIOBE.
Un saludo.
razhan
Wow, es increible el efecto iphone para Objetive-C
Por mi parte, yo en mis 32 añitos aprendiendo Java ahora por primera vez, fijate :D
dargo1705
Buenas...., si si... que mucho Java y muchos "colorines" en la gráfica, pero... dentro de 20 años más no habra ninguno (excepto el C quizas)... y los que programamos con dinosaurions continuaemos, con nuestra pantallita negra y verde....
Larga vida al PL/I, larga vida al COBOL !!!,,, jejejeje..
Saludos !
careuno_1
Cuando empecé a estudiar, aprendí C pero al año siguiente empecé con Java y se me daba muy bien. En el momento que descubrí otros lenguajes, le dije adios a Java y no lo he vuelto a tocar, excepto en un par de ocasiones que no me quedó más remedio, ni en el mundo laboral ni el personal.
koaltares
Decir que Java es bueno por qué funciona en todos los dispositivos, es análogo a qué el Sexo anal es bueno por qué funciona en todos los géneros.
jfdl
Tiene mucho que mejorar, pero también tiene mucho bagaje detrás.
En manejo de hilos es el rey indiscutible, y con ello el servidor, apis como JMS hacen fácil lo que en otros stacks es imposible sin recurrir al S.O., sin entrar en su bestialidad de librerias para todo tipo de problemas o herramientas maven, ant, junit (picado por Erich Gamma, hay es poco) ...
Para otras tareas hay otros stacks mas productivos, como en aplicaciones escritorio, pero en server, es muy poderoso en el ámbito de aplicaciones empresariales.
Y decir que si bien el java de JRE y el java de dalvik/art tienen en común la sintaxis,tienen diferentes compiladores que generan diferentes bytecode, con diferentes ordenes, y para ser usados y tratatados de manera distinta, etc etc. Resumiendo, que no tienen nada que ver.
Un saludo y happy coding.
arielwagner
Felicitaciones y feliz aniversario Java. El lenguaje de Java ha sido uno de los lenguajes que me ayudaron a crecer profesionalmente. :)
careuno_1
Yo he programado con Java un largo tiempo pero no se por qué pero prefiero hacer las cosas en otros lenguajes
marjuanmanuel
Solo ha quedado en un sueño el tener que escribir una vez y ejecutar donde sea.
blogfabian
¿Por queeeeeeeeeeeé? después de 20 años, sigo sin entender porque es tan popular, no es el más rápido, no es el más "amigable", no tiene las mejores librerias, no está optimizado , no es el mejor multiplataforma. En fin, hay muchas alternativas, ningún lenguaje es todo poderoso pero este no es poderoso en nada. Para mi, está destinado a terminar haciendo "pinches" interfaces gráficas.
Si ud crea una app en una versión de JAVA, ni piense en que ud o sus usuarios puedan actualizar a la siguiente versión, porque, su app se va a crashear, o tendrá que tener las dos versiones instaladas. Tal cual .Net ¿Por qué se alegran de que se haya liberado si es la misma mierda? 4 ó 5 versiones de .Net framework instaladas porque no son compatibles.
En fin. Hay apps muy buenas hechas en JAVA, pero es mérito de los programadores... ¿Ya dije que era JAVA era un mierda? Bueno, en fin. Espero que no haya que selebrar los otros 20 años.