Wywiad z Krzysztofem Kempińskim – założycielem kanału Porozmawiajmy o IT

Wielu z Was za pewne zna Krzysztofa, a szczególnie jego głos, z podcastu Porozmawiajmy o IT.

Tworząc swój blog i podcast Krzysztof stawia sobie za cel inspirowanie słuchaczy do poszerzania technologicznych horyzontów i poznawania nowych trendów w IT.

W myśl tej maksymy poprosiliśmy go o stworznie zupełnie nowej ścieżki kariery na naszej platformieBackend – Elixir/Phoenix by Krzysztof Kempiński. Sprawdź czego możesz się z niej nauczyć.

W poniższym wywiadzie poruszamy następujące tematy:

  • Czym różni się Elixir od Ruby
  • Jakie były początki tego języka programowania
  • Jakie możliwości kryje Elixir
  • Plusy i minusy nauki Elixira
  • Co znajdziecie na naszej najnowszej ścieżce kariery Backend – Elixir/Phoenix by Krzysztof Kempiński.

Wiem, że pracujesz już 3 lata posługując się Elixirem. Jak zaczęło się Twoje zainteresowanie tym językiem programowania? 

Swoją karierę zawodową rozpoczynałem od PHP. Po dwóch latach pracy z tym językiem natknąłem się na Ruby i zupełnie się w nim i Ruby on Rails zakochałem. Wtedy była to zupełnie nowa jakość. Ten związek trwał ponad 10 lat 🙂

3-4 lata temu w ówczesnym projekcie natknąłem się na problemy wydajnościowe aplikacji napisanej w Ruby on Rails. Słyszałem już wtedy o Elixir ale nie byłem bliżej zaznajomiony z tą technologią. W drodze eksperymentu postanowiłem spróbować. Było to doświadczenie porównywalne z odkryciem Ruby kiedy jeszcze pracowałem z PHP. Coś co zmienia Twój sposób myślenia w parę dni i zastanawiasz się jak to możliwe, że dopiero teraz znalazłeś ten skarb.

Elixir nie tylko rozwiązywał problemy wydajnościowe w projekcie, ale również dawał mi powiew świeżości, jak i programowanie funkcyjne, z którym jakoś nigdy nie było mi po drodze, a które to daje kompletnie nowe możliwości tworzenia wydajnych, skalowalnych i rozproszonych aplikacji. 

Jak wyglądało u Ciebie przejście na tą technologię? Czy niosło za sobą jakieś szczególne wyzwania?

Przesiadka była nieco złagodzona przez fakt, że twórcą języka Elixir jest były członek core-team’u Ruby on Rails. Elixir zatem składniowo przypomina Ruby. Stanowi to spore ułatwienie dla programistów Ruby, którzy przynajmniej wizualnie rozpoznają podobne konstrukcje.

Poza tym, wszystko jest inne niż w Ruby. I to do samego sedna technologii. Elixir opiera się na paradygmacie funkcyjnym a Ruby na obiektowym.

To właśnie dla mnie było największym wyzwaniem – wyzbyć się przyzwyczajeń nabywanych latami związanych z myśleniem o programowaniu jako operowaniu na obiektach.

Elixir jest uruchamiany na maszynie wirtualnej Erlanga, co również nie występuje w przypadku języków interpretowanych jak Ruby czy PHP. Musiałem zatem przestawić swój sposób myślenia o pisaniu i uruchamianiu kodu w środowisku Elixir.

Samo przejście na Elixir było względnie powolne i polegało na stopniowym dodawaniu go do obecnego projektu w Ruby lub przepisywaniu fragmentów na Elixir. Uważam, że jest to dobre rozwiązanie na początek, ale nie idealne, dlatego po jakimś czasie projekt zmieniłem i dołączyłem do takiego, który od początku był pisany w Elixir.

Czy mógłbyś opowiedzieć nam trochę o samym języku. Jaki jest jego początek? Na jakich rozwiązaniach bazuje?

Elixir został stworzony przez ówczesnego członka core team’u Ruby on Rails, który badał problem bezpieczeństwa i niezawodności wykonywania tego samego kodu przez kilka wątków (tzw. thread safe). Ta część nie była wówczas najmocniejszą stroną ekosystemy Ruby on Rails, więc Jose Valim badał jak to jest rozwiązane w innych technologiach.

Tak trafił na język Erlang, technologię stworzoną dla domeny telekomunikacyjnej w latach 80tych. Później Jose mówił, że pokochał to wszystko co w Erlangu znalazł i znienawidził to czego tam nie było. Odnosił się w ten sposób do możliwości Erlanga – niezawodności, możliwości działania w sposób rozproszony, bardzo dobremu modelowi współbieżności, programowaniu funkcyjnym itd.

Zabrakło mu jednak tego z czym obcował w Ruby na co dzień – przyjemności pisania kodu, czytelności i przystępności. Ruby miał te zasady wpisane w swoje DNA, Erlangowi jednak były one zupełnie obce. Ruby był już znany, Erlang zupełnie niszowy i przeznaczony do niezawodnego wykonywania swojej misji, którą było bezawaryjne obsługiwanie urządzeń telekomunikacyjnych. 

Jose zatem połączył te dwa światy i stanął na ramionach gigantów – wziął czytelność i przystępność składni Ruby oraz przyjazność całego ekosystemu z możliwościami Erlanga, jego niezawodnością, wydajnością, programowaniem funkcyjnym i maszyną wirtualną. W ten sposób powstał nowoczesny język programowania działający na solidnych podstawach technologicznych.

Elixir działa na maszynie wirtualnej Erlanga (BEAM). Oznacza to, że jest kompilowany do tego samego bytecode co Erlang a to z kolei daje możliwość wykorzystywania bibliotek erlangowych w kodzie elixirowym. Jedną z takich bibliotek jest OTP, która wnosi do Elixira potężny zestaw rozwiązań, sprawdzonych w boju świata telekomunikacji.

Wspomniałeś, że choć często mówi się, że Elixir jest podobny do Ruby, to oba języki tak naprawdę charakteryzuje zupełnie inny mechanizm. Czy mógłbyś to rozwinąć?

Tak, Elixir i Ruby to co najwyżej dalecy kuzyni, których łączy wspólna historia rodzinna, ale którzy wychowali się w zupełnie innych środowiskach. Mają podobną składnię, co wiąże się z inspiracją Rubym i doświadczeniem w tym języku twórcy Elixira.

Wiele bibliotek, czy wręcz frameworków wzoruje się na odpowiednikach z ekosystemu Ruby on Rails. Jak chociażby framework webowy Phoenix. To jednak, że coś wygląda podobnie, nie znaczy że jest takie samo i że pod spodem działają te same mechanizmy.

Elixir i Ruby opierają się na dwóch różnych paradygmatach (funkcyjnym i obiektowym), więc nawet jeśli składnia i struktura kodu wygląda podobnie to jego wykonywanie w tzw. runtime opiera się na zupełnie innych mechanizmach. Elixir działa na maszynie wirtualnej Erlanga a Ruby jest interpretowany. Już samo to formułuje różne zasady na których oba języki muszą opierać swoje działanie. 

Nie da się jednak ukryć, że pewne koligacje rodzinne i podobieństwo powoduje, że to najczęściej programiści Ruby sięgają po Elixir, gdyż jest im najłatwiej się przestawić i zrozumieć nowy język.

Jeśli ktoś szuka dla siebie technologii back endowej do nauczenia się – jakie są plusy i minusy Elixira, które warto wziąć pod uwagę przy takiej decyzji?

Elixir zyskuje na popularności, ale ciągle jest to język stosunkowo niszowy. W tym momencie w indeksie popularności języków programowania Tiobe Ruby zajmuje 16te miejsce a Elixir 50te. Z tym wiążą się oczywiście plusy i minusy.

Plusem jest to, że środowisko jest młode i jeśli mamy takie aspiracje to możemy pracować nad rozwiązaniami open-source, które wpłyną na cały ekosystem. Społeczność jest bardzo pomocna, więc z chęcią wesprze w rozwiązywaniu problemów. Coraz więcej firm korzysta z Elixir, więc na rynku pracy ta umiejętność jest też ceniona.

Do minusów trzeba zaliczyć brak bibliotek w niektórych zastosowaniach. Dla pracodawców minusem może być też znalezienie odpowiednio doświadczonych programistów.

Od strony technologicznej niebywałym plusem Elixira jest wydajność i niezawodność. Wszędzie tam gdzie spodziewamy się dużego ruchu lub wolumenu przetwarzania danych, tam Elixir doskonale się sprawdzi. Przykładowo WhatsApp jest napisany w Erlang a jest aplikacją obsługującą niezawodnie niebotyczny ruch. Trzeba jednak wziąć pod uwagę, że nie każdy hosting pozwoli nam na uruchomienie aplikacji napisanej w Elixir, co niekiedy może być problemem. 

Na koniec dodam tylko, że Ruby, Elixir i każdy inny język programowania to tylko narzędzia, które w jednym zastosowaniu sprawdzą się lepiej a w innych gorzej. Nie inaczej jest też z Elixir. Jestem zdania, że narzędzia należy dobierać do problemu a nie odwrotnie.

Opowiedz nam proszę trochę o ścieżce kariery Elixir, którą stworzyłeś na naszej platformie. Czego użytkownik może po niej oczekiwać? Czego się może z niej nauczyć?

Jako, że najpopularniejszym zastosowaniem Elixir są obecnie, dzięki zastosowaniu frameworka Phoenix, aplikacje webowe, moją ścieżkę kariery zaprojektowałem właśnie z takim założeniem w głowie.

Rozpoczyna się ona od zaznajomienia z podstawowymi konceptami używanymi obecnie w projektowaniu rozwiązań internetowych od strony backendu, czyli protokół HTTP, websockets, REST API, JSON Web Tokens, OAuth i ​​GraphQL. To stanowi pewną bazę, która jest przenaszalna między językami programowania czy frameworkami.

Następnie przechodzimy do samego języka. Poznajemy funkcyjny paradygmat programowania, podstawową składnię Elixir, pattern matching, protokoły, funkcje, moduły, aplikacje umberlla i metaprogramowanie. Są to podstawowe klocki umożliwiające budowanie aplikacji.

Kolejny krok to webowy framework Phoenix. Zapoznajemy się z jego strukturą, routingiem, kontrolerami, widokami, warstwą komunikacji z bazą danych.

Większość obecnych aplikacji przechowuje dane, więc nie możemy również zapomnieć o tej części. W ścieżce zapoznajemy się z SQL, biblioteką Ecto, z Elasticsearch i RabbitMQ.

Ścieżkę zamyka zapoznania się z tworzeniem releases i Dockerem. Całość ścieżki pokrywa większość elementów, które programista Elixir wykorzystuje w swojej codziennej pracy.

Przetestuj ścieżkę Backend – Elixir/Phoenix by Krzysztof Kempiński tutaj.