JavaRush /Blog Java /Random-ES /Pausa para el café #109. Las habilidades más demandadas e...

Pausa para el café #109. Las habilidades más demandadas en el desarrollo de Java en este momento. 7 consejos opcionales de Java para deshacerse del desorden de códigos

Publicado en el grupo Random-ES

Las habilidades más demandadas en el desarrollo de Java en este momento

Fuente: Medio Java sigue siendo uno de los lenguajes de programación más populares y demandados, a pesar de que tiene casi un cuarto de siglo. Por lo tanto, es razonable suponer que la popularidad de Java seguirá creciendo y que los desarrolladores de Java verán una demanda aún mayor por parte de los empleadores en el futuro. Pausa para el café #109.  Las habilidades más demandadas en el desarrollo de Java en este momento.  7 consejos opcionales de Java para deshacerse del desorden de códigos - 1Para crear productos de calidad, los desarrolladores deben mantenerse al día con las últimas herramientas de Java y mejorar sus habilidades y conocimientos técnicos. A continuación presentamos seis habilidades esenciales necesarias para los desarrolladores de Java.

1. Excelente conocimiento de Java 8

Aunque las versiones más nuevas de Java ya se utilizan ampliamente, todos los aspirantes a desarrolladores de Java necesitan un conocimiento y experiencia profundos con Java 8. Algunas de las características más útiles de Java 8 incluyen:
  • Métodos estándar y estáticos para crear interfaces con implementaciones de métodos.
  • Una interfaz funcional que tiene solo un método abstracto y ayuda a los desarrolladores a evitar agregar otros métodos abstractos.
  • Expresiones lambda que ayudan a crear interfaces funcionales.
  • API Java Stream para permitir la ejecución paralela y secuencial.
  • Nuevos métodos en la API de colección.
Todas estas características hacen que Java 8 sea indispensable para la programación funcional. La programación funcional proporciona simultaneidad y brevedad del código, y ayuda a crear aplicaciones de alta carga con código optimizado. Java 8 también se convirtió en la base para la optimización del código nativo, permitiendo la optimización del desarrollo en otros lenguajes como Scala, Kotlin y Grails.

2. Experiencia con pruebas

Las pruebas unitarias en Java son un tema bastante controvertido. Algunos desarrolladores argumentan que escribir pruebas unitarias es una pérdida de tiempo, pero nosotros creemos firmemente que las habilidades en pruebas unitarias son imprescindibles para cualquier desarrollador profesional de Java. Las pruebas unitarias le permiten probar bloques de código individuales y garantizan que el producto final funcione sin errores. Por lo tanto, si un desarrollador quiere mejorar sus habilidades y conocimientos, necesita aprender a utilizar las herramientas de prueba más populares y efectivas. El principal marco de pruebas con el que debe familiarizarse es la biblioteca JUnit 5. Otras herramientas incluyen:
  • Marco robótico
  • Mockito
  • PowerMock
Además de las pruebas unitarias, un desarrollador de Java no debe olvidarse de otros métodos de prueba (pruebas de sistema, pruebas de aceptación y pruebas de integración). Esto le permite realizar pruebas exhaustivas del software y asegurarse de que no haya errores, fallas o fallas críticas. Lo principal que hay que recordar acerca de las pruebas es que los pequeños cambios conducen a grandes resultados. Si no duda en dedicar tiempo y esfuerzo a las pruebas unitarias, se sorprenderá de la mejora en la calidad de su trabajo.

3. DevOps

Aunque no es obligatorio, aprender sobre DevOps y sus principios puede resultar beneficioso para usted como desarrollador y para la empresa para la que trabaja. La flexibilidad y organización de los procesos DevOps permite a las empresas optimizar la calidad de su producto y agilizar las operaciones. y también aumentar la transparencia de los procesos. DevOps en Java es esencialmente la aplicación de DevOps al desarrollo de Java. Esto incluye:
  • Entrega e integración continua.
  • Trabajar con microservicios en lugar de monolitos.
  • Infraestructura como código.
  • Pruebas automatizadas.
DevOps es un campo vasto y requiere una cantidad significativa de tiempo y recursos para estudiarlo. Pero si es desarrollador de Java, aprender DevOps será beneficioso ya que le permitirá convertirse en ingeniero de DevOps en el futuro. Si no desea convertirse en ingeniero de DevOps o su empresa no está interesada en ello, también está bien. Solo tenga en cuenta que DevOps se está volviendo cada vez más popular en la comunidad Java.

4. Conocimiento de bibliotecas y API de Java.

Dado que Java es uno de los lenguajes de programación líderes en el mundo, no sorprende que tenga una gran cantidad de API y bibliotecas disponibles con las que trabajar. Estas herramientas simplifican enormemente el proceso de desarrollo y permiten a los desarrolladores crear rápidamente software confiable. A continuación enumeramos un conjunto básico de herramientas que cualquier buen desarrollador de Java conoce y puede utilizar con confianza. Estas herramientas lo ayudan a crear rápidamente una aplicación y administrar eficazmente los datos y su almacenamiento:
  • Gradle (una herramienta para crear aplicaciones);
  • Maven (un poco desactualizado pero aún popular, también se usa para crear aplicaciones);
  • Paquetes estándar de Java 8;
  • Marcos de primavera;
  • JPA ORM (Hibernar, TopLink);
  • Bases de datos NoSQL (MongoDB, Cassandra).
En cuanto a la API, para trabajar con la API principal de Java, un desarrollador debe tener un buen conocimiento de OpenJDK, Android, Oracle e IS2T. La gran ventaja de estas herramientas es que todas vienen con documentación detallada e informativa. Además, los desarrolladores siempre pueden obtener apoyo de la comunidad, lo que también es una gran ventaja.

5. Conocimiento seguro de Spring y Spring Boot

Spring Framework es el marco más utilizado para desarrollar aplicaciones basadas en Java, por lo que es importante que un desarrollador sepa cómo trabajar con él. Uno de los beneficios clave de Spring es la inyección de dependencia, que le permite crear aplicaciones poco acopladas y brinda a los desarrolladores más flexibilidad. Spring también es muy liviano y admite configuraciones XML, anotaciones y programación declarativa. Entonces, si desea dominar las habilidades de desarrollo de Java, también debe dominar la implementación de Spring. Spring Boot es una iteración de Spring que proporciona una herramienta conveniente para implementar aplicaciones rápidamente. Es seguro decir que Spring Boot usa Spring como base y construye sus propias funciones sobre él. Si bien Spring se centra en la flexibilidad, Spring Boot ayuda a reducir el código y simplificar el proceso de desarrollo. Ofrece a los desarrolladores funciones listas para usar, ayuda a crear aplicaciones independientes y, en general, es más fácil de iniciar y administrar. Spring Boot es excelente para microservicios y aplicaciones que deben crearse rápidamente, ya que hace que sea rápido y fácil configurar y ejecutar aplicaciones para una variedad de entornos (producción, prueba, calidad, CI/CD). Tanto Spring como Spring Boot se han ampliado con las capacidades de programación de React, que es otra tendencia candente en la comunidad de desarrolladores. Spring 5, por ejemplo, ahora tiene WebFlux para implementar un enfoque reactivo para programar y resolver sistemas distribuidos complejos.

6. Experiencia con Big Data

Big Data es una tendencia creciente que los desarrolladores deben seguir y adoptar para satisfacer las demandas del mercado. Las principales herramientas con las que los desarrolladores profesionales de Java pueden familiarizarse son:
  • chispa apache
  • Apache Kafka
  • Hadoop (para procesamiento por lotes)
Apache Spark es una plataforma distribuida de procesamiento de Big Data que proporciona enlaces nativos para Java. Este marco se ha vuelto extremadamente popular debido a sus características y rendimiento y actualmente es la herramienta de big data preferida en la comunidad Java. Apache Spark puede ejecutarse en modo independiente del clúster y para ello solo necesita un entorno Apache Spark y una JVM (para cada máquina del clúster). Spark también es increíblemente rápido y tiene una API Spark muy fácil de usar. Hadoop es una plataforma de almacenamiento de datos que también es bien conocida por los desarrolladores de Java. Aunque Hadoop no es tan rápido como Spark, sigue siendo una de las herramientas más populares para trabajar con big data. Esto también se debe al hecho de que Hadoop (y soluciones similares) tienen una gran cantidad de complementos que le permiten resolver de manera eficiente los problemas de procesamiento de Big Data y, en general, optimizar el rendimiento de Hadoop (incluido el soporte para el procesamiento de flujo en tiempo real).

7 consejos opcionales de Java para deshacerse del desorden de códigos

Fuente: Medio "Tengo colegas que no conocen la existencia de Opcional", escribe un desarrollador de Java en Reddit. ¿Podemos considerar que Opcional mejora la “legibilidad” del código? ¿Vale la pena usarlo todo el tiempo? ¿Dónde es completamente innecesario el uso de Opcional? Dado que muchos desarrolladores aún no saben cómo utilizar Opcional correctamente, daré 7 ejemplos de abusos de Opcional y qué hacer al respecto. Pausa para el café #109.  Las habilidades más demandadas en el desarrollo de Java en este momento.  7 consejos opcionales de Java para deshacerse del desorden de códigos - 2

1. No utilice Opcional para verificación nula

Usar Opcional en lugar de verificación nula solo agrega desorden. No hay ningún beneficio de esto. También es un error utilizar los métodos Opcional y isPresent y get . Los desarrolladores creen que get debería funcionar como se esperaba. Luego agregan isPresent y regresan a la verificación nula. Recuerde que Opcional no corrige sus cheques nulos. La próxima vez que vea isPresent y obtenga (o ElseThrow ), cambie este fragmento de código. Utilice el mapeo y orElse para eliminar las comprobaciones nulas estándar y utilice Opcional de forma más selectiva. He aquí un buen ejemplo:
var user = userService.getCurrentUser();
if(user == null) {
    return "(unknown)";
}
var username = user.getUsername();
if (username == null) {
    return "(unknown)";
}
return username;
vs

