JavaRush /Blog Java /Random-PL /Przerwa kawowa #131. Rola języka Java w tworzeniu aplikac...

Przerwa kawowa #131. Rola języka Java w tworzeniu aplikacji internetowych i mobilnych. Programowanie funkcjonalne – zalety i wady

Opublikowano w grupie Random-PL

Rola języka Java w tworzeniu aplikacji internetowych i mobilnych

Źródło: DZone Java jest jednym z najczęściej używanych języków programowania. Jest aktywnie wykorzystywany przy tworzeniu aplikacji korporacyjnych, internetowych i mobilnych. Java ma zastosowania w wiodących branżach technologicznych, od Data Science po AR/VR. Chociaż rozwój przedsiębiorstw w Javie jest najpopularniejszym przypadkiem użycia tego języka, aplikacje internetowe i mobilne są również uważane za jeden z obszarów, w którym wykorzystywana jest Java. Przerwa kawowa #131.  Rola języka Java w tworzeniu aplikacji internetowych i mobilnych.  Programowanie funkcjonalne - zalety i wady - 1Przyjrzyjmy się, dlaczego w ciągu ostatnich dwudziestu lat programowanie w języku Java stało się tak popularne w Internecie i na urządzeniach mobilnych. Jednym z głównych powodów używania Java w Internecie i na urządzeniach mobilnych jest to, że jest to język programowania o wysokiej wydajności. Dzięki niemu Twoje aplikacje będą mogły działać szybko i bez błędów przetwarzania. Istnieją również inne powody:

1. Otwarte źródło

Będąc językiem programowania typu open source, Java ma wiele zalet. Po pierwsze, obniża koszty procesu tworzenia aplikacji. Po drugie, programiści łatwo zmieniają język i często go aktualizują, ponieważ jest to oprogramowanie typu open source. Ponadto język Java ma łatwą do odczytania składnię, która ułatwia tworzenie aplikacji dla Internetu i urządzeń mobilnych. Wreszcie programiści mogą wykorzystać istniejącą bazę kodu językowego i ulepszyć ją.

2. Wieloplatformowy

Kolejną zaletą programowania w Javie jest to, że jest to język wieloplatformowy. Programiści mogą pisać kod w systemie Windows i uruchamiać go w systemach macOS i Linux. Obowiązuje tu zasada „pisz raz, uruchamiaj wszędzie”. Ułatwia to programistom pracę na różnych systemach i upraszcza proces testowania na różnych maszynach. Na przykład programiści mogą sprawdzić, czy program będzie działał poprawnie na ekranach o różnych rozmiarach i systemach operacyjnych.

3. Przyjazny dla urządzeń mobilnych

Java to popularna technologia dla aplikacji mobilnych. Twórcy aplikacji na Androida używają głównie języka Java, ponieważ jest łatwy w implementacji, ma funkcje bezpieczeństwa i możliwości pracy na wielu platformach. Android wymaga potężnego języka do skalowania aplikacji, ale Java oferuje niesamowite możliwości skalowania. Upraszcza także proces testowania aplikacji na Androida. Wszystko to sugeruje, że jest to niezawodny i dynamiczny język programowania do tworzenia aplikacji mobilnych.

4. Narzędzia i biblioteki

Jedną z najważniejszych zalet Javy jest jej kompatybilność z różnymi narzędziami. Frameworki takie jak Spring, Hibernate, Struts, Spark i inne znacznie upraszczają proces programowania. Wszystkie te narzędzia oferują różne funkcje umożliwiające tworzenie interaktywnych i dynamicznych aplikacji. Biblioteki takie jak Apache Commons, Java Standard Libraries, Maven, Jackson itp. umożliwiają programistom dodawanie funkcjonalności bez konieczności pisania kodu od zera.

5. Aktywna społeczność

Na świecie jest ponad 7,6 miliona programistów Java. Stale aktualizują język programowania i dodają do niego nowe funkcje. Ponieważ Java jest aktualizowana co 6 miesięcy, programiści mają możliwość szybkiego uczenia się i tworzenia lepszych produktów. Możesz także skorzystać ze społeczności Java, aby znaleźć odpowiedzi na różne pytania.

Powstanie Java w tworzeniu aplikacji internetowych

Od czasu jego powstania w 1995 roku przez Sun Microsystems, język Java stał się jednym z priorytetów w branży programistycznej. Dziś firmy z całego świata wykorzystują ten język programowania do tworzenia aplikacji internetowych. Google, Netflix, Spotify i Pinterest to tylko kilka firm, które wykorzystują technologię Java w swoim stosie technologicznym. Eksperci szacują, że ponad 60% firm działających w IT wykorzystuje Javę w takiej czy innej formie. Co więcej, pozostaje popularnym językiem programowania ze względu na jego przyjęcie w innych obszarach tworzenia stron internetowych, a mianowicie w chmurze obliczeniowej, mediach społecznościowych, rozwoju przedsiębiorstw, AR, VR i nie tylko. Jest to doskonały i wydajny język programowania do stosowania w przedsiębiorstwach, które obecnie potrzebują architektury opartej na chmurze. W połączeniu z JavaScriptem Java umożliwia tworzenie wysokowydajnych aplikacji internetowych, które mogą działać na dowolnej platformie.

Powstanie Java we współczesnych przypadkach użycia

Oprócz tworzenia stron internetowych i rozwoju urządzeń mobilnych, Java odcisnęła swoje piętno we współczesnym świecie technologii. Obecnie Java jest niezwykle przydatnym językiem programowania do zastosowań naukowych. Oferuje bezpieczne, szybkie i przenośne środowisko do obliczeń naukowych. MATLAB to jedna z najpopularniejszych bibliotek do zastosowań naukowych opartych na Javie.
  • Java jest również przydatna w tworzeniu aplikacji naukowych typu front-end i back-end. Możesz używać Struts i Java Server Pages do programowania frontonu, a Java Core do rozwoju aplikacji naukowych zaplecza.

  • Java jest również przydatna do analizy danych. Umożliwia programistom tworzenie rozwiązań do analizy danych przy użyciu różnych bibliotek i narzędzi. Dziś Java znalazła zastosowanie w segmencie Internetu Rzeczy. Jest to kluczowa technologia w systemach wbudowanych, takich jak karty inteligentne i czujniki. Dlatego firmy wykorzystują ten język programowania w branży automatyki domowej. Ponadto jest aktywnie wykorzystywany w rozwoju technologii urządzeń strumieniowych i Smart TV.

  • Platforma Big Data Hadoop jest napisana w Javie. Ponieważ jest to język open source i obiektowy, jest kamieniem węgielnym aplikacji Big Data. Języki programowania takie jak Scala można łatwo uruchomić na wirtualnej maszynie Java i ułatwić analizę dużych zbiorów danych.

  • Gry to wschodząca i szybko rozwijająca się branża, w której Java jest szeroko stosowana w różnych aplikacjach do gier. Na przykład oferuje obsługę jMonkeyEngine, największego silnika do tworzenia gier 3D typu open source. Ponadto Dalvik Virtual Machine (DVM) jest obsługiwana głównie przez Javę i służy do tworzenia interaktywnych gier na Androida.

Programowanie funkcjonalne – zalety i wady

Źródło: Dev.to Pomimo mojego tradycyjnego sceptycyzmu wobec nieznanych technologii, dostrzegam korzyści płynące z programowania funkcjonalnego. Poniżej znajduje się przybliżona lista zalet opisujących ten paradygmat programowania. Przerwa kawowa #131.  Rola języka Java w tworzeniu aplikacji internetowych i mobilnych.  Programowanie funkcjonalne - zalety i wady - 2

Bezpieczna współbieżność

Podejście funkcjonalne zachęca do bezpiecznej współbieżności, to znaczy możliwości uruchamiania zadań w oddzielnych wątkach bez powodowania konfliktów wątków lub kolizji modyfikacji. Powodem jest to, że w odróżnieniu od podejścia obiektowego, nie udostępnia się obiektu, którego stan można zmienić w trakcie przetwarzania. Są wejścia i wyjścia, a wejście nie zmienia się dzięki tobie. W Javie, nawet jeśli używasz obiektów „thread-safe”, nie możesz zagwarantować, że będą one miały te same wartości, gdy wywołana zostanie Twoja metoda. W poniższym przykładzie widzimy, że pętla przetwarzająca elementy pojedynczo może być łatwo przetwarzana równolegle za pomocą funkcji lambda wewnątrz wątku.
for( String item : items ) {
   process(item);
}
A teraz staje się:
items.parallelStream().forEach( item -> process(item) );

Szybkie wejścia/wyjścia

Programowanie funkcjonalne obsługuje inne podejście niż wielowątkowość. Oznacza to, że nie mamy już oddzielnych wątków oczekujących na odpowiedzi we/wy, takie jak wywołania bazy danych. Oznacza to, że maksymalizujemy wykorzystanie procesora i przepustowości. W zastosowaniach wymagających dużej wydajności jest to wyraźna zaleta. Zostało to zaimplementowane przy założeniu, że wywołanie funkcji może zwrócić przyszłość, która nie jest rzeczywistym wynikiem wywołania, ale raczej obietnicą zwrócenia wyniku w pewnym momencie w przyszłości. W pewnym momencie w przyszłości zostanie uzyskana wartość zwracana, która uruchomi funkcję. Oznacza to, że wątki procesora nie czekają na zakończenie wywołań bazy danych lub REST i mogą zająć się czymś innym.

Zwięzłość wypowiedzi

Twórcy oprogramowania chcą móc z wdziękiem wyrażać złożone pomysły. Programowanie funkcjonalne pozwala to zrobić w zwięzły sposób. Na przykład typowe konstrukcje, takie jak pętle for, można zastąpić wątkami, które abstrahują wspólne operacje for, do których używane są pętle. Nie ma wątpliwości, że dodanie funkcji i wątków Lambda do Java rozszerzyło możliwości wyrażania pomysłów, które wcześniej były niemożliwe.

Dlaczego nie stać się funkcjonalnym?

Powtórzę to samo: kodowanie funkcjonalne ma wiele zalet, więc w tym artykule nie próbujemy uogólniać wszystkiego w jednym przypadku i mówić, że zdecydowanie powinieneś zająć się programowaniem funkcjonalnym i odwrotnie. Decyzję tę należy podjąć po pełnym zrozumieniu przyczyn przejścia i potencjalnych problemów.

Zawsze trudno to zrozumieć intuicyjnie

Czy podczas pisania kodu próbujesz komunikować się z komputerem? Jeśli komunikacja z komputerem jest dla Ciebie tak ważna, dlaczego nie napisać kodu maszynowego? Oczywiście jest to bardzo trudne, dlatego wymyślono języki komputerowe, aby to ułatwić. Umożliwiają także programistom tworzenie wyrażeń zrozumiałych dla innych programistów. W miarę jak oprogramowanie staje się coraz większe i bardziej złożone, potrzebujemy strategii zarządzania złożonością. Osiągamy to poprzez abstrakcje i ukrywanie informacji. Klasa używana w Javie do wysyłania wiadomości e-mail jest dość złożona, ale interfejs tej klasy jest prosty. Ukrywa szczegółową implementację, odsłaniając nam jedynie zewnętrzną stronę kontroli. Funkcje językowe, takie jak nawiasy klamrowe i nawiasy kwadratowe, informują nas o strukturze, takiej jak instrukcje warunkowe i pętle. Dopiero teraz przenosimy pętle, a właściwie rekurencję i warunki do funkcji:
for( String item : items ) {
    System.out.println(item);
}
Okazało się:
items.foreach( item -> System.out.println(item) );
Podejście strumieniowe i lambda są zdecydowanie krótsze. Możesz wyrazić tę samą funkcjonalność przy użyciu mniejszej ilości kodu. Problem polega na tym, że obecnie ukrywamy rzeczywiste zachowanie w metodach, które musimy znać. Pętle w Javie używają słów kluczowych. Z drugiej strony funkcje lambda mogą implementować różne formy rekurencji i tylko nazwa wskazuje, do czego służą. Na przykład:
boo.fooble( item -> System.out.println(item) );
Nie można już po prostu przeczytać kodu, aby zrozumieć strukturę. Utrudnia to śledzenie przepływu wykonania. Kolejną cechą jest łączenie funkcji, w którym wynik jednej funkcji jest wejściem następnej bez przypisania zmiennej pośredniej.
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
Może to mieć sens dla autora tego kodu, ponieważ wydaje się, że napisał każdą funkcję i wie, co ona robi. Jednak dla osób początkujących w kodzie nie mówi to zbyt wiele o parametrach, procesach czy wartościach zwracanych przez każdą funkcję. Ale jeśli napiszesz to samo w czymś, co przypisuje typy, otrzymasz:
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
Może nie jest to idealna analogia, ponieważ parametry i funkcje anonimowe to nie to samo, ale chodzi o to, że długie zdanie z nieznanymi wynikami i parametrami jest trudne do odczytania bez głębszego zrozumienia działania opisanych poniżej funkcji. Jest więc możliwe, że programowanie funkcjonalne jest zarówno bardzo wyraziste w zaskakująco krótkich fragmentach kodu, jak i niezrozumiałe dla osób, które nie mają doświadczenia z oprogramowaniem. Celem klas i interfejsów jest ukrywanie danych i tworzenie fragmentów kodu wielokrotnego użytku, które nie wymagają od programisty zrozumienia, a może nawet spojrzenia na implementację. Istnieją po to, aby programiści mogli pracować na dużych, złożonych systemach bez problemów. Jest to wygodny sposób organizowania kodu powiązanego z określonymi jednostkami. Jednak nie bardzo rozumiem, w jaki sposób programowanie funkcjonalne pomaga konstruować duże, złożone projekty. Prawdopodobnie istnieją ku temu powody subiektywne.

Aby zaimponować innym swoimi umiejętnościami

Niektórzy twórcy oprogramowania są tak niepewni swoich umiejętności, że starają się zaimponować, pisząc niepotrzebnie skomplikowany kod. Jako starszy programista nie szczególnie podziwiam innych programistów, którzy próbują pisać inteligentny kod. Oczywiście nie dotyczy to tylko programowania funkcjonalnego; to samo może się zdarzyć w dowolnym stylu kodowania. Zauważyłem jednak pewną intelektualną próżność wśród zwolenników programowania funkcjonalnego. Chodzi o to, że twórcy oprogramowania nie działają w próżni. Ten „inteligentny” kod będzie wymagał konserwacji, a jeśli będzie trudny do zrozumienia, będzie trudny do odczytania i zmiany oraz trudny do debugowania. Zarządzając zespołami, mamy ludzi na wszystkich poziomach, dlatego najmądrzejszą rzeczą, jaką można zrobić, jest napisać kod w sposób zrozumiały dla wszystkich zaangażowanych osób. Dlatego mamy jasne, długie nazwy zmiennych, dlatego ograniczamy długość metod. „Inteligentny” kod zajmie więcej czasu, więc pisanie go nie jest zbyt mądre. Wierzę, że w programowaniu funkcjonalnym używa się tych samych argumentów dotyczących zwięzłych i potężnych wyrażeń, jakie Perl przedstawił wiele lat temu. Zwolennicy Perla byli dumni z jego wyrazistości i sposobu, w jaki potrafili pisać programy o dużej mocy w zaledwie kilku linijkach kodu. To była prawda. Problem w tym, że trudno było je zrozumieć. Być może programowanie funkcjonalne wpadło w tę samą pułapkę.

Bo to nowa moda

Zawsze istnieje „gorąca” nowa technologia lub paradygmat. Stale pojawiają się nowe technologie, języki i podejścia. Musimy stale stawiać sobie wyzwania i uczyć się nowych rzeczy. Bycie programistą oznacza rozwój technologii. Ale jako twórcy oprogramowania musimy sami ocenić, jakich technologii potrzebujemy, aby stworzyć produkt. Uczenie się nowej, popularnej technologii tylko dlatego, że jest popularna, nie jest mądrym wykorzystaniem czasu. Nie oznacza to, że nie powinieneś uczyć się programowania funkcjonalnego, ale raczej, że powinieneś ocenić zalety i wady tego paradygmatu dla aplikacji, którą piszesz.

Ponieważ jest to jedyny prawdziwy sposób

Wiele razy widziałem, jak programiści promują to czy tamto podejście jako jedyne słuszne. Ale jak powiedział mi znajomy, różne prace wymagają różnych narzędzi. Na przykład osobiście używam Pythona i PyTorcha do sztucznej inteligencji, chociaż istnieje wiele innych narzędzi i technologii, z których każda ma swoje zalety i wady. Istnieją dobre powody, aby rozważyć programowanie funkcjonalne jako opcję w przypadku usług wymagających znacznej skalowalności. Wynika to z bezpieczeństwa współbieżności oferowanego przez to podejście. Należy jednak zdawać sobie sprawę z kosztów i potencjalnego ryzyka. Kilka lat temu miałem podobne doświadczenia z zastrzykiem zależności, a Spring był uważany za najlepszego do tego zadania. Kiedy pytałem zwolenników Springa, jakie korzyści przynosi, nie udzielili mi jasnych odpowiedzi. Widzę teraz coś podobnego u niektórych purystów programowania funkcjonalnego, którzy wydają się angażować w jakąś kampanię religijną, a nie w bezstronną ocenę technologii. Swoją drogą, zastrzyk zależności był świetnym pomysłem i teraz mogę jasno zidentyfikować jego zalety. Podobnie myślę, że moje obawy dotyczące programowania funkcjonalnego mają związek ze sposobem jego użycia, a nie z tym, czy jest to przydatne i uzasadnione podejście.

Wniosek

Celem tego artykułu nie jest udzielenie jednoznacznej odpowiedzi na pytanie, czy warto zajmować się programowaniem funkcjonalnym. Chodzi o to, jak ocenić każdą nową technologię lub podejście. Najważniejsze: nie pozwól, aby Twoje ego blokowało przed Tobą obiektywną ocenę. Tworzenie oprogramowania nie jest dowodem Twoich zdolności intelektualnych ani cech osobistych. Chodzi o tworzenie wartości w realnym świecie. Jeśli programowanie funkcjonalne Ci pomaga, użyj go.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION