Machine learning, Wywiady

Przez Pittsburgh do Kopenhagi. Historia Michała Gacki

Michał Gacka, nasz dzisiejszy rozmówca, znalazł pracę za granicą, choć w kraju jej nie brakuje. Wyjechał jednak do Danii, by poznać bliżej świat programowania w ciekawym projekcie. Jego pasja do programowania zaczęła się w gimnazjum, ale została przerwana na studiach. — Brakowało mi po prostu kogoś, kto wszedłby do klasy, pokazał swoją pasję i zaangażowanie. Kogoś, kto przez to, że sam jara się tym, co robi, zajarałby też mnie — wspomina. Michał po roku przerwy wrócił na studia, żeby zrobić magisterkę z uczenia maszynowego, a w tzw. międzyczasie znalazł pracę w TIA Technology.

Zanim przejdziemy do tego, jak trafiłeś z Katowic do Kopenhagi, opowiedz o tym, jak zainteresowałeś się programowaniem?

Miałem to szczęście być w liceum, w którym nauczyciel miał wystarczające pojęcie o informatyce, żeby jej uczyć, co w wielu krajach jest niestety rzadkością. Wtedy nie doceniałem tego, ale teraz miałbym wiele ciepłych słów do przekazania Tomaszowi Bilińskiemu, który poświęcił dużo czasu i energii, żeby przekazać nam podstawy programowania w C. Jednym z trudniejszych programów, które pamiętam z tamtego czasu było animowanie układu słonecznego. Pozycja księżyca, krążącego wokół planety krążącej wokół słońca, sprawiła mi pierwsze duże matematyczno-programistyczne kłopoty.

Wcześniej bawiłem się trochę z html-em i css-em — niestety bez większych efektów. Pamiętam, że dużo mniej wrażliwy nauczyciel informatyki w gimnazjum zareagował negatywnie na mój trud włożony w zrobienie we własnym czasie nowej strony dla szkoły i szybko odechciało mi się tworzenia własnych projektów.

Mimo zniechęcenia w gimnazjum, w liceum zainteresowałeś się programowaniem, a później zdecydowałeś się na studia. Pierwszą pracę znalazłeś jednak na stanowisku Public Relations Assistant?

Prawie. Wcześniej pisałem o sportach elektronicznych dla eSports.pl — portalu, który umarł kilka lat temu na pierwsze symptomy braku zainteresowania dobrym dziennikarstwem w internecie. W czasie inżynierki zacząłem zajmować się public relations i marketingiem, ze względu na całokształt Automatyki i Robotyki na Politechnice Śląskiej, która bardzo skutecznie zniechęciła mnie do programowania i technologii. Stąd też ten staż w agencji PR — pod koniec studiów inżynierskich wiązałem z tym swoją przyszłość. Dużo się zmieniło od tamtego czasu.

Co zniechęciło Cię do programowania podczas studiów?

Zastanawiam się ostatnio nad tym dość często, bo mam kilkoro przyjaciół przechodzących przez te fazy zniechęcenia, które przeżywałem w czasie inżynierki i próbuję ich przekonać, że to zupełnie normalne. Z tych przemyśleń pewnie i cały artykuł mógłbym złożyć, bo sprawa jest dość skomplikowana, ale zazwyczaj podkreślam szczególnie rolę przestarzałego systemu nauczania, w połączeniu z tym, że programowanie na początku drogi może być po prostu fatalnie nudne i nieinspirujące. Szczególnie jak zaczyna się od C, C++ i programowania jądra Unixa. Lubię budować i motywuje mnie efekt, a na moich studiach nikogo efekt nie obchodził.

Dlaczego początki programowania są trudne? Jest tyle dostępnych kursów, tutoriali i bootcampów.

