Java conquistó el mundo

James Gosling's team at Sun Microsystems created Java in the 1990s for the Star 7 PDA, naming it after Indonesian coffee. The JVM and bytecode made "write once, run anywhere" possible, a major advantage over C/C++. Java faced early criticism for verbosity and resource use, but dominated servers and Android despite competition from C# and Kotlin.
Chapters
¿Conoces el lenguaje de programación Java?
¿No será Java?
En español le decimos Java, al igual que a la isla de Java y el nombre del café del que viene su nombre. ¡Ah!
Por eso tiene como logotipo una taza de café.
Decían que programar en Java era como tomar una buena taza de Java, un buen café que se debió de popularizar en Sun Microsystems en los 90.
Pero entonces, ¿antes tuvo otro nombre? ¿Y de dónde surgió? ¿Por qué lo crearon? ¿Cómo hace el mío tan rápido? ¿Por qué tiene una mascota tan rara?
No te alborotes, vamos por partes.
Antes de continuar, un inciso. ¿Te gustaría apoyar a nuestro canal? No olvides que puedes suscribirte y activar la campanita para no perderte futuro contenido. También se agradecen me gustas. Y además, si nos prefieres en formato podcast, podemos acompañarte desde Spotify. Ahora sí, continúa.
¿De dónde surge Java? En una fría noche de diciembre de 1990... ¿En serio fue por la noche? Seguramente no, pero conociendo a los estadounidenses y su relación con el trabajo, que era diciembre, ya sabes, días cortos y que estaban en mitad de un proyecto, cabe la posibilidad.
Ciñámonos a los hechos. Era diciembre de 1990.
Vale, dentro de Sun Microsystems se gestaba el proyecto verde, Green Project, por parte de Patrick Naughton, Mike Sheridan y James Gosling.
¿Gosling?
No, no está emparentado con Ryan Gosling.
¡Qué pena!
Se le dio carta blanca y un cheque en blanco para investigar cuál sería la nueva ola de la computación y ser los pioneros a la cabeza.
¿O los surferos con mayor destreza de la ola?
Finalmente apuntaron en dirección a lo que llamaron las tecnologías de martillo.
Utilizar la misma herramienta no hace que todos sean clavos, ¿no?
En realidad se basa en unificar todas las tecnologías en una y golpear conjuntamente.
No entiendo el símil.
En teoría ese era su modus operandi. Comenzaron trabajando con una PDA, esos dispositivos portátiles anteriores a los móviles.
Esos que Steve Jobs se negó a crear porque decía que tenías que introducir más información de la que obtienes de ellos.
Exacto. Era la Star 7, con la pantalla de 5 pulgadas, color LCD y pantalla táctil, wireless. Y mira esos gráficos, esas animaciones, ese Duke.
Vale, se entiende. Crearon un dispositivo. ¿Qué tiene que ver esto con el Proyecto Verde y Java?
El Proyecto Verde fue orquestado para crear este dispositivo, ya sabes, la nueva ola.
¿Y Java?
Necesitaban un lenguaje para programar todo el sistema o al menos las aplicaciones y aunque comenzaron con Star 7, su PDA, el objetivo era desarrollar para otros dispositivos y electrodomésticos.
¿Electrodomésticos? ¿Pensaban introducir el lenguaje en la lavadora?
Pues sí, de hecho hoy en día tenemos frigoríficos, lavadoras, televisores y otros sistemas que tienen programas dentro de ella.
¿Todos usan Java?
No, y de hecho el lenguaje inicialmente se llamó Oak, al menos la versión que incluyó Star 7. El nombre de Java.
Entonces, ¿el lenguaje desarrollado a principios de los 90 era Oak?
Sí, ese fue su nombre y no se pretendía su uso fuera de los dispositivos que desarrollaba Sun Microsystems inicialmente.
¿Qué les hizo cambiar de opinión?
Sun Microsystems se dio cuenta de que el mercado para dispositivos electrónicos No estaba creciendo tan rápido como esperaban y sin embargo había una creciente necesidad de un lenguaje de programación que pudiera utilizarse en diferentes plataformas y dispositivos, así que reformularon Oak.
Vaya, convirtieron una herramienta útil en un producto.
Exacto. Pero el nombre, aunque internamente fue llamado Oak, había muchos productos con nombres similares. No era estratégicamente bueno. Decidieron buscar un nombre mejor.
¿Cómo se les ocurrió el nombre de Java?
Porque evocaba asociaciones positivas. Java era una isla de Indonesia famosa por su café. El café transmite una idea de energía y estar alerta, y se consideró como una metáfora adecuada. Además, el dominio .com estaba disponible.
¿Y por qué la mascota de Duke?
El Duke fue creado también a principios de los 90 dentro del Proyecto Verde, como el dibujo animado que te da la bienvenida a la PDA, creado y dibujado por Joe Parlan.
Parece que reutilizaron bastante de esa PDA. Pero, ¿por qué un lenguaje para la PDA puede emplearse en otros sistemas tan diferentes?
En verdad, lo novedoso del Proyecto Verde no fue el lenguaje sino la plataforma. Que un mismo programa compilado pueda ejecutarse sin cambios en otros dispositivos y sistemas.
¿Cuál era el lema?
Escribe una vez, ejecuta en cualquier lugar. Ese es el lema de la máquina virtual de Java, JVM, que fue también el mismo objetivo de su predecesora, la máquina virtual de Oak. OVM.
¿En qué se diferencia esto de los desarrollos hechos en estos años en lenguajes como C o C++?
En principio, la portabilidad se hace mucho más simple. Mientras que para portar un programa escrito en C o C++ a otra arquitectura necesitas el código fuente y un compilador para esa arquitectura, Java proporciona el código compilado para su máquina virtual y solo es necesario tener una máquina virtual de Java en la arquitectura donde quieras ejecutar ese código. Todo se reduce a bytecode.
¿Bytecode? ¿Qué es eso?
Mientras que el código fuente se basa en sentencias, expresiones y construcciones de un lenguaje de programación, un bytecode es un lenguaje más fácil desde el punto de vista de la máquina. De hecho, se puede considerar una especie de código máquina.
Entonces, si ese bytecode es como si fuesen las instrucciones que ejecuta directamente la CPU, ¿por qué no compilar a código máquina directamente?
Porque cada arquitectura tiene su propio lenguaje máquina. Hoy en día, si empleamos PC, da igual si compras Intel o AMD, ambos siguen un código máquina similar. Pero con los nuevos procesadores de Apple ese código máquina es completamente diferente.
¿La máquina virtual de Java entonces tiene un único lenguaje máquina para todo?
Uno único para encontrarlos, para atraerlos a todos y atarlos en las... ¡tinieblas!
Ejem, ejem, vale, vale, queda claro. El compilador de Java crea una compilación en bytecode y entonces podemos llevar eso a cualquier máquina virtual de Java que esté en un PC, un Mac...
Una lavadora, un frigorífico, una batidora... ¿Una batidora? Bueno, un robot de cocina.
Vale, y aunque C y C++ no pudiesen hacer eso con sus compiladores, ¿no podrían haber utilizado el lenguaje y haber creado una máquina virtual para ello?
Siempre hay tendencias. Si emplean C o C++, se terminaría asociando mal a la máquina virtual con una forma alternativa de trabajar con C y C++, que de seguro requeriría cambios y terminarían intentando incrustar código ensamblador y otras malas prácticas.
¿Malas prácticas? ¿No consideraban la programación de estos lenguajes buena o segura?
No, para nada. Uno de los objetivos de crear el lenguaje Oak fue también la complejidad de C++ y sus problemas de seguridad.
¿Complejidad en qué sentido?
Todo programador de C y C++ debe estar entrenado para buscar fugas de memoria, los memory leaks. Esta tarea es compleja porque se deja al programador solicitar al sistema operativo la reserva y liberación de memoria, y esto derivó en olvidos a la hora de liberar la memoria o incluso el uso de algún puntero a memoria que ya no pertenecía al programa.
¿Y cómo solventó este problema Oak?
Evitando el uso de punteros a memoria. Se reserva espacio para un objeto y en el momento que se deja de utilizar, el recolector de basura lo libera.
Entonces, si la memoria deja de ser un problema para el programador, ¿cuáles eran los problemas de seguridad?
Precisamente los punteros. Al poder acceder a cualquier porción de memoria, incluso la parte de la memoria que almacena el código, pudiendo cambiarla en tiempo de ejecución, hay muchos exploits que hacen uso de estas vulnerabilidades existentes en C y C++.
Me queda clara la ventaja de Oak y posteriormente Java. ¿Hubo algún aspecto negativo?
La adopción de Java. Al principio, como casi con cualquier tecnología, hubo rechazo. Se propusieron cambios bastante radicales como el uso de una máquina virtual o la recolección de basura y esto no gustó a muchos de los programadores de C o C++.
¿En qué puede ser perjudicial algo de ayuda?
Consideraban que la curva de aprendizaje era más empinada porque quienes ya programaban en C y C++ debían aprender a manejar los algoritmos elementos al estilo de Java.
Pero para los nuevos programadores sería mejor, ¿no?
Otra de las quejas era el diseño del lenguaje puramente orientado a objetos. Mientras que C++ es un lenguaje de programación con características de orientación a objetos, Java es un lenguaje orientado a objetos, pero no obstante limitaron o eliminaron algunas características de la orientación a objetos que eran muy confusas en C++, como la herencia múltiple o las plantillas. Aunque estas últimas fueron implementadas como tipos genéricos mucho más tarde.
Si algunas de las características vinieron más tarde y otras eran realmente nocivas, no se ve tan mal, ¿no?
Sí, aunque no eran las únicas quejas. Programando en C o C++ se obtiene un código nativo a la arquitectura. Esto se nota en el tiempo de ejecución.
¿Eran tan lentos los programas hechos en Java?
No solo lentos, también consumían muchos recursos. CPU y memoria principalmente.
En los 90 supongo que no les gustaría que un programa fuese lento y consumiera toda la memoria.
No, de hecho era el principal motivo para descartar el uso de Java inicialmente. El problema fue que desarrollaron una versión de Java específica para móviles, J2ME, una versión específica para empresas, J2EE, y una para computadoras de escritorio, J2SE. Pero algo cambió en 2003. Sun Microsystems decidió unificarlo todo y lanzar un único Java junto a Christina Aguilera. El auge de Java. Recuerda que a principios de esta década y siglo surgió C#, tal y como contamos en el episodio anterior, y un competidor siempre hace que todo se agilice, que se hagan campañas más agresivas y que se abandone la zona de confort en la que estaban cuando no había competencia para pasar directamente al ataque.
Entonces, ¿lanzaron una campaña publicitaria con Christina Aguilera para mostrar la potencia de un único Java?
Sí, e incluso hicieron cambios estéticos notables. Por ejemplo, en el logotipo. Seguía siendo lo mismo, pero ya sabes, simplificando, siguiendo esa tendencia de este siglo a simplificar los logos al máximo.
¿Fue esto suficiente para lanzar a Java sobre sus competidores? Y que se empezase a usar. ¿Fue suficiente para iniciar su reinado?
Este fue uno de los puntos, pero el más importante fue su avance en el desarrollo de interfaces gráficas y de multimedia y la interactividad con el navegador. ¿Te suenan los applets?
¿La introducción de Java en el navegador a través de cuadros donde se incrustaba un cuadro de aplicación? ¿Esto fue novedoso? No sé, a mí me resultaba feo que no ocupase la pantalla completa.
Pero resulta muy práctico y fácil para distribuir software. En el punto álgido de internet, las empresas desarrollaban una página interna donde, al acceder desde un navegador, se tiene acceso a software actualizado de la empresa sin instalar nada.
Entiendo. Esa característica fue determinante para que grandes empresas y medianas empresas quisieran desarrollar su software y mostrar lo fácil de instalar y actualizar que era para sus usuarios.
No solo eso, estas aplicaciones eran muy seguras. Porque los applets no tienen control ni acceso del computador donde se ejecutan. En un momento en el que Microsoft estaba indicando lo buenos que eran sus controles ActiveX u OLE para crear páginas web con código nativo, Java creó lo mismo pero de forma más segura.
Entiendo ahora el resquemor de Microsoft.
Bueno, no te creas, a día de hoy los applets ya no existen precisamente por motivos de seguridad. Irónico, ¿no?
Bueno, el lenguaje y su plataforma parece genial. No veo ningún punto por el que no pueda considerarse una opción óptima para desarrollar software. ¿No vamos a sacar trapos sucios?
Contras de Java. Ciertamente no son todo luces en el mundo del desarrollo de Java. También hay sombras. Proyectos como Cassandra, Kafka u otros comerciales como Hira han demostrado que se puede construir grandes piezas de software con Java.
Pero...
Pero muchos de esos sistemas no son óptimos para según qué tareas. El consumo de memoria de Java es una de las principales quejas de administradores de sistemas y la verbosidad del código, su excesiva burocracia para hacer tareas muy simples, la queja y dolor de muchos programadores.
Pero no todos opinan lo mismo.
Obviamente, hay programadores que agradecen esta verbosidad y tener todo escrito de forma explícita. En definitiva, un lenguaje es tan malo como el peor programador que lo emplee y tan bueno como la media de los buenos programadores que lo usan.
Entonces, si vemos solo código escrito en Java por buenos programadores, nos transmitirá la sensación de que Java es un buen lenguaje, y si vemos solo código escrito por malos programadores, tendremos la sensación contraria.
Exacto. Pasa con todos los lenguajes. Java no es mal lenguaje, pero es verdad que hay momentos en los que se priorizan características específicas.
¿Como que no sea tan verboso y que tenga características funcionales?
Exacto. La parte positiva es que la máquina virtual de Java ejecuta bytecode y a este bytecode se pueden convertir otros lenguajes, por lo que ha motivado que otros lenguajes como Kotlin, Scala o Clojure entren en escena y den más color y riqueza al entorno de Java, haciendo que propuestas para la máquina virtual permee en Java añadiendo características funcionales al lenguaje. Conclusiones. Java es un lenguaje de programación que se ha mantenido en empresas no solo por sus beneficios sino por sus características como escribe una vez, ejecuta en cualquier lugar, haciendo que su software sin necesidad de modificarse a lo largo del tiempo siempre se ejecute en nuevo hardware.
Esa es una gran característica para ahorrar en mantenimiento.
En mantenimiento siempre habrá que invertir pero al menos con Java será menos y eso es lo que atrae a las grandes empresas de este software. Además, haber realizado campañas tan agresivas ha creado un círculo virtuoso.
¿Un círculo virtuoso?
Sí, ha motivado que muchas empresas soliciten el uso de este lenguaje generando puestos de trabajo y muchos programadores aprenden este lenguaje y no otro porque hay muchas ofertas, haciendo que más empresas se unan a implementar Java y más programadores a aprenderlo.
Y no podemos olvidar que estuvo para desarrollar aplicaciones en Android desde sus inicios.
¡Cierto! Siempre tuvo mucha presencia en el desarrollo de aplicaciones móviles y aunque ahora hay otros lenguajes compitiendo en la misma plataforma, Java siempre será visto como el lenguaje predominante. Pero tú qué piensas, ¿le comerá el terreno Kotlin? ¿Scala resurgirá con más fuerza? ¿Los lenguajes tipo Lisp como Clojure se alzarán? ¿Crees que C# terminará venciendo a Java? Déjanos tu comentario.
More from Manuel

Historia de los Lenguajes de Programación: años 1960-1969 #basic #apl #simula #lisp #logo

¿Compilador o intérprete? La historia de una rivalidad que comenzó en los años 40








