Mentor nie podejmie za Ciebie decyzji. Historia Mikołaja Lewandowskiego
Mikołaj Lewandowski, Python Trainer w infoShare Academy, juniorom zawsze odradza zbytniego skupiania się na finansach. – Wiadomo – każdemu zależy na tym, żeby dobrze zarabiać, ale szczególnie na początku naszej drogi kryterium finansowe nie powinno być dla nas najważniejsze – mówi. Jego zdaniem lepiej wybrać firmę z ciekawymi i ambitnymi projektami, nawet gdy płaci mniej niż w przypadku tych mniej interesujących.
O roli mentora w życiu juniora, o tym, na jakie pułapki narażeni są początkujący, ale też o tym jak zostaje się mentorem – to wszystko znajdziecie w naszej rozmowie z Mikołajem. Od razu zachęcamy Was do zapoznania się z kursem Mikołaja pt. PythON: Początek, który składa się z ponad 20 godzin nauki podzielonych na ponad 200 lekcji. Mamy dla Was kod rabatowy na ten kurs obniżający cenę o 10% – wystarczy wpisać kod: JJIT_10.
Czym zajmuje, a czym nie zajmuje się mentor?
Mentor to osoba, która dzieląc się swoją wiedzą i doświadczeniem może pomóc Ci dotrzeć tam, gdzie chcesz. Dzięki temu, że sam kiedyś przeszedł podobną drogę, wie, gdzie rozmieszczone są największe pułapki i na co zwrócić uwagę. Dotyczy to praktycznie dowolnej branży czy dziedziny życia. W momencie, w którym określamy sobie jakieś cele, często nie do końca wiemy jak je osiągnąć, jaki w ogóle obrać kierunek. Czasami zagwozdka pojawia się jeszcze wcześniej – “to miejsce”, do którego dążymy, wydaje się fajne, ale w sumie nie do końca jesteśmy przekonani czy jest to coś dla nas. Zwłaszcza w sytuacji, gdy jesteśmy na początku drogi, znalezienie odpowiedniego mentora może nam pomóc postawić kolejne kroki.
Oczywiście w późniejszych etapach naszego rozwoju również możemy poszukiwać odpowiednich dla nas mentorów. W zależności od tego gdzie jesteśmy i dokąd zmierzamy, różne osoby mogą nam w tym pomóc. A co konkretnie robi mentor? Z pewnością musi w jakiś sposób przekazywać swoje doświadczenia innym osobom. W zależności od tego, co kto lubi – występuje na konferencjach, spotyka się z ludźmi na różnych meetupach, w lokalnych grupach. Odpowiada na pytania, rozmawia, podpowiada. Pisze bloga, udziela się na forach i grupach w internecie. Może nagrywać webinary, kursy online, wydać książkę albo prowadzić zajęcia szkoleniowe.
Czym nie zajmuje się mentor? Według mnie mentor to nie jest osoba, która może podjąć za Ciebie decyzje albo tym bardziej “przejść drogę”. On tę drogę już przeszedł, ale Twoja może być inna. Tak więc podpowie, wyjaśni, wskaże kierunek, opowie, jak to było w jego przypadku. Ale powinien pozwolić Ci samodzielnie zdecydować. Bycie czyimś mentorem nie oznacza, że wiemy lepiej, co ta osoba potrzebuje i możemy na siłę ją uszczęśliwiać. Mentor to nie jest również ktoś, kto zrobi za Ciebie projekt. Za to z pewnością może pomóc, gdy utknąłeś w jakimś ciężkim punkcie albo potrzebujesz porady, w którą stronę zrobić kolejny krok.
Zatrzymajmy się na chwilę. Wspomniałeś o największych pułapkach – na co narażeni są początkujący w branży IT?
Po pierwsze należy tu wymienić tzw. złe praktyki. Samo stwierdzenie jest dość ogólne, aczkolwiek w programowaniu do każdego problemu możemy zastosować bardzo wiele różnych podejść. Niektóre z nich, mimo że pozornie działają, są po prostu nieodpowiednie i niosą za sobą poważne konsekwencje techniczne. Wyzwanie tutaj polega na tym, że są one niewidoczne nie pierwszy rzut oka.
Jeżeli zbudujemy ścianę, która ledwo się trzyma i przy silniejszym podmuchu wiatru po prostu rozpadnie się na kawałki to jej “użytkownik” będzie to widział. W przypadku oprogramowania jest to widoczne na początku tylko w kodzie, a dopiero później objawia się kaskadą różnego rodzaju błędów i problemów. W związku z tym stosowanie odpowiednich wzorców i praktyk jest w kodowaniu niezmiernie ważne. Nie jest to jednak zadanie proste.
Dlaczego?
Przykładowo, kiedy uczymy się nowej technologii, często korzystamy z różnego rodzaju dokumentacji, w której opisane są poszczególne funkcje danej biblioteki wraz z przykładami użycia. Należy mieć na uwadze, że spora część tych przykładów może zawierać kod średniej jakości. Jest tak dlatego, że skupiają się one raczej na przeglądzie możliwości danej biblioteki, często trywializując niezwiązane z tym bezpośrednio kwestie.
Jest to jak najbardziej zrozumiałe, gdyż zbytnie skomplikowanie przykładu bardzo utrudniłoby jego zrozumienie. Jednak kod “produkcyjny” jest złożony. Dlatego nie należy jeden do jeden przenosić przykładów z samouczka do naszych programów. Oczywiście jest to pierwszy krok, ale następnym powinno być wykorzystanie naszego zrozumienia działania tej biblioteki do poprawienia i odpowiedniego użycia jej w naszym programie.
Druga pułapka to zbytnie skupienie na technologii. Na początku programistycznej drogi poświęcamy dużo czasu na poznawanie nowych rozwiązań i pracę z kodem. Jest to podstawą naszej pracy i biegłość w kwestiach technicznych jest niezbędna. Nie należy jednak zapominać, że technologia jest tylko środkiem do osiągnięcia celu. Jeżeli budujemy oprogramowanie komercyjne, to zawsze stoi za nim jakiś cel biznesowy. I głównym zadaniem programistów jest umożliwienie osiągnięcia tego celu. Dlatego warto zawsze rozmawiać z tzw. biznesem i upewnić się, że rozumiemy, co mamy osiągnąć, zanim się do tego zabierzemy. Niesamowite jest, ile problemów może rozwiązać 10 minut bezpośredniej rozmowy.
Jak znaleźć odpowiedniego dla siebie mentora?
W tym celu musimy być w miejscach, gdzie pojawiają się takie osoby. Tak więc na konferencjach programistycznych, lokalnych meetupach, czytać blogi programistyczne, oglądać webinary itd. Warto najpierw poznać trochę taką osobę – np. podczas wystąpienia albo czytając kilka jej artykułów. Dobrze jest również upewnić się, że nasz kandydat lub kandydatka jest osobą komunikatywną i lubi dzielić się wiedzą z osobami o mniejszym doświadczeniu, dobrze nam się razem rozmawia. Podczas różnego typu spotkań, po części prezentacyjnej często następuje część networkingowa. Warto wykorzystać ją jako możliwość poznania ciekawych ludzi i potencjalnie przyszłego mentora.
Wróćmy do tego jak zostaje się mentorem?
Trudno dokładnie określić moment “przejścia”. Zawsze lubiłem tłumaczyć rzeczy innym osobom, ale też dużo opowiadać o swoich przemyśleniach i doświadczeniach. Od kiedy pamiętam, dzielenie się wiedzą sprawiało mi wielką frajdę i dawało ogromną energię. Często gdy ktoś ma jakiś problem albo zadaje mi pytanie, nie jestem w stanie przejść nad nim do porządku dziennego, zanim nie wyjaśnimy danego zagadnienia, nie rozpracujemy tematu. Rozmawiając z różnymi osobami, zobaczyłem, że moje doświadczenia mogą być wartościowe dla większej grupy osób i czerpiąc z tego wielką frajdę, postanowiłem pójść krok dalej i zacząć działać na większą skalę. Stąd blog techniczny pyjazz.pl, zaangażowanie w wystąpienia na konferencjach i lokalnych grupach, praca jako trener programowania, różnego rodzaju webinary, itd.
Dlaczego zdecydowałeś się na tę pracę? Pewnie odbiega od pracy programisty.
To prawda, aczkolwiek mentoring innych i praca trenera pomaga też w pracy programisty. Jednym z bardzo sprawdzonych sposobów nauki jest uczenie innych. Żeby coś komuś wytłumaczyć, najpierw musimy sami to dobrze zrozumieć. Tak CAŁKOWICIE. Bo jeśli tylko z grubsza wiemy, jak działa jakaś funkcja i w sumie umiemy jej użyć, ale nie za bardzo rozumiemy, co tak naprawdę się dzieje, to nie uda nam się dobrze wytłumaczyć tego zagadnienia. Ucząc innych, spotkamy się też z wieloma interesującymi pytaniami, które często tylko z pozoru mogą być proste.
Drugi powód to poczucie odpowiedzialności. Żyjemy w świecie, w którym technologia stanowi bardzo ważny, praktycznie już nieodłączny komponent. Pozwala nam ona osiągać więcej, rozwiązywać problemy, które do tej pory były nie do przeskoczenia. Świat IT rozwija się bardzo szybko, jednak mnóstwo jest jeszcze do zrobienia. Wierzę, że technologia może zmienić świat, w pozytywnym tego słowa znaczeniu. Jednak możemy to osiągnąć tylko z pomocą wielu profesjonalnych inżynierów. Nie tylko programistek i programistów, ale i wszystkich osób zaangażowanych w wytwarzanie oprogramowania, posiadających odpowiednią wiedzę i umiejętności.
Każdy powinien dbać o to, by uniknąć wypalenia zawodowego. Jakie techniki stosujesz, by nie wypalić się?
Dbam o różnorodność. Programuję, uczę, prowadzę różne projekty. Rozwijam się też w biznesie i innych obszarach poza IT. Spędzam czas z rodziną i znajomymi oraz regularnie biegam i jeżdżę na rowerze. Gdy potrzebuję chwili wytchnienia, przerwy – staram się ją sobie zapewnić. Działam tak, żeby każdego dnia mieć motywację i energię do działania. Z natury jestem optymistą i pogodnie patrzę w przyszłość. I jakoś tak mi to działa.
Co jest sukcesem dla mentora?
Gdy wiedza, którą przekazuje, jest przydatna dla innych osób i pomaga im na ich drodze. Zawsze czuję się niesamowicie, gdy po warsztacie ktoś podchodzi i mówi, że było to bardzo wartościowe, że dużo zrozumiał. Ostatnio jedna z uczestniczek kursu Python – Zrozumieć Programowanie napisała, że dzięki temu kursowi w końcu zrozumiała programowanie. Takie chwile to dla mnie wielka radość i mnóstwo motywacji do dalszych działań.
Juniorzy zadali Tobie pewnie setki pytań. Pamiętasz, które zaciekawiło Cię najbardziej?
Z tych zadanych ostatnio pamiętam pytanie o “Hello World”. “Hello World” to takie tradycyjne programistyczne przywitanie ze światem. Zwyczajowo, gdy zaczynamy pracę w jakiejś nowej technologii, to nasz pierwszy program wypisuje właśnie taki napis. Jest to obowiązkowy element praktycznie każdego tutoriala, często wykonywany bez głębszej analizy – ot wypisaliśmy jakiś tekst.
Pytanie, dotyczyło tego, do czego tak naprawdę służy takie ćwiczenie i co w rzeczywistości dzieje się “pod spodem”, gdy uruchamiamy taki program. Niesamowite jest to, że takie pytanie, pozwala w zupełnie inny sposób spojrzeć na ten niemalże rytuał, pisany przez każdego na początku programistycznej przygody. To właśnie jest świetne w pytaniach juniorów. Kwestionują coś, co uznajemy za “oczywistość”, a to skłania do refleksji.
Co doradzasz juniorom najczęściej?
Odważnego poszukiwania swojego miejsca. W IT jest mnóstwo różnych firm, w każdej z nich wiele różnych projektów. Praca przy projekcie A często będzie dość mocno różnić się od pracy przy projekcie B, nie mówiąc już o pracy w różnych firmach. Dotyczy to rozmiaru projektu, technologii, sposobu pracy i organizacji zespołu, stosowanych praktyk. Często bardzo różny jest nawet zakres obowiązków i zadań stawianych przed programistą. Żeby móc świadomie decydować o kierunku swojego rozwoju, dobrze jest wiedzieć jakie ma się możliwości. Jeżeli coś nam nie odpowiada w naszym projekcie, nie bójmy się tego powiedzieć albo poszukać innych opcji. Posiadanie różnorodnych doświadczeń będzie też bardzo cenne dla dalszego rozwoju naszej kariery.
Co odradzasz juniorom?
Zbytniego skupiania się na kwestiach finansowych. Wiadomo – każdemu zależy na tym, żeby dobrze zarabiać, ale szczególnie na początku naszej drogi kryterium finansowe nie powinno być dla nas najważniejsze. Według mnie zdecydowanie lepiej jest wybrać firmę, w której będziemy pracować przy ciekawych i ambitnych projektach, stosując nowoczesne podejścia i działając z ludźmi, którzy pomogą nam w naszym rozwoju niż taką, która płaci nawet sporo więcej. Ostatecznie takie podejście i tak nam się opłaci, gdyż rozwijając się, dokonujemy inwestycji w siebie, a ta po pewnym czasie zwróci nam się w bardzo wymierny sposób.
Kiedy pytają o pierwszą pracę, to doradzasz pracę w startupie, software housie czy w korpo? Co dla nich jest najlepsze?
Oczywiście na takie pytanie odpowiedź brzmi “to zależy”. Od tego, jaką osobą jesteśmy, jakich warunków pracy oczekujemy, co sobie cenimy. Zacznijmy od firm największego kalibru. Dużym plusem korporacji jest istnienie w niej setek procesów. Rozpoczynając swoją pracę w takiej firmie, zapewne przejdziemy przez procedurę wdrożeniową, otrzymamy linki do wielu dokumentów opisujących zasady i sposób działania firmy. Będziemy też mieli nad sobą menadżera a czasami nawet dodatkową osobę wspierającą w naszym rozwoju.
Jest spora szansa, że w projekcie, do którego dołączymy, zostały już ustalone pewne standardy i wybrane konkretne podejścia. Praca w dużej firmie to również okazja nawiązania wielu kontaktów. Tak więc korporacja to z jednej strony środowisko zorganizowane i uporządkowane, w którym mamy szansę poznać bardzo wiele doświadczonych osób. Niestety może zdarzyć się tak, że istniejące procedury mają niewiele wspólnego z pragmatyzmem i dobrymi praktykami, a działając przy gigantycznym projekcie jako pojedynczy tryb w ogromnej machinie, może być nam trudno złapać szerszy kontekst i zrozumieć coś poza wycinkiem, do którego zostaliśmy przydzieleni.
W teorii korporacje realizują wiele różnych projektów, tak więc przeskoczenie do innego obszaru i tym samym kontynuacja rozwoju powinna być dość łatwa, jednak w praktyce bywa z tym różnie.
A startupy?
Jeżeli chodzi o startupy, to ze względu na dynamiczny rozwój i potrzebę bardzo dużej elastyczności stawiają one zazwyczaj na osoby doświadczone. Z tego względu raczej rzadko będą zatrudniać juniorów. W późniejszym rozwoju takiej firmy, jeszcze przed etapem korporacyjnym mamy do czynienia z małą lub średnią firmą produktową. I to jest ciekawy moment na spróbowanie swoich szans. Tego typu firma jest już na tyle stabilna, że jest gotowa inwestować w mniej doświadczonych pracowników.
Z drugiej strony nawet początkująca osoba będzie w niej miała zauważalny wpływ na całą strukturę. Będzie zdecydowanie bliżej całego procesu decyzyjnego, często posiadając przy tym dość szeroki zakres odpowiedzialności. Podsumowując, startupy raczej bazują na doświadczonych pracownikach. Małe i średnie firmy produktowe łączą istnienie pewnej stabilizacji i podstawowych procedur z nadal dużą swobodą działania oraz elastycznym zakresem obowiązków.
Pozostaje nam software house.
W takiej firmie będziemy realizować projekty na zlecenie zewnętrznych klientów. W związku z tym będą się one różnić pomiędzy sobą stosowanymi technologiami, rozmiarem zespołu a często nawet i procesem pracy. Daje to sporą szansę na znalezienie projektu o interesującej nas charakterystyce i w technologii, w której chcemy się rozwijać. Ten kij ma oczywiście też drugi koniec. Ponieważ projekty są bardzo różne, to trafiają się zarówno takie lepsze, jak i gorsze. Tak więc sam fakt, że znajomy pracuje w tej samej firmie, w fajnym projekcie nie oznacza, że my również do takiego trafimy. Ale… mnogość tych projektów to duża szansa do zmiany i w praktyce jeżeli zależy nam na pracy w określonym typie projektu to prędzej czy później do takiego trafimy. Według mnie dużym plusem software house’u jest możliwość spróbowania różnych projektów i zdobycie różnych doświadczeń bez potrzeby zmiany miejsca pracy. Minimalizuje to ryzyko utknięcia przy jednym temacie. Trzeba mieć jednak na uwadze to, że istnieją różne rodzaje software house’ów.
Niektóre budują dla swoich klientów zespoły, tak więc pracujemy z koleżankami i kolegami z firmy dla klienta (często z zagranicy). Inne “wypożyczają” swoich programistów (tzw. body leasing albo team extension) do projektów swoich klientów. W takiej sytuacji może się zdarzyć, że jesteśmy jedynym członkiem zespołu, który nie jest bezpośrednim pracownikiem klienta. Z moich doświadczeń wynika, że efektywny rozwój w tego typu konfiguracji może być trudny, zwłaszcza dla osób początkujących.
Pierwsza praca to ważne doświadczenie. Jakich firm powinni unikać juniorzy? Jak rozpoznać tę, która nie zadba o rozwój nowego pracownika?
Rozpoznanie takiej firmy nie będzie łatwe. Często firmy wewnątrz i realizowane przez nie projekty nie są jednolite. W jednym projekcie możemy mieć zespół bardzo zaangażowanych w rozwój mniej doświadczonych osób, w innym nie. Według mnie warto po prostu zapytać o proces wdrożenia nowej osoby i jej dalszego rozwoju podczas rozmowy rekrutacyjnej. Warto pytać również o zespół, w którym będziemy pracować. Jaki to będzie projekt, jakie doświadczenia posiadają inni jego członkowie. Jeżeli nie wiadomo, do jakiego projektu trafimy to zapytajmy jak wyglądają “typowe” projekty realizowane w tej firmie, na co możemy liczyć. Czy będzie to zespół samych juniorów pod przewodnictwem jednego lidera? Czy też może firma ma strategię budowania bardziej zrównoważonych zespołów?
W którym przypadku junior szybciej rozwinie swoje umiejętności?
Moim zdaniem lepsze szanse na rozwój są w tym drugim przypadku. Rozmowa rekrutacyjna to moment, w którym nie tylko firma sprawdza kandydata, ale i również kandydat firmę. Celem jest określenie swoich wzajemnych oczekiwań i stwierdzenie czy “pasujemy do siebie”. Dlatego warto podczas niej pytać o wszystko, co dla nas ważne i wprost mówić o tym, że zależy nam na rozwoju w takim konkretnie kierunku. Jeśli znamy kogoś, kto pracuje w firmie, do której aplikujemy – zapytajmy, jak wygląda kwestia codziennej pracy i możliwości rozwoju. Jeżeli nikogo takiego nie znamy, możemy poszukać takich osób, np. na spotkaniach lokalnych meetupów. Nie kierowałbym się natomiast anonimowymi opiniami zamieszczonymi w internecie, gdyż te bardzo często mijają się z prawdą.
Oprócz programowania, czego warto uczyć juniorów?
Szeroko rozumianych kompetencji miękkich z naciskiem na umiejętności komunikacyjne. Ze względu na charakter pracy programisty jest to ekstremalnie ważne. Dla jasnościć – nie uważam, że kompetencje miękkie mogą zastąpić te twarde. Żeby być programistą trzeba umieć rozwiązywać problemy techniczne, znać biblioteki, frameworki, umieć programować. Ale trzeba również umieć zrozumieć postawione przed nami zadania, formułować pytania, rozmawiać o ryzyku i wątpliwościach. Ze względu na to, że praktycznie wszystkie projekty robimy z ludźmi i dla ludzi, komunikacja z nimi będzie codziennym zadaniem w tej pracy.
Jak myślisz, czego najczęściej juniorzy nie wiedzą na temat programowania?
Myślę, że często nie zdają sobie sprawy z tego jak bardzo zespołowa jest to praca. Programowanie może kojarzyć nam się z zapaleńcem, który przez kilka miesięcy nie wychodzi ze swojej piwnicy, po czym oddaje światu ukończony produkt. W rzeczywistości komunikacja zarówno z biznesem, jak i dziesiątkami osób pracującymi razem z nami w zespole technicznym to codzienne zadanie każdego programisty. Niemniej podstawowe i tak samo ważne jak znajomość języka programowania i umiejętność pisania kodu.
W typowym projekcie ogromną część wyzwań stanowią właśnie wyzwania komunikacyjne. Dobre zrozumienie potrzeb. Dobre przekazanie wątpliwości. Dobra komunikacja umożliwiająca organizację pracy. Nowoczesne firmy technologiczne są tego świadome, dlatego kładzie się w nich bardzo duży nacisk na pracę zespołową, motywację i komunikację. Może być to zaskakujące, ale jeżeli ktoś poszukuje zajęcia, gdzie będzie dużo rozmawiać i współdziałać z innymi ludźmi to programowanie właśnie takie jest.
Mikołaj Lewandowski. Senior Python Developer i Team Leader w STX Next (największym w Europie software housie specjalizującym się w Pythonie). Trener programowania w infoShare Academy. Autor bloga programistycznego PyJazz.pl. Entuzjasta Software Craftsmanship i pragmatycznego podejścia do rozwijania systemów. Wierzy w ideę Civic Tech i to, że technologia może zmienić świat. Biegacz, rowerzysta, czasami podróżnik.