java language

«Go, Rust, C++, C#, Java…¿Qué lenguaje me gusta más?» (parte 2 – Java)

En este post vuelvo a retomar mi análisis de los lenguajes de programación mas en boga. Ya recordaréis que en la primera parte de este análisis echamos un vistazo a C/C++ y a C#. Si no has leído ese post, te sugiero que lo leas también para tener una visión completa de la comparativa.

En este post vamos a analizar Java, y de paso me he permitido mencionar brevemente a JavaScript dentro del mismo aunque no lo analizaremos en profundidad. Algunos no estaréis de acuerdo, pero recordemos que no estamos analizando plataformas de desarrollo o «frameworks«, sino lenguajes de programación, y en este caso JavaScript no deja de ser un pequeño subconjunto de Java; por no mencionar además que es un lenguaje de «scripting« – y sobre este tipo de lenguajes tengo una «solida opinión» -.

Lenguaje Java

En este caso vamos a hablar de un lenguaje de programación también con «solera» como indiqué al hablar de C# o C/C++ en la entrega anterior de este análisis. Si nos vamos a su página en wikipedia, Java es un lenguaje originalmente diseñado por James Gosling sobre el año 1995 cuando éste trabajaba para la extinta Sun Microsystems (ahora parte del emporio de Oracle para mayor gloria de su dueño Larry Ellison)

Desde su primera «release» pública allá por 1993, el lenguaje ha publicado 13 «major versions» siendo Java 12 la última de ellas. La verdad es que Java supuso un antes y un después de los lenguajes de programación y conjuntamente con C/C++ aportaron una serie de principios en su diseño que aún hoy son seguidos y adoptados por otros nuevos lenguajes. En concreto, durante el diseño de Java se intentaron (ya veréis porqué digo lo de se «intentaron») dar cabida a los siguientes principios:

  • Simple, orientado a objetos y familiar: Aquí poco que comentar pues realmente en sus orígenes era un lenguaje que copió parte de la sintaxis de C/C++ por lo que era muy familiar para los que veníamos de dichos lenguajes, y también cumplía con la OOP de manera bastante aceptable.
  • Robusto y seguro: Aquí me parece que este principio se quedó un poco fuera de la implementación final. De hecho, si tiramos de archivo, La plataforma Java ha sido ampliamente mentada por los expertos en seguridad por sus grandes y frecuentes vulnerabilidades. Para muestra un botón de la CISA norteamericana.
  • Portable e independiente de la arquitectura: Originalmente el lenguaje cumple con este principio, pero lamentablemente no podemos decir lo mismo las diferentes implementaciones de su JVM que hacen que este principio se tambalee (sin mencionar además su política de licenciamiento desde que Oracle entró en escena). Pero si alguien consiguió con éxito el «code once, run everywhere» ese fue Java.
  • Ejecución de alto rendimiento: Digamos que tomó unas cuantas versiones hasta que los lenguajes con VM tuvieron un rendimiento a la altura de los lenguajes compilados. Todavía recuerdo las tremendas diferencias de rendimiento entre las primeras versiones de Java y sus coetáneos. Incluso, de nuevo, las diferentes implementaciones de las JVM tenían diferencias notables de rendimiento a igualdad de versión del lenguaje. En este caso, el principio no fue tal de partida.
  • Lenguaje interpretado, multi-hilo y dinámico: Aquí poco que reseñar. Este principio fue correctamente implementado desde las primeras versiones.

Como características principales del lenguaje y sus plataformas podemos citar:

  • Sintaxis «curly-bracket» (aportación de C/C++ claramente)
  • Orientación a objetos, polimorfismo y herencia (múltiple solo con interfaces)
  • Gestión de memoria basada en «garbage collector»
  • Lenguaje interpretado por su JVM (con compilación JIT desde JDK 1.1)
  • No está soportado por ningún estandar oficial (curioso pues JavaScript sí que tiene su estandar ECMA e ISO)
  • Soporta introspección y reflexión
  • Incluye «generics» (templates)
  • Soporte para «anotaciones» en clases, y métodos
  • Incluye generación automática de documentación (en su momento fue una característica innovadora)
  • En sus últimas versiones soporta «lambas», clases anónimas
  • Manejo de errores basado en excepciones y construcciones «try/catch»

Aquí os dejo un «snippet» con el clásico «Hello World!» en Java

public class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");// Prints the string to the console.
    }
}

Como podéis ver, para la época en que Java apareció en el mercado, éste aunaba muchas características que lo hacían tremendamente atractivo para una comunidad de desarrolladores hambrienta de novedades. Recordad que por aquella época, los más «hipsters» programábamos en C++ y el grueso de desarrolladores hacían lo propio en lenguajes tan «sugerentes» como COBOL, Visual Basic 6, C, etc. Incluso en su momento, que el lenguaje y su plataforma fuera «Open Source» supuso un atractivo adicional. De hecho las malas lenguas dicen incluso Microsoft tuvo que reaccionar a esta irrupción en el mercado y en la misma época surgió C# y las primeras versiones de .NET Framework que tenían casi las mismas características que introdujo Java.

Me vais a permitir que en este caso sea un poco más conciso en qué partes no me gustan de Java puesto al ser un lenguaje que hereda de C/C++ y que sirvió de base a otros como C# muchos de los aspectos menos deseables ya aparecen comentados en sus antecesores o descendientes. Mención especial merece sin embargo una cuestión que aunque no está ligada al lenguaje en si mismo y que sí que creo que merece ser subrayada. Desde que Oracle entró en escena en 2010 con la adquisición de Sun Microsystems el atractivo «Open Source» de Java ha decrecido significativamente. De hecho una de las críticas que se le hacen a Oracle es haber comprado en varias ocasiones proyectos de código abierto y haberlos doblegado a su beneficio empresarial en detrimento de una nutrida comunidad que hasta la fecha mantenía y dirigía la evolución de Java (aquí un artículo de la época que lo comenta) llegando incluso a rentabilizar dichas adquisiciones a golpe de demanda millonaria. Nada que no sepan en MySQL , Microsoft o incluso los muchachos del androide verde.

Por todo esto, aunque Java es un lenguaje con una presencia importante dentro del mercado actual (en parte por lo que comentaré al final de este post) su atractivo y relevancia como lenguaje no es lo mismo que fue hace una década.

¿Y qué pasa con JavaScript?

Como os decía, para mí JavaScript es un vástago de Java. Hereda mucha parte de la sintaxis del lenguaje y algunos de sus principios de diseño pero como lenguaje de «scripting» no lo incluyo en el análisis. Sí que tenemos que reconocer que su inclusión como lenguaje en plataformas de desarrollo o «frameworks» como Node.JS o Angular, React o Vue, o que sea o haya sido el lenguaje «oficial» para desarrollo de apps para móviles ha hecho que la sintaxis de Java siga muy vigente en el mercado. Llegando a explicar que siga siendo el lenguaje lider dentro de índices de adopción como TIOBE o Octoverse de GitHub.

Hasta aquí mi análisis sobre uno de los lenguajes que mas contribuyó (y aún sigue sobre todo gracias a su prole) a la democratización del desarrollo software. Estad atentos a próximas entregas donde analizaremos el resto de lenguajes de programación más en boga.

One thought on “«Go, Rust, C++, C#, Java…¿Qué lenguaje me gusta más?» (parte 2 – Java)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.