JavaRush /Blog Java /Random-PL /Przerwa kawowa #109. Najbardziej pożądane obecnie umiejęt...

Przerwa kawowa #109. Najbardziej pożądane obecnie umiejętności w programowaniu w języku Java. 7 opcjonalnych wskazówek Java, jak pozbyć się bałaganu w kodzie

Opublikowano w grupie Random-PL

Najbardziej pożądane obecnie umiejętności w programowaniu w języku Java

Źródło: Medium Java pozostaje jednym z najpopularniejszych i najbardziej poszukiwanych języków programowania, mimo że ma już prawie ćwierć wieku. Dlatego rozsądne jest założenie, że popularność Java będzie nadal rosła, a w przyszłości programiści Java będą świadkami jeszcze większego zapotrzebowania ze strony pracodawców. Przerwa kawowa #109.  Najbardziej pożądane obecnie umiejętności w programowaniu w języku Java.  7 opcjonalnych wskazówek Java, jak pozbyć się bałaganu w kodzie — 1Aby tworzyć produkty wysokiej jakości, programiści muszą być na bieżąco z najnowszymi narzędziami Java oraz doskonalić swoje umiejętności techniczne i wiedzę. Poniżej przedstawiamy sześć kluczowych umiejętności wymaganych od programistów Java.

1. Doskonała znajomość Java 8

Mimo że nowsze wersje języka Java są już powszechnie stosowane, wszyscy początkujący programiści języka Java potrzebują dogłębnej wiedzy i doświadczenia w zakresie języka Java 8. Niektóre z najbardziej przydatnych funkcji języka Java 8 obejmują:
  • Standardowe i statyczne metody tworzenia interfejsów z implementacjami metod.
  • Funkcjonalny interfejs, który ma tylko jedną metodę abstrakcyjną i pomaga programistom uniknąć dodawania innych metod abstrakcyjnych.
  • Wyrażenia lambda pomagające tworzyć funkcjonalne interfejsy.
  • Java Stream API umożliwiający wykonywanie równoległe i sekwencyjne.
  • Nowe metody w Collection API.
Wszystkie te cechy sprawiają, że Java 8 jest niezbędna do programowania funkcjonalnego. Programowanie funkcjonalne zapewnia współbieżność i zwięzłość kodu oraz pomaga tworzyć aplikacje o dużym obciążeniu ze zoptymalizowanym kodem. Java 8 stała się także podstawą do optymalizacji kodu natywnego, pozwalając na optymalizację rozwoju w innych językach, takich jak Scala, Kotlin, czy Grails.

2. Doświadczenie w testowaniu

Testy jednostkowe w Javie to dość kontrowersyjny temat. Niektórzy programiści twierdzą, że pisanie testów jednostkowych to strata czasu, my jednak jesteśmy przekonani, że umiejętności testowania jednostkowego są koniecznością dla każdego profesjonalnego programisty Java. Testy jednostkowe pozwalają przetestować poszczególne bloki kodu i dają pewność, że produkt końcowy będzie działał bez błędów. Dlatego jeśli programista chce doskonalić swoje umiejętności i wiedzę, musi nauczyć się korzystać z najpopularniejszych i najskuteczniejszych narzędzi testowych. Głównym frameworkiem testowym, z którym musisz się zapoznać, jest biblioteka JUnit 5. Inne narzędzia obejmują:
  • Struktura robota
  • Mockito
  • PowerMock
Oprócz testów jednostkowych programista Java nie powinien zapominać o innych metodach testowania (testach systemowych, testach akceptacyjnych i testach integracyjnych). Dzięki temu możesz przeprowadzić kompleksowe testy oprogramowania i upewnić się, że nie ma w nim błędów, bugów czy awarii krytycznych. Najważniejszą rzeczą do zapamiętania w przypadku testowania jest to, że małe zmiany prowadzą do dużych wyników. Jeśli nie wahasz się poświęcić czasu i wysiłku na testy jednostkowe, będziesz zaskoczony poprawą jakości swojej pracy.

3. DevOps

Chociaż nie jest to wymagane, poznanie DevOps i jego zasad może być korzystne zarówno dla Ciebie jako programisty, jak i dla firmy, w której pracujesz. Elastyczność i organizacja procesów DevOps pozwala firmom optymalizować jakość swoich produktów i usprawniać działania. a także zwiększyć przejrzystość procesów. DevOps w Javie to zasadniczo zastosowanie DevOps do programowania w Javie. To zawiera:
  • Ciągłe dostarczanie i integracja.
  • Praca z mikroserwisami zamiast monolitów.
  • Infrastruktura jako kod.
  • Zautomatyzowane testowanie.
DevOps to rozległa dziedzina, której badanie wymaga znacznej ilości czasu i zasobów. Jeśli jednak jesteś programistą Java, nauka DevOps będzie korzystna, ponieważ umożliwi ci zostanie w przyszłości inżynierem DevOps. Jeśli nie chcesz zostać inżynierem DevOps lub Twoja firma nie jest tym zainteresowana, to też jest w porządku. Należy tylko pamiętać, że DevOps staje się coraz bardziej popularny w społeczności Java.

4. Znajomość bibliotek Java i API.

Ponieważ Java jest jednym z wiodących języków programowania na świecie, nie jest zaskoczeniem, że posiada ogromną liczbę dostępnych API i bibliotek do pracy. Narzędzia te znacznie upraszczają proces programowania i pozwalają programistom szybko tworzyć niezawodne oprogramowanie. Poniżej wymieniliśmy podstawowy zestaw narzędzi, które zna i może śmiało używać każdy dobry programista Java. Narzędzia te pomogą Ci szybko zbudować aplikację i efektywnie zarządzać danymi oraz ich przechowywaniem:
  • Gradle (narzędzie do budowania aplikacji);
  • Maven (trochę przestarzały, ale wciąż popularny, używany także do tworzenia aplikacji);
  • Standardowe pakiety Java 8;
  • Ramy wiosenne;
  • JPA ORM (Hibernacja, TopLink);
  • Bazy danych NoSQL (MongoDB, Cassandra).
Jeśli chodzi o API, aby móc pracować z podstawowym API Java, programista musi posiadać dobrą znajomość OpenJDK, Androida, Oracle i IS2T. Dużą zaletą tych narzędzi jest to, że do każdego z nich dołączona jest szczegółowa i pouczająca dokumentacja. Co więcej, programiści zawsze mogą uzyskać wsparcie społeczności, co również jest dużą zaletą.

5. Pewna znajomość Springa i Spring Boot

Spring Framework jest najczęściej używanym frameworkiem do tworzenia aplikacji opartych na Javie, dlatego ważne jest, aby programista wiedział, jak z nim pracować. Jedną z kluczowych zalet Springa jest wstrzykiwanie zależności, które pozwala tworzyć luźno powiązane aplikacje i zapewnia programistom większą elastyczność. Spring jest również bardzo lekki, obsługuje konfiguracje XML, adnotacje i programowanie deklaratywne. Jeśli więc chcesz opanować umiejętności programowania w Javie, powinieneś opanować także wdrażanie Springa. Spring Boot to iteracja Springa, która zapewnia wygodne narzędzie do szybkiego wdrażania aplikacji. Można śmiało powiedzieć, że Spring Boot używa Springa jako bazy i buduje na nim własne funkcje. Podczas gdy Spring koncentruje się na elastyczności, Spring Boot pomaga zredukować kod i uprościć proces programowania. Oferuje programistom gotowe do użycia funkcje, pomaga tworzyć samodzielne aplikacje i jest ogólnie łatwiejszy w uruchamianiu i zarządzaniu. Spring Boot doskonale nadaje się do mikrousług i aplikacji, które należy szybko zbudować, ponieważ umożliwia szybkie i łatwe konfigurowanie i uruchamianie aplikacji dla różnych środowisk (produkcja, testowanie, jakość, CI/CD). Zarówno Spring, jak i Spring Boot rozszerzyły się o możliwości programowania w React, co jest kolejnym gorącym trendem w społeczności programistów. Na przykład Spring 5 ma teraz WebFlux do wdrożenia reaktywnego podejścia do programowania i rozwiązywania złożonych systemów rozproszonych.

6. Doświadczenie z Big Data

Big Data to rosnący trend, który programiści muszą śledzić i dostosowywać, aby sprostać wymaganiom rynku. Główne narzędzia, z którymi mogą zapoznać się profesjonalni programiści Java, to:
  • Apache Spark
  • Apacz Kafka
  • Hadoop (do przetwarzania wsadowego)
Apache Spark to rozproszona platforma przetwarzania Big Data, która zapewnia natywne powiązania dla języka Java. Framework ten stał się niezwykle popularny ze względu na swoje funkcje i wydajność i jest obecnie najbardziej preferowanym narzędziem do obsługi dużych zbiorów danych w społeczności Java. Apache Spark może działać w trybie autonomicznym klastra i do tego potrzebne jest jedynie środowisko Apache Spark i maszyna JVM (dla każdej maszyny w klastrze). Spark jest również niesamowicie szybki i ma bardzo przyjazny dla użytkownika interfejs Spark API. Hadoop to platforma do przechowywania danych, dobrze znana także programistom Java. Choć Hadoop nie jest tak szybki jak Spark, pozostaje jednym z najpopularniejszych narzędzi do pracy z big data. Wynika to również z faktu, że Hadoop (i podobne rozwiązania) posiadają dużą liczbę wtyczek, które pozwalają sprawnie rozwiązywać problemy z przetwarzaniem Big Data i ogólnie optymalizować wydajność Hadoopa (w tym obsługę przetwarzania strumieniowego w czasie rzeczywistym).

7 opcjonalnych wskazówek Java, jak pozbyć się bałaganu w kodzie

Źródło: Medium „Mam kolegów, którzy nie wiedzą o istnieniu Opcjonalnych” – pisze jeden z programistów Java na Reddicie. Czy możemy uznać, że Opcjonalne poprawia „czytelność” kodu? Czy warto go używać cały czas? Gdzie użycie opcji opcjonalnej jest całkowicie niepotrzebne? Ponieważ wielu programistów wciąż nie wie, jak poprawnie używać Opcjonalnego, podam 7 przykładów nadużyć Opcjonalnych i co z nimi zrobić. Przerwa kawowa #109.  Najbardziej pożądane obecnie umiejętności w programowaniu w języku Java.  7 opcjonalnych wskazówek Java, jak pozbyć się bałaganu w kodzie — 2

1. Nie używaj opcji Opcjonalny do sprawdzania wartości null

Użycie opcji Opcjonalne zamiast sprawdzania zerowego po prostu dodaje bałaganu. Nie ma z tego żadnych korzyści. Błędem jest także używanie metod Option, isPresent i get . Twórcy uważają, że get powinien działać zgodnie z oczekiwaniami. Następnie dodają isPresent i wracają do sprawdzania wartości null. Pamiętaj, że opcja Opcjonalna nie naprawia kontroli zerowych. Następnym razem, gdy zobaczysz isPresent i otrzymasz (lub ElseThrow ), zmień ten fragment kodu. Użyj mapowania i orElse , aby usunąć standardowe kontrole zerowe i użyj Opcjonalny bardziej selektywnie. Oto jeden dobry przykład:
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)");
Możesz zacząć od celu opcjonalnego. Celem Opcjonalne jest reprezentowanie opcjonalnych, brakujących wartości. Następnie wróć do swojego problemu i sprawdź, czy to działa w Twoim przypadku. Innym sposobem radzenia sobie ze sprawdzaniem wartości null jest użycie adnotacji. Nullable lub NotNull powinny działać poprawnie. To prawda, że ​​​​mogą zanieczyścić Twój kod i chronią tylko w czasie kompilacji. Aby sprawdzić czas wykonania, użyj Objects.requireNonNull .

2. Wykonaj odpowiednią obsługę błędów

