Plataforma de desarrolladores/programadores junior

¿Qué tengo que aprender para llegar a trabajar de X?

Cuando tengas claro que es la X busca tu roadmap aquí y empieza en ello https://roadmap.sh. No es obligatorio ni recomendable acabarlo todo antes de empezar a buscar, pero ya sabes cuales son las cosas que se te suele pedir.

¿Algún recurso para empezar?

Leagrove

#4440 No voy a comisión, todos sus cursos son buenísimos -> https://www.udemy.com/user/jonasschmedtmann/
De los mejores instructores y "realista", aprendes muchísimo en todos sus cursos y son bastante extensos y profundos, te añade también unos resources bastante buenos (diapos explicándolo todo) , para mi es la mejor inversión para aprendizaje, el de JS debería ser patrimonio mundial y el de react es sublime, hace poco le metio un update añadiendo nextjs.
Los va actualizando de tanto en cuanto.

3 1 respuesta
bocadillazo

#4441 genial, ya me he inscrito! Espero empezarlo pronto a ver qué tal, gracias!!

12 días después
smarquezp

En un futuro me gustaría mirar cosas fuera del mundo Java, no por el lenguaje en sí, si no por el tipo de aplicaciones que se desarrollan con este. Son todo aplicaciones de entorno empresarial y financiero, aunque últimamente estén intentando adaptarse al mundo actual, pero no veo que vaya a cambiar.

Actualmente estoy trabajando principalmente con Java + Spring, aunque tenemos algunas apps creadas con JSP y Java 6/7. Y fronts en Angular.
En nuestro equipo tocamos de todo. Pero lo que más me ha llamado la atención en estos años de experiencia ha sido el back, el tema de desarrollo de APIs, seguridad, etc. Vamos, todo lo relacionado con backend y menos con front. También me he llamado mucho la implementación de integración y despliegue continuo, y algo pero no tanto Kubernetes. Hemos desplegado y configurado despliegues en K8s pero no hemos llegado a entrar tanto en configuración de clústers y demás, aunque yo haya tocado algo a nivel personal.
Como veis, todo lo que me gusta esta más orientado a la capa Backend / DevOps.

De cara a este año futuro, estoy mirando a donde dirigir mi carrera. Aunque Java me gusta, creo que el tipo de empresas que lo utilizan no son tanto de mi estilo, llevo 3 años trabajando en esta empresa donde llevamos CRMs, aplicaciones internas de salud, gestión de bajas/facturas, etc. Y se trabaja porque no queda otra, pero no son aplicaciones que me llamen para nada la atención. Disfruto mucho más haciendo mis cositas.

He estado pensando en intentar orientar mi carrera para otro lado.

  • Kotlin, a pesar de que no me llame tanto la atención el front / diseño, pero puede estar interesante el desarrollo móvil y con la experiencia de Java me puede facilitar buscar empleo.
  • Otra idea sería tirar para algo más top como Go o Rust, pero investigando ofertas por LinkedIn te piden años de experiencia en estos y en esta empresa no voy a conseguir nada. Solo podría cogerla haciendo proyectos personales prácticamente.
  • Python también me llama la atención pero más de lo mismo, el tema experiencia puede ser limitante para encontrar un sitio...

Dada esta situación que he consultado mucho con el colega GPT (pero al final este no entiende ná), me gustaría tener una opinión humana para decidirme sobre la orientación de mi carrera.

¿Qué me recomendáis?

2 respuestas
pantocreitor

Está bien diversificar, pero esto que dices no es cierto:

#4443smarquezp:

Son todo aplicaciones de entorno empresarial y financiero, aunque últimamente estén intentando adaptarse al mundo actual, pero no veo que vaya a cambiar.

Esa frase la puede decir alguien que no tenga idea de casi cualquier lenguaje, a parte viendo con las versiones de Java que curras xD

Te animo a que aprendas el lenguaje que mas te atraiga, pero si lo que quieres es cambiar el tipo de proyectos en los que estás trabajando y que no te hacen gracia intenta de dejar de currar en una cárnica. Porque lo que tu achacas al lenguaje es un tema de la empresa, a lo que se dedica y a sus proyectos, es decir, si trabajas en cárnicas da igual que lenguaje uses que vas a hacer CRMs, API REST y las 4 mierdas típicas que buscan los clientes, pero una vez salgas de la rueda de las cárnicas es cuando se empiezan a hacer proyectos interesantes independientemente del lenguaje usado.

