Como aprender Java para obtener trabajo (o cualquier otro lenguaje de programación)

Infografia gracias a Academik

Una de las acciones más perjudiciales que he observado en la industria, es cuando un Junior Developer le pregunta a un «Senior» acerca de lo que debería aprender para obtener trabajo en Java, siendo la respuesta más o menos así:

  • Aprende Spring Boot porqué es el framework más demandado por la industria
  • Aprende Java para Android porque lo nuevo y lo de hoy son las apps móviles
  • No aprendas Java porque Java está muerto, lo de hoy es Go

Durante los años estas frases han sido el resultado de diversas tendencias, y esas mismas frases se hubieran leído así en 2009:

  • Spring es un framework bastante útil que complementa a Java EE pero no es necesario aprenderlo, lo importante es Struts
  • Java en realidad esta bien, pero el nicho mejor pagado son las apps móviles para Blackberry, Java ME es el futuro
  • No aprendas Java porque Java está muerto, lo de hoy es Ruby

Y solo les puedo decir que todos estos consejos estaban mal, estuvieron mal y estarán mal.

¿A que se debe estos malos consejos?

Luego de algunos años participando en cursos tanto como profesor y como asistente, les puedo decir los 5 errores más comunes que yo cometí y que veo cometer a la mayoría de desarrolladores:

  1. Aprender lo mínimo de un lenguaje de programación o asumir que todos son iguales
  2. Enfocarse en aprender un framework antes que el lenguaje
  3. Seguir tutoriales específicos de un IDE
  4. Ignorar la existencia de las herramientas de compilación
  5. Omitir la documentación oficial y preferir solo tutoriales cortos

Y todos tienen más o menos la misma motivación: El tiempo.

¿Quien se tomaría 2 días en leer la documentación cuando puede desperdiciar semanas en prueba y error?

¿Entonces como debería aprender?

Como sugiere la infografia que acompaña el post, al utilizar cualquier software «comercial» o de moda, a la larga siempre trae mejores resultados aprender primero los fundamentos. Con los años esto se vuelve más importante ya que esto permite saltar al siguiente framework de moda (antes fue J2EE, luego fue Struts, luego Spring, ahora MicroProfile y mañana quien sabe). Entonces mi secuencia lógica seria:

1- Aprende programación orientada a objetos y programación funcional con Java

La mayoría de frameworks en Java utiliza tres estilos básicos de programación:

  1. Programación orientada a objetos para definir comportamiento y funcionalidad
  2. Programación reflectiva en estilo AOP (anotaciones), para darle «pistas» al framework de cual es el comportamiento que esperamos
  3. Programación funcional con expresiones lambda para completar «bloques» de funciones, especialmente en programación de sistemas escalables/reactivos

Esta situación es similar en otros lenguajes/plataformas, todos los frameworks presuponen un conocimiento general y bueno del lenguaje de programación. De lo contrario programar sera un acto de escribir software imperativo, agregar anotaciones que copiamos de un blog y culpar a Java porque se cayó el servidor.

Y este es el error #1 que veo en las universidades, en mi experiencia por ejemplo recuerdo que me metieron de cabeza en Swing a hacer una calculadora cuando ni siquiera entendía que era un compilador hacia Bytecode, aun no entiendo como no desistí de ser ingeniero de software.

2- Aprende los fundamentos de la JVM

Conceptos básicos como:

  • Saber diferenciar entre las APIs de la JVM
  • Entender el papel del bytecode en la ejecución
  • Y probablemente el más importante, entender como funciona el modelo stack-heap de la memoria RAM y el recolector de basura
  • Entender que existe no una sino varias JVM

Con el simple hecho de conocer como funciona la memoria eliminaras el mito de que Java siempre limpia la memoria. Hay programadores que se esfuerzan demasiado en hacerle la vida dificil a la JVM.

3- Seleccionar tus herramientas

No hay carpintero sin martillo y hoy en día es dificil ser un programador unicamente con un IDE, pero al pretender realizar programación comercial con Java uno suele necesitar:

  • Un IDE: De hecho lo reescribiría a ser capaz de utilizar cualquier IDE, hoy en día casi todos los proyectos Java son compatibles con todos los IDEs, tanto NetBeans, como IntelliJ como Eclipse son compatibles con Maven y Gradle
  • Un sistema de construcción: Para entender como se crea un proyecto y poder usar cualquier IDE nunca está de mas conocimiento en Maven o Gradle :).
  • Principios basicos de shell scripting: Hasta Windows ya aceptó que el Shell scripting es necesario para los programadores
  • Versionamiento de código: Hoy sera Git, mañana no lo se y pasado no se si estaremos vivos

En resumen saber una herramienta NO es igual que saber programar, pero saber una herramienta si te hará más productivo.

4- Aprende los frameworks de la industria

¿Llegaste hasta acá? Que bien, muchos empiezan por aquí y vuelven el desarrollo de software una experiencia frustrante.

Una buena forma de saber cuales son los frameworks demandados por la industria es realizar búsqueda de trabajos en LinkedIn o acudir a tu Java User Group más cercano, la buena noticia es que a la larga los frameworks en Java se parecen porque muchos de ellos usan cosas que se estandarizaron en el Java community process.

Y la mejor noticia es que si sabes Java con buen nivel de detalle, ya estas listo para saltar al siguiente gran framework, que saldrá en el futuro.

Probablemente estos sean los stacks más populares hoy en día (2019):

  • Spring Framework: (Pivotal)
  • Jakarta EE: Payara, Wildfly/JBoss (Red Hat), TomEE (Apache/Tomitribe), WebSphere (IBM), WebLogic (Oracle)
  • MicroProfile: Payara, Quarkus (Red Hat), TomEE (Apache), OpenLiberty (IBM), Helidon (Oracle)

5- Continua aprendiendo

Java lleva 25 años en la industria y continua evolucionando cada 6 meses. Probablemente le queden otros 25 más por los entornos donde se utiliza, pero la única constante en TI es el cambio.

4 Replies to “Como aprender Java para obtener trabajo (o cualquier otro lenguaje de programación)”

  1. Usando WebView 4.0 WebView 4.0 en Android 9 Android 9

    Excelente que compartas tus experiencias y recomendaciones, te doy toda la razón en cómo la educación superior no brinda los pasos adecuados para la adquisición de conocimientos, ya que se resumen en «si logras hacerlo es porque eres bueno».

  2. Usando Firefox 72.0 Firefox 72.0 en Windows 10 x64 Edition Windows 10 x64 Edition

    Muy de acuerdo con tuxtor, pero creo que no tenemos que ver la educación de la universidad como algo que nos tenia que dejar como expertos en un lenguaje o plataforma. Lo que nos tuvo que dejar la universidad es la curiosidad educada y el metodo para ir buscando las mejores herramientas y definir nuestros propios criterios… «Es en la diversidad de criterios, donde radica el concepto de universidad»

  3. Usando Firefox 73.0 Firefox 73.0 en Mac OS X  10.15 Mac OS X 10.15

    @Luis creo que ese es precisamente el problema, a veces por dar habilidad practica nos hacian «saltarnos las gradas», viendolo en retrospectiva a mi por ejemplo me pidieron en progra 1 manipular graficos en Swing porque «Swing era lo que se usaba para hacer apps de escritorio» en mi primer proyecto (2.5 meses estudiando programación).

    Fui capaz de hacerlo porque ya sabia programar en otros lenguajes, pero hubo gente que no sobrevivío 🤔

  4. Usando Google Chrome 79.0.3945.116 Google Chrome 79.0.3945.116 en Android 8.0.0 Android 8.0.0

    Actualmente voy por el noveno semestre de ing sistemas, y lo único que la U me enseñó a mí y a muchos compañeros es odiar la programación. Porque nos tiraban al matadero con los proyectos, y uno se daba la idea de que uno no sirve para la programación, pero es porque no se tienen los fundamentos necesarios. Pero como soy necio retrocedí para empezar con los fundamentos y así ir escalando en el ecosistema de Java

Deja una respuesta

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