Czasami wartość null reprezentuje wyjątki. Jest to zły sposób sygnalizowania błędów i wyjątków. „Coś poszło nie tak, a tutaj jest zero” to antywzór, którego należy unikać. Nie powinieneś także używać Opcjonalnych do uwzględniania wyjątków. Oto przykład.
public Optional<MyObject> getMyObject(final String jql) {
    try {
        return Optional.ofNullable(get(sql));
    } catch (final JqlParseException e) {
        return Optional.empty();
    }
}
Dlaczego myObject jest pusty? Jest to błąd lub pusta wartość. Zatem ponownie uzyskasz niejednoznaczny wynik i w rezultacie wymazasz zalety Opcjonalnego. Ten kod istnieje, ponieważ ludzie próbują użyć opcji Opcjonalny do przepływu kontroli. Opcjonalnie usunie część zer z bazy kodu. Ale nadal musisz używać konstrukcji try-catch do obsługi wyjątków. Użyj try-catch, aby poprawnie obsługiwać wyjątki. Nie usuwaj opcji Opcjonalne podczas obsługi błędów, po prostu poczekaj i będzie działać idealnie. Ale jest tu jeden wyjątek – pusty haczyk . Jeśli nie wiesz, co zwrócić w pustym catch, pusty Opcjonalny element powinien działać poprawnie.
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. Nie zwracaj wartości null z metod opcjonalnych

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;
}
To jest sprzeczne z celem Opcjonalnym. To kolejny przykład kiepskich testów. Ponieważ dane wejściowe są puste, oznacza to, że potrzebujemy pliku IllegalArgumentException . To także błąd. Nikt nie musi sprawdzać opcjonalnych metod wywoływania. Zwróć pusty element opcjonalny i nigdy nie sprawdzaj elementu opcjonalnego pod kątem wartości null.

4. Nie używaj Opcjonalnych w przypadku kolekcji.

Nie ma potrzeby zawijania kolekcji w Opcjonalne. Co więcej, nie umieszczaj opcji w kolekcjach. To tylko komplikuje sprawę poprzez dodanie bezsensownego pakowania i dodatkowego rozpakowywania. Nie dodawaj opcji do kolekcji. Nie ma z tego żadnych widocznych korzyści. Zachowaj prostotę i użyj opcji Opcjonalne w przypadku brakujących wartości.

5. Nie łącz łańcuchem dla samego łączenia

Optional.ofNullable(foo).ifPresent(value -> {
  //do something
})
Opcjonalne zawiera szczegółowe metody, które mogą w tym pomóc. Zamiast łańcucha wystarczy proste sprawdzenie wartości null. Wiem, że Opcjonalne ma dobre metody i dobrą obsługę IDE. Możesz z nich skorzystać.

6. Użyj prymitywnych opakowań wartości

Nie jest to duży problem, ale możesz użyć OptionInt lub OptionLong . Po prostu usuwając niepotrzebne typy generyczne, poprawisz wydajność i napiszesz bardziej zwięzły kod.

7. Powinieneś wiedzieć o ofNullable

if (a==null){
  return Optional.empty();
} else {
  return Optional.of(a);
}
Ten typ kodu jest zwykle pisany przez programistów, którzy nie wiedzą o Option#ofNullable . Większość programistów nawet nie rozumie różnicy między ofNullable i of . Nie rozumieją, jak opcja Option#of może przynieść odwrotny skutek. Większość uciekłaby się do ofNullable z obawy przed zgłoszeniem wyjątku NullPointerException w Option#of . Ponownie jest to sprzeczne z celem tych dwóch metod. Jeśli używamy tylko ofNullable , dlaczego w ogóle potrzebujemy Option#of ? Opcjonalne#of zgłasza NPE po przejściu do wartości null. Dzieje się tak z jakiegoś powodu. Tej metody należy używać, jeśli oczekujesz, że wartość będzie obecna. Jeśli go nie ma, szybko zawiedzie. Opcjonalny#ofNullable konwertuje wartość null na pustą opcjonalną. Ta metoda przyjmuje wartość null jako argument, który pasuje do pustej opcji.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION