Java en 2020

Mi percepción de Java en la actualidad

Featured image

Bueno a finales del año pasado me propuse dejar mi empleo para conseguir un puesto como desarrollador Java, las cosas tal vez han cambiado un poco, quiero decir…

Cause after all. Es muy distinto el hecho de verlo de lejos que estar trabajando realmente en un proyecto con eso.

Los primeros meses obtuve una posición en una empresa como desarrollador pero mi rol iba a desempeñarse, al menos los primeros meses como líder técnico.

No sabia muy bien como arrancar, no había nunca liderado un equipo y la verdad tenia mucho que pensar sabiendo que era fácil 10 años menor que mis compañeros de equipo y más sumando que nadie venia de desarrollo.

El que más experiencia tenia era un dev que había programado en asp.net un CRM medio básico. La verdad era un reto, y uno muy grande.

Si bien el primer mes desempeñe un rol bastante increíble haciendo multi tasking 120%.

Fui el que hizo un Walking Skeleton mientras los demás tomaban cursos. Además de que plantie una arquitectura para los que iban a enfocarse en el backend.

Nada innovador pero mejor que lo que teníamos, es decir nada. Una arquitectura orientada a micro servicios con Spring boot.

El proyecto arranco con Java 11 sino recuerdo mal.

La verdad los primeros meses estuve un poco desorientado con respecto a lo que andaban haciendo los muchachos pero básicamente una arquitectura por capas

Cave aclarar nuevamente que andaba centrándome en hacer algo funcional lo más rápido posible para que puedan empezar a codear sin que haya muchos problemas.

Un prototipo de frontend que sea lo suficientemente flexible para cambios en el tiempo y una pipeline muuuy caucásica, eso lo íbamos a hablando con nuestro devops en su momento, una persona que duro muuy poco tiempo.

Pipeline básica, BitBucket, push ejecuta Jenkins, Jenkins da ok y se levanta el proyecto en una VM con Dockers dentro porque en su momento no teníamos permisos para usar directamente algo como Kubernetes o Docker Swarm, teníamos una limitante de IPs y muchos temas.

En su momento el backend funcionaba de una forma muy básica, recibía un POST con una serie de datos y nosotros retornábamos como respuesta única que se componía de varios JSONs mockeados que teníamos.

Con el paso del tiempo fuimos agregando distintas capas y microservicios que iban a entrar en juego. Cada tipo de JSON mockeado se iba a convertir en una especie de micro servicio distinto al cual íbamos a ir a consultar.

Eran fácil 8 micro servicos y uno entero que se supone que iba a tomar el rol de API Gateway.

Tuvimos que integrar servicios de Google, como Firebase, muchas de estas cosas no eran decisiones nuestras, era lo que pedía el cliente.

Implemente un Swagger de una forma muy básica para ir documentando, unos JavaDoc que quedaron en el olvido poco después porque tuvimos que migrar cosas.

Al parecer Spring boot iba a deprecar una clase que se andaba usando bastante, RestTemplate, como sugerencia nos decía que intentemos usar:

org.springframework.web.reactive.client.WebClient

Claro había un problema esa clase no existía, pertenecía a un paquete propio de otro framework complementario a Spring boot, Spring WebFlux.

Yo claramente al encontrarme con esto decidi dejar ese rol de lider tecnico porque seria una mentira, yo no sabia ni un poco de todo esto. Estabamos al mismo nivel que con mis compañeros, nadie sabia de esto.

Entonces nos encontramos con la cruel realidad, Spring Boot ya no es lo que era, habían pasado años y nosotros habíamos llegado tarde, hoy en día Spring Boot tenia que competir contra cosas como .Net Core y Node.js, no podia seguir trabajando de esa con procesos bloqueantes.

Por lo que Java se estaba modernizando, encontramos varios proyectos interesantes (o por lo menos yo), Quarkus, Vert.x, osea competencia para Spring Boot, finalmente se tomo la decisión de usar WebFlux, por practicidad más que nada.

Y esta bien, lo que puedo decir es que no fue mala idea.

El tema es que todo era incompatible con esta nueva modalidad y no es que sea algo super viejo por lo que vi, ya se venia planteando hace 3 años. Es decir hace 3 años que la comunidad de Java decidió moverse a lo Reactive, y 3 años en que cosa ultra necesarias como Swagger no han mostrado interés parece.

Esto nos trajo muchos problemas tuvimos que descartar parcialmente la documentación con Swagger.

Las librerías de Google no terminaban de ser tan cómodas como esperábamos que lo fueran y tuvimos que hacer artimañas para la implementación de un listener a Firestore, curiosamente lo que mejor funcionaba era PubSub.

Hubo inconvenientes relacionados a nuestros equipos adyacentes, debido a que teníamos que integrar librerías que ellos desarrollaban usando RestTemplate y como dijimos no era una opción pero no podíamos ir y cambiar la librería de ellos.

En fin se plantearon un montón de cosas que no se podían ver venir con fácilidad.

Fue un reto constante, muy satisfactorio realmente en el sentido que pudimos superar los inconvenientes pero dios mio que sufrimiento.

Llegamos al 93% de cobertura de código, tal vez se podía llegar a más pero daba pereza.

Conclusión

En fin, siento que Java sea separado muchísimo y ya no es lo que era, incluso la comunidad de .Net me parece que puede que tenga más futuro que Java a decir verdad, el hecho que haya tanta gente en duda con respecto al uso de programación funcional en el mismo lenguaje o la diversificación de tecnologías en lo que respecta a lo Reactive me hace cuestionar mucho el que realmente este en el top 3 de lenguajes de programación como solía estar.

Siento que se esta dejando aún lado por la comunidad, gran parte se han movido al mundo JS ahora con la llegada de TypeScript.

El hecho de que Swagger siga sin estar disponible para Reactive después de tanto tiempo da mucho que hablar.

En fin es una análisis un tanto pobre considero yo debido a que no he recorrido con plenitud pero conociendo lo que esta pasando en Android (Que más tarde escribiré algo sobre el tema) me hace pensar que tal vez seria una mejor idea buscar alternativas como Python hoy en día.

¿Ustedes que piensan acerca del tema? Escriban abajo en la sección de comentarios. Gracias por leer y me quedo atento a sus opiniones.