Node.js vs.Java: una batalla épica por la participación de los desarrolladores

En la historia de la informática, 1995 fue una época loca. Primero apareció Java, luego, pisándole los talones, llegó JavaScript. Los nombres los hacían parecer gemelos unidos recién separados, pero no podían ser más diferentes. Uno de ellos se compila y se escribe estáticamente; el otro interpretado y tipado dinámicamente. Ese es solo el comienzo de las diferencias técnicas entre estos dos lenguajes tremendamente distintos que desde entonces han cambiado a una especie de curso de colisión, gracias a Node.js.

Si tiene la edad suficiente para haber existido en ese entonces, es posible que recuerde el pico épico y temprano de Java. Salió de los laboratorios y su medidor de publicidad se inundó. Todo el mundo lo vio como una revolución que se detendría nada menos que en una toma total de la informática. Esa predicción terminó siendo solo parcialmente correcta. Hoy en día, Java domina los teléfonos Android, la informática empresarial y algunos mundos integrados como los discos Blu-ray.

Sin embargo, a pesar de todo su éxito, Java nunca estableció mucha tracción en el escritorio o en el navegador. La gente promocionaba el poder de las miniaplicaciones y las herramientas basadas en Java, pero la suciedad siempre estropeaba estas combinaciones. Los servidores se convirtieron en el punto óptimo de Java.

Mientras tanto, lo que los programadores inicialmente confundieron con el gemelo tonto se ha convertido en algo propio. Claro, JavaScript se mantuvo durante algunos años cuando HTML y la web tiraron de un Borg en el mundo. Pero eso cambió con AJAX. De repente, el gemelo tonto tuvo poder.

Luego se generó Node.js, lo que llamó la atención de los desarrolladores con su velocidad. JavaScript no solo era más rápido en el servidor de lo que nadie esperaba, sino que a menudo era más rápido que Java y otras opciones. Su dieta constante de solicitudes de datos pequeñas, rápidas e interminables ha hecho que Node.js sea más común, ya que las páginas web se han vuelto más dinámicas.

Si bien puede haber sido impensable hace 20 años, los cuasi-gemelos ahora están enfrascados en una batalla por el control del mundo de la programación. Por un lado están los cimientos profundos de la ingeniería y la arquitectura sólidas. Por otro lado están la simplicidad y la ubicuidad. ¿Se mantendrá firme el mundo de Java impulsado por compiladores de la vieja escuela, o la velocidad y flexibilidad de Node.js ayudarán a JavaScript a seguir devorando todo a su paso?

Donde gana Java: una base sólida como una roca

Puedo escuchar a los desarrolladores reír. Algunos incluso pueden estar muriendo de insuficiencia cardíaca. Sí, Java tiene fallas y errores, pero en términos relativos, es el Peñón de Gibraltar. Faltan muchos años para la misma fe en Node.js. De hecho, pueden pasar décadas antes de que el equipo de JavaScript escriba casi tantas pruebas de regresión como Sun / Oracle desarrolló para probar la máquina virtual Java. Cuando inicia una JVM, obtiene 20 años de experiencia de un curador sólido decidido a dominar el servidor empresarial. 

El mundo de JavaScript se está poniendo al día rápidamente. Cuando gran parte de toda la web depende del motor de ejecución de JavaScript, se invierten millones de horas de desarrollador en pulir todos los bordes. Pero toda la innovación tiene una desventaja porque las nuevas características pueden estar proliferando más rápido de lo que la base de desarrolladores puede absorberlas. Los desarrolladores de la vieja escuela a menudo se confunden con el código que incluye las mejoras de sintaxis de ECMAScript más recientes, y este mismo código nuevo bloqueará silenciosamente algunos navegadores más antiguos. El suministro interminable de preprocesadores innovadores como CoffeeScript y JSX puede ser excelente para los desarrolladores que desean esas características, pero hacen que sea más difícil para el resto de nosotros abrir un archivo aleatorio y comprenderlo de inmediato.

Java tiene su parte de nuevas características y opciones, pero en su mayor parte es una plataforma estable. Eso hace la vida mucho más fácil para los desarrolladores que están construyendo algo para durar.

Donde gana Node.js: ubicuidad

Gracias a Node.js, JavaScript encuentra un hogar en el servidor y en el navegador. Es más que probable que el código que escriba para uno se ejecute de la misma manera en ambos. Nada está garantizado en la vida, pero esto es lo más cercano que hay en el negocio de las computadoras. Es mucho más fácil seguir con JavaScript para ambos lados de la división cliente / servidor que escribir algo una vez en Java y nuevamente en JavaScript, lo que probablemente necesitaría hacer si decidiera mover la lógica empresarial que escribió en Java para el servidor al navegador. O tal vez el jefe insistirá en que la lógica que construyó para el navegador se mueva al servidor. En cualquier dirección, Node.js y JavaScript facilitan mucho la migración de código.

El liderazgo de Node en este mundo solo parece expandirse. Los frameworks web más sofisticados, como React, decidirán en el último segundo si ejecutar el código en el servidor o en el cliente. Un día se ejecutará en el cliente y otro día se ejecutará en el servidor. Alguna lógica inteligente tomará la decisión sobre la marcha en función de la carga o la RAM de repuesto o algo más. Algunos marcos enviarán JavaScript a la base de datos como una consulta donde se ejecuta. Su código podría estar ejecutándose en cualquier lugar y es cada vez más difícil mantenerse al día porque no envía una postal a casa. Simplemente sé feliz porque no necesitas pensar en los detalles.

Donde gana Java: mejores IDE

Los desarrolladores de Java tienen Eclipse, NetBeans o IntelliJ, tres herramientas de primer nivel que están bien integradas con depuradores, descompiladores y servidores. Cada uno tiene años de desarrollo, usuarios dedicados y ecosistemas sólidos llenos de complementos.

Mientras tanto, la mayoría de los desarrolladores de Node.js escriben palabras en la línea de comandos y codifican en su editor de texto favorito. Sí, algunos de los mejores editores de texto como Atom tienen colecciones elaboradas de complementos que hacen casi cualquier cosa, pero incluso entonces parece que Node.js es más de la vieja escuela que Eclipse. Pronto reemplazaremos nuestro mouse con un joystick Atari.

Algunos desarrolladores usan Eclipse o Visual Studio, los cuales son compatibles con Node.js. Por supuesto, el aumento del interés en Node.js significa que están llegando nuevas herramientas, algunas de las cuales, como Node-RED de IBM, ofrecen enfoques intrigantes, pero aún están muy lejos de ser tan completas o dominantes como Eclipse o IntelliJ.

Lo extraño es que los desarrolladores no parecen utilizar estas herramientas. Se suponía que la línea de comando desaparecería hace 35 años con la llegada de Mac, pero nadie se lo dijo a los desarrolladores de Node.js. Las opciones están ahí. WebStorm, por ejemplo, es una sólida herramienta comercial de JetBrains que incorpora muchas herramientas de construcción de línea de comandos.

Por supuesto, si está buscando un IDE que edite y haga malabares con el código, las nuevas herramientas que admiten Node.js son lo suficientemente buenas. Pero si le pide a su IDE que le permita editar mientras opera en el código fuente en ejecución como un cirujano cardíaco abre un cofre, bueno, las herramientas de Java son mucho más poderosas. Todo está ahí, y todo es local.

Donde gana Node.js: consultas de base de datos

Las consultas para algunas de las bases de datos más nuevas, como CouchDB y MongoDB, están escritas en JavaScript. La combinación de Node.js y una llamada a la base de datos no requiere cambios de marcha, y mucho menos la necesidad de recordar las diferencias de sintaxis. 

Mientras tanto, muchos desarrolladores de Java utilizan SQL. Incluso cuando utilizan Java DB, anteriormente Derby, una base de datos escrita en Java para desarrolladores de Java, escriben sus consultas en SQL. Pensaría que simplemente llamarían a métodos Java, pero estaría equivocado. Tienes que escribir el código de tu base de datos en SQL, luego dejar que Derby analice el SQL. SQL es un buen lenguaje, pero es completamente diferente de Java, y muchos equipos de desarrollo necesitan diferentes personas para escribir SQL y Java.

Para empeorar las cosas, muchos codificadores de Java utilizan bibliotecas y esquemas elaborados para convertir los datos de la consulta SQL en objetos Java solo para poder convertirlos en plantillas. Es un proceso loco y, en última instancia, bastante derrochador.

Donde gana Java: tipos 

Muchos de los cursos de introducción a la programación continúan usando Java porque a muchos programadores serios les suele gustar el código escrito de forma estática tanto por la simplicidad como por la seguridad. El código se siente más riguroso después de que el compilador detecta los errores obvios.

Sin embargo, JavaScript se está poniendo al día y algunos desarrolladores están cambiando a TypeScript, un superconjunto de JavaScript escrito de forma estática que aplica toda la magia de verificación de tipos antes de escupir algo que se ejecuta en la pila de JavaScript de su navegador. Si te encantan los tipos, esto puede ser suficiente para que adoptes JavaScript. O simplemente podría reconocer la imitación como la forma más sincera de adulación y seguir con Java, que adoptó la escritura estática desde el principio.

Donde gana Node.js: flexibilidad sintáctica

JavaScript solía ser un lenguaje simple para mostrar cuadros de alerta no deseados y verificar la entrada de formularios. Luego, la comunidad de desarrolladores creó muchas versiones diferentes del idioma que podrían transpilarse en algo para el navegador. Existe la multitud de CoffeeScript que ofrece un puñado de sintaxis diferentes diseñadas para satisfacer el gusto por una puntuación más limpia. Existe la multitud de React / Vue que mezcla HTML y JavaScript solo porque es más limpio. Hay TypeScript para los amantes de la tipografía y LiveScript para los devotos del lenguaje funcional.

También encontrará una enorme cantidad de creatividad en el mundo de Java, pero por alguna razón no se expresa con muchos preprocesadores. Hay una serie de lenguajes como Kotlin, Scala y Clojure que se convierten en código de bytes para la JVM, pero de alguna manera se sienten lo suficientemente diferentes como para diferenciarse como lenguajes separados. Todos los preprocesadores hacen la vida más divertida para los programadores de JavaScript que aman las diferentes formas de formular o puntuar su código.

Donde gana Java: proceso de construcción simple 

Herramientas de compilación complicadas como Ant y Maven han revolucionado la programación Java. Pero solo hay un problema. Escribe la especificación en XML, un formato de datos que no fue diseñado para admitir la lógica de programación. Claro, es relativamente fácil expresar la ramificación con etiquetas anidadas, pero hay algo molesto en cambiar de engranajes de Java a XML simplemente para construir algo. Con JavaScript, no hay cambios de marcha. 

Node.js solía tener la compilación más simple. Simplemente editaría el código y luego presionaría "ejecutar". Eso fue entonces. A medida que los desarrolladores de Node han "mejorado" el proceso, han agregado preprocesadores que toman su subdialecto favorito de JavaScript y lo convierten en algo ejecutable. Entonces, el administrador de paquetes de Node necesita encontrar la biblioteca correcta. La mayoría de las veces esto simplemente funciona, pero a veces no lo hace y luego pasa tiempo buscando el número de versión correcto de algún artefacto que está construyendo usted mismo en un paso separado. Y si comete algún error en el repositorio de artefactos, bueno, ese número de versión se dispara y debe girar las ruedas del odómetro nuevamente.

Java también tiene un proceso de compilación complejo que es bastante similar al método Node.js, pero no parece que se haya vuelto más complejo. De alguna manera, Maven y Ant parecen ahora parte de la base de Java. Muchas de las asperezas desaparecieron hace mucho tiempo y las construcciones funcionan con más frecuencia. Si hubiera alguna medida absoluta de molestias en la construcción, los dos lenguajes podrían ser similares, pero la rápida explosión de la complejidad de JavaScript significa que Java gana.

Vídeo relacionado: consejos y trucos de Node.js

En este video explicativo, aprenda varias técnicas que pueden mejorar su experiencia de desarrollo de Node.

Donde gana Node.js: JSON

Cuando las bases de datos arrojan respuestas, Java hace todo lo posible para convertir los resultados en objetos Java. Los desarrolladores discutirán durante horas sobre las asignaciones POJO, Hibernate y otras herramientas. Configurarlos puede llevar horas o incluso días. Finalmente, el código Java obtiene objetos Java después de toda la conversión. Y cuando se trata de configuración, el mundo de Java todavía se aferra a XML e incluso ofrece dos analizadores principales para dar a los desarrolladores más razones para preocuparse.

Hoy en día, muchos servicios web y bases de datos devuelven datos en JSON, una parte natural de JavaScript. JSON es ahora tan común y útil que muchos desarrolladores de Java usan el formato, y también hay disponibles varios buenos analizadores de JSON como bibliotecas de Java. Pero JSON es parte de la base de JavaScript. No necesitas bibliotecas. Todo está ahí y listo para funcionar.

Donde gana Java: depuración remota

Java cuenta con herramientas increíbles para monitorear grupos de máquinas. Hay ganchos profundos en la JVM y herramientas de elaboración de perfiles elaboradas para ayudar a identificar cuellos de botella y fallas. La pila empresarial de Java ejecuta algunos de los servidores más sofisticados del planeta, y las empresas que utilizan esos servidores han exigido lo mejor en telemetría. Todas estas herramientas de supervisión y depuración son bastante maduras y están listas para su implementación.

Donde gana Node.js: escritorio

Es posible que haya algunos subprogramas de Java ejecutándose, y todavía conservo algunos archivos JAR de Java en los que puedo hacer clic para ejecutarlos, pero en su mayor parte, el mundo del escritorio es en gran parte libre de Java. JavaScript, por otro lado, continúa capturando más y más acción a medida que el navegador consume la mayoría de los roles de nuestro escritorio. Cuando Microsoft reescribió Office para que funcionara en el navegador, la suerte estaba echada. Si todavía se lo está preguntando, existen opciones interesantes como Electron que toman su código web y lo convierten en una aplicación de escritorio independiente.

Donde gana Java: dispositivos portátiles

Las aplicaciones de Android suelen estar escritas en Java y el 90 por ciento de los nuevos teléfonos ejecutan alguna versión de Android. Mucha gente ya ni siquiera usa computadoras de escritorio porque los teléfonos son lo suficientemente buenos para todo.

Por supuesto que hay un poco de confusión. Muchos desarrolladores están escribiendo aplicaciones web Node.js que se dirigen a los navegadores móviles tanto en el iPhone como en los Android. Si se hace bien, el rendimiento suele ser suficientemente bueno.