POIT #146: Ścieżki kariery na platformie HR-ME

Witam w sto czterdziestym szóstym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy są ścieżki kariery na platformie HR-ME.

Dziś moim gościem jest Piotr Klinke – CTO w HR-ME. Zajmuje się algorytmami dopasowania ścieżek i ofert dla kandydatów, architekturą systemu oraz procesów wytwarzania oprogramowania. Zawodowo od 7 lat związany z algorytmami przetwarzania dźwięku i rozpoznawania mowy. Otwarty na naukę technologii oraz próbowanie nowych sportów wodnych.

W tym odcinku o ścieżkach kariery na platformie HR-ME rozmawiamy w następujących kontekstach:

  • czym jest platforma HR-ME?
  • jakie przykładowe ścieżki kariery możemy obecnie znaleźć na HR-ME?
  • Piotr opowiada o ścieżce swojego autorstwa odnośnie Artificial Intelligence
  • Krzysztof opowiada o ścieżce swojego autorstwa odnośnie Elixir Backend

Subskrypcja podcastu:

Linki:

Wsparcie na Patronite:

Wierzę, że dobro wraca i że zawsze znajdą się osoby w bliższym lub dalszym gronie, którym przydaje się to co robię i które zechcą mnie wesprzeć w misji poszerzania horyzontów ludzi z branży IT.

Patronite to tak platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Chciałbym oddelegować kilka rzeczy, które wykonuję przy każdym podcaście a zaoszczędzony czas wykorzystać na przygotowanie jeszcze lepszych treści dla Ciebie. Sam jestem patronem kilku twórców internetowych i widzę, że taka pomoc daje dużą satysfakcję obu stronom.

👉Mój profil znajdziesz pod adresem: patronite.pl/porozmawiajmyoit

Pozostańmy w kontakcie:

 

Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner (posłuchaj)

Transkrypcja podcastu

To jest 146. odcinek podcastu Porozmawiajmy o IT, w którym z moim gościem rozmawiam o ścieżkach kariery na platformie HR-ME. Przypominam, że w poprzednim odcinku rozmawiałem o zarządzaniu projektem i firmą IT w obliczu pracy zdalnej.

Wszystkie linki oraz transkrypcję dzisiejszej rozmowy znajdziesz pod adresem porozmawiajmyoit.pl/146.

Ocena lub recenzja podcastu w Twojej aplikacji jest bardzo cenna, więc nie zapomnij poświęcić na to kilku minut.

Nazywam się Krzysztof Kempiński, a moją misją jest poszerzanie horyzontów ludzi z branży IT. Środkiem do tego jest między innymi ten podcast. Zostając patronem na platformie Patronite możesz mi w tym pomóc już dziś. Wejdź na porozmawiajmyoit.pl/wspieram i sprawdź szczegóły.

Jednocześnie bardzo dziękuję moim obecnym patronom.

A teraz życzę Ci już miłego słuchania.

Odpalamy!

Cześć! Mój dzisiejszy gość to CTO w HR-ME, gdzie zajmuje się algorytmami dopasowania ścieżek i ofert dla kandydatów, architekturą systemu oraz procesów wytwarzania oprogramowania. Zawodowo od 7 lat związany z algorytmami przetwarzania dźwięku i rozpoznawania mowy, otwarty na naukę technologii oraz próbowanie nowych sportów wodnych. Moim i Waszym gościem jest Piotr Klinke.

Cześć, Piotr! Bardzo miło mi gościć Cię w podcaście.

Cześć, Krzysztof! Bardzo mi miło z Tobą wreszcie porozmawiać. Wymienialiśmy maile, ale to jednak zupełnie co innego porozmawiać.

Dokładnie. Formuła naszej dzisiejszej rozmowy, tego podcastu, będzie nieco inna od tego, co zazwyczaj w mojej audycji występuje, to znaczy są jakieś założenia co do tego, o czym będziemy mówić, ale raczej będziemy chcieli przeprowadzić sobie taką rozmowę na temat ścieżek kariery, które zostały przez Piotra i przeze mnie przygotowane w ramach platformy HR-ME. Więc jestem bardzo ciekawy, jestem chłonny tego, żeby się dowiedzieć czegoś nowego o ścieżce Piotra. Czekam na naszą rozmowę, ale rozpocznę standardowo, tak jak każdą audycję w ramach mojego podcastu, czyli pytaniem do Ciebie, Piotr. Czy słuchasz podcastów? Jeśli tak, to może masz jakieś swoje ulubione, o których chciałbyś powiedzieć.

Tak, słucham podcastów, jak najbardziej. Słucham, jak tylko mam czas wolny w przelocie, w samochodzie czy na spacerze z psem. I na przykład coś, co mnie jakiś czas temu bardzo zainteresowało, to jest podcast StartUp od Gimlet Media (na Spotify dostępny). Tam opisują historię powstania firmy, w której tworzy się podcasty, ale wszystko z perspektywy tworzenia startupu. Podcasty z tak zwanego, oni tak to nazywają, investigative journalism, czyli po prostu z takiego dziennikarstwa z krwi i kości. I rzeczywiście fajnie się tego słucha, jest to fajnie opowiedziana historia. I potem kolejne podcasty z tej samej stajni, czyli na przykład Reply All albo Heavyweight, to są naprawdę fajne rzeczy, których się świetnie słucha. Na przykład Heavyweight jest o rozwiązywaniu starych historii i autor jest, staje się mediatorem, rozpoznaje historie od podszewki, historie ludzkie, międzyludzkie. A Reply All jest bliżej technologii, ale pomiędzy technologią, a jej wpływem na społeczeństwo – bardzo ciekawe rzeczy. A z polskich to na przykład Imponderabilia też czasami czy Dział Zagraniczny.

Okej, to może przejdźmy najpierw do zdefiniowania, powiedzenia, czym właściwie jest platforma HR-ME. Kto ją stworzył? Skąd ten pomysł? Komu i w czym pomaga? Czyli takie zaplecze tego przedsięwzięcia, w którym też bierzesz udział.

Tak, HR-ME jest platformą rozwoju osobistego dla IT, czyli my staramy się być agregatorem, takim podmiotem, który stara się łączyć ludzi, programistów i w ogóle ludzi związanych z IT, bo to nie tylko jest bezpośrednio dla programistów, ale też dla PM-ów, dla analityków biznesowych. Staramy się być dla całego rynku IT taką platformą wiedzy i platformą, gdzie można znaleźć, w jakiś sposób zacząć nową ścieżkę na IT albo zobaczyć, w którym miejscu takiej ścieżki się jest, ale też zobaczyć inne ścieżki, rozwinąć się horyzontalnie, zobaczyć, czym się je technologię ludzi, z którymi na co dzień współpracujemy.

W tym kontekście chcemy udostępnić platformę, która nie tylko patrzy na pracowników i na ich aktualny stan wiedzy, ale też rozwojowo, do przodu, umożliwiając zdobywanie wiedzy, umożliwiając zerknięcie w naszą giełdę technologii, czyli w statystyki, które technologie idą do przodu, które są rzeczywiście na topie w ofertach pracy i w ogóle na rynku, ale też po prostu między programistami, które są najbardziej popularne i które zyskują popularność, więc które prawdopodobnie są bardziej przyszłościowe, czyli po prostu danie danych i narzędzi ludziom, żeby mogli się bardziej rozwijać.

I w tym kontekście też próbujemy podchodzić do rekrutacji, czyli dopasowujemy potencjalnych kandydatów do firm, w których rzeczywiście się rozwiną w dziedzinach, w których chcą się rozwijać, czyli nie tylko na podstawie dzisiejszych umiejętności próbujemy robić dopasowanie pomiędzy firmą a kandydatem, ale również na podstawie tego, czego kandydat chciałby się nauczyć i w którą stronę chciałby się rozwinąć w przyszłości, co go rzeczywiście interesuje. Dzięki czemu już na wstępie rozmowa o potencjalnej nowej pracy, czy nawet o zaczęciu płatnego kursu, bo to też chcemy oferować na naszej platformie, już ma jakiś punkt wyjścia, że kandydat jest rzeczywiście czymś zainteresowany, a firma rzeczywiście jest w stanie to dać. I ten punkt wyjścia tej rozmowy jest dużo ciekawszy niż taka sucha standardowa rozmowa rekrutacyjna, która często bardzo szybko okazuje się nietrafiona. 

I w tym kontekście też próbujemy podchodzić do rekrutacji, czyli dopasowujemy potencjalnych kandydatów do firm, w których rzeczywiście się rozwiną w dziedzinach, w których chcą się rozwijać, czyli nie tylko na podstawie dzisiejszych umiejętności próbujemy robić dopasowanie pomiędzy firmą a kandydatem, ale również na podstawie tego, czego kandydat chciałby się nauczyć i w którą stronę chciałby się rozwinąć w przyszłości, co go rzeczywiście interesuje. 

Rozumiem, okej. Ma to sens jak najbardziej. Powiedziałeś, że jest to platforma dla specjalistów IT, czyli dosyć szeroko. Obecnie tych specjalizacji, tych branż nawet w ramach IT jest bardzo dużo.

Tak.

Co możemy znaleźć obecnie na HR-ME, jeśli chodzi o ścieżki kariery? Które kierunki chcecie zagospodarować?

Na ten moment, na moment nagrywania podcastu, bo to cały czas się szybko rozwija, mamy ścieżkę ogólną Front-endową, czyli staramy się tam zamieścić wszystkie możliwe technologie, żeby użytkownik miał dostęp do pełnego wachlarza opcji i miał określenia, jakie różne opcje są dla każdego etapu rozwoju na ścieżce Front-end. Więc to jest tego typu ścieżka dla Front-end Web Developerów.

Mamy również ścieżkę AI, którą ja przygotowywałem. Aha, ścieżkę Front-end przygotowywał Hubert, nasz Head of Product. Ścieżkę AI przygotowywałem ja, czyli to z kolei jest ścieżka dość zorientowana, bo akurat w AI, którym ja się zajmuję, czyli Deep Learningowym, jest głównie Python i tego typu zastosowania. Czyli jest tu już nieco bardziej spersonalizowana czy raczej zopiniowana ścieżka po prostu przeze mnie.

I mamy ścieżkę Back-end, którą Ty byłeś uprzejmy przygotować, za co jestem mega wdzięczny. Super naprawdę ta współpraca wychodzi i to dokładnie o coś takiego chodziło, czyli podsumowanie różnych źródeł z różnych stron i podsumowanie ich na jednej ścieżce, spisanie tych różnych technologii w jakimś sensownym hierarchicznym modelu. I teraz właśnie wchodzi nowa ścieżka Mobile Android Developer, czyli Kotlin i wszystko, co związane z programowaniem aplikacji mobilnych.

Okej, brzmi to bardzo fajnie. Czyli większość takich najbardziej popularnych kierunków obecnie w IT myślę, że już jest. A jestem przekonany, że będzie tam przybywało tych ścieżek kariery, które będą pokrywały jeszcze gęściej cały ten wachlarz możliwości. Super. Dobra, Piotr. Powiedziałeś, że jesteś autorem ścieżki o Artificial Intelligence, o AI. To też jest niesamowicie szeroka dziedzina. Tam można znaleźć naprawdę wiele różnych tematów.

Zgadza się.

Powiedz, proszę, tak w kilku słowach, co dokładnie tam zawarłeś, czego się można z tej ścieżki nauczyć.

Na ścieżce w tym momencie zaczynamy od podstaw Pythona, czyli są polecane kursy, różnego typu kursy, bo tych kursów darmowych jest naprawdę bardzo dużo, ale podzieliłem je na 3 części. Jedna z platform, którą tam udostępniam, to jest bardziej taka wykładowa część, czyli że więcej można się nauczyć z samego słuchania. Jedna jest część bardziej ćwiczeniowa, czyli ćwiczenia są na bieżąco z każdego tematu, po każdym małym akapicie. I część projektowa, w której mamy więcej projektów, takich konkretnych zadań do zrobienia. I to też jest mniej więcej odwzorowane na platformie zresztą, czyli są osobno źródła nauki, czyli bardziej te rzeczy, które można sobie w między czasie posłuchać i ogólnie ogarnąć, czym co jest na wstępie i potem nieco głębiej. A oprócz tego zadania, które są bardziej rzeczami do wykonania i do odhaczenia.

I tak to właśnie wygląda na platformie. Czyli od tego się zaczyna, od Pythona ogólnie. Na tym przykładzie opisałem, jak wygląda taki konkretny etap ścieżki kariery i kolejne etapy ścieżki kariery AI rozwijają się poprzez używanie struktur danych w Pythonie, czyli NumPy czy Pandas poprzez później Machine Learning. To też jest ciężko czasami określić, co czym jest i na ten temat też chcielibyśmy zacząć rozmowę. Ale Machine Learning na mojej ścieżce oznacza te standardowe klasyczne metody Machine Learningowe, czyli k-nearest neighbours i dopasowanie jeszcze nie Deep Learningowe.

I później przechodzimy powoli w Deep Learning, czyli w głębokie sieci neuronowe w różnych zastosowaniach. Najpierw po prostu ogólnie, czym są te głębokie sieci neuronowe, jak wyglądają neurony – są tam takie źródła. A później konkretne źródła już do konkretnych różnych specjalizacji Deep Learningowych, czyli źródło o NLP i embeddings w modelach językowych, źródło dotyczące rozpoznawania obrazów, co jest najbardziej popularne w Deep Learningu, ale też źródła dotyczące rozpoznawania mowy.

Jasne.

Mniej więcej tym się kończy ścieżka. Ja oczywiście mam mnóstwo pomysłów, jak ją rozwinąć, ale jest to taka solidna podstawa, z której można wyciągnąć sobie po pierwsze jakie są etapy, a po drugie jakie są też opcje, w czym można się rozwinąć, chociażby nawet w samym Deep Learningu.

Okej, jestem bardzo też ciekawy, jakim kluczem się kierowałeś, jeśli chodzi o dobór tych rzeczy i coś, nad czym ja się też zastanawiałem: czy chcemy dać taką ścieżkę przejścia przez te materiały od a do zet czy też raczej dajemy pewien przekrój różnych możliwości, ale nie wszystko tam jest obowiązkowe? Ja pewnie za chwilę będę opowiadał o swojej ścieżce, więc powiem, jakimi zasadami się kierowałem, ale jestem ciekawy, jak Ty to układałeś. Czy to faktycznie oznacza, że żeby te postawy AI w tym zakresie, o którym Ty myślisz, zdobyć, to trzeba przysłowiowo odhaczyć wszystkie z tych materiałów, które umieściłeś, czy też raczej niektóre materiały są dla chętnych, niektóre materiały są poszerzające, a jest jakiś core? Jak Ty to widzisz?

Jak najbardziej, ścieżka sama w sobie jest zorientowana od początku do końca. Ten początek to są te core’owe rzeczy, które warto zawsze ogarnąć. Później im głębiej, tym bardziej wyspecjalizowane są te elementy na ścieżce, więc można jak najbardziej sobie później wybierać. Takim założeniem kierują się ścieżki kariery. Ale to, co poruszyłeś, to jest bardzo ciekawa rzecz, bo w trakcie tworzenia kolejnych ścieżek w praktyce wychodzi nam właśnie to, że niektóre ścieżki są bardziej ogólne, niektóre bardziej szczegółowe – o czym mówiłem na początku.

Ścieżka Front-enda jest bardziej podsumowująca różne opcje i starająca się agregować wszystko, a ta moja jest raczej bardziej konkretna, spersonalizowana. Co według mnie jest wartościowe w tego typu karierze, czy z czego ja rzeczywiście skorzystałem u siebie przy osobistym rozwoju. I tak samo te źródła. Źródła są na początku, najczęściej tak je starałem się układać, że te pierwsze źródła w źródłach nauki są bardziej ogólne, bardziej podstawowe, ale też bardziej ogólne, podsumowujące ogólną wiedzę. A im dalej w las, tym więcej ciekawych ciekawostek, ale oczywiście nie są one obowiązkowe dla każdego.

Jasne. A jaki poziom założyłeś wśród osób, które do takiej ścieżki miałyby podejść? Co jest wymagane, żeby w ogóle rozpocząć tę ścieżkę, jaka wiedza, jakie umiejętności?

Chętnie bym powiedział o dwóch etapach, które jeszcze bym chciał rozwinąć i to jest jeden z nich, czyli udostępnić, bardziej zdemokratyzować tę ścieżkę, bo w tym momencie ścieżka zaczyna się od nauki Pythona, ale nie ma takiego wstępnego elementu podsumowania metod statystycznych: czym jest statystyka, jakie są podstawowe wartości statystyczne, jakie są takie narzędzia matematyczne, które mogą się później przydać. Takich kursów też jest dość mało. Większość kursów, źródeł przechodzi prosto z nauki Pythona od razu do już konkretnych modeli, które trenujemy. I to jest fajna wiedza, bo można 80% use case’ów zastosować po prostu istniejące modele. Ktoś o tym pomyślał i warto wiedzieć, gdzie tego szukać i jak tego użyć, ale to jest zaledwie taka wiedza.

Chciałbym też dodać z czasem tę część bardziej ogólną. Znaleźć jakieś źródła, które pomogą kandydatom, którzy są w ogóle spoza IT, tak naprawdę wejść na tę ścieżkę. Na tym etapie, na którym teraz jest, to zakładam, że ktoś ma ogólną wiedzę na temat IT i wchodzi w programowanie po pierwsze Pythona, żeby się nauczyć tego, w jaki sposób się w tym języku poruszać, a potem wchodzi już na ścieżkę AI, czyli już konkretnego wykorzystywania konkretnych modeli. Tak to w tym momencie jest zbudowane jako ta pierwsza wersja tej ścieżki, ale mam mnóstwo pomysłów, jak to rozwijać i to jest coś, co mam cały czas na głowie.

Jasne, rozumiem. Okej, myślę, że też platforma jest o tyle elastyczna, że jeśli dajmy na to te początki Pythona wydaje Ci się, że masz już opanowane, że nie musisz tego materiału przechodzić przysłowiowo, to de facto możesz przejść do tych następnych kroków. To nie jest coś takiego, że Ty jesteś ograniczony jakimś czasem, że pewne kolejne materiały są dostępne dopiero po pewnym czasie, po zaliczeniu jakichś testów czy cokolwiek takiego. Myślę że mimo tego, że jest oczywiście jakiś określony jeden przebieg tej ścieżki, to możemy w razie czego pominąć pewne kroki albo przejść do kroków następnych, zakładając, że znamy już te wcześniejsze.

Jak najbardziej, nawet zachęcam do tego, żeby zajrzeć sobie na ścieżkę AI, zajrzeć sobie do tych materiałów, które są tam później właśnie w sekcji Deep Learning czy w tamtych późniejszych okolicach, bo tam są rzeczy, które mogą rzeczywiście zainteresować, pokazać, czym w praktyce może być AI. Na przykład blog Andreja Karpathiego, który w tym momencie pracuje bodajże w Tesli i robi ogromne modele do rozpoznawania obrazu i do kierowania samochodami Tesli, self-driving, jakiś czas temu opublikował dużo materiałów na swoim blogu.

Jednym z tych materiałów jest materiał o sieciach neuronowych sekwencyjnych, który jest taki dość mocno popularno-naukowy, czyli można go też spróbować czytać tak po prostu patrząc na to, co jest możliwe z takimi sieciami rekurencyjnymi. Tam jest ten element na przykład podawania kawałka tekstu modelowi, podawania modelowi całej książki Szekspira i potem podawania pierwszego słowa, z którego model jest w stanie wygenerować losowy ciąg słów, który tak naprawdę brzmi, ma ten styl Szekspira i ten podział na osoby. To są niesamowite rzeczy, które są bardzo inspirujące, co można tak naprawdę zrobić, co można stworzyć, używając głębokich sieci neuronowych.

Dokładnie. I ta dziedzina idzie bardzo szybko do przodu, tu się bardzo szybko wiele rzeczy zmienia. Dezaktualizuje się równie szybko, dlatego zastanawiam się też, na ile takie ścieżki są dłużej żyjące niż by mogło się na początku wydawać. Na ile one pokrywają jakieś evergreenowe tematy, a na ile zakładasz, że mimo wszystko taką ścieżkę trzeba aktualizować, trzeba do niej wracać i to musi być materiał, który nadąża za obecnym rozwojem danej dziedziny?

Żeby odpowiedzieć na to pytanie, to chciałbym powiedzieć nieco więcej o wizji tego, jakbym chciał, żeby się rozwijała ta platforma. W tym momencie my zbieramy specjalistów z danych dziedzin, którzy tworzą swoje zopiniowane ścieżki i to jest super na start, bo mamy już coś. Użytkownicy mogą w coś zerknąć i zobaczyć, jak się w tym miewają. Ale przyszłościowo, coś co widzę w najlepszym możliwym scenariuszu rozwoju platformy, to jest crowdsourcing tych ścieżek, czyli nasze propozycje wchodzą chociażby nawet na GitHuba i na tym GitHubie są komentowane. Jeśli coś ma dużo gwiazdek, to może wejść jako oficjalna ścieżka na HR-ME.

My nie aspirujemy do miana podmiotu, który daje, tylko który agreguje. Nie chcemy być autorytetem w każdej dziedzinie, bo nie jesteśmy też w stanie i to jest okej. I tak naprawdę dużo wiedzy takiej dawanej z góry, stare takie metody nauczania, że „ja Ci teraz powiem, a Ty wiesz” , po prostu przestają działać, gdy rynek się tak dynamicznie zmienia i to jest coś nie do zastosowania. I chciałbym, żeby te materiały na naszej platformie były tworzone po prostu przez community, jeśli tylko takie community uda nam się stworzyć.

My nie aspirujemy do miana podmiotu, który daje, tylko który agreguje. Nie chcemy być autorytetem w każdej dziedzinie, bo nie jesteśmy też w stanie i to jest okej. I tak naprawdę dużo wiedzy takiej dawanej z góry, stare takie metody nauczania, że „ja Ci teraz powiem, a Ty wiesz” , po prostu przestają działać, gdy rynek się tak dynamicznie zmienia i to jest coś nie do zastosowania. I chciałbym, żeby te materiały na naszej platformie były tworzone po prostu przez community, jeśli tylko takie community uda nam się stworzyć.

Ale myślę, że to jest bardzo ciekawa część polskiego rynku, że mamy tutaj specjalistów od niesamowitych rzeczy i to pole do wymiany informacji to jest coś, co my staramy się zrobić. Żeby tutaj u nas też można było się podzielić swoją wiedzą bardzo głęboką, którą przenosimy, albo którą zbieramy też za granicą czy po prostu w codziennej pracy i żeby było pole do wymiany i do rozmowy na temat tego, co jest tak naprawdę na topie. I tak samo jeśli chodzi o całą resztę platformy.

Bardzo jesteśmy otwarci na feedback i to jest dla nas bardzo ważna część. Na każdym etapie, przy każdej ścieżce też są okienka ankiet, w których zbieramy informacje i je non stop przetwarzamy. I pod tym względem, pod względem po prostu najczęściej wybieranych na przykład kolejnych ścieżek, staramy się szukać kolejnych specjalistów, którzy tworzą następne ścieżki, którymi ludzie są rzeczywiście zainteresowani. Także zapraszam też do tego, rzeczywiście zerkamy w ten feedback.

Super, to jest bardzo fajne podejście. Gdy mówiłeś o tym, że te ścieżki niektóre są ogólne, niektóre bardziej specjalistyczne, to przyszło mi do głowy, że przecież bardzo często nie ma takiej jedynej słusznej ścieżki, jakąkolwiek dziedzinę by wziąć na warsztat. Bo pracując teoretycznie w tym samym stacku w dwóch różnych firmach, możemy korzystać z zupełnie różnych ficzerów, z zupełnie innych aspektów danej technologii i wręcz nasz rozwój, chociażby jako programista w firmie A może wyglądać zupełnie inaczej niż w firmie B, pomimo tego, że teoretycznie korzystają z tych samych technologii.

Więc być może pokazywanie właśnie tego samego zakresu technologicznego, ale z kilku punktów widzenia, pozwoli też odbiorcom, pozwoli też użytkownikom tej platformy w jakiś sposób wybrać, która z tych ścieżek względnie bardzo podobna pod względem technologicznym, będzie pasowała bardziej do ich profilu. I myślę, że nic nie stoi też na przeszkodzie, żeby właśnie ta sama technologia, ten sam język programowania czy cokolwiek innego, występował w kilku wariantach.

To jest tak samo jak chociażby z tymi podcastami, o które Cię pytałem na początku, że podcastów o technologii, podcastów o biznesie, podcastów o zdrowiu jest mnóstwo, ale to nie chodzi o to, że one poruszają te same treści. Chodzi o to, że to ta osoba twórcy, ta osoba podcastera tutaj jest tym wyróżnikiem, który przyciąga właśnie do konkretnego podcastu. Tak samo myślę sobie, że może być właśnie ze ścieżkami na HR-ME, że ten mały akcent, to małe odróżnienie, może być właśnie tym, co powoduje, że dana ścieżka nam bardziej pasuje albo mniej.

Tak, a my chcemy dać właśnie tę platformę, w której można sobie porównać w podobnej formie tych różnych autorów czy te różne podejścia do rozwiązania podobnych problemów i to jest jedno miejsce, gdzie można sobie je przeglądać. Być może w przyszłości będziemy też tworzyli swoje własne treści naukowe, ale my raczej staramy się pozwolić ludziom wyjść z własnych baniek, które tworzą się w firmach i w których myślimy sobie, że to jest jedyna możliwość do rozwiązania tego problemu. Jak tylko wyjdziemy na zewnątrz, to często okazuje się, że jest mnóstwo różnych możliwości rozwiązywania problemów i często w tym toniemy od razu i jest taka niechęć.

My chcemy dać tę opcję wyboru, że jeśli interesujesz się Back-endem na przykład, to masz tutaj 3-4 różne opcje, jak można akurat podejść do zagadnienia Back-endu. Otwórzmy się wszerz, otwórzmy się na boki, na różne inne rozwiązania – to jest właśnie coś, co nam przyświeca przy tworzeniu tej platformy. W to wszystko idealnie wpisuje się Twoja ścieżka, prawda? To jest właśnie Back-end, ale konkretne podejście do Back-endu, które jest dla mnie mega ciekawe. Możesz opowiedzieć co nieco?

Tak, oczywiście, z chęcią. Dokładnie, Back-end jest bardzo szerokim zagadnieniem i możemy skorzystać z różnych technologii, które ten Back-end pomogą nam zrealizować. Ja akurat od prawie 4 lat mocno zagnieździłem się w takiej niszowej dosyć technologii, dosyć niszowym języku, mianowicie Elixir. Z racji tego, że on się bardzo dobrze sprawdza właśnie na Back-endzie aplikacji webowych, to postanowiłem tę swoją ścieżkę oprzeć właśnie dokładnie o Elixira.

Back-end oczywiście jest też szerokim zagadnieniem i najbardziej charakterystycznym czy najbardziej rozpoznawalnym na ten moment jest pewnie Back-end aplikacji webowych czy też ogólnie jakiś Back-end, który serwuje API. Później konsumentem tego mogą być różne końcówki: to może być aplikacja webowa, ale też mobilna czy też jakieś inne API. Natomiast chodzi mi o to, że poprzez HTTP wystawiamy pewien interfejs API, który później może być konsumowany przez inne serwisy. Z racji tego, że Elixir bardzo fajnie się tam sprawdza, to postanowiłem właśnie wpleść w tę moją ścieżkę Back-endową tę technologię.

Jest funkcyjny, to jest coś, co mnie tutaj w tym wszystkim interesuje już.

Jest funkcyjny, faktycznie.

Jakiś czas temu czytałem też o Clojure na przykład i natknąłem się parę razy na książki o tym, ale jakoś nigdy nie zabrałem się za to. Nie miałem takiego punktu wejścia, że: dobra, to tutaj zacznij, zacznij sobie z tym zadaniem. Coś takiego mega by mi się przydało, więc jak tylko będę miał chwilę wolną, to chętnie zagłębię się w Twoją ścieżkę, naprawdę.

Zachęcam. Faktycznie ten język, można powiedzieć, historycznie się trochę wywodzi – może wywodzi to źle powiedziane – ale jest gdzieś powiązany z językiem Ruby. A język Ruby z kolei powstał, i to było wręcz wpisane w jego podstawy, po to, żeby dawać przyjemność deweloperom, programistom, żeby ten kod, który jest pisany, był czytelny, żeby był przejrzysty, żeby nie trzeba było pisać wiele boilerplate’u niezbędnego do zrealizowania czegoś. Elixir z racji tego, że był stworzony przez kogoś, kto wcześniej był w core teamie związanym z Rubim, to oczywiście wiele tych inspiracji czerpie i też ta radość, to developer experience, które było charakterystyczne dla Rubiego, zostało przeportowane do Elixira.

Tak jak powiedziałeś, tych języków funkcyjnych trochę jest. Zresztą, o ile mnie pamięć nie myli, to podejście funkcyjne było tak naprawdę sporo przed nawet tym obiektowym, więc to nie jest nic nowego. W sensie wracamy do rzeczy, które istnieją już od dawna. Zresztą – taka mała anegdota – podobna sytuacja, jak z samochodami. Pierwsze samochody były samochodami elektrycznymi na jakieś baterie czy właśnie akumulatory, a nie spalinowymi.

Tak, ostatnio o tym czytałem. Rzeczywiście, tak. I to tylko Henry Ford po prostu zrobił pierwszą linię spalinową i to wybuchło. Też o tym czytałem ostatnio, ciekawe.

Tak, tak. Dokładnie. Teraz odkrywamy ponownie to podejście do samochodów elektrycznych, ale przecież one istniały od dawna i tak samo jest z programowaniem funkcyjnym. Ono istniało też wcześniej, teraz je trochę ponownie odkrywamy z różnych przyczyn. Jedną z takich przyczyn jest to, że przestaliśmy już trochę skalować te nasze maszyny poprzez podkręcanie kolejnych gigaherców. Raczej dokładamy kolejne core’y, kolejne procesory i chcemy równolegle realizować wiele przeliczeń, wiele obliczeń, wiele operacji jednocześnie.

Teraz odkrywamy ponownie to podejście do samochodów elektrycznych, ale przecież one istniały od dawna i tak samo jest z programowaniem funkcyjnym. Ono istniało też wcześniej, teraz je trochę ponownie odkrywamy z różnych przyczyn. Jedną z takich przyczyn jest to, że przestaliśmy już trochę skalować te nasze maszyny poprzez podkręcanie kolejnych gigaherców. Raczej dokładamy kolejne core’y, kolejne procesory i chcemy równolegle realizować wiele przeliczeń, wiele obliczeń, wiele operacji jednocześnie.

I żeby to w miarę robić bez bólu głowy, to chcielibyśmy właśnie mieć takie podejście do tego, które nam gwarantuje, że coś, co się wykonuje na powiedzmy corze 1., nie będzie miało wpływu na core 2., a jednocześnie jakieś problemy czy błędy spowodowane jednym obliczeniem nie będą wpływały na drugie i tak dalej. Tutaj bardzo blisko jest nam już do takiego podejścia funkcyjnego, gdzie podstawą przetwarzania są właśnie te funkcje, które są takimi osobnymi robotami, niezależnymi od siebie, które mogą być uruchamiane niezależnie od siebie. Jak też sobie to ładnie powiążemy z niemutowalnością danych, to faktycznie mamy dość bezpieczny model przetwarzania takiego równoległego. Ale wydaje mi się, że wybiegłem trochę za mocno do przodu.

Nie, nie, to jest bardzo ciekawa część. Może od razu, bo mam takie pytanie, o którym sobie myślałem od samego początku w tym kontekście. To znaczy my w projekcie używamy Firebase’a i funkcji firebase’owych, cloudowych, czyli też właśnie podejście typu stateless i w dodatku serverless, tak jak Amazon Lambda na przykład. Wydaje się na pierwszy rzut oka, że to ma dużo wspólnego i że byłoby idealnym zastosowaniem tak naprawdę języka funkcyjnego, gdzie też właśnie te zasady są powiedzmy podobne, takiej współbieżności. Jak to się ma jedno do drugiego, mógłbyś jakoś tak, jak dla laika, dla mnie to porównać, zestawić i czy właśnie Elixir jest używany w Lambda Functions na przykład?

Oczywiście. Niekoniecznie, ale to może z innych powodów. Mianowicie to, o czym powiedziałeś, że na przykład uruchamiane są pewne funkcje. Całe to podejście serverless to jest też nic nowego, można powiedzieć. To coś, co istnieje w wirtualnej maszynie Erlanga, bo tak naprawdę o tym jeszcze nie powiedziałem, ale Elixir to jest taki język, który funkcjonuje na maszynie wirtualnej Erlanga, a ma składnię trochę przypominającą Ruby. To, jak działa ta maszyna wirtualna Erlanga, jest oparte o tak zwany system aktorów.

W dużym skrócie można powiedzieć, że mamy jeden proces tej maszyny wirtualnej, a w ramach tego procesu, w ramach systemu operacyjnego, działa mnóstwo takich lekkich procesów maszyny wirtualnej. One są na tyle lekkie, że pisząc program, my się nie zastanawiamy, tak jak w innych językach, tak jak w Javie, w Rubim, czy my zbytnio nie obciążymy tej naszej maszyny, powołując jakieś obliczenia równoległe. Tutaj taka przeciętna aplikacja zazwyczaj ma setki albo tysiące równolegle działających procesów i to jest jak najbardziej okej. One są powoływane do wykonania czegoś i w momencie, kiedy te obliczenia są zamykane, to ten proces jest szybko likwidowany.

Tutaj jest bardzo dobra analogia do takiego podejścia serverless, kiedy w momencie, gdy chcemy wykonać jakieś obliczenie, to faktycznie powołujemy sobie taką funkcję do życia. Ona jest niezależna, nie ma wpływu na inne funkcje, które mogą równolegle działać. One działają, można powiedzieć, w zupełnie odseparowanym od siebie scopie i w momencie, kiedy te obliczenia, czy jakiekolwiek tam działanie jest pod spodem, zostają wykonane, to bardzo szybko i sprawnie te zasoby związane z tą funkcją są usuwane.

Identycznie, można powiedzieć, analogicznie działa to właśnie w przypadku maszyny wirtualnej Erlanga i jednocześnie tego podejścia elixirowego. Więc jeśli komuś jest blisko do takiego myślenia – bo trzeba tutaj jasno sobie powiedzieć, że wymaga to zmiany sposobu myślenia, do którego bardzo często jako na przykład programiści języków obiektowych przywykliśmy – jeśli komuś to nie jest obce, kogoś to nie przestraszy, że tak się rzeczy dzieją, to myślę, że bardzo szybko odnajdzie się właśnie w Elixirze i zrozumie, gdzie tkwi ta moc i w jaki sposób inaczej pisać programy, bo to też jest niezbędne.

Widzę to, super. Dokładnie o coś takiego mi chodziło, bo właśnie się zastanawiałem, w których momentach to się łączy, w których momentach to może być wzajemnie wykorzystywane. Ciekawe, ciekawe bardzo.

Tak, tak jak powiedziałem, jest konieczna ta zmiana sposobu myślenia, że tutaj mamy funkcje, a nie klasy – to jest jedna rzecz. A druga, nawet może trudniejsza rzecz do przestawienia się, to jest niemutowalność danych. Niemutowalność danych, czyli w momencie, kiedy powołujemy sobie jakiś obszar w pamięci, do którego coś tam zapisujemy, jakąś zmienną, jakąś liczbę, tablicę, listę, cokolwiek, to ten obszar w pamięci, czy właściwie ta wartość zapisana w tym obszarze pamięci pozostaje niezmienna. Co to nam daje?

Otóż daje nam to, że przekazując gdzieś tę zmienną czy też właściwie tę referencję do tej zmiennej to, już wchodząc w detale, my mamy pewność, że niezależnie, ile razy my to podamy, czy do ilu funkcji my to podamy, to zawsze będzie to samo. To zawsze będzie wskazywało na to samo i żadna z tych funkcji operując na tej komórce w pamięci, nie nadpisze jej, nie zmieni jej, nie zmodyfikuje tego stanu. To jest taka częsta niestety przypadłość właśnie języków czy takiego podejścia obiektowego, gdzie my możemy sobie przekazać jakąś zmienną A, która coś tam zawiera i wskazuje na jakiś obszar pamięci i w wyniku wykonania programu, może nastąpić zmiana zawartości tej zmiennej A.

Tak, odpalamy sobie jakąś metodę na obiekcie i tam wszystko w środku w tym obiekcie nagle pyk.

Tak, tak, dokładnie. Tutaj tak nie ma i jeśli chcemy na przykład sobie do tej listy, którą pierwotnie zainicjowaliśmy – 1, 2, 3 mamy w niej – dodać 4, to de facto pod spodem oznacza to stworzenie nowego, czy też zaalokowanie nowego obszaru w pamięci, gdzie będzie 1, 2, 3 i 4, a to jeden 1, 2, 3, które było pierwotnie, cały czas tam jest, niezmienne. Możemy dużo bezpieczniej podejść do takiego programowania współbieżnego, bo mamy zapewnioną tę niemutowalność.

Oczywiście to wszystko idzie z jakimś kosztem, zawsze tak jest. W życiu zawsze tak jest. I tutaj ten koszt jest związany być może z zastosowaniami, gdzie to niekoniecznie dobrze się sprawdzi i takim najbardziej, najczęściej powoływanym przykładem jest game development. W grach zazwyczaj różne postaci, różne obiekty są reprezentowane właśnie przez obiekty, które mają na przykład jakieś współrzędne, kolor, jakieś pola charakteryzujące ten obiekt i w momencie, kiedy jest gameplay, kiedy coś się dzieje, to tam zachodzi bardzo mnóstwo i bardzo częstych zmian właśnie na tych parametrach. W sytuacji programowania funkcyjnego z niemutowalnością oznaczałoby to, że za każdym razem my musimy alokować nowy obszar pamięci i czekać aż garbage collector usunie poprzedni i to jest po prostu nieefektywne. Więc tak, to po prostu jest jakiś tam koszt.

Rozumiem. A mógłbyś opisać jeszcze trochę to, co tak naprawdę na tej ścieżce na naszej platformie się zawiera? Tam właśnie podstawy i źródła dotyczące samego funkcyjnego programowania też są? Można się z tym chociażby nawet wstępnie zapoznać?

Jasne. No więc tak, cała ścieżka jest nie o Elixirze, on tam gra znaczącą rolę, ale to nie jest ścieżka o Elixirze. Ścieżka nazywa się Back-end Elixir Developer z takim nastawieniem właśnie na Web Development. Więc wyszedłem od takich tematów, które według mnie powinny być przynajmniej znajome dla osoby, która działa coś z Web Developmentem, czyli protokół HTTP, jakieś REST API, jakaś autentykacja, WebSockety może, po to, żeby się zapoznać z taką niezbędną wiedzą, która jest potrzebna nam dalej. Oczywiście, tak jak pytałem też Ciebie, czy są takie obszary w Twojej ścieżce, które można ewentualnie pominąć, to to jest pewnie jeden z tych obszarów, które ewentualnie można pominąć, jeśli ktoś jest już z tym zaznajomiony.

No tak, rozumiem.

Pewnie. I kiedy to już mamy opanowane albo wiemy, to przechodzimy do Elixira. I tutaj postanowiłem, że rozpocznę faktycznie od wprowadzenia do programowania funkcyjnego, bo mimo tego, że jest to zyskujący na popularności paradygmat, to to ciągle jest jeszcze w mniejszości zdecydowanej, jeśli chodzi o paradygmaty programowania. To jednak programowanie obiektowe jest tym, które najczęściej występuje, jest wykładane na uczelniach.

W standardzie, tak, w standardzie nauczania, Object-Oriented Programming. Przedmiot – 3 lata. Wiadomo.

Tak właśnie, dokładnie tak. I to powoduje coś takiego, że po iluś tam latach, nawet jeśli to masz na studiach, wykształca się w głowie pewien sposób modelowania rzeczywistości. Taki najbardziej naturalny polega właśnie na tym, że my chcemy odwzorować tym naszym programem pewne obiekty, które w rzeczywistości mogą występować. I żeby przejść na taki język funkcyjny trzeba trochę inaczej myśleć o tym modelowaniu programu.

Tutaj raczej mówimy, tak już naprawdę schodząc do najprostszej analogii, że program jest jak taka linia produkcyjna w fabryce. Na tej linii co jakiś czas występuje jakiś robot i ten robot przejmuje coś, co do niego jest dostarczane, wykonuje sobie znajomą i charakterystyczną pracę i podaje do następnego robota do dalszego etapu jakieś dane. Tym, co jest podawane, tym, co się na tej linii porusza, są dane. Więc program, to jest bardziej taki pipeline, taka linia przetwarzania danych. Występują właściwie nie klasy i obiekty, tak jak to ma w programowaniu obiektowym miejsce, ale występują dane i występują funkcje, które są takimi właśnie mechanizmami coś robiącymi z tymi danymi, tak w dużym skrócie.

Żeby przejść na taki język funkcyjny trzeba trochę inaczej myśleć o tym modelowaniu programu. Tutaj raczej mówimy, tak już naprawdę schodząc do najprostszej analogii, że program jest jak taka linia produkcyjna w fabryce. Na tej linii co jakiś czas występuje jakiś robot i ten robot przejmuje coś, co do niego jest dostarczane, wykonuje sobie znajomą i charakterystyczną pracę i podaje do następnego robota do dalszego etapu jakieś dane. Tym, co jest podawane, tym, co się na tej linii porusza, są dane.

Okej, zaczynam sobie wyobrażać.

Świetnie, więc postanowiłem, że parę takich materiałów dla początkujących związanych z programowaniem funkcyjnym wypadałoby tam uwzględnić. Następnie przechodzimy do Elixira i tutaj nie odkrywam żadnego koła na nowo. To są takie podstawowe rzeczy związane z tym czy każdym innym językiem programowania, czyli z jakąś tam składnią w pierwszej kolejności i w dalszej kolejności z szeroko rozumianym toolingiem wokoło tego.

I co tutaj mam na myśli? Mam na myśli Mix jako taki szwajcarski scyzoryk, który z jednej strony służy nam do wygenerowania czegoś, na przykład takiego scaffoldu aplikacji, można powiedzieć. Z drugiej strony dzięki niemu możemy sobie ściągnąć różne dodatkowe biblioteki czy taki menedżer pakietów trochę. On ma wiele różnych zastosowań, jest czymś, czym się na co dzień poruszamy, jeśli chodzi o tworzenie aplikacji w Elixirze.

Okej, czyli taki npm trochę na sterydach.

Tak, dokładnie. I oczywiście Phoenix jako framework webowy – myślę, że najbardziej rozpoznawalne obecnie zastosowanie Elixira. I tam też według tego paradygmatu NVC przechodzę przez różne warstwy, pokazując, jak to się wszystko klei ze sobą i jak to wszystko działa.

Jeśli chodzi o renderowanie stron, to jeszcze na coś takiego się natknąłem, że Phoenix lubi się z Server Side Renderingiem. Mógłbyś to jakoś skomentować? Czy dobrze to zrozumiałem?

Właściwie tak. Phoenix wprowadza nową jakość, można powiedzieć, jeśli chodzi o Server Side Rendering, ponieważ to pierwotnie, historycznie rzecz biorąc, kiedyś była norma. Wszystkie strony albo znacząca większość były właśnie generowane z serwera jako HTML, CSS i JavaScript razem połączone. Później trochę poszliśmy w kierunku tak zwanych aplikacji SPA czyli Single-Page Application, gdzie ten Front-end jest dużo bogatszy, ten Front-end dzieje się głównie z wykorzystaniem różnych frameworków, bibliotek JavaScriptowych. Back-end służy bardziej jako coś, co przetwarza dane, coś, co składuje dane, coś, co podaje do tego Front-endu dane.

Natomiast Phoenix wprowadza nam zupełnie nową jakość. Otóż okazuje się, że dzięki WebSocketom, które działają w ramach Phoenixa i temu, że to jest niesamowicie wydajna maszyna wirtualna, my możemy sobie zrobić coś takiego, że zostawiamy takie połączenie WebSocketowe od strony, czyli z przeglądarki właściwie do naszego serwera i tak de facto my przesyłamy aktualizację tego HTML-a w momencie, kiedy coś się zmienia. I to jest na tyle szybkie, że wręcz można pewne animacje renderować z serwera i pokazywać w przeglądarce, i to właściwie się nie różni niczym, jak by to porównać do renderowania z JavaScriptu. Szybkość tego jest niesamowita.

No to już jest naprawdę poziom, w którym rzeczywiście można powiedzieć gołym okiem, że to jest dość niesamowite.

To jest bardzo specyficzna właśnie dla Elixira funkcjonalność, która coraz częściej jest wykorzystywana, ponieważ trochę to jest taki powrót do Full-Stack Developera, no może trochę przesadzam, ale w każdym razie chodzi mi o to, że programista Back-endowy jest w stanie również tworzyć ten styk, ten interfejs dla użytkownika. Oczywiście nie mówię tutaj o jakimś tam stylowaniu czy CSS-ach, ale chodzi mi o to, że znacznie upraszczamy sobie cały ten stack technologiczny aplikacji. To jest coś takiego, co się nazywa Live View, to jest taka biblioteka dodatkowa do Phoenixa, ale bardzo mocno wspierana przez sam core Phoenixa. Można sobie poszukać w Internecie, niesamowite rzeczy z wykorzystaniem tego właśnie ludzie robią.

Ciekawe, ciekawe. Tak trochę mnie kusi. A masz jeszcze coś o ścieżce, czym chciałbyś się podzielić?

Wiesz co, tak. Właściwie tak na szybko może. Powiedziałem, że rozpocząłem od tego wprowadzenia HTTP, Web i tak dalej. W następnej kolejności mamy język i ten framework, ale to nam nie zamyka całości, nie daje pełnych możliwości stworzenia aplikacji. Do tego potrzebujemy jeszcze wiedzieć co nieco o danych. Większość aplikacji ma jakąś warstwę danych, składowania tych danych i tak dalej, więc ja też tam dotykam takich tematów jak bardzo krótko czym jest ESQL, jak działa biblioteka Ecto, która umożliwia nam komunikację z bazą danych. I bardzo, bardzo delikatnie dotykam też klocków, które w wielu aplikacjach produkcyjnych są wykorzystywane, które są używane, mianowicie Elasticsearch, RabbitMQ i Kafka. Ale to tylko bardziej, żeby zajawić, bo tutaj każdy z tych tematów mógłby być osobną ścieżką de facto.

W zadaniach też widziałem na przykład coś takiego, jak budowa całego live chatu bodajże z użyciem Elixira. Bardzo to był chyba ciekawy przykład. Tak, to było coś takiego?

Dokładnie, tak. Tam na jednym serwerze udało im się utrzymywać jednocześnie gadających, że tak powiem, ze sobą chyba 2 miliony użytkowników. W sensie, że każdy pisze do każdego.

Ale jak? Nieźle.

Tak to właśnie działa. Ale żeby jeszcze trochę bardziej podkręcić te możliwości dodam, że WhatsApp, który być może jest kojarzony przez większość słuchaczy, to jest aplikacja napisana w Erlangu. De facto Elixir i Erlang to jest to samo, bo to się kompiluje do tego samego Bytecode’u. WhatsApp, zanim jeszcze został przejęty przez Facebooka, był stworzony i utrzymywany przez zespół 50 inżynierów, gdzie tam było już kilkaset milionów aktywnych użytkowników, co też pokazuje, jak mało potrzeba, żeby tak wielką aplikację stworzyć i utrzymywać.

WhatsApp, który być może jest kojarzony przez większość słuchaczy, to jest aplikacja napisana w Erlangu. De facto Elixir i Erlang to jest to samo, bo to się kompiluje do tego samego Bytecode’u. WhatsApp, zanim jeszcze został przejęty przez Facebooka, był stworzony i utrzymywany przez zespół 50 inżynierów, gdzie tam było już kilkaset milionów aktywnych użytkowników, co też pokazuje, jak mało potrzeba, żeby tak wielką aplikację stworzyć i utrzymywać.

Nieźle. Niezły przykład. Super. Elixir to, tak jak właśnie powiedziałeś, Erlang – tak sobie to wyobrażam – Erlang, programowanie funkcyjne i Ruby. Połączenie tych trzech. Erlang rozumiem też jest funkcyjny, czy jak to wygląda?

Tak, Erlang jest wieloparadygmatowy, ale funkcyjny jest przodujący.

Rozumiem.

Jest taka fajna historyjka, która też za tym stoi, mianowicie twórca języka Elixir, José Valim – Brazylijczyk, który zresztą mieszka w Krakowie, żeby było śmieszniej – poszukiwał, pracując jeszcze w Rubim, alternatyw. Poszukiwał inspiracji, jak to jest w innych językach stworzone, bo Ruby jest raczej znany z tego, że demonem prędkości nie jest. Tak natknął się właśnie na Erlanga i później stwierdził, że właściwie pokochał wszystko to, co znalazł w Erlangu, czyli wszystkie te możliwości, ale znienawidził to, czego w tym Erlangu nie było. Oczywiście rozmawiamy w podcaście, ciężko pokazać przykład kodu źródłowego w Erlangu, ale uwierzcie mi, że nie jest to zbyt miłe doznanie. Dlatego postanowił stworzyć taką hybrydę, czyli dać te możliwości maszyny wirtualnej Erlanga, ale z taką składnią, która jest przyjemniejsza dla dewelopera i tak właśnie powstał Elixir.

Super, to jest dobra historia, czyli prostota kodu, prostota tworzenia prostych aplikacji – to jest zachowane z Ruby, tak? Dobrze rozumiem?

Tak, plus samo to, że biblioteka standardowa jest utrzymywana raczej na takim poziomie minimalistycznym, powiedziałbym. To znaczy, że tam się nie pojawia nic przypadkowego, nic, co byłoby zbędne. Jest faktycznie taka higiena rozwoju tego języka, mam wrażenie, zachowana.

Czyli jest dość, można powiedzieć, zopiniowany? Czyli że jeśli się wejdzie, to jest jeden na jeden sposób na zrobienie jednej rzeczy? To jest coś, co zaczyna mnie powoli interesować, szczerze mówiąc, bo jak czasami widzę jeden język, w którym jest dowolność zupełna i wtedy elementy kodu robione przez różnych programistów nawet zachowując peer review i wszystkie zasady tworzenia kodu, i nawet spisując wszystkie zasady, to gdzieś tam wszystko to się rozjeżdża prędzej czy później. Im dalej ci programiści odchodzą od siebie albo im dłużej jest rozwijany projekt po prostu. Jak to wygląda w Elixirze?

Tak, tak. On nie jest bardzo mocno zopiniowany, ale są takie zasady, są takie wytyczne, które widzę, że są bardzo mocno trzymane i w momencie, kiedy pojawia się jakiś nowy ficzer, to on jest pokazany jako możliwy do wykorzystania w jeden możliwy sposób, więc tutaj jest taki trochę mam wrażenie balans. Nie jest to na przykład tak sztywny, sztywny to może źle powiedziane, ale tak bardzo określony język, jak na przykład Haskell, który dla mnie jest naprawdę mocno sztywny, ale też nie jest na tyle luźny, gdzie możesz zrobić wszystko tak, jak chcesz, jak PHP czy do niedawna JavaScript. Coś pośrodku.

Super. Tak mi się skojarzyło wcześniej, jak mówiłeś na przykład o pipeline’ach przetwarzania w programowaniu funkcyjnym. Coś podobnego się też często tworzy w modelach, tak wracając do mojej ścieżki, w modelach sieci neuronowych. Często tworzy się modele sieci neuronowych w mojej dziedzinie, najbardziej naturalnej, przy rozpoznawania dźwięku. Często tworzy się model osobny, który na przykład czyści ten dźwięk z hałasu, czyści z szumu, czyści z różnych wydarzeń akustycznych, które w tle się dzieją, szczekających psów czy innych rzeczy. To jest jeden model.

Potem jest kolejny model, który ma inne zasady działania. I ten model może być wykorzystywany do różnych zastosowań, czyli może być wykorzystywany na przykład w preprocessingu dźwięku do tej rozmowy, którą teraz prowadzimy przez Internet, żeby ten dźwięk, który my słyszymy, był lepszy. Ale też na przykład do czyszczenia dźwięku, który potem wchodzi na kolejne algorytmy, na przykład na rozpoznawanie mowy i to jest kolejny algorytm, kolejne dane, kolejne wejściowe. On też się składa z paru elementów.

Takie pipeline’y algorytmów kolejnych i to, jak one na siebie wpływają, treningi każdego z nich, tworzą często bardzo, bardzo skomplikowany system, który trzeba jakoś utrzymywać. Tym bardziej, że te pipeline’y nie są do końca zdefiniowane. Tworząc model, tworzysz sobie pewną strukturę mnożeń i dodawań, którą potem trenujesz w trakcie treningu, gdzie te wagi i neurony się jakoś dostosowują do danych, które pokazujesz, ale nie tworzy ich, to nie jest dane, to nie jest tak, że zapisujesz kod i że to zawsze będzie działało w ten sam sposób. Więc utrzymywanie i porównywanie modeli to też jest coś, na co firmy przy już większej skali produktyzacji AI, bardzo często się natykają.

I to jest kolejna rzecz, którą bym bardzo chciał też uwzględnić na ścieżce AI, czyli MLOps (Machine Learning Operations). Coś w stylu DevOps, połączenie podejścia DevOps czy też raczej nawet GitOps, że po prostu każdy zabieg dotyczący developmentu, całe CI/CD przenieść w sferę tworzenia modeli. Czyli że każdy tworzy sobie kod, który tworzy modele, ale jest jedno centralne repozytorium od tego kodu, jest też jedno centralne repozytorium od danych, w których każdy może zapisywać kolejne dane, jeśli na przykład je przetworzy jako Data Engineer jakimś pipeline’em przetwarzania danych, wygeneruje jakieś ficzery albo po prostu dane bazujące na tych danych rozszerzy na przykład.

Mamy 500 przykładów, a potrzebujemy 5000, coś trzeba z tym zrobić, żeby jakoś je przemieszać, żeby mieć tych danych więcej – też takie rzeczy się robi. I potem trzeba to zwersjonować, i potem zwersjonować kolejne modele, które się generują na tych danych, na tym kodzie modelu w konkretnym treningu przy konkretnych hiperparametrach treningów. I tych zastosowań jest coraz więcej, coraz więcej jest platform, które takie rzeczy robią i to jest coś, do czego bym niedługo chciał usiąść i uzupełnić takie elementy tej ścieżki. Jest tam naprawdę bardzo dużo jeszcze rzeczy, które można by było dodawać i dodawać. Ten temat AI cały czas się rozwija i ciężko jest robić wszystko samemu, ale mam ambicje, żeby to jeszcze dalej rozwijać.

Jasne, ja jestem spokojny o tę Twoją ścieżkę, bo myślę, że ona będzie jeszcze długo, długo rozwijana. Tych tematów, o których tutaj powiedziałeś, które planujesz dodać, jest naprawdę sporo, więc jestem o to akurat spokojny. Ale też chciałbym Cię zapytać, już tak powoli zmierzając do końca, co jeśli chodzi o samą platformę planujecie zmieniać, dodawać. W których kierunkach planujecie rozwijać samą platformę HR-ME?

W tym momencie platforma skupia się na użytkownikach indywidualnych, żeby dać im wartość już od razu na samym początku, czyli dać im popularność konkretnych technologii. Jeśli się wybierze na przykład jakąś pozycję, w której się rozwija, główną, jakieś zainteresowania poboczne, to dla tej pozycji, dla tych zainteresowań w elemencie, który nazywamy tablicą technologii, wyświetlą się od razu powiadomienia, podpowiedzi najbardziej popularnych umiejętności. Czyli od samej góry lecą po prostu najbardziej popularne umiejętności w ofertach pracy i to już mamy od razu na samym wstępie, wybierając sobie, jakie w zasadzie ja umiejętności mam. Nie trzeba się nad tym zastanawiać, można od razu sobie wypełnić i można od razu sobie też wypełnić elementy, których chcemy się nauczyć tudzież już teraz się uczymy.

To są te 3 dziedziny, w których zapisujemy umiejętności i potem dla tego podziału umiejętności w tym momencie pracujemy nad tym, żeby udostępniać użytkownikom dopasowane oferty pracy, czyli żeby mogli też się rozwijać w tym w przyszłości. Więc szukamy ofert pracy, zbieramy informacje od pracodawców i też w tę stronę chcemy się rozwijać. Chcemy zbierać coraz więcej informacji od pracodawców, w jaki sposób, jakich programistów poszukują, jaki jest ich profil, żeby już nieco dalej być w tym procesie, żeby zarówno użytkownikom było milej w tym wszystkim uczestniczyć. To znaczy, żeby rzeczywiście te oferty pracy były na nich zorientowane, żeby to nie była kolejna oferta wysyłana na innym portalu, na którym często są wysyłane oferty pracy, z których większość, przynajmniej do mnie, jest po prostu zupełnie nie trafiona.

Chcemy zbierać coraz więcej informacji od pracodawców, w jaki sposób, jakich programistów poszukują, jaki jest ich profil, żeby już nieco dalej być w tym procesie, żeby zarówno użytkownikom było milej w tym wszystkim uczestniczyć. To znaczy, żeby rzeczywiście te oferty pracy były na nich zorientowane, żeby to nie była kolejna oferta wysyłana na innym portalu, na którym często są wysyłane oferty pracy, z których większość, przynajmniej do mnie, jest po prostu zupełnie nie trafiona. 

Chcemy to zrobić inaczej, bazować na tym, w którą stronę się użytkownik chce rozwijać i w tym momencie ten rozwój polega głównie na konkretnych technologiach. Tylko skąd brać te technologie, w czym tak naprawdę warto się rozwijać? Czyli chcemy również udostępniać statystyki na giełdzie technologii, którą planujemy wdrożyć, udostępniać statystyki dotyczące tego, które umiejętności są najbardziej popularne, ale też które są najlepiej płatne, które idą do góry. Nie tylko umiejętności same, ale które dziedziny pracy, czyli kategorie pracy są najbardziej popularne w tym momencie i które rosną do góry. Rosną do góry – to nie jest dobrze powiedziane, ale których popularność rośnie.

I to wszystko chcemy dać użytkownikom, żeby mogli sobie sami wybierać tak naprawdę, co ich interesuje, najlepiej jeszcze zawierając informacje na temat tego, które dziedziny w pracy w IT, również te bardziej miękkie, które mogą im pasować na podstawie ich miękkich skilli. To jest też coś, co bardzo bym chciał rozwinąć, ale to chyba w późniejszym etapie, czyli dopasowanie pod względem tego, czy Twoja robota jest dopasowana do Twoich naturalnych umiejętności tudzież do Twoich naturalnych regionów, w których lubisz działać. Czy lubisz działać bardziej z klientem, czy lubisz działać bardziej z produktem, czy lubisz bardziej z ludźmi czy bardziej z kodem. Ta specyfika jest specyficzna per kategoria, ale też często jest specyficzna per oferta pracy i tutaj też są jeszcze działy, w których można by było dalej jeszcze rozwijać tę platformę.

Pomysłów mam, jak słyszysz, milion. Pierwszą rzeczą to właśnie jest giełda technologii, potem dopasowane oferty pracy i mam nadzieję też zbierać feedback od ludzi, czy to rzeczywiście jest oferta pracy dopasowana do nich i coraz bardziej tune’ować ten algorytm matchingu pomiędzy pracodawcami a użytkownikami.

Cieszę się, że mogłem chociaż małą cegiełkę do tego wszystkiego od siebie dołożyć.

Dzięki wielkie. Naprawdę doceniam.

Świetnie. Moim gościem dzisiaj był Piotr Klinke. Rozmawialiśmy o ścieżkach kariery na platformie HR-ME. I co, Piotrze? Oczywiście odsyłamy do hr-me.co. Gdzie jeszcze Cię można znaleźć, gdzie można się do Ciebie jeszcze odezwać?

Przez stronę hr-me.co można wejść, zobaczyć naszą platformę, naszą publiczną betę. Można tam też zerknąć na naszego LinkedIna, gdzie widać nas, nasz team, z nami się też kontaktować, czyli zarówno ze mną, Piotr Klinke na LinkedInie, ale też z naszym CEO pisać, jeśli macie jakiekolwiek uwagi. Pisać też dużo, jeśli tylko macie coś, co rzeczywiście chcielibyście zobaczyć albo co Was interesuje, czy może co Was zawiodło, w czym powinniśmy robić lepszą robotę. Notujcie to w tych ankietach, które publikujemy na naszej platformie, też je czytamy. I również oczywiście na naszym Facebooku, gdzie staramy się publikować jakieś fakty dotyczące trendów, technologii i posty z naszego bloga, gdzie publikujemy różne materiały na temat rozwoju w IT, ale też po prostu konkretne wywiady, gdzie można sobie zobaczyć konkretną ścieżkę kariery konkretnego człowieka, który rzeczywiście taką ścieżkę kariery przeszedł. To tyle chyba. Zapraszam.

Dokładnie, zapraszamy. Linki oczywiście, jak zawsze, będą w notatce do odcinka. Piotr, jeszcze raz z mojej strony bardzo Ci dziękuję. Bardzo fajna nam się tutaj rozmowa partnerska wywiązała. Dzięki za Twój czas, za poświęcony czas. Do usłyszenia, powodzenia i cześć!

Bardzo mi miło i do usłyszenia.

I to na tyle z tego, co przygotowałem dla Ciebie na dzisiaj. Platforma HR-ME tworzy ciekawe podejście do kształcenia i oceniania umiejętności IT, bazując na ścieżkach kariery. Projekt z pewnością wart obserwowania. Cieszę się, że twórcy platformy zaprosili mnie do współpracy, czego efektem jest stworzona przeze mnie ścieżka Elixir Back-end Developer. 

Jeśli ten odcinek był dla Ciebie interesujący i przydatny, odwdzięcz się, proszę, recenzją, oceną lub komentarzem w social mediach. Jeśli masz jakieś pytania, pisz śmiało na krzysztof@porozmawiajmyoit.pl. Zapraszam też do moich mediów społecznościowych.

Nazywam się Krzysztof Kempiński, a to był odcinek podcastu Porozmawiajmy o IT o ścieżkach kariery na platformie HR-ME.

Zapraszam do kolejnego odcinka już za tydzień. Cześć!

 

+ Pokaż całą transkrypcję
– Schowaj transkrypcję
Tags:
mm
Krzysztof Kempiński
krzysztof@porozmawiajmyoit.pl

Jestem ekspertem w branży IT, w której działam od 2005 roku. Zawodowo zajmuję się web-developmentem i zarządzaniem działami IT. Dodatkowo prowadzę podcast, kanał na YouTube i blog programistyczny. Moją misją jest inspirowanie ludzi do poszerzania swoich horyzontów poprzez publikowanie wywiadów o trendach, technologiach i zjawiskach występujących w IT.