Czy Scala to wciąż dobry język dla programistów w 2023 roku?

geek.justjoin.it 1 rok temu

Scala łączy w sobie zarówno cechy języków obiektowych, jak i funkcyjnych. Działa na Wirtualnej Maszynie Javy (JVM) i jest kompatybilny z programami napisanymi w Javie. Jak wynika ze Stackoverflow Developers Survey 2022, Scala nie znalazła się w czołówce najbardziej popularnych wśród programistów wyborów, a mimo to biznes docenia jej siłę. Dlatego też plasuje się ona na 7. miejscu najlepiej płatnych technologii, a wynagrodzenia dla programistów Scala wzrosły w porównaniu do roku poprzedniego.

Wiele rozproszonych systemów IT, budowanych z myślą o przetwarzaniu ogromnych ilości danych w niezawodny sposób, napisanych jest właśnie w Scali. Z punktu widzenia samego programisty, to naprawdę ekscytujący język do pracy. Pozwala na elastyczne modelowanie własnych abstrakcji, wydobywających logikę biznesową skrzętnie ukrytą w gąszczu boilerplate’u. Oszczędza czas w tworzeniu nowych funkcjonalności względem innych języków oraz… daje możliwość stosowania implicitów i monad.

Co sprawia, iż Scala wyróżnia się na tle innych języków programowania? Czy w 2023 roku jest wciąż dobrym wyborem dla programistów? Dziś przedstawię Wam zalety Scali, a Wy oceńcie sami.

Scala 3 okiem programisty

Scala to język, który z powodzeniem można wykorzystywać do pisania współbieżnych, skalowalnych i reaktywnych aplikacji. W 2021 wszedł duży update języka: Scala 3. O przedstawienie najciekawszych zmian w tej wersji języka poprosiłam Jacka Kunickiego, Senior Software Engineer z SoftwareMill:

JK: Scala 3 wprowadza nowe funkcje, takie jak czytelniejsze konstrukcje używające implicitów (z dedykowanymi słowami kluczowymi do konkretnych zastosowań, zamiast jednego wszechobecnego implicit), nowe wbudowane typy złożone (union/intersection types) czy też zupełnie nowe Enumy, tym razem kompatybilne z Javą.

Z kolei mechanizm opaque types pozwala na definiowanie specjalizowanych typów dzięki aliasowania innych typów, ukrywając przy tym szczegóły implementacyjne (a więc zapobiegając przeciekaniu abstrakcji) i jednocześnie nie powodując narzutów wydajnościowych.

W tej wersji języka otrzymaliśmy ponadto TASTy – nowy format plików pośrednich generowanych przez kompilator, które zawierają znacznie więcej informacji (np. o typach generycznych) niż znane z JVM pliki *.class. Dzięki temu możliwa jest np. rozbudowana statyczna analiza kodu.

Scala 3 nie tylko wprowadza nowe konstrukcje, ale również usuwa niektóre stare, te zaskakujące lub wprowadzającej niespójność. I tak np. znika ograniczenie maksymalnej liczby parametrów funkcji do 22 czy “proceduralny” sposób zapisu funkcji zwracających typ Unit (bez znaku =). Znikają również package objects, które często utrudniały zorientowanie się, co skąd bierze się w kodzie.

Warto wspomnieć, iż ulepszony i rozbudowany w Scali 3 mechanizm makr – oparty m. in. o inlining – pozwala na wygodne metaprogramowanie, tj. generowanie dodatkowego kodu źródłowego (lub modyfikowanie istniejącego) podczas kompilacji. Rozbudowane narzędzia do metaprogramowania to jedna z cech wyróżniających Scalę na tle innych języków.

Scala-lang.org

Aktywne community open source

Ekosystem Scali jest bardzo rozbudowany w dużej mierze dzięki bezproblemowej kompatybilności z Javą. Zwięzła składnia Scali i jej kompatybilność z tym popularnym językiem sprawiają, iż programowanie w Scali jest wydajne i produktywne. Scala przyciąga więc najczęściej programistów Javy, dla których próg wejścia w jej świat jest niższy, ale nie brakuje także osób, które obierają Scalę jako swój cel w nauce programowania od zera.

Scala nie jest mainstreamowym językiem, jednak w jej community znajdziemy wielu pasjonatów, czyli osoby, które poświęcają czas na tworzenie i utrzymywanie narzędzi dla programistów Scali. Ze względu na to, iż większość bibliotek napisanych w Scali ma licencję open-source, wiele rozwiązań do projektu można dobierać ze spokojną głową, iż są aktywnie rozwijane i wspierane.

W SoftwareMill sami rozwijamy 3 duże projekty otwartoźródłowe, które znacznie ułatwiają codzienną pracę programistów:

  • Tapir – biblioteka dla języka Scala, która pozwala na opisywanie API dzięki silnie typowanego kodu.
  • Sttp – biblioteka, która zapewnia przejrzysty, przyjazne dla programistów API do opisywania żądań HTTP i obsługi odpowiedzi.
  • ElasticMQ – system kolejkowy oparty na aktorach, oferujący interfejs REST zgodny z SQS oraz API Scalowe.
adopt.tapir.softwaremill.com

Tapir jest niejako esencją wysokopoziomowej biblioteki do definiowania serwisów HTTP: jasno rozdziela kwestie dotyczące komunikacji sieciowej, od samego opisu tego, jak nasze API ma wyglądać. Dostajemy do dyspozycji narzędzie umożliwiające – dzięki zwykłego kodu – zdefiniowanie najpierw struktury a następnie logiki endpointów w serwisie. Cały proces ułatwia statyczne typowanie, które zapewnia, iż logika biznesowa “pasuje” do opisu, ułatwia odkrywanie samego tapira, jak i zapewnia szybką informacją zwrotną w razie błędów.

Adam Warski, CTO SoftwareMill

Z innych popularnych projektów open source, które są dobrze zaopiekowane i oceniane wysoko przez programistów, możemy zarekomendować:

  • Cats and Cats Effect
  • ZIO ecosystem
  • Scala CLI
Cats Effect

Tu, w The Scala Library Index, znajdziecie indeks wszystkich (a na pewno większości) 8k bibliotek Scalowych, a tutaj wersja przefiltrowane przez te, które są rekomendowane.

Biznes lubi Scalę

Scala zdaje egzamin przy tworzeniu backendów dla nowoczesnych aplikacji webowych, które mają za zadanie przetwarzać ogromne ilości danych. Wiele dużych systemów IT ma w swoim stosie technologicznym Scalę i narzędzia z jej ekosystemu, ponieważ programowanie funkcyjne świetnie sprawdza się przy rozwiązywaniu wysokopoziomowych problemów inżynierskich.

Czołowe firmy technologiczne, jak Apple, Netflix, Morgan Stanley, czy Linkedin używają Scali do swoich flagowych produktów. Język ten jest bardzo elastyczny i pozwala budować złożone abstrakcje, sprawdza się więc przy precyzyjnym modelowaniu trudnych domen biznesowych.

To właśnie w Scali napisane są platformy do przetwarzania danych rozproszonych, takie jak np. Apache Kafka, czy Apache Spark. Także model event sourcingu może być z powodzeniem zaimplementowany przez programistów Scali. Event sourcing pozwala na tworzenie systemów, bazujących na przetwarzaniu zdarzeń. Mówiąc wprost, model przechwytuje zmiany stanów aplikacji i przechowuje te zdarzenia w takiej kolejności, w jakiej one wystąpiły. Koncepcja ta jest ściśle powiązana z niemutowalnością (immutability) jaką oferuje semantyka Scali, jej implementacja skutkuje łatwym skalowaniem aplikacji, możliwością odtworzenia jej stanu dla określonego czasu oraz wysoką audytowalnością systemu.

Popularność Scali w lukratywnych branżach sprawia, iż programistów Scali brakuje i jest na nich popyt. Dobrzy programiści Scali myślą funkcyjnie, a firmy są skłonne więcej zapłacić za takie umiejętności. Scala to język, który sprawdza się w obszarze Big Data, w wielu branżach (szczególnie popularna jest w Fintech), ale też jest to często popularny wybór wśród inżynierów uczenia maszynowego. Język ten wspiera współbieżność i ma kilka świetnych bibliotek sztucznej inteligencji.

W zastosowaniach uczenia maszynowego z wykorzystaniem dużych wolumenów danych w problemach takich jak Learning to Rank i Systemach Rekomendacyjnych, Klastrowaniu czy w sytuacjach, kiedy dane można reprezentować w postaci grafu, nieoceniona jest Sparkowa biblioteka MLlib, dla której naturalnym wyborem jest Scala. Przewagę w tym rozproszonym środowisku nad popularnym w zastosowaniach ML Pythonem, daje jej chociażby wydajność wynikająca z uruchomienia bezpośrednio na JVM, czy znacznie prostsza obsługa zewnętrznych bibliotek (third-party).

Adam Jan Kaczmarek, ReasonField Lab

Intelektualna satysfakcja

Kilka popularnych i potężnych narzędzi deweloperskich specjalnie ukierunkowanych na systemy rozproszone zostało napisanych właśnie w Scali. Wspomniałam już o Apache Spark i Apache Kafka, ale na uwagę zasługuje też Akka i model aktorów. To narzędzie służące do tworzenia reaktywnych i rozproszonych aplikacji na JVM. Dostarcza ono wysokopoziomową abstrakcję synchronizacji dostępu do współdzielonego stanu, która jest wyposażona w mechanizmy nadzorowania aktorów oraz działa asynchronicznie i nieblokująco. Ponadto można jej używać w ten sam sposób niezależnie od tego, czy system działa w ramach jednej JVM, czy w środowisku rozproszonym.

Z punktu widzenia programisty, problemy inżynierskie spotykane w systemach tego typu mają posmak intelektualnego wyzwania. Sprawia to, iż programowanie w Scali jest dość atrakcyjne i satysfakcjonujące dla wszystkich, kto zada sobie trud wejścia w ten język. A czy warto i dlaczego? To już oceńcie sami, a tymczasem przeczytajcie o motywacjach naszych adeptów Scali:

“Zarówno język, jak i projekty, w których jest często wykorzystywany, były interesujące i „inne” od tego co robiłem w Pythonie. Po przekroczeniu pewnego progu okazało się dodatkowo, iż rzeczy, które w Pythonie są trudne (asynchroniczność, procesy rozproszone), w Scali są do ogarnięcia i korzysta się z nich na porządku dziennym.”

Bartek Henkiel

Java i Scala są jak pizze. Java to mrożona pizza z marketu, a Scala to manualnie robiona pizza w stylu neapolitańskim. Taką mrożoną włożysz gwałtownie do piekarnika na 15min i można jeść, smakuje jako-tako, ale jest zjadliwa. A taką Scalową pizzę, to zanim zjesz, to ciasto robisz 2 dni i musisz sobie kupić kamień do pizzy, bo inaczej nie wyjdzie. Podobnie ze Scalą – trzeba włożyć dużo czasu i wysiłku, żeby się jej nauczyć, ale warto.

Adam Rybicki

Scala pozwala poznać różne metody programowania, poprzez łączenie programowania funkcyjnego z obiektowym, a z tego wynika interesująca kombinacja, która ułatwia rozwiązywanie wielu problemów. Scala ma także masę fajnych funkcjonalności, jak pattern matching czy case classy, które bardzo ułatwiają codzienną pracę. Oprócz tego jest wykorzystywana w wielu bibliotekach, które są teraz na czasie m.in. w Sparku, który związany jest z popularnym ostatnio obszarem Big Data. Na koniec dodałbym, iż nie ma wielu programistów Scali w porównaniu np. do Javy, jest więc dosyć spore zapotrzebowanie rynku na nich z wieloma ciekawymi projektami.

Adrian Wydra

Poznaj na żywo Scalowe community

Już 23 i 24 marca masz okazję poznać światowe community Scali, dołączając do konferencji Scalar w Warszawie. Scalar to największe wydarzenie skupiające praktyków programowania funkcyjnego w Europie. W trakcie ósmej edycji konferencji nie zabraknie świetnych prelegentów. Wśród nich m.in. Daniel z RockTheJVM, Gabriel Volpe, czy sam Martin Odersky – twórca języka Scala – tu pełna agenda.

Scalar to aż dwa dni ogromnej dawki wiedzy, konferencja odbywa się w trybie single-track, by każdy uczestnik miał pewność, iż może uczestniczyć w każdej prelekcji. Just Geek IT zostało partnerem Scalara, więc dla wszystkich czytelników bloga mamy niespodziankę.

Na hasło: JustGeekIT udostępniliśmy 10 biletów z 10% zniżką. Kto pierwszy ten lepszy, kod należy podać w momencie rejestracji.

Dołączam do Scalara >>

Zdjęcie główne artykułu pochodzi z unsplash.com.

Idź do oryginalnego materiału