Resumen, aprende el lenguaje que mas te guste, pero el tipo de proyecto va a depender de dónde curres, no del lenguaje.

7 1 respuesta
vindicate

#4443

Te recomendaría que siguieses con Java y Spring. Si, Java te abre la puerta a empresas aburridas, pero es que son muchas puertas.

Respecto al conocimiento de Java... Que tal te llevas con la librería de concurrency? Me da que por lo que cuentas, posiblemente nunca te ha tocado trabajar con aplicaciones de alta disponibilidad donde hayas tenido problemas de concurrencia/paralelismo

Que tal te llevas con ello? Serías capaz de montar, por ejemplo, un balanceador de carga con Java a pelo y teniendo en cuenta que debe gestionar las peticiones de forma concurrente?

Lo digo porque yo soy programador Java también y la gran diferencia de nivel entre alguien que "controla" Java y alguien potente en Java suele estar en concurrencia (aunque en generla, aplica a cualquier programador)

3 respuestas
CaNaRy_r00lz

#4445 Me interesa bastante todo lo que digas de Java, que es con lo que ando yo, aunque uso Quarkus y Mybaits en vez de spring e hibernate, que mas cosas deberia controlar con Java, curiosamente con magicas estaba viendo concurrency el otro dia

D

#4445 Otro javero fpero por aquí. tomo nota, ahora mismo estoy trasteando deeplearning usando deeplearning4j que no está mal, pero cualquier cosa a explorar con java me gusta.

pantocreitor

Concurrencia y RxJava son 2 cosas bastantes buscadas.
Concurrencia con Java 21 y la mejora en los virtual threads se están obteniendo resultados muy muy buenos.
Y toda la parte de RxJava unido a la concurrencia es bastante interesante, no solo la programación reactiva, sino todo lo que va a rodear a la app (cosas tipo como que todas las dependencias deben ser reactivas para que el flow completo lo sea y cosas del estilo).

1 respuesta
smarquezp

#4444 Tienes toda la razón, ahí patiné un poco. La sensación que me daba en LinkedIn es que todas las empresas que buscaba con 'Java' eran de un entorno parecido a cárnica, y que cosas más 'novedosas' las traían con Go o Node.js.

#4445 Pues me habláis de estas cosas y me pierdo. No salgo de hacer mini necesidades de 1 semana máximo con proyectos A, B y C y no tengo nada de nivel en cuanto a teoría u otros conceptos más avanzados. Tal vez antes que mirar otros lenguajes me tendría que centrar en exprimir al máximo Java y juntarlo con los años de experiencia para buscar otro lugar.

Es lo que decía, no salgo de hacer proyectos en Java 6/7/8 y de vez en cuando hacer cosillas en Java 17. Por lo demás, nos dedicamos a más tema de DevOps que otra cosa. Eso sí, tiempo libre tengo de sobra, para poder preparar lo que quiera.

Llevo mucho tiempo pensando en preparar entrevistas, pero no me siento nada preparado por el nivel que tengo para buscar un puesto acorde a mi experiencia.
Ganas de aprender no me faltan, pero llevo tanto tiempo pensando y pensando, que si seguir con Java, irme a otra tecnología, ahora qué aprender, etc., con todo lo que hay en este mundo, que al final no hago nada.

Está claro que me va a tocar hacer mucho proyecto personal para aplicar todo lo nuevo que va saliendo, porque no queda otra si no.

Qué recursos utilizáis para aprender? Al final adquirís esos conocimientos de la práctica del día a día?

2 respuestas
pantocreitor
#4449smarquezp:

Llevo mucho tiempo pensando en preparar entrevistas, pero no me siento nada preparado por el nivel que tengo para buscar un puesto acorde a mi experiencia.

Conozco mucha gente que tiene ese problema y al final es eso, pasan mas tiempo pensando que hacer que haciendo cosas xD

#4449smarquezp:

Qué recursos utilizáis para aprender? Al final adquirís esos conocimientos de la práctica del día a día?

En mi caso una mezcla del día a día y de cosillas que me hago.
Te diría que montes proyectos pequeños, con un scope muy definido y qu ete los plantees de manera que vayas a necesitar usar x cosas que no sepas. Pelearte y conseguir que te salga es la mejor manera de aprender en mi opinión y de paso vas a acabar necesitando alguna que otra cosa mas que no te habías planteado y no conoces.
Pero nada de meterte en mega proyectos, que esos se quedan a medias siempre jajajaja

