Na początku 2020 roku w świecie IT mówiono o wielu zmianach technologicznych, również w obszarze Javy. Poruszono między innymi wpływ GraalVm na ulepszenie środowiska uruchomieniowego, zmniejszenia roli Spring Frameworka na rzecz Quarkus oraz o zmianach w projektach opartych o stos JVM – czyli dominacji Azure.
W ostatnim kwartale roku weryfikujemy zapowiedzi z jego początku. Zmiany w obszarze Javy – komentuje Andrzej Kicinger- Ekspert IT.
DCG: GraalVm – jego wpływ na Javę. Czy faktycznie ulepszył środowisko uruchomieniowe? Jak wpłynął na codzienną pracę?
Andrzej Kicinger: GraalVM powstał przede wszystkim z myślą o skróceniu czasu uruchamiania i szybszym wykonywaniu programów w środowisku maszyny wirtualnej Javy, a także ulepszeniu mechanizmów zarządzania pamięcią. W zależności od typu aplikacji możemy liczyć na nawet kilkukrotny wzrost szybkości wykonywania aplikacji w stosunku do OpenJDK. Dodając do tego nawet 50-krotne skrócenie czasu uruchamiania, a także 5 krotne zmniejszenie zapotrzebowania na pamięć GraalVM, nie dziwi fakt, że jest on coraz częściej wykorzystywany w środowisku mikroserwisów.
Niemniej jednak należy mieć na uwadze, że chociaż GraalVM jest rozwijany już od wielu lat, to dopiero w zeszłym roku została wydana pierwsza jego produkcyjna wersja. Potrzeba jeszcze trochę czasu, aby to narzędzie w pełni potwierdziło gotowość do zastosowań w systemach produkcyjnych i przekonało społeczność do jego szerokiego stosowania.
DCG: Czy Spring Framework zmniejszył swoją popularność? Co stało się jego alternatywą i dlaczego?
AK: Myślę, że Spring Framework jest nadal bardzo popularny i szeroko wykorzystywany po stronie backendu do tworzenia średnich i większych systemów w oparciu o technologię Java i framework ogólnego przeznaczenia. Jeżeli jednak spojrzeć szerzej, poza ekosystem Javy, to warto zwrócić uwagę na rewolucję, jaka dokonała się w wyniku dokeryzacji. Środowiska dokerowe realizują paradygmat „write once run everywhere”, który był jedną z podstaw popularności technologii Java. Dodatkowo umożliwiają również efektywne wdrażanie heterogenicznych mikroserwisów. To pozwala na tworzenie systemów ze względnie małych klocków z wykorzystaniem różnych technologii, niekoniecznie tak zaawansowanych jak Spring Framework. W tym ogólnie upatrywałbym źródeł nieco mniejszej popularności tego frameworku.
DCG: Jak kultura DevOps wpłynęła na świat Javy?
AK: Developerzy Java musieli nauczyć się nowych narzędzi :), analogicznie jak developerzy używający innych technologii. Myślę, że patrząc na korzyści płynące z DevOps nie było wątpliwości czy warto. Automatyzacja budowania, sprawdzania jakości kodu, testowania i wdrażania aplikacji daje więcej czasu na programowanie, pozwala na zachowanie odpowiedniej jakości kodu i wychwycenie potencjalnych problemów na wczesnym etapie. Nie do przecenienia jest również skrócenie cyklu od zgłoszenia potrzeb przez użytkowników do dostarczenia im nowych wersji aplikacji z odpowiadającymi na nie funkcjonalnościami. Trudno chyba sobie dzisiaj wyobrazić rozwój jakiegokolwiek systemu bez DevOps.
DCG: Intellij IDEA czy Visual Studio Code? Które z tych narzędzi jest skuteczniejsze i dlaczego?
AK: Nie ma prostej odpowiedzi na to pytanie. Wszystko zależy od indywidualnych potrzeb.
Visual Studio Code należy do kategorii edytorów kodu źródłowego zintegrowanego z narzędziami wykorzystywanymi przez programistów np. do kontroli wersji czy do budowania aplikacji. Wspiera wiele języków programowania, w tym również Javę. Oferuje także rozszerzenia ułatwiające korzystanie z różnych frameworków np. Spring Boot. Jest lekki, prosty i dostępny na licencji open source.
Z kolei Intellij IDEA należy do kategorii zintegrowanych środowisk do rozwoju oprogramowania. Oferuje zarówno zaawansowaną edycję kodu źródłowego jak i rozbudowane narzędzia wspierające cały cykl rozwoju oprogramowania, od integracji z systemami kontroli wersji po zarządzanie obrazami dokerowymi ze zbudowanymi wersjami aplikacji. Jest o wiele bardziej rozbudowany niż Visual Studio Code, co początkowo może przytłaczać, niemniej w pracy nad większymi systemami jest to niewątpliwie zaleta. Być może dlatego programiści Java zdecydowanie częściej korzystają z Intellij IDEA niż Visual Studio Code.
DCG: Czy Kotlin zwiększył swój udział w byciu bazą dla architektury mikroserwisów?
AK: W moim przekonaniu nie nastąpiła w tym obszarze jeszcze istotna zmiana. Ale warto śledzić, co się dzieje w świecie mikroserwisów, JVM i Kotlina. Coraz większą popularność zdobywają frameworki typu Micronaut czy Quarkus, które umożliwiają tworzenie systemów z wykorzystaniem Kotlina. JetBrains, który rozwija Kotlina, bardzo duży nacisk kładzie na rozwój komponentów Kotlin for Native oraz Multiplatform programming (obecnie w statusie odpowiednio Beta i Alpha). Zastosowanie tych komponentów pozwala na zachowanie możliwości przenoszenia kodu źródłowego przy jednoczesnej możliwości jego uruchamiania po skompilowaniu do natywnego kodu. Dzięki temu programy wykonują się szybciej i mają mniejsze wymagania na pamięć. Z pewnością jest to bardzo dobra wiadomość dla architektów IT.
DCG: Dlaczego Developerzy dalej używają Java 8?
AK: Tak, wiele raportów potwierdza, że Java 8 nadal jest najchętniej i najczęściej używaną wersją Javy (np. jetbrains.com/lp/devecosystem-2020/java/). Składa się na to wiele czynników.
Jednym z nich jest z pewnością zmiana zasad licencjonowania oraz wsparcia począwszy od Javy 9. Ogólnie, nie wnikając w szczegóły, oznacza to, że koszty licencji oraz wsparcia dla Javy 9+ w przypadku wykorzystywania do celów komercyjnych są wyższe niż dla Javy 8. Dodatkowo zmieniły się zasady wydawania nowych wersji, które pojawiają się o wiele częściej niż miało to miejsce do Javy 8 – co pół roku, ale w większości z krótkimi półrocznymi okresami wsparcia. Wersje z kilkuletnimi okresami wsparcia będą pojawiać się co 3 lata – obecnie wśród wersji 9+ takie wsparcie ma tylko Java 11.
Drugim bardzo ważnym czynnikiem ciągle dużej popularności Javy 8 są dość głębokie zmiany wprowadzone do samej maszyny wirtualnej Javy 9 w związku z implementacją funkcjonalności modularyzacji, które spowodowały dość dużą ostrożność w ekosystemie do udostępniania nowych wersji bibliotek.
Warto również wspomnieć, że niektóre technologie zostały usunięte z Javy 11. Mam tu na myśli przede wszystkim platformę Java Enterprise Edition oraz CORBA. Jedyną opcją dla tych technologii pozostaje Java 8.
DCG: Jak sztuczna inteligencja wpłynęła na zmiany w Javie?
AK: Algorytmy sztucznej inteligencji wymagają dużej ilości danych i efektywnego ich przetwarzania, aby były skuteczne. Dlatego pojawiły się w świecie Javy nowe narzędzia i frameworki do tego celu. Warto tu wymienić chociażby powszechnie znany Hadoop przeznaczony do rozproszonego składowania i przetwarzania dużych zbiorów danych, czy Spark – platformę do przetwarzania wielkich wolumenów danych i wykonywania obliczeń na dużą skalę.
Za sztuczną inteligencją kryją się także skomplikowane modele matematyczne, które specjaliści (Data Scientists) dostosowują/kalibrują do konkretnych potrzeb. Data Scientists korzystają z różnych języków i narzędzi, w szczególności z Pythona czy R. Dlatego konieczne okazało się wprowadzenie mechanizmów integracji z tymi językami i narzędziami do rozwiązań Javowych. Przykłady takich mechanizmów znajdziemy np. w Sparku.