Es común ver en ofertas de trabajo de algunas empresas o presentadas por reclutadores ver la frase “Buscamos un programador Java”. A la vez que vemos a algunos desarrolladores de Java, sobre todo los más experimentados decir que “Java es muy difícil de dominar”. En realidad son frases válidas, pero la primera es un poco ambigua. En esta entrada veremos que es Java en realidad y porque sería conveniente que los proveedores de empleo especifiquen un poco mejor las ofertas laborales.

Cuando se habla o busca a un programador Java en realidad se está refiriendo a una persona que domine o conozca al menos alguna parte de la plataforma Java. Desde la creación de Java por Sun Microsystem por un tema de marketing se ha denominado Java a todo, que es en sí un conjunto de al menos tres elementos:

  • El lenguaje de programación en sí.
  • La máquina virtual de Java. (JVM)
  • La plataforma Java (Java SE, JavaFX, Java ME, Java EE, Java Card), y/o algún framework de algunos de estos elementos, ej: Spring.

Un desarrollador para enfrentarse a un empleo en el que soliciten un programador Java deberá conocer el punto 1 y 2, y al menos dominar un campo del conocimiento de la plataforma.

Vayamos desde el principio

Java fue desarrollado en Sun Microsystem por James Gosling, actualmente anda por la versión 16 y pertenece a Oracle luego de que este último compara a Sun en 2010 por 7400 millones de dólares. El nombre inicial era OAK que significa Roble, en honor a un árbol que estaba cerca de la oficina de Gosling.

La idea inicial de la creación de Java fue crear un lenguaje de programación similar a C++, fuertemente tipado y orientado a objetos, pero con una máquina virtual propia, el lema central fue: “Write Once, Run Anywhere (escríbelo una vez, correrlo en cualquier sitio)”.

Actualmente Oracle anuncia que de Java se ejecutan más de 51 billones de máquinas virtuales en el mundo, siendo probablemente,- aún- la tecnología más usada.

¿Porqué es tan difícil de dominar Java ?

El término o criterio que existe sobre porque es difícil dominar Java está atado a que popularmente se le llama Java a todo el ecosistema de soluciones y a ciencia cierta dominar todo es bastante complejo y tardaría (al menos) una vida dedicada aprenderlo en nivel experto. 

Veamos a continuación las partes principales de la plataforma.

Java SE, o Java Standard Edition es la base de la mayoría de los elementos de la plataforma, en las últimas versiones se ha ido simplificando y modularizando como resultado principalmente del proyecto JIGSAW teniendo un producto más simple y mantenible.

Forman parte de la JSE paquetes de propósito general y usados en casi toda la plataforma como:

  • java.lang 
  • java.io
  • java.math
  • java.net
  • java.text

Estos paquetes contienen las clases e interfaces fundamentales del lenguaje Java, incluye algunas clases que son la raíz de la jerarquía de clases, funciones matemáticas, manejo de hilos, etc. Algunos elementos más conocidos son: Object (raíz de todos las clases en Java), Class (la base del paquete reflection), Throwable, Error, Exception, RunTimeException (base de los diferentes tipos de error), String y Math.

Java SE es la base o puerta de entrada de todo programador que desee aprender Java.

Java EE, o Java Enterprise Edition es el área de la plataforma destinada a los proyectos empresariales, pero desde el principio nunca tuvo la capacidad de ser fácil de entender o de ser productivo por sí mismo, sin embargo es bastante eficiente y escalable. 

Con el surgimiento de los entornos Cloud Native y de los microservicios Java EE la pasó mal, pero posteriormente alternativas como Microprofile o Quarkus lo reempulsaron. Java EE es importante aprenderlo para entrar en el mercado de desarrollo de aplicaciones empresariales, pero no es necesario comenzar por él, se puede iniciar directamente por frameworks como los anteriores o directamente por Spring o Spring Boot. Algunas tecnologías del stack de JEE son: JSP, JPA, Servlets, JDBC, EJB, JMS entre otros.

Java ME, o Java Micro Edition es el elemento de la plataforma destinado a los dispositivos de tamaño reducido (teléfonos, TV, IoT, etc) es el que más mercado ha perdido en los últimos tiempos; muchas tecnologías del mercado se han especificado para cada rama particular de la movilidad, y aunque algunas emplean el lenguaje Java (como Android), no han optado por la variante de Java ME. Es un proyecto próximo a morir muy probablemente.

Java FX, es la variante Java para construir aplicaciones de escritorio de alta calidad gráfica, se nota la diferencia entre una aplicación Java Swing (parte de JSE) y una construida con Java FX; una aplicación construida con Java FX incorpora un motor “tipo CSS” que permite estilizar las aplicaciones. 

Anteriormente era parte del core de la JDK, pero luego de la versión 11 fue separado como un elemento independiente. En realidad el avance de JavaScript y el surgimiento de otras tecnologías basadas en la filosofía del browser en el escritorio como ElectronJs o Nw.Js le han ganado terreno y parece que va a ir desapareciendo poco a poco.

Java Card, es el último de los componentes de la plataforma Java, está orientado a construir aplicaciones que se ejecutan en tarjetas inteligentes y dispositivos empotrados. Card es un componente de uso muy específico, pero ampliamente usado en las tarjetas como las SIM (teléfonos celulares), fue presentado en 1997 y su última versión es de 2015. El bytecode de Java Card es un subconjunto optimizado del disponible en la plataforma Java.

Asociado a estos componente de la plataforma Java en algunos de ellos existen marcos de trabajo específicos y cientos de miles de librerías y recursos útiles para los desarrolladores que lleva tiempo asimilar y aprender para llevar a entornos productivos.

Si deseas aprender un poco más de la JVM y su Garbage collector (Recolector de basura) puedes pulsar sobre los enlaces respectivos. Además puedes aprender un poco más sobre las siglas más comunes usadas en la comunidad Java.

Espero te haya gustado y sea útil esta entrada.