Dlaczego warto uczyć się Scali – okiem Jana Pustelnika i Marcina Kowalskiego

Cześć! Wraz z kolegą z GFT Polska, Janem Pustelnikiem, udzieliłem niedawno wywiadu poświęconego Scali. Rozmawialiśmy o popularności tego języka, o jego praktycznych zastosowaniach, wyzwaniach jakie stawia przed programistami, a także o naszym polskim community, które z roku na rok rośnie w siłę. A jeśli jeszcze nie zaczęliście uczyć się Scali – poniżej dowiecie się dlaczego jest to świetny pomysł. Zapraszam do lektury!

Statystyki pokazują, że Scala konsekwentnie zyskuje na popularności. Na bieżąco pojawiają się nowe inicjatywy promujące wiedzę o Scali, nasza lokalna społeczność scalowa rośnie w siłę – czego przykładem jest kolejna polska konferencja, ScalaWave. Z czego to wynika?

Jan Pustelnik: Moim zdaniem z tego, że Scala jest natywnym językiem Sparka. A Spark, będąc narzędziem do Big Data, jest teraz bardzo powszechnie używany ze względu na szereg przewag technologicznych nad alternatywnymi rozwiązaniami, takimi jak Hadoop. Ręczne pisanie różnych transformacji w Sparku jest i szybsze i łatwiejsze – i jest to też ustandaryzowany interfejs. Tak więc natywnym językiem Sparka jest Scala. O ile Spark ma interfejsy do innych języków, to akurat ze Scalą wiąże się najlepiej. I stąd po części wynika ta popularność – od Big Data do Scali.

Natomiast wydaje mi się, że sprawa ma szerszy kontekst: Scala była już wcześniej popularna, może nie tak bardzo, ale była popularna. A to jest związane z tym, że jest ona językiem dużo bardziej ekspresywnym niż Java, czyli można w niej dużo łatwiej osiągnąć ten sam efekt. Są nawet badania, które mówią o tym, że niezależnie od języka programowania którego używamy, jesteśmy w ciągu danego dnia w stanie napisać zbliżoną liczbę linii kodu. Czyli opłaca się używać języka o jak największej sile wyrazu – a Scala jest właśnie takim językiem.

Marcin Kowalski: Ja mogę dodać, że Scala to język, który opiera się na ekosystemie Javy, który to z kolei jest bardzo statyczny. Jego ideą jest to, żeby się zbytnio nie zmieniał – Java jest bardzo korporacyjna. Chodzi o to, żeby nie szokować programistów, a raczej wprowadzać standardy. Dzięki temu łatwo jest pozyskiwać duże liczby nowych programistów i generalnie szybko ich przysposobić, a także wprowadzać standardy korporacyjne.

Z tego względu wielu programistów ma poczucie, że Java jest trochę do tyłu. Bo w istocie Java jest trochę do tyłu względem nowoczesnych technik programowania. Scala, dzięki temu, że jest nowym językiem, wprowadza wiele nowych pojęć, nowych rozwiązań, dużo ekspresywności, która jest niemożliwa do osiągnięcia w Javie. I dlatego np. w Sparku używa się jej bardzo wygodnie, gdyż jako nowy język, może sobie pozwolić na wyłamanie się ze standardowego szablonu programowania, który obowiązuje od kilkunastu lat w świecie programistów. W zasadzie przez ostatnie 15 lat nie było w Javie jakichś bardzo rewolucyjnych zmian, które wpływałyby istotnie na sposób w jaki się programuje. Tak więc Scala jest po prostu powiewem świeżości – i to jest jeden z powodów, dla których wielu ludzi szybko przyswaja te innowacje.

JP: Tak, ja myślę z kolei, ze powiązanie z Javą jest bardzo, bardzo korzystne, z tego względu, że Java jest ogromnym ekosystemem programistycznym – największym jaki istnieje – w związku z czym jeśli potrzebujemy jakiejś biblioteki, to ta biblioteka w Javie na pewno istnieje. W innych ekosystemach niekoniecznie – w Javie będzie istnieć na pewno. A Javy ze Scalą używa się absolutnie bezproblemowo, ta integracja jest całkowicie przezroczysta. Czyli mamy cały ekosystem, wszystkie biblioteki jakich możemy potrzebować. Potrzebujemy np. Kerberosa, różnych dziwnych bibliotek domenowych dla konkretnej domeny – one będą napisane w Javie, i będziemy mogli ich używać w Scali.

Jan Pustelnik i Marcin Kowalski

Jednocześnie Scala uchodzi za język trudny do przyswojenia, szczególnie na tle Javy…

MK: Zgadza się, Scala jest dużo trudniejsza niż Java, no ale w końcu w GFT mamy najlepszych specjalistów, prawda? A na serio: tak, jest dużo trudniej, wymaga to pewnej zmiany w myśleniu. Ale uważam, że z punktu widzenia inżyniera absolutnie warto poświęcić trochę swojego czasu na naukę Scali i zrozumieć koncepty, które są tam proponowane. Nawet jeżeli się nie programuje w Scali regularnie, to i tak pomoże to stać się lepszym programista. I wydaje mi się też, że mimo tego że Scala jest trudniejszym językiem, to nie jest aż tak trudna żeby było to poza zasięgiem osoby, która interesuje się branżą, która stara się rozwijać swoje umiejętności i być na bieżąco. To jak najbardziej jest w zasięgu, nawet jeśli wymaga pewnego zmotywowania się i poświęcenia dodatkowego czasu. Zresztą wystarczy sobie przypomnieć jak na studiach czy w liceum uczyliśmy się programowania obiektowego w Javie – to też był dość trudny proces, żeby to załapać – i po prostu ten proces trzeba sobie powtórzyć. Myślę, że z bardzo dużym zyskiem.

JP: Ja bym powiedział, że dla Scali specyficzne jest to, że jest ona językiem wieloparadygmatowym, tj. zawiera w zasadzie każdy główny paradygmat programowania. Jest tu programowanie obiektowe, jest programowanie funkcyjne, jest programowanie generyczne (dzięki bardzo dobrym generykom, czyli wzorcom, szablonom programistycznym). Jest też programowanie z macrami, i to wszystko jest razem powiązane – więc jest tego dużo. Mamy też sporo problemów znanych z Perla czy C++: z jednej strony można użyć funkcji czy klas generycznych, które dość długo się kompilują i trudno jest je dobrze napisać; z drugiej strony pojawia się kwestia stylu programowania, który jest różny w zależności od zespołu i musimy się dostosować do konkretnego stylu.

Scali z jednej strony można używać bardzo szybko – można nauczyć się podstaw i używać jej tak jak Javy, i obecnie w ten sposób korzysta z niej większość programistów, szczególnie tych nowych. Ale można też używać tych wszystkich bardziej zaawansowanych konstruktów. Dlatego nie można powiedzieć że się Scalę opanowało całkowicie, a przynajmniej nie po 3 czy 4 latach nauki. Trzeba po prostu cały czas nad sobą pracować. Tak więc rzeczywiście mamy tu nieco wyższą barierę wejścia. Ale im więcej potrafimy w Scali zrobić, tym nasze programy są lepsze, bardziej zwięzłe i bardziej wyraziste.

Do czego używana jest Scala w GFT Polska?

JP: Wydaje mi się, że jest to pełen przekrój projektów. Robiliśmy i systemy transakcyjne przetwarzające bezpośrednio trade’y giełdowe robiące takie post-trade amendment, i mamy też projekty Big Data, czyli naturalne środowisko Scali (nie tylko w Sparku), ale też data ingestion, ETLe, wszystkie tego rodzaju rzeczy. Tak więc zakres zastosowania Scali jest u nas bardzo szeroki.

MK: Można tu dodać, że Scala jest językiem ogólnego zastosowania. Jest kojarzona z Big Data – i bardzo dobrze, bo tam się akurat sprawdza – ale to nie jest język, który koniecznie musi zachować jakąś niszę. Scala to język, który może być używany do programowania systemowego po prostu – do wszelakich zastosowań programistycznych, łącznie ze skryptami – chociaż może to trochę motyka na słońce…

Pomówmy o społeczności scalowej. Zdaje się, że z roku na rok mamy coraz więcej aktywności na scenie lokalnego i światowego community.

Jan Pustelnik – o praktycznych zastosowaniach Scali na ScalaWave 2016

JP: Zdecydowanie. Na przykład Scalar: to jest główna polska konferencja scalowa i zarazem jedna z większych na świecie – może nie jeśli chodzi o czas trwania, bo jest to konferencja bezpłatna, a więc ze względów logistycznych musi być jednodniowa i ma tylko jeden track. Ale uczestniczy w niej około 500 osób – więc naprawdę jest to duże wydarzenie. Podczas tegorocznej edycji byłem jednym z prelegentów, byłem też prelegentem na Scalabie we Wrocławiu. Scalab jest nieco mniejszy, myślę, że było w granicach 200 osób, i również z jednym trackiem. Ale widać wyraźnie, że zainteresowanie Scalą jest u nas bardzo, bardzo duże – konferencje są żywe i poruszają bardzo ciekawe tematy.

Ogólnie rzecz biorąc wydaje mi się, że nie mamy się czego wstydzić w porównaniu z dużymi światowymi konferencjami, jak np. Scala Exchange, gdzie byłem w zeszłym roku –  to jest główna londyńska konferencja scalowa. Dla porównania, najważniejsza konferencja na świecie – Scala Days – zbiera około 1000 osób. Wspomniane Scala Exchange – jakieś 700 osób. Dlatego polski Scalar z 500 osobami to jest już spora konferencja. A community jest bardzo zwarte, bardzo żywe, i mamy tez wiele osób z Polski, które uczestniczą w głównym światowym nurcie Scali.

MK: Może jeszcze dwa słowa o Lambda Days. Jest to co prawda bardziej ogólna konferencja, bo dotyczy programowania funkcyjnego i podobnych wzrastających technologii – a więc np. Scala, F#, Rust ale jeśli chodzi o tematy scalowe, to myślę, że te wystąpienia były dojrzalsze niż np. te dotyczące Rusta. Scala opiera się na ekosystemie javowym i dzięki temu bardzo szybko daje produkty. Dla przykładu rzeczy, które dotyczyły Rusta – to były z reguły pomysły wymagające szlifowania, a gdy dajmy na to Konrad Malawski opowiadał o Akka, to w zasadzie były to porady z placu boju – konkretne, praktyczne rzeczy. Widać było, że Scali można używać, i że nie jest to już technologia wzrastająca. Rozmowy dotyczyły po prostu troszkę innych problemów, rzeczy bardziej zaawansowanych, bardziej produkcyjnych. Scala bez wątpienia już się zadomowiła.

Prowadzicie zajęcia na Politechnice Łódzkiej poświęcone Scali…

MK: Tak, przedmiot nazywa się „Programowanie w języku Scala”.

JP: W pierwszej edycji brało udział około 25 osób, teraz jakieś 40. Zainteresowanie wśród studentów jest bardzo duże – w szczególności wśród studentów dlatego, że oni widzą, że tradycyjne technologie są trudniejsze –  w takim sensie, że trzeba włożyć bardzo dużo fizycznego wysiłku żeby napisać program w Javie. Java jest bardzo „verbose”, bardzo opisowa, trzeba się dużo napracować żeby uzyskać efekt – a w Scali łatwiej osiągnąć interesujące rezultaty, co w naturalny sposób przyciąga młodych ludzi.

Co z ludźmi którzy dopiero zaczynają przygodę z programowaniem i na takim wczesnym etapie poznają Scalę?

MK: Nie mają biznesowego doświadczenia, ale to nie znaczy ze nie programują – my nie uczymy studentów pierwszego roku –  uczymy ludzi, co do których mamy tez jakieś wymagania, czyli np. żeby umieli programować w Javie albo chociaż w jakimś innym, analogicznym języku programowania.

JP: Część z nich może nawet nigdy nie nauczy się programowania w Javie, może od razu będą programować w Scali – niewykluczone. Programują trochę w .Necie, Javy trochę liznęli i to Scala przypadła do gustu.

MK: Ale to nie jest problem, bo jeżeli nauczyli się programować w Scali, to na pewno będą umieli programować w Javie. Najwyżej będą musieli poświęcić jakiś weekend żeby się przekalibrować.

JP: Co więcej, część organizacji używa Scali jako swego rodzaju wyróżnika przy rekrutacji. Z reguły te osoby, które programują w Scali, są dojrzalszymi programistami. To oczywiście się zmienia ze względu na wzrastającą popularność Scali, ale do tej pory było tak, że znajomość Scali oznaczała bardziej doświadczanego programistę. Tak więc ciągle jest to atrakcyjne, bo jeżeli nowi ludzie przychodzą do projektu scalowego, to prawdopodobnie seniorzy pracujący w tym projekcie będą rzeczywiście dobrymi programistami, będą to starzy wyjadacze, od których można się wiele nauczyć.

Na koniec powiedzcie dwa słowa o tym, jak wygląda kwestia popularyzowania Scali wewnątrz GFT.

JP: To co według mnie jest w GFT bardzo dobre, to to, że bardzo dobrze działa wewnątrzorganizacyjny przepływ wiedzy. Nasi młodzi programiści bardzo dynamicznie się rozwijają, pracują, przechodzą szkolenia. Część z nich dołączy wkrótce do nowego projektu, także wydaje mi się, że na polu scalowym, współpraca wewnątrz GFT działa naprawdę dobrze.

MK: Warto dodać, ze GFT całkiem nieźle sobie z tym radzi. Widać, że jest pojemność w organizacji na adaptowanie nowych technologii z dobrym skutkiem. Dwa czy trzy lata temu znalazła się grupa ludzi, która była potrzebna żeby Scalę u nas zaadoptować, i z sukcesem wprowadzać ją do organizacji. Na bazie tego były szkolenia, konferencje, ogłoszenia o prace i tak dalej. To pokazuje ze GFT ma realną umiejętność adoptowania do nowych technologii – w mojej ocenie zachodzi to bardzo sprawnie.

JP: Wewnętrznie prowadziliśmy z dużym powodzeniem 3 cykle szkoleń w ramach projektu dla klienta: ja, Marcin, potem Paweł Włodarski. W efekcie mamy teraz sporą grupę osób, które programują w Scali.

MK: To jest taka rzecz, która wyróżnia GFT. Zdarzało mi się pracować w firmach, które nie maja takiej umiejętności — to wcale nie jest oczywiste, że firma potrafi adaptować nowe technologie. Mam nadzieję, ze nie będzie to ostatnia innowacyjna technologia która zaadoptujemy, trzeba się już zacząć rozglądać za następną.