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
Siempre un lujo leerte.
Joya, mientras sirva…
Y entonces Facu, a nosotros los que estamos iniciando, cual es el lenguaje mas adecuado? por otro lado, me gustaria saber que opinas de python?
Me gustaría tener la bola mágica….
Yo creo que una buena elección para arrancar con backend sería ir por Kotlin ó Go. Rust es groso pero muy low-level para mi gusto, lo que lo vuelve un lindo reemplazo de C++. A mi, me gustó Elixir; pero me está costando conseguir un puesto a pesar de mis 11+ años de experiencia.
Hay muchos devs puteando por Scala. Clojure es un spaghetti de paréntesis. No tiene sentido programar con Erlang existiendo Elixir. Ruby es un lenguaje lindo pero cuya comunidad pareciera estar transicionando también hacia Elixir.
Python tiene groove. Junto a Ruby, probablemente sea el más lindo para arrancar. Además es poderoso. Y se usa mucho en Data Science, machine learning y sarasa. Ambos te permiten hacer mucho sin apretar tantas teclas.
La contracara de Python es que pareciera no pedirse mucho más allá de Data Science, pero quizás sea cosa mi percepción nomás.
Este sitio está lindo para ojear: https://howistart.org/
Facu.. si, el problema de python es que no tiene tanta demanda empresarial quitando la Data Science y machine learning, yo actualmente curso una tecnicatura en programación, empece en la unqui y ahora me mude a istea. Segun mis coordinadores dicen que java es lo mejor y lo que deja mas guita! nose… a mi no me va mucho, me aburro y me invade esa sintaxis, por mas que quiera le tengo un rechazo, me hablaron barbaridades de kotlin, ademas esta muy bien pago por lo que me informo en la web.. paso a ver el sitio. me encanta el blog! te felicito!!
Hay que ver en qué se basan. Sugeriles leer este artículo y que se arme el debate.
Hoy por hoy cualquier lenguaje deja guita. Lo que importa es que elijás aquello que menos te desagrade. Especialmente porque le dedicarás más de la mitad de tu tiempo fuera de tu cama.
Muchas gracias por tu atención!
Python se pide mucho, lo que me parece es que en general es desde distinto tipo de empresa.
Java es más corporativo y python más de startup en mi experiencia. Trabajé prácticamente 10 años con Java y los últimos dos con python. El combo python, react/redux tiene bastante demanda para remoto.
Es verdad. Igual en tu caso cotizás como Senior, aunque tengas sólo 2 años con Python. Todo lo full stack va muy de la mano con las startups. Tanto Ruby como Python te permiten levantar algo muy rápido.
hola facu, te felicito por el blog está increíble, que opinas sobre javascript? estoy en duda también sobre con qué lenguaje arrancar y meterle fuerte. Vos que estuviste por Australia, que lenguajes eran los más buscados allá?
Javascript no es lo mío. Lo odié hasta que apareció jQuery. Siempre que puedo, le escapo al front end.
Dejando mis gustos personales de lado, saber Javascript, CSS3 y HTML5 junto a algún framework (react/vue) sea posiblemente la manera más rápida de conseguirse un trabajo en Australia o también remoto.
Hola, Oye, estoy trabajando en un proyecto personal, opensource, y me gustaria que si puedes me dieras una retrospectiva, es una aplicación tipo RAD, para microservicios REST, https://github.com/mcnew/aguacate-swagger-demo. Esta en Java, pero me gustaria que vieras la idea principal, pues en vez de programar, creas archivos de configurarción (si requieres programar, pero es minimo y en javascript). Saludos
Como información adicional hice un video explicativo (ire agregando mas videos poco a poco). https://www.youtube.com/watch?v=0BcuYHIGxg8
Un video mostrando la funcionalidad con mayor detalle
Hola Facundo, gracias por compartir tu opinión, es grato validar mayores experiencias y que estas vayan con sensatez y honestidad de principio a final…
Veras, soy un novato, que al salir graduado de ingeniería pensó que se iba a comer el mundo, pero, inevitablemente choqué con ese mundo corporativo “que en mi país es una ruin y desprolija patraña”, debido a las pocas oportunidades y demás presiones de la vida, lo único que pude hacer fue dar con un call center de networking, de esos que consumen muy bien a su staff, así me la pasé poco más de un año…
pero queriendo avanzar (creo que fue un error), me pagué una suma enorme para una certificación Java8 creyendo que me daría mejores oportunidades…
Pero, (de nuevo al choque de intereses corporativos y en colaboración con los de RR. HH) solo se buscan sujetos con experiencia específica de años para entrar al mundo de los developers…
luego de 5 años de experiencia con Linux/Unix y demás he dado con la escases de oferta con este perfil y para ser programador debo empezar son un 0 de años de experiencia según los que buscan talentos…
y me preguntaba (lo sé, a quien se le ocurre enviar 300 palabras previas a una pregunta!)…
¿que me podrías recomendar de acuerdo al escenario te he descrito?
¿y que tal vez a Python?…
(si puedes, sería genial que le echaras un ojito a mi perfil en linkedin: “www.linkedin.com/in/kjfigueroa”)
Gracias, fue muy interesante tu artículo…
Aunque duela la expectativa no cumplida, esa carnada también sirve para avanzar, en tu caso terminar de estudiar.
¿Probaste con DevOps/Cloud Engineer? Si venís con experiencia en Unix tenés un edge para el rubro de AWS, Google cloud services o Azure. Si sumás herramientas como Docker, Puppet, Ansible, Kubernetes podrías cobrar sumas astronómicas. Y quizás puedas usar la certificación Java no para desarrollar, sino para revisar código que luego deployarías con estas herramientas en pipelines de CD/CI.
Abrazo
Hola facu, te quiero hacer unas consultas, mi idea es ingresar el año que viene a una tecnicatura en Analista de Sistemas y posteriormente conseguir mi primero laburo en IT obviamente, mientras tanto estoy aprendiendo un curso de javascript de argentinaprograma, que tal vez el plan de estudios de esta tecnicatura?
Y otra consulta a mediano/largo plazo decis que esta tecnicatura me deje unas bases para encarar para el lado del Data Science? Sinceramente las ING/LIC las descarto, por eso me incline por la tecnicatura.
https://scontent.fmdq1-2.fna.fbcdn.net/v/t1.0-9/118561742_1750212641792608_2117765421566713936_n.jpg?_nc_cat=101&_nc_sid=ca434c&_nc_ohc=WlPwrdZjv-AAX_6Cva6&_nc_ht=scontent.fmdq1-2.fna&oh=685a4b1f7bfa1fb5a634a8393d48508d&oe=5F709A33
No conozco mucho el tema de Data Science. Las personas que veo trabajando con eso parecen tener una fuerte base algebraica (veo gente de ingenieria bioquimica, matematica, etc). Pero mi visión es acotada. DS tiene muchas ramas.
El plan se ve interesante. Probablemente “Ciencia Tencología y Sociedad”, Ingles y “Aspectos Legales…” sean una pérdida de tiempo, pero el resto parece copado. (Seminario de actualización suena a nombre de materia genérico en donde meten contenido de moda, que sirve para mantener la carrera afilada). El resto parecen ser fundamentos sólidos. Y si, creo que te puede servir para DS (pero dale MUCHA pelota a estadistica, algebra y analisis matematico¡!).
Una más: cuando me dicen Data Scientist me imagino alguien como este tipo. También pondría a todos los libros de Nassim Taleb en la lista de lectura.
Gracias facu, si Taleb es crack, ya me lei:
-¿Existe la suerte? Engañados por el azar
-El cisne negro
-Antifragil (llegue un poco menos de la mitad
-El lecho de procusto
Buenisimo. A mi me falta el lecho de procusto. Abrazo!