Dziś na blogu sprawa bez precedensu – pierwszy gościnny wpis w historii! Pomimo, że zachęcałem do takiego działania już od powitalnego wpisu, to musiał minąć prawie rok (treść dostałem jeszcze w grudniu 2016), żebym otrzymał gotowy materiał od pierwszego śmiałka 🙂

Pionierem został Łukasz Wachowicz – programista z ponad 10-letnim doświadczeniem (głównie w Javie), pracujący na co dzień w zespole CTO bydgoskiego oddziału firmy Mobica. Oprócz udziału w projektach komercyjnych Łukasz zajmuje się architekturą systemów oraz technicznym wsparciem sprzedaży. Jest również współzałożycielem i jednym z liderów Bydgoszcz JUG.

Nie przedłużając oddaję głos klawiaturę Łukaszowi 🙂


Jako doświadczony programista Java przez wiele lat byłem zdania, że Scala podzieli smutny los wielu innych niszowych języków programowania i nie zdoła przebić się do szerszych zastosowań komercyjnych. Odnoszę jednak wrażenie, że sytuacja na rynku się zmienia i nie można dłużej ignorować obecności Scali w świecie JVM. Oto kilka powodów dlaczego zmienił się mój pogląd na Scalę:

  • Znam kilka osób, które z sukcesem porzuciły Javę na rzecz Scali.
  • Na rodzimym rynku pojawiły się prężne firmy, które traktują Scalę jako język pierwszego wyboru:
  • W Scali zaimplementowanych jest kilka popularnych narzędzi (szczególnie w obszarze big data):
  • Rosnące zapotrzebowanie na programistów Scala powoduje, że ich średnie zarobki są wyższe niż programistów Java: Średnie zarobki w popularnych językach programowania
  • W 2015 roku nastąpił skokowy wzrost ofert pracy dla programistów Scala. Rynek jest wciąż nieporównywalnie mniejszy niż rynek Javy, ale tendencje są wyraźnie wzrostowe: Job Trends: Scala vs Groovy vs Clojure
  • Scala jest językiem funkcyjnym i oferuje większość konstrukcji składniowych, na które od lat z utęsknieniem czeka społeczność Javy.
  • Scala kojarzona jest z „reactive programming” i skalowalnością (czyżby z uwagi na swoją nazwę? 😉 ).
  • Lista komercyjnych zastosowań Scali jest również całkiem imponująca (źródło nr 1, źródło nr 2).

Jak zacząć?

Zacząć trzeba od… mocnego postanowienia. Nie od dziś wiadomo, że sukces osiągają tylko ludzie wytrwali. Jeśli masz więc w planach rozpoczęcie zawodowej przygody ze Scalą albo przynajmniej poznanie solidnych podstaw tego języka musisz przygotować się na edukacyjny maraton.

Na początek polecam lekturę jednej z książek traktujących o Scali. Kilka przykładowych możesz znaleźć tutaj. Dostępne pozycje są zróżnicowane i mają od około 200 do około 800 stron. Osobiście polecam wybrać książkę grubszą (np. Programming in Scala autorstwa Martina Odersky’ego, twórcy Scali) ponieważ zwróci się ona wraz ze wzrostem naszej wiedzy i dociekliwości. Warto rozważyć zakup ebooka, gdyż pozwoli on swobodnie kopiować fragmenty kodu do IDE i na bieżąco je uruchamiać. To bardzo przydatne, bo pozwala szybciej oswoić się z kodem i składnią języka.

No właśnie, a skoro o IDE mowa, to koniecznie trzeba przygotować środowisko pracy. Pierwszym wyborem może być tzw. Scala REPL (Read-Evaluate-Print Loop) czyli interpreter Scali uruchamiany z linii komend za pomocą komendy scala.

Scala REPL

Scala REPL jest idealnym narzędziem do testowania prostych jednolinijkowych wyrażeń. Szybko okaże się jednak, że to za mało i konieczne będzie zainstalowanie graficznego IDE. Dwa wiodące IDE dla Scali to Scala IDE oparte o platformę Eclipse oraz IntelliJ IDEA zaopatrzony w plugin do Scali. Prawdziwi twardziele wybiorą jednak inna opcję – Vim/Emacs/Sublime na sterydach, czyli ENSIME.

Warto zaznaczyć, że graficzne IDE oferują odpowiedniki Scala REPL (tzw. worksheets).

Pierwszy program w Scali

Czytanie książki, szczególnie obszernej, może okazać się nużące i z pewnością poczujesz „głód kodowania”. Nie ma sensu czytać więc książki od deski do deski. Starając się opanować podstawy, lepiej jest zacząć pisać kod, a do książki zaglądać w poszukiwaniu konkretnych rzeczy. Idealnym ćwiczeniem, które pozwoli Ci zgłębić składnie i możliwości języka Scala jest tzw. „bowling game kata”. Ćwiczenie to polega na zaimplementowaniu algorytmu przydzielania punktów w grze w kręgle, a dokładniej klasy, która spełnia interfejs:

Więcej szczegółów na temat punktacji w grze w kręgle znajdziesz tutaj. Uwaga! To nie jest takie proste 🙂

Dla chętnych udostępniam moje podejścia do tego ćwiczenia. Każde z nich było inne. Każde miało swoje wady. Celem ćwiczenia nie było pisanie idealnego kodu, a eksploracja składni języka, dlatego lojalnie uprzedzam, że moje rozwiązania mogą być dalekie od dobrych praktyk języka Scala.

Z kolei, na tej stronie znajdziesz doskonałe zestawienie innych ćwiczeń opartych o pomysł „coding kata”. Nie ograniczaj się tylko i wyłącznie do gry w kręgle. Spróbuj swoich sił w innych problemach programistycznych.

Przy okazji warto oczywiście zaznajomić się z podstawowym narzędziem do testowania kodu w Scali, czyli ScalaTest.

Czas na kurs!

Po opanowaniu podstaw i nabyciu elementarnej wprawy w pisaniu kodu dobrze jest usystematyzować swoją wiedzę. Świetnym sposobem są kursy prowadzone przez Martina Odersky’ego na portalu Coursera. Ich plusem jest bardzo wysoki poziom merytoryczny oraz fakt, że na poszczególnych etapach masz do rozwiązania nietrywialne ćwiczenia praktyczne.

Kursy:

  1. Functional Programming Principles in Scala
  2. Functional Program Design in Scala
  3. Parallel programming
  4. Big Data Analysis with Scala and Spark
  5. Functional Programming in Scala Capstone

stanowią jeden spójny program o nazwie: Functional Programming in Scala Specialization.

Wydaje się, że warto ukończyć dwa pierwsze, a kolejne potraktować opcjonalnie w zależności od zainteresowań i własnych preferencji.

Świetnym uzupełnieniem powyższych kursów mogą być testy/puzzle dostępne na stronie Scala Exercises.

Tematy zaawansowane

Scala jak każdy język programowania ma wiele elementów, których pełne zrozumienie wymaga czasu. W żadnym wypadku nie można ich jednak pominąć w trakcie nauki, gdyż opanowanie zaawansowanych elementów języka pozwala w pełni wykorzystać jego możliwości i zrozumieć kod innych inżynierów (w tym kod bibliotek i samego języka).

Ze swojej strony mogę zaproponować starą i sprawdzoną metodę ciągłego budowania listy tematów, do których warto wrócić w przyszłości. Zwykle na takiej liście lądują właśnie tematy trudne, które wymagają uwagi i kilkukrotnego przestudiowania. Poniżej dzielę się moją listą, która wciąż żyje i stale dostarcza mi nowych pytań.

Notatki Łukasza Wachowicza związane ze Scalą

Ekosystem

Sam język programowania to za mało, żeby zbudować system produkcyjny. Kolejnym etapem w procesie stawania się specjalistą Scali jest opanowanie narzędzi, które taki system pozwolą zbudować. Poniżej zamieszczam kilka wskazówek czym można się zająć w kolejnym etapie nauki.

Oczywiście należałoby również zgłębić narzędzia do budowania kodu takie jak sbt, czy Gradle.

Podsumowanie

Mam nadzieję, że ten artykuł przekonał Ciebie, że warto nauczyć się Scali i obserwować jak rozwija się ten język programowania. Powodzenia!


Jak podobał Ci się artykuł Łukasza? Mi bardzo – inaczej bym go nie publikował 😉 Mam prośbę. Jeśli masz jakiekolwiek uwagi lub wątpliwości odnośnie powyższej treści, chciał(a)byś podzielić się jakimiś dodatkowymi materiałami związanymi ze Scalą, albo po prostu podziękować Łukaszowi za dzisiejszy wpis, to śmiało zrób to w komentarzu poniżej.

Jeśli materiał Łukasza zainspirował Cię do podzielenia się swoją wiedzą i również chciał(a)byś opublikować gościnny wpis na moim blogu, to zachęcam do kontaktu ze mną. Jestem otwarty na propozycje.


Bądź na bieżąco!

Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:

Dołączając do newslettera #NoweRozdanie2 otrzymasz dostęp do dodatkowych materiałów:

  • PDF: „Jednoosobowa działalność gospodarcza krok po kroku” (do artykułu)
  • PDF: „FAQ: Jak pracuje się dla Roche/Sii?” (do artykułu)
  • PDF: „Jak zmniejszyć prawdopodobieństwo wystąpienia kontroli i co zrobić kiedy urzędnik zapuka do Twoich drzwi?” (do artykułu)

Powyższe dane są przechowywane w systemie Mailchimp i nie są udostępniane nikomu innemu. Więcej szczegółów znajdziesz na stronie polityki prywatności.

lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować :)

Dołącz do grup na Facebooku

Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.

W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.

Wesprzyj mnie

Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.

Postaw mi kawę na buycoffee.to

Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.

Picture Credits