Si me preguntás cuál es la habilidad más provechosa a la hora de programar, sin dudas mi respuesta decantará en el más útil de todos los talentos — la capacidad de resolver problemas.
Este artículo presupone que sé programar en Java pero también presupone riqueza a partir de una serie de verdades. Y cómo ellas te pueden ser útiles a vos.
Probablemente sepas que el lenguaje de programación Java guarda cercana relación con C++. El principal problema que la programación Java vino a resolver es la mugre de punteros con la que debían lidiar sus programadores. Necesitás almacenar algo, reservás memoria, y luego accedés a ella referenciándola desde las distintas partes de tu código. Eliminar dichas referencias da lugar a errores. Errar es humano. Repetir errores infinidad de veces es carencia de pensamiento reflexivo. Y combinar computadoras con errores humanos resulta en memorias rebalsadas y sistemas caídos.
Otro de los beneficios de aprender a programar con Java sobre C++, los lenguajes Microsoft, y varios más, es su portabilidad. Como ya sabrás, la Java Virtual Machine (JVM) interpreta tu código escrito en lenguaje Java, y lo traduce en instrucciones apropiadas para el hardware y sistema operativo huésped de tu programa. Es la misma JVM quien limpia la memoria en desuso a través de un módulo llamado Garbage Collector (GC.)
POR QUÉ APRENDER JAVA ESTABA BUENO (ANTES)
Si te interesa comprender la evolución de los lenguajes de programación, primero necesitás conocer la integración de ambos conceptos. El modus operandi de una simulación por un lado, y cómo esta se relaciona con dos cuestiones adicionales por el otro. Las dos cuestiones son 1) dónde corre el código y 2) qué problemas busca resolver un determinado lenguaje de programación.
Si alguien se aburre puede cerrar la pestaña e ir a programar con Java. Seguro se aburrirá más. Continuemos…
He nombrado a este principio, por el que cada pequeña variación, si es útil, es preservado, bajo el término de Selección Natural.” – Charles Darwin
Y fue Darwin también quien dijo:
No es el más fuerte de las especies el que sobrevive, tampoco es el más inteligente el que sobrevive. Es aquel que es más adaptable al cambio.”
A principios de este milenio ocurrió algo inesperado en el ámbito de los procesadores. La cantidad de ciclos por segundo se estancó. Los límites de la realidad establecieron el tope en unos 3 GHz y por eso, ahora, probablemente te encuentres leyendo esto en un dispositivo multi-core.
Como respuesta a este cambio, Java modernizó su paquete de concurrencia y confeccionó un conjunto de herramientas con el fin de adaptar la programación Java a varios cores. Por ejemplo, la palabra reservada volatile te garantiza una secuencia llamada happens-before. Esto significa que bajo un escenario de ejecución paralela, donde cada core tiene su propia copia del contexto en su propia memoria caché, al actualizar una referencia volatile te asegurás de propagar el último de los estados compartidos hacia las memorias cachés del resto de los cores. Entonces, la actualización de un estado compartido Y volátil ocurre-antes (happens-before) de ser leído por otro core. En criollo – no tomás decisiones con noticias de ayer.
Pero la tecnología siguió evolucionando. Los servidores continuaron creciendo, viniendo ahora con 32, 64, y 128 cores. Muchos. La matriz de costos derivó en el desarrollo de máquinas virtuales. Y ahora tenemos contenedores, que son virtualizaciones dentro de máquinas virtuales instaladas dentro de servidores gigantes, entre todos entretejiendo una gran, abundante, e invisible estructura volátil de fotones a la que apodamos la nube.
Lo que acaba de ocurrir es un salto evolutivo. La infraestructura tecnológica trepó hacia el siguiente nivel de abstracción. Y cada vez que esto pasa, ó utilizás un lenguaje de más alto nivel ó usás más palabras para describir lo mismo.
LA PROGRAMACIÓN JAVA ES DENSA
No me importa si mi manera de escribir no es lo suficiente formal. Me interesa que tomés una decisión con la que te sientas a gusto. Si optás por aprender a programar en java o si elegís otro lenguaje de programación, ganarás un buen sueldo. Cualquier opción está bien. Lo que importa es que puedas crear oportunidades que incrementen tu capacidad de maniobra.
Yo ya estuve mucho sin trabajar, acumulo algunos añitos sabáticos. Está bueno. Te da otra perspectiva. Pero en un momento te das cuenta que algo tenés que hacer. Sino te entristecés. Lo difícil es hacer algo que te guste, o que al menos no te amargue, y que sea útil. Ahí esta la magia.
El nivel de satisfacción de los programadores Java no es elevado. La programación Java se creó para resolver problemas centralizados. El mundo muestra una tendencia hacia el lado opuesto. Además, la sintaxis de Java es invasiva; su complejidad molesta, entorpece, y aburre. Es por eso que muchos ex programadores Java no quieren ni pensar en volver a programar con Java. Esto lleva a empresas con arquitectos de software (ex) java a inclinarse por otras alternativas; como Groovy o Kotlin.
Sin embargo, la programación Java no morirá pronto. Dado que varios millones de programadores aprendieron Java, muchos proyectos seguirán esa ruta. De hecho, las empresas decididas a utilizar lenguajes alternativos, que también corran sobre la poderosa Java Virtual Machine, enfrentan desafíos de escasez. Es difícil encontrar programadores capacitados en estos lenguajes refinados. Los astronómicos salarios de Scala, Clojure y Kotlin son imposibles de ignorar. Estoy seguro de que ganarás más dinero con ellos en tu segundo o tercer año de experiencia que programando con Java en tu cuarto o quinto. Donde aprender java suene fuerte, capaz sea en la boca del taxista.
Me pregunto cómo podés programar tu futuro. Estoy seguro de que podés encontrar oportunidades valiosas. Ahora, no tenés que buscar mejores alternativas lo antes posible. De hecho, ni siquiera necesitás hacer un curso sobre todo; sería imposible. Pero imaginate mientras lees estas palabras, cómo sería si fueras a descubrir un lenguaje de programación más funcional a tu propósito.
¿El lenguaje pertenecería una compañía cotizante en bolsa? ¿estaría abierto al público? ¿Tiene potencial para procesar de manera distribuida? ¿Existen programadores que odien el lenguaje? ¿Es un lenguaje maduro? ¿Tendrías poca competencia? ¿Qué empresas lo empezaron a adoptar de manera exitosa?
El mundo es un lugar eficiente. Los lenguajes de programación seguirán usando palabras en inglés; y serán más compactos, requiriendo menos código para el mismo resultado. La programación Java no pareciera ir por ahí.
En lo que a back-end respecta, pienso que la programación no será orientada a objetos, sino funcional y concurrente. Eso le permitirá ser distribuida.
LEER SIGUIENTE: Logré Mi Primer Puesto Con Elixir