Po pierwsze podkreśliłbym, że początki programowania są szczególnie trudne dla ludzi, dla których praca w izolacji nie jest naturalna i którzy energię czerpią z bycia z innymi ludźmi. Bardzo ważne jest, żeby właśnie tych niestandardowych programistów zachęcić do wejścia w świat technologii. Krajobraz technologiczny potrzebuje świeżego spojrzenia i idealistów, którzy wierzą, że technologia powinna służyć ludziom, a nie na odwrót.

Z rzeczy związanych stricte z moimi studiami w Polsce, pamiętam głównie profesorów, którzy od 20 lat robią ten sam egzamin, i są zamknięci w swoim własnym świecie – z daleka od prawdziwych problemów, z którymi ludzie mierzą się w firmach. Pamiętam program nauczania, który wydawał się być w wielu dziedzinach niezmieniony od 20 lat. Doktorantów, którzy nie wiedzieli co zrobić po studiach, więc naturalnie zostali na uczelni i swoje problemy przelewają na studentów. Około 3 roku studiów zaczęliśmy się zastanawiać czy powinniśmy wiedzieć czym ten Automatyk tak naprawdę się zajmuje, czy jeszcze nie.

Szczególnie irytowało mnie, że uczymy się czegoś, co dopiero za kilka miesięcy będzie potrzebne, ale nikt np. nauki o analizie matematycznej w tamtym momencie z tym praktycznym zastosowaniem nie połączył. Uczymy się więc czegoś, co nie mamy pojęcia skąd się wzięło i do czego służy. Najgorsze jest to, że za kilka miesięcy nikt nie pamiętał, że się tego uczyliśmy, bo mózg uczy się poprzez skojarzenia i punkty odniesienia. No i tak przez ponad trzy lata: wkuć, zdać, nie wiedzieć dlaczego ani po co i zapomnieć.

Od tej reguły były wyjątki i przyznam, że sporo się nauczyłem. Przy okazji zrozumiałem jednak, że im więcej energii wkładam w studia, tym bardziej ludzie na tych studiach próbują mnie przekonać, żebym dał sobie spokój. Wolałem więc energię spożytkować na działalności w organizacji studenckiej, teatr, muzykę i rozwój w kierunku komunikacji i PR-u, które dawały mi dużo więcej satysfakcji i dostęp do mniej zblazowanych życiem ludzi.

Co spowodowało jednak, że wróciłeś do programowania?

Najważniejszym źródłem motywacji, które przekonało mnie, żeby do programowania wrócić, była moc, którą technologia — i programowanie w szczególności — ze sobą niosą. Możliwości są ogromne: możemy zmienić świat! I w trakcie moich pierwszych studiów brakowało mi po prostu kogoś, kto wszedłby do klasy, pokazał swoją pasję i zaangażowanie. Kogoś, kto przez to, że sam jara się tym, co robi, zajarałby też mnie. Brakowało mi inspiracji.

Ile w tym było mojej winy? Trudno powiedzieć, pewnie całkiem sporo, ale jak sobie przypomnę, jak bardzo przytłaczająca większość studentów podzielała moje zdanie w wielu z tych kwestii, to teorie siły jednostki raczej staram się trzymać z dala od tych rozważań.

Jak znalazłeś pierwszą pracę jako developer? Czego się w niej nauczyłeś?

Podczas gdy czas wolny poświęcałem na rozwijanie się w kierunku komunikacji, PR-u i marketingu, chciałem też dokończyć inżynierkę. Złożyło się w tamtym momencie kilka rzeczy na to, że miałem niezwykłą okazję pojechać na 6 miesięcy jako Research Assistant do Pittsburgha, na Carnegie Mellon University. To była pierwsza praca, w której napisałem sporo kodu.

Czyli uczyłeś się komunikacji i marketingu, ale nadal chciałeś zrobić inżynierkę na Politechnice. Dlaczego?

