domingo, 12 de octubre de 2025

La magia de los frameworks: Spring Boot, parte I

 La magia de los frameworks: Spring Boot, parte I

                                           

    En esta entrada nos adentramos en el apasionante mundo de los frameworks y, concretamente en Spring Boot, el framework por excelencia de Java y uno de los más importantes e implantados en el backend a nivel empresarial. 

    Spring Boot es una extensión o evolución del framework base, Spring. Con Spring se tenían que configurar manualmente muchas cosas que se abstraen en Spring Boot, los ejemplos más típicos son el servidor y la configuración manual de un fichero .xml con los beans (componentes).

    En cambio, la evolución experimentada con Spring Boot desde el año 2014 permitió, entre muchas otras mejoras, tener un servidor embebido (por lo general Apache Tomcat) que se levanta al iniciar nuestro programa. 

    Otro de los grandes avances respecto a Spring radica en las configuraciones, ya que sólo necesitamos añadir las dependencias en su fichero correspondiente (por ejemplo Maven o Gradle) pero no tenemos que ir añadiendo a un fichero .xml los componentes o beans conforme los vayamos declarando, ya que esto se realiza automáticamente con anotaciones que empiezan por "@", como por ejemplo @Service, @Repository, @Component ó @Bean.


    Estas anotaciones son unas de las herramientas más potentes, sino la que más, de Spring Boot. 
Del mismo modo, gracias a Lombok (simplemente agregamos su dependencia en el fichero pom.xml del proyecto), apenas escribimos código a la hora de crear nuestras clases:


    Este ejemplo es muy representativo, ya que sencillamente con las anotaciones @Builder y @Data no es necesario escribir el código de Getters, Setters, constructor con argumentos requeridos ni el código para implementar el patrón builder. 

    Las anotaciones además pueden recibir parámetros para configurar exactamente cómo queremos que se comporte un componente. En este ejemplo, @Cacheable va a establecer una caché para los productos buscados por id, por lo que tras realizar la primera llamada a la base de datos, las llamadas sucesivas estarán en caché y tararán mucho menos:


    El ahorro de código repetitivo que supone todo lo anterior optimiza mucho el tiempo de desarrollo y el posterior proceso de testing, entre otras muchas ventajas. 

    Aquí se muestra un ejemplo del nivel de abstracción que supone Spring Boot, tenemos una interfaz para mapear (convertir) de Product a ProductEntity (la entidad de producto ó DAO (Data Access Object) proveniente de la base de datos) y viceversa. 

    Nosotros a la hora de mapear llamamos directamente a la interfaz, pero cuando el proyecto se compila para ejecutarse, Spring Boot genera la implementación (clase) correspondiente con sólo tener la anotación @Mapper en la interfaz: 




    Uno de los principios más importantes sobre los que se asienta Spring Boot es la inversión de control (IOC), ya que nosotros sólo declaramos las diferentes clases, componentes, servicios, y es Spring Boot quien los crea por nosotros. 

    Directamente derivado de IOC está la inyección de dependencias, la cual nos permite cómodamente incluir como atributos de una clase las dependencias que vayamos a necesitar, en este caso un controlador Rest, y gracias a la anotación "@RequiredArgsConstructor" por debajo nos crea un constructor con los atributos que sean final o NonNull. 

    Todo ello nos permite inyectar dependencias en otras clases o servicios, lo cual favorece el desacoplamiento, la adopción de arquitecturas óptimas (como la hexagonal) y el facilitamiento del testing. 


    Con la facilidad de uso y versatilidad de Spring Boot se puede desplegar una Api Rest en cuestión de minutos, gracias a todas las capas de abstracción que tiene y a la facilidad de uso, por lo que para el programador es muy cómodo trabajar y tener funcionando un proyecto rápidamente e ir ajustándolo según los requerimientos del software a crear. 

    Finalizo la entrada intentando recalcar la idea de la potencia y la profundidad de un framework, un ecosistema completo en el que no necesitamos herramientas externas o librerías, sino que todo lo que precisamos para trabajar ya lo tenemos integrado y disponible en un sólo marco de trabajo en nuestro editor ó IDE (en mi caso IntelliJ). 

    Próximamente tendremos la segunda parte, donde veremos otras partes o "paquetes" de Spring que se integran en Spring Boot.


miércoles, 2 de julio de 2025

¿Es Java tan difícil como lo pintan?

 ¿Es Java tan difícil como lo pintan?


    Uno de los temas más recurrentes al hablar de Java está relacionado con su supuesta dificultad inicial, con su exceso de código para hacer algo sencillo, con su tipado estricto. Quizá por ser mi lenguaje de programación "materno" no tengo esa sensación que repiten tantas personas a lo largo del mundo.

    Sí que es cierto que comparado con otros lenguajes de alto nivel, es uno de los lenguajes menos accesibles para aprender a programar, precisamente porque es muy estricto para declarar los tipos de datos, compilar el código. Comparados con Java, otros lenguajes como JavaScript o Python son mucho más amables a la hora de iniciarse en este mundo.

    Suelen ser frecuentes los reels o shorts mostrando la "complejidad" de hacer un sencillo "Hola Mundo" en diferentes lenguajes, siendo Java uno de los más verbosos. En este sentido, Java y C# se parecen bastante.

    Como dije antes, aún no siendo del todo objetivo por ser el lenguaje en el que me inicié, Java para nada tiene una dificultad abrumadora ni tampoco es para tanto el hecho del tipado estricto. Una vez que lo integras en tu estructura mental te sale natural escribir el código de esa forma. 

    De hecho, me ha pasado precisamente haciendo mis pinitos con JS y Python, por aquello de investigar cómo se programa en esos lenguajes, que al tener Java como referencia y tan arraigado en mi mente, he echado de menos los ; y la declaración expresa del tipo de dato.

    Java es uno de los lenguajes más potentes y seguros del mercado, de hecho gracias principalmente a su framework Spring y su evolución Spring Boot, se usa masivamente en grandes empresas a nivel de backend. 

    Como los demás lenguajes de programación, Java ha ido evolucionando a lo largo de los años, integrando programación funcional (expresiones lambda a partir de Java 8), el uso masivo de anotaciones (@) para evitar escribir grandes cantidades de código (el compilador de Java en segundo plano sí que genera ese código "invisible"). 

    Como vemos en la imagen, usando una expresión lambda simplificamos mucho el código para recorrer una lista y devolver el dato que nos interesa:


    Otro ejemplo de la simplificación del código fuente de Java usando anotaciones con la librería Lombok en Spring:


    Una clase llamada "Product" sólo con sus atributos y con las anotaciones @Builder y @Data. Completamente funcional, no es necesario crear el constructor, getters y setters, toString(), patrón Builder y demás métodos típicos de una clase, ya que a nivel interno, Lombok "inyecta" en tiempo de compilación el código que nosotros escribiríamos a mano de no usar dichas anotaciones. 

    De hecho, Java en sus últimas versiones es un lenguaje mucho más moderno y con funcionalidades equiparables al resto de lenguajes de alto nivel. En ese aspecto, Java "moderno" es similar a Kotlin, aunque sigue preservando su esencia y singularidad. 

    Un nuevo ejemplo de esta evolución de Java son los records. Se integraron en Java 14 y son como una Data Class de Kotlin, ideal para crear objetos finales, que no vayan a variar. Por ejemplo, en backend se usan mucho para crear DTOs, ya que son objetos que se crean con unos atributos inalterables para devolverlos al frontend, por ejemplo. En las siguientes imágenes vemos un record llamado "ProductDto" y cómo se crea: 



    Una vez creado el objeto, como dijimos antes, no se pueden modificar los atributos, sólo consultarlos: 


    Para finalizar esta entrada, tan sólo hacer hincapié en la idea de que Java no es para nada difícil de abordar para aquellas personas que se estén iniciando en la programación. Curiosamente, si empiezas a programar con Java, la curva de aprendizaje de los demás lenguajes de alto nivel será más sencilla, por lo que en muchos aspectos es muy recomendable comenzar a aprender Java en 2025.

miércoles, 4 de junio de 2025

Cómo aprender a programar en 2025

Cómo aprender a programar en 2025

 

    Esta es la primera entrada de mi humilde blog. Mi nombre es Rubén, nací y vivo en España y soy un programador con apenas 3 años de experiencia a nivel trainee. He estudiado el ciclo superior de Desarrollo de Aplicaciones Multiplataforma y actualmente me dedico a seguir estudiando de forma autodidacta y a crear pequeños proyectos personales. 

    Estoy preparándome haciendo cursos y más proyectos a la espera de que llegue mi primera oportunidad laboral en este sector.

    He programado principalmente en Java, debido a que fue el lenguaje con el que estudiaba y, en menor medida, en Kotlin para algunas apps nativas de Android. También he probado a crear pequeños programas en Python, una pequeña API Rest en C# con .NET 9 y pequeñas páginas web con HTML5, CSS3 y JavaScript.

    Según mi experiencia y como también he podido observar de creadores de contenido del mundo de la tecnología, es importante establecer una especialización y una ruta de aprendizaje clara. En un ambiente tan cambiante y dinámico como el de los lenguajes de programación y los frameworks, es imposible conocerlos todos y estar al día de los últimos lanzamientos y tendencias.

    Debido a ello y ya desde una fase temprana de nuestro aprendizaje, es muy recomendable ir especializándose en una de las muchas ramas que tiene el mundo del desarrollo de software. 

    En los últimos meses observo una tendencia marcada, algunas áreas del mercado laboral están más saturadas que otras de perfiles trainee/junior. Especialmente las áreas más accesibles, que no fáciles, como pueden ser el desarrollo web a nivel de frontend. Este fenómeno puede explicarse principalmente por la pandemia, cuando empezaron a surgir multitud de bootcamps en la época de los confinamientos. 

    Por todo lo anterior, entre otros factores, he decidido decantarme por un perfil de backend en lenguaje Java. Concretamente, con el framework Spring. A nivel de oportunidades laborales es una tecnología demandada y, además, cuenta con una gran comunidad y número de grandes y medianas empresas que lo usan desde hace muchos años.

    Una vez expuestos los puntos anteriores, podemos considerar otros aspectos importantes para iniciarnos en el mundo de la programación y el desarrollo de software. Dependiendo de la situación personal y económica de cada uno, es recomendable una forma de aprender u otra. Vamos a enumerar punto por punto algunas de estas opciones: 

  • Aprendizaje autodidacta: Para las personas que estén trabajando o que no dispongan de mucho tiempo y dinero, es la mejor opción para iniciarse e ir avanzando. El ser autodidacta es aplicable tanto a nivel principiante como a nivel avanzado, ya que aunque se disponga de una buena base y conocimientos avanzados, en este mundo siempre hay que estar actualizándose y reciclándose. 
  • Formación académica reglada: Es el camino clásico y más largo, pero como todo, también tiene sus puntos a favor. Si se realizan estudios universitarios, las bases de la computación, de lógica y de algoritmos son mucho mayores que cualquier otro programa formativo. En contra, la duración y el enfoque menos práctico que el resto de las opciones. 

También se puede optar, como en mi caso, por un ciclo formativo de formación profesional (En España). En unos dos años o dos años y medio como mucho, se obtienen unos conocimientos sólidos y una buena base para seguir formándose.

  • Bootcamps: Es la opción más controvertida por varios motivos, principalmente por los precios y por las promesas laborales que ofrecen en poco tiempo de formación. Suelen ser cursos intensivos de pocos meses enfocados a un aprendizaje de una tecnología a nivel práctico, van muy al grano. 

    Personalmente, sólo recomendaría esta última opción a personas que no tengan problemas económicos y que quieran agilizar el proceso de aprendizaje. Es tan legítima como las otras opciones, pero siempre hay que ver las condiciones y la letra pequeña del contrato. 

    Finalizo la primera entrada de mi blog con la premisa de seguir creando contenido relacionado con el mundo de la programación. Espero que sirva de guía y de inspiración a los que os hayáis tomado la molestia de leer toda la entrada. Muchas gracias por vuestra visita y un saludo cordial.