1 1 respuesta
vindicate

#4450 A project loom aun le queda tiempo y la gran mayoría de empresas te seguirán pidiendo gestionar concurrencia y paralelismo con Java Concurrency

No creo que se vaya a ir de la noche a la mañana

1 1 respuesta
vindicate

#4449

Si Java Concurrency no te suena, estás lejos de ser un buen programador java. Posiblemente seas un programador por encima de la media, pero te falta el push necesario para controlar lo que más problema nos da día a día a los que trabajamos en sistemas distribuidos: el paralelismo

Respecto a de donde saco contenido:

-Trabajo en el día a día

  • Libros, muchos libros. A botepronto, para Java Concurrency te recomiendo "Java Concurrency in Practice", para coger una buena base sobre conocurrencia.
  • Muy raramente, algún vídeo. Te dejo uno aqui de youtube, que son una serie de videos sobre concurrencia en Java que es loe mejor que he visto en youtube:
2 1 respuesta
pantocreitor

Por complementar por si a alguien le suena a chino esto #4451
https://www.baeldung.com/openjdk-project-loom
https://openjdk.org/projects/loom/
https://cr.openjdk.org/rpressler/loom/Loom-Proposal.html

En Java 21 el tema de los virtual threads ha mejora notablemente,pero con esto en teoría debe ser muuuucho mejor (me conformo con que sea mejor e ya xD)

2 2 respuestas
vindicate

#4453 Va a ser mucho mejor. Por lo de pronto, si acaba viendo la luz, se cargará a la programación reactiva

Ya conozco alguna empresa que está empezando a valorar la opción de sacarse Spring Reactor (que nunca ha sido bien valorado, todo sea dicho) y explorar las posibilidades de los Virtual

Obviamente en el resto de empresas seguiremos, con suerte, en Java 17 xD

1 1 respuesta
bahamut06

#4448 Los virtual threads han hecho que java reactive quede obsoleto. La curva de aprendizaje es demasiado compleja y mantener el codigo y debugearlo es muy complicado.

https://medium.com/alphadev-thoughts/the-reactive-java-era-is-over-here-is-why-5885caacdf43

1 respuesta
pantocreitor

#4455 Ya, pero hay muchos proyectos que van a seguir usándolo y no está de mas conocerlo.
Vamos, sobre todo por la poca capacidad general que hay para hacer upgrade de version de Java y para migrar todo lo de RxJava.

#4454 nosotros tenemos un monolito con java concurrency que no ha olido Sprin Reactor xD
Ese al upgradearlo a Java 21 ha pegado un subidón brutal.
Con RxJava solo tenemos un servicio que se hizo de prueba con un sistema de colas de Oracle, no gusto el tema y los siguientes se han hecho con Kafka y concurrency.

1 respuesta
vindicate

#4456 ´

Las colas están muy bien en EDA e inclusto para stream real time. Las de Oracle yo las he catado y no volvería jamás a ellas después de trabajar con Kafka

El gran problema de Kafka es el coste tremedo que tiene (si tu empresa busca recortar gastos de infra...) y que sueles necesitar un equipo dedicado a mantener los cluster.

RXJava es complejo de picar y complejo de debuguear. Al final es mucho más cómodo montarte tú mismo sistemas no bloqueantes con concurrency o hazelcast

1 respuesta
pantocreitor

#4457 las colas de Oracle llevan ahí años y años jajajajajaja poco a poco vamos eliminando.
Pero si, ahora mismo en general se usa Kafka/Hazelcast y Concurrency.
El rollo de Hazelcast es que cada vez cambian más cosas free a paid y hemos llegado a una versión que si actualizamos para aprovechar las mejoras ya casca porque no tenemos licencia xD

smarquezp

#4452 #4453 gracias por los consejos y los recursos, me van a venir muy bien!

Visto un poco por encima, no sabía muy bien lo que referís al concepto de concurrencia, pero si que he trabajado bastante con hilos. Necesito ese plus de teoría para tenerlo atado.

Lo que me suele pasar es que no se cuales son los estándares o lo que se suele utilizar en las últimas versiones. Tipo: "que es lo que debería aprender de lo ultimo y como estar a la última, dejando cosas obsoletas"