Po pierwsze, moja naturalna ciekawość nie pozwoliła mi wyłączyć się kompletnie ze studiów i zainteresowałem się jednymi z niewielu praktycznych zajęć: przetwarzaniem obrazów. Napisałem pracę inżynierską na temat odszumiania obrazu, pracowałem wtedy z popularnymi bibliotekami i algorytmami, które okazały się potrzebne, żeby zaaplikować na wspomniany staż na CMU.

Jednocześnie byłem w organizacji studenckiej IAESTE, dzięki której miałem dostęp do ofert praktyk na całym świecie (chociaż nie trzeba wcale być jej członkiem, ale wtedy jest trochę łatwiej). Pojawiła się oferta z CMU na 6 miesięcy w trakcie roku akademickiego. Szczęśliwie spełniałem minimalne kwalifikacje, dzięki pracy inżynierskiej. Druga sprawa: nikt inny nie chciał jechać, bo staż wymagał przerwania studiów – ja zacząłem w międzyczasie magisterkę.

No i tak zamiast zmuszać się do chodzenia na nudne zajęcia z Automatyki i Robotyki, pojechałem na sześciomiesięczną podróż do Pittsburgha, która wywróciła moje życie do góry nogami, na jeden z najlepszych uniwersytetów na świecie pod względem programowania i robotyki.

Czym się zajmowałeś podczas tego stażu za granicą?

Pracowałem nad systemem, który miał za zadanie w czasie rzeczywistym skwantyfikować jakość badania endoskopijnego. A dokładniej technikę wykonywania zabiegu przez gastroenterologa. Wszystko było napisane w C++ ze względu na potrzebę przeprowadzania potrzebnych obliczeń na laptopie pomiędzy kolejnymi klatkami z kamery. Głównie skupiałem się na zintegrowaniu kodu poprzednich pracowników i napisaniu algorytmu bazującego na optical flow, który pozwalał oszacować pozycję kamery wewnątrz ciała pacjenta. Piszę o tym troszkę więcej tutaj.

To był pierwszy raz, kiedy musiałem się zmierzyć z dużą bazą cudzego kodu i to nie najlepszej jakości. Nie miałem pojęcia czego się spodziewać: czy będę potrafił pisać C++ w praktycznym zastosowaniu, czy ogarnę kilkadziesiąt tysięcy linii kodu, czy matematycznie dam radę, itd. To był ten czas, kiedy uświadamiałem sobie, że wszyscy w życiu i w pracy są podobnie zagubieni i mają podobne wątpliwości — uświadamiałem sobie, że skoro z tym problemem sobie radzę i osiągam dobry efekt, to raczej ze wszystkim sobie poradzę.

Ważne, żeby zrozumieć jak najszybciej: każdy ma wątpliwości, co do swoich umiejętności. Każdy ma braki w wiedzy i boi się, że jakieś zadanie go przerośnie. Nieważne jest ile wiesz, ani ile umiesz, tylko jak szybko się uczysz i jak radzisz sobie z problemami.

W jaki sposób podnosiłeś wtedy swoje umiejętności?

Niestety nie miałem zbyt dużego wsparcia technicznego od mojego szefa, więc byłem głównie zdany na własne eksperymenty, książki i Google. Pamiętam, że traciłem dużo czasu na rzeczy, które wykwalifikowanej osobie przyszłyby dużo łatwiej, szczególnie, że książki nie były zbyt pomocne, ze względu na to, jak wąskim zastosowaniem wizji komputerowej się zajmowałem.

Niemniej, stricte w sferze programowania nauczyłem się, że potrafię poradzić sobie z problemami, które wydają się na pierwszy rzut oka nie do przejścia, jak ważna jest dobra komunikacja z product ownerem (w tym wypadku lekarzem), i — co najważniejsze — kompletnie zmieniłem zdanie, co do roli technologii w mojej przyszłości: zrozumiałem, że programowanie może posłużyć mi do czegoś, o czym zawsze marzyłem, żeby zostawić świat trochę lepszym niż go zastałem.

Cała podróż natomiast była rewolucyjna również ze względów osobistych. Wróciłem zupełnie nowym człowiekiem i nic nie jest teraz takie samo, jak było przed tamtym wyjazdem.

Wyjechałeś do Danii ze względu na studia magisterskie. Jak znalazłeś ofertę pracy w Danii?

Zanim do tego przejdę, nakreślę może kontekst pracy w Danii, a dokładniej tego, czym jest „student worker”. Status ten pozwala na otrzymywanie comiesięcznego stypendium od państwa, które jest niezależne od wyników na uczelni. W związku z tym studenci przyjeżdżający z Unii Europejskiej, muszą pracować około 12 godzin tygodniowo, żeby w świetle prawa UE być uważanymi za równych z Duńczykami i to stypendium otrzymać obok pensji. Tak więc dużo taniej jest zatrudnić taką osobę, niż kogoś po studiach.

Wracając do mojej pracy: przeszukałem kilka portali z ofertami, z których najefektywniejszy okazał się https://thehub.dk/, gdzie jeden ze startupów, GoBundl, zdecydował się mnie zatrudnić. Zajmował się budowaniem platformy do zrzeszania ludzi w grupy, które mogłyby otrzymać zniżki na ubezpieczenia i używał do tego głównie C# i dot netu.

Jak przebiegała rozmowa kwalifikacyjna do GoBundl?

Rozmowa kwalifikacyjna była bardzo łatwa i przyjemna, bo GoBundl nie miało jeszcze żadnych konkretnych procedur filtrowania kandydatów. Bardziej zależało im na dobrej komunikacji ze mną i przykładach moich poprzednich projektów. Pomógł fakt, że w Polsce chwilę pracowałem z Reactem i Flaskiem, więc znałem podstawy full-stackowego web-devu, a to, że pisałem wcześniej w C++ i pracowałem z przetwarzaniem komputerowym udowadniało, że radzę sobie też z trudniejszymi problemami. Dzięki temu zatrudnili mnie do pracy w dot necie, mimo że nigdy w życiu nie napisałem linii kodu w C#.

Zaproponowano Ci pakiet relokacyjny? Co się na niego składało?

Jechałem do Danii na studia, więc przeprowadzka była na mojej głowie. Założyciele GoBundl byli bardzo pomocni w szukaniu mieszkania i załatwianiu formalności związanych z podatkami, numerem identyfikacji podatkowej itp. Zdecydowałem się też pojechać do Kopenhagii wcześniej, na początku lipca, żeby dwa miesiące przepracować na cały etat, wdrożyć się w pracę i zarobić trochę, żeby być bezpiecznym finansowo przed rozpoczęciem semestru we wrześniu.

Przed podjęciem pierwszej pracy w Danii znałeś realia i koszty życia w tym kraju? Podjęcie pracy Software Engineera pozwoliło Ci podnieść poziom życia?

Nie wiedziałem nic o Danii zanim się tu przeprowadziłem, ale obyło się bez większych niespodzianek. Dania ma to do siebie, że prawie wszyscy mają wszystkiego pod dostatkiem. Bardzo łatwo jest osiągnąć poziom życia, z którego jest się zadowolonym. Pracując 15 godzin tygodniowo i otrzymując wcześniej wspomniane stypendium jako student nie tylko żyję komfortowo i mam na rzeczy, na których wcześniej oszczędzałem, ale około 1/3 dochodu co miesiąc mogę zaoszczędzić.

Jak się ktoś bardzo postara i pracuje na cały etat jako Software Engineer to może oszczędzić nawet 8 – 10 tysięcy złotych miesięcznie.

Ile zarabia się na tym stanowisku i na co może sobie pozwolić engineer zajmujący się machine learningiem?

Software Engineer w Kopenhadze zarabia około 35 – 50 tysięcy koron miesięcznie. Podatki zjadają prawie połowę, więc zostaje się po przeliczeniu z około 12 — 15 tysiącami złotych. Z ludźmi zajmującymi się konkretnie machine learningiem sprawa jest trochę bardziej skomplikowana, bo Kopenhaga jeszcze się do tej dziedziny przyzwyczaja i szczerze mówiąc nie wiem, ile dokładnie zarabiają data scientists i ml engineers w większych firmach, ale stawiałbym na górną granicę powyższych widełek i możliwość negocjacji dużo wyżej w szczególnych przypadkach.

W trakcie Twojej pracy GoBundi połączyło się z TIA Technology. Jak rozumiem, spowodowało to jakieś zmiany w Twojej pracy?

Założyciele GoBundl zdecydowali się kilka miesięcy temu dołączyć do TIA Technology, jako wydział zajmujący się rozwijaniem front-endów zintegrowanych z systemem zarządzania bazą danych ubezpieczalni. Dla mnie oznaczało to możliwość przejścia z web-devu do uczenia maszynowego.

Czym zajmujesz się w TIA Technology?

Zmienia się to dość szybko, bo piszę teraz w 3 języku od kiedy zacząłem pracę. Najpierw pisałem w C#, asp necie i trochę html-a i css-a, zintegrowanego przez Razora. Później, jeszcze w GoBundl, przeszliśmy na Reacta jako front-end, żeby napisać dynamiczną stronę do sprzedaży ubezpieczeń.

Pierwszy projekt w TIA Technology to była integracja dwóch z ich istniejących systemów w Javie, a później kilka tygodni full-stackowego programowania Java + React. Teraz natomiast całą energię poświęcam systemowi uczenia maszynowego, który rozwijam jako proof of concept z jednym z naszym klientów, gdzie staram się zbudować model przewidywania potrzeb klientów ubezpieczalni i szansę zrezygnowania z ubezpieczenia. Tutaj backend i modele napisałem w Pythonie, przy użyciu Flaska, Kerasa i Sklearn, plus małą integrację z Reactem, żeby wyniki modeli wyświetlać w kontekście naszego front-endu.

Javowców zapraszam, bo akurat szukamy do naszego mniejszego biura Digital Solutions w Kopenhadze: mga@tiatechnology.com.

Przez krótki czas musiałeś się wiele nauczyć. Od razu zostałeś wrzucony na głęboką wodę?

Pierwsze dwa tygodnie w GoBundl były bardzo wyczerpujące ze względu na to, że nie tylko nie znałem ASP NET-u, ale też nigdy nie pisałem w C#. Byłem zatrudniony równolegle z drugim student programmer na okres próbny. Po tygodniu, czy dwóch jemu podziękowali, co było dodatkowym powodem do stresu.

Na szczęście moi szefowie byli bardzo zadowoleni z moich wyników, a dokładniej z umiejętności znajdowania rozwiązań na własną rękę. To jedna z najważniejszych umiejętności młodego programisty, której mojemu koledze zabrakło. Pamiętam jednak takie dni, że wychodziłem z biura po 8 godzinach i mój mózg był kompletnie zdrętwiały. Musiałem poczekać kilkanaście minut zanim byłem w stanie zdecydować co zjeść na kolację.

Domyślam się więc, że po pracy raczej odpoczywałeś, niż uczyłeś się i robiłeś research dotyczący rozwiązań, nad którymi pracowałeś w firmie?

Na początku odpoczywałem i próbowałem sobie ułożyć życie w nowym miejscu. Studia też nie były bardzo wymagające na początku, więc miałem czas skupić się na wszystkim naokoło: na zainteresowaniach i poznawaniu ludzi. Teraz dużo się zmieniło, bo strasznie się w uczenie maszynowe wkręciłem, i duża część mojego wolnego czasu wokół tego się obraca. Ale raczej częściej wokół projektów na uczelni niż w pracy.

Jakie jest ogólne nastawienie do życia młodych Duńczyków? Widać wyścig szczurów, czy współpracę, zaangażowanie?

Dania jest bardzo specyficzna pod tym względem. Zamiast parcia na ambicję, jest potrzeba posiadania tyle, ile wystarcza, żeby być zadowolonym. W zależności od tego, jakim się jest człowiekiem podczas studiów może to być albo wada, albo zaleta.

Uczelnie bardzo stawiają na współpracę i własną inicjatywę, a firmy mają bardzo płaską hierarchię. Składa się to na bardzo bezstresowe i profesjonalne środowisko, ale produktem ubocznym jest dość spora doza nijakości i braku zaangażowania ze strony młodych Duńczyków. Kiedy wychowujesz się mając wszystko, czego ci potrzeba, nie masz zwyczaju walczyć o więcej. Ja mam, wychowałem się przyzwyczajony do rywalizacji i w Danii trochę mi brakuje tego, co doświadczyłem też w Stanach: otoczenia, które ciągnie mnie do góry zamiast równać do tego, co oczywiste.

Nie chcę tutaj zabrzmieć zbyt surowo: świat może wiele nauczyć się od Danii i Duńczyków, sam wiele nauczyłem się i do końca życia z tej perspektywy będą w wielu względach korzystał, a Danii i wszystkim ludziom, których tu poznałem zawsze będę wdzięczny i zaalokowałem szczególne miejsce w moim sercu. Po prostu w tym konkretnym momencie życia chciałbym otoczyć się ludźmi, którzy nigdy nie są do końca zadowoleni ze swojego wyniku i chcą cały czas iść do przodu, o co w Danii, szczególnie na uczelni, jest czasami trudno.

Co chciałbyś osiągnąć w ciągu najbliższych kilku lat?

Bardzo dużo tego jest! W uczeniu maszynowym staram się zdobyć jak najszersze doświadczenie i wiedzę, w tym matematyczną i mierzyć się z istotnymi problemami mającymi praktyczne zastosowanie (jak bardzo ciekawe przewidywanie struktury białek, którym chwalił się niedawno DeepMind. Więcej o moim projekcie piszę tutaj).

Jako programista i web developer chcę mieć możliwość przeprowadzenie całego projektu w Machine Learning od bazy danych po środowisko produkcyjne. Ogólnie chciałbym być dobrym inżynierem, który ma własny styl i potrafi we własnym czasie rozwiązać każdy problem.

Bardzo ważne jest dla mnie, żeby pracować z projektami, które są potrzebne i w takim kierunku będę szedł. Chciałbym mieć wpływ na kształt technologii na świecie i jej zastosowanie. W perspektywie kilku lat zależy mi też na tym, żeby spędzać coraz mniej czasu na programowaniu, a coraz więcej na uczeniu innych programistów, zarządzaniu pracą i kształtowaniu projektów, tak żeby połączyć moje zainteresowania z obszaru komunikacji interpersonalnej i biznesu z programowaniem i uczeniem maszynowym.


Michał Gacka. ML Software Engineer. Inżynier oprogramowania pracujący z uczeniem maszynowym i web-devem. Wierzy, że technologia może zmienić świat i powinna w pierwszej kolejności służyć ludziom i ich wartościom, a nie ślepemu zarabianiu pieniędzy. Lubi łamać stereotyp introwertycznego programisty i bardzo ceni sobie dobrą komunikację i umiejętności miękkie. W wolnym czasie zajmuje się teatrem improwizowanym, pisze własną muzykę, gra w piłkę i uczy się tańczyć.

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

Redaktor naczelny w Just Geek IT

Od pięciu lat rozwija jeden z największych polskich portali contentowych dot. branży IT. Jest autorem formatu devdebat, w którym zderza opinie kilku ekspertów na temat wybranego zagadnienia. Od 10 lat pracuje zdalnie.

Podobne artykuły

[wpdevart_facebook_comment curent_url="https://geek.justjoin.it/pittsburgh-kopenhagi-historia-michala-gacki/" order_type="social" width="100%" count_of_comments="8" ]