var user = userService.getCurrentUser();
if(user.isEmpty()) {
    return "(unknown)";
}
var username = user.orElseThrow().getUsername();
if (username == null) {
    return "(unknown)";
}
return username;
vs

return userService.getCurrentUser()
                  .map(User::getUsername)
                  .orElse("(unknown)");
Puede comenzar con el objetivo Opcional. El propósito de Opcional es representar valores faltantes opcionales. Luego regrese a su problema y vea si funciona para usted. Otra forma de lidiar con la verificación nula es utilizar anotaciones. Nullable o NotNull deberían funcionar bien. Es cierto que pueden contaminar su código y solo protegen en el momento de la compilación. Para verificar el tiempo de ejecución, use Objects.requireNonNull .

2. Realice un manejo adecuado de los errores

A veces, nulo representa excepciones. Y ésta es la manera equivocada de señalar errores y excepciones. “Algo salió mal y aquí es nulo” es un antipatrón que debe evitarse. Además, no deberías usar Opcional para cubrir excepciones. He aquí un ejemplo.
public Optional<MyObject> getMyObject(final String jql) {
    try {
        return Optional.ofNullable(get(sql));
    } catch (final JqlParseException e) {
        return Optional.empty();
    }
}
¿Por qué miObjeto está vacío? Esto es un error o un valor vacío. Por lo tanto, nuevamente obtendría un resultado ambiguo y, como resultado, borraría los beneficios de Opcional. Este código existe porque la gente intenta utilizar Opcional para controlar el flujo. Opcional eliminará algunos ceros de su código base. Pero aún necesitas usar la construcción try-catch para manejar excepciones. Utilice try-catch para manejar las excepciones correctamente. No elimine Opcional cuando maneje errores, solo espere y funcionará perfectamente. Pero aquí hay una excepción: la captura vacía . Cuando no sabes qué devolver en una captura vacía, un Opcional vacío debería funcionar bien.
private int readExpirationAsInt(Milk milk)
{
  String expiration = milk.getExpiration();
  try {
    return Integer.parseInt(expiration);
  }
  catch(NumberFormatException ignored) {}

  return 0;
}


private OptionalInt readExpirationAsInt(Milk milk)
{
  String expiration = milk.getExpiration();

  try {
    return Optional.of(Integer.parseInt(expiration));
  }
  catch(NumberFormatException e) {
    return OptionalInt.empty();
  }
}

3. No devuelva nulo desde métodos opcionales

public static Optional<POSType> getPOSType(String posName) {
    if (StringUtils.isNotBlank(posName)) {
        return Arrays.stream(POSType.values())
                .filter(type -> type.toString().equalsIgnoreCase(posName))
                .findFirst();
    }
    return null;
}
Esto anula el propósito de Opcional. Este es otro ejemplo de pruebas deficientes. Dado que la entrada está vacía, significa que necesitamos un archivo IllegalArgumentException . Además, esto es un error. Nadie necesita verificar los métodos de llamada opcionales. Devuelve un elemento Opcional vacío y nunca verifica si un elemento Opcional es nulo.

4. No utilices Opcional con colecciones.

No es necesario agrupar las colecciones en Opcional. Además, no coloques opcionales en colecciones. Esto sólo complica las cosas al agregar boxeo inútil y desenvolvimiento adicional. No agregue opcionales a las colecciones. No hay ningún beneficio visible de esto. Mantenlo simple y usa Opcional para los valores faltantes.

5. No encadenes por encadenar

Optional.ofNullable(foo).ifPresent(value -> {
  //do something
})
Opcional tiene métodos detallados que pueden ayudar con esto. En lugar de cadena, será suficiente una simple verificación nula. Sé que Opcional tiene buenos métodos y buen soporte IDE. Puedes usarlos.

6. Utilice envoltorios de valores primitivos

No es un gran problema, pero puedes usar OpcionalInt o OpcionalLong . Simplemente eliminando genéricos innecesarios, mejorará el rendimiento y escribirá código más conciso.

7. Deberías conocer ofNullable

if (a==null){
  return Optional.empty();
} else {
  return Optional.of(a);
}
Este tipo de código generalmente lo escriben desarrolladores que no conocen Opcional#ofNullable . La mayoría de los desarrolladores ni siquiera entienden la diferencia entre ofNullable y of . No entienden cómo Opcional#of puede resultar contraproducente. La mayoría recurriría a ofNullable por temor a generar una NullPointerException en Opcional#of . Nuevamente, esto frustra el propósito de estos dos métodos. Si solo usamos ofNullable , ¿por qué necesitamos Optional#of ? Opcional#of genera un NPE cuando pasa a nulo. Esto sucede por una razón. Este método debe usarse cuando espera que el valor esté presente. Si no está ahí, fallará rápidamente. Opcional#ofNullable convierte nulo en un Opcional vacío. Este método toma nulo como argumento, que coincide con un opcional vacío.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION