Refresh. Jak dbasz o to, by być nadal cenionym engineerem?
Ciągła nauka, podnoszenie poprzeczki i podejmowanie różnych wyzwań. To recepta na sukces – przekazana przez seniorów, których zaprosiliśmy do udziału w cyklu Refresh. Pytamy w nim o to, jak być nadal cenionym engineerem i co zrobić, by być „na czasie” z technologiami.
Lead Front-end Engineer, w X-Team.com od 2006 r. Przez 4 lata zarządzał krakowskim biurem Xfive.co, obecnie pracuje zdalnie. Brał udział w projektach dla takich marek, jak Twitter, FOX, Riot Games, Threadless, Kaplan. Specjalista dot. dostępności stron internetowych.
Senior Java Developer w edrone: Doświadczony programista-pasjonat, absolwent Informatyki na UJ. Specjalizuje się w skalowalnych aplikacjach chmurowych opartych o mikroserwisy. Posiada doświadczenie w gamedevie, systemach embedded.
Full stack web developer w ESCOLA z czternastoletnim doświadczeniem. Zaczynał jako ActionScript developer. Zdobywał doświadczenie w PHP i JavaScripcie, budując coraz bardziej zaawansowane strony, a kończąc na Single Page Application.
CEO-Founder w Code8, Fullstack. Specjalizuje się w JavaScripcie po stronie frontu i serwera. W pogoni za rozwiązaniem problemu potrafi zagalopować się aż do zagadnień niskopoziomowych. Fan wizualizacji, a specjalizuje się w grafach. Zaprasza do śledzenia na Twitterze.
Spis treści
Samodoskonalenie się. Jak dbasz o to, żeby być nadal cenionym engineerem?
Wojtek Zając, Lead Front-end Engineer: Jeśli chodzi o umiejętności techniczne, regularnie śledzę dyskusje i artykuły korzystając głównie z Twittera, Nuzzela (agregator treści na twitterze) i z kilku newsletterów. Subskrybuję też kilka technicznych list dyskusyjnych, a wszystko spinam ze sobą zestawem filtrów w gmailu, które wrzucają powiadomienia do odpowiednich folderów. Nowe technologie najczęściej wstępnie testuję w małych projektach pobocznych – często narzędzia, które poznałem w taki sposób później wykorzystuję dla klientów.
Co do skilli nietechnicznych, regularnie czytam lub słucham książek, które przydzielam do list “A” i “B”. Te z listy A kończę od deski do deski (Kindle i Audible), do tych z listy B wystarczają mi płatne streszczenia i narzędzia (Blinkist i MentorBox). Gdy szukam czegoś krótszego, np. na szybkie wyjście na siłownię, mam kilka ulubionych podcastów, z którymi staram się być na bieżąco. To wszystko ma na celu maksymalizację i optymalizację mojej ciągłej nauki.
Mateusz Nowak, Senior Java Developer: Przede wszystkim staram się być na bieżąco z trendami i nowościami technologicznymi. Zasubskrybowałem newslettery z takich dziedzin jak AWS, Security, DDD, Microservices, Software Architecture i DevOps. Artykułu z newsletterów wrzucam do „kolejki”. Po przeczytaniu taguje, dodaje krótkie podsumowanie oraz przerzucam do listy „przetworzonych”. Aktualnie używam do tego narzędzia Notion. Potem mogę szybko i sprawnie wrócić do tematu jeśli zachodzi taka potrzeba.
Oprócz tego codziennie staram się przeglądać HackerNews. Kolejna sprawa to książki specjalistyczne, które w porównaniu do artykułów pozwalają wyrobić ekspertyzę w wybranym temacie. Całość przeplatam video z branżowych konferencji. Nowe rozwiązania testuje w side projektach, zarówno w prototypach w pracy jak i po pracy.
Łukasz Usarz, Senior Software Engineer: Dla mnie sposobem na rozszerzenie wiedzy i umiejętności technicznych jest refaktoryzowanie istniejącego kodu. Jeżeli chcę nauczyć się nowego frameworka lub API jakiejś biblioteki, znajduję projekt open sourcowy na githubie, który korzysta z tego narzędzia i staram się nim trochę “pobawić”. Dzięki temu projekt który refaktoryzuje staje się czystszy, natomiast ja zyskuję nową wiedzę.
Dawid Wojda, Fullstack developer: Subskrybuję kilka newsletterów, prowadzę aktywnie twittera gdzie mam oko na newsy i kontakt z osobami z branży, sam często udostępniam tam swoje przemyślenia czy pomysły aby skonfrontować je z innymi i poznać ich zdanie. Aby zebrać feedback zdarza mi się także pisać mikro-biblioteki lub PoC (proof of concept) w formie repozytoriów na githubie.
Gdy chcę poznać nową technologię staram się tworzyć MVP, które potem rozbudowuję, lub przekazuję dalej do osób z zespołu. Poza pracą programistyczną jestem także team-leadem, dlatego bardzo ważny jest dla mnie rozwój całego teamu. Często zdarza mi się zlecać zadania członkom zespołu, aby przetestowali daną technologię, spisali swoje przemyślenia oraz przygotowali kawałek kodu, który można namacalnie zbadać. Rezultaty pracy omawiamy potem w razem i decydujemy czy dana nowinka wpada do naszego stacku czy ją odrzucamy, dzięki temu uczę się dużo więcej niż byłbym w stanie sprawdzić w pojedynkę.
Mateusz Wojczal, Full stack web developer: Staram się rozwijać swój zmysł abstrakcyjnego myślenia jak najczęściej i w każdy możliwy sposób. Pisanie bloga jest świetną sprawą, ale niestety nie każdemu to wychodzi – zazwyczaj brakuje czasu i zdolności oratorskich . Regularnie rozwiązuję zadania na codewars i polecam taką formę przyswajania szczegółowej wiedzy. Przydało mi się to zwłaszcza na egzaminie do Toptala, który został przeprowadzony przez codility.com. Test ten był bardzo trudny, głównie ze względu na wymaganą znajomość algorytmów i ich optymalizację.
Ceniony engineer uczestniczy w open sourcowych projektach, ocenia pull requesty innych oraz wysyła swoje własne, pomaga innym programistom w problemach. Warto śledzić, co się dzieje w branży, jednak należy to robić rozważnie i selektywnie. Zauważam, że zbyt wiele newsletterów za dużo uwagi poświęca nowym frameworkom, których po roku już nikt nie rozwija. Do czytania w sieci mogę polecić Hacker News — blogi frameworków, z których korzystacie tj. React, Redux Laravel —, a także Hacker Noon, Mozilla, Hacks i React Status.
Co rok lub dwa lata staram się uczyć nowego języka na poziomie podstawowym, niekomercyjnym. Dzięki temu zdobywam wiedzę i zgłębiam działanie różnych technologii. Rok temu wykorzystałem Pythona (którego nie znam) do zbudowania fotobudki na własne wesele.
Masz 100 dolarów na szkolenia. Jakie byś wybrał i dlaczego?
Wojtek Zając, Lead Front-end Engineer: Zdecydowanie wykupiłbym abonament w jednym z serwisów z videokursami (np. egghead, frontendmasters, pluralsight). Na pewno jest to medium, z którego wyciągam wiele w krótkim czasie, zważywszy, że chyba na wszystkich konferencjach dużo większa wartość płynie z networkingu, niż z samego słuchania prezentacji, które i tak później najczęściej są dostępne online.
Mateusz Nowak, Senior Java Developer: Za 100 dolarów ciężko znaleźć dobre szkolenia „face-to-face”, ale za to można wykupić dostęp do kursów oraz platform ze szkoleniami online. Na pewno polecam LinuxAcademy, gdzie można przejść całe ścieżki szkoleniowe pod certyfikaty „chmurowe” oraz „devopsowe”. Polecam również SafariBooksOnline, gdzie mamy dostęp do tysięcy książek (video też jest) i dość przyjemnej aplikacji do konsumowania treści.
Łukasz Usarz, Senior Software Engineer: Osobiście nie jestem fanem uczestniczenia w szkoleniach. 100 dolarów wydałbym raczej na zakup książki związanej z programowaniem. Codzienna praca oraz umiejętność reagowania na aktualne problemy w projekcie jest samo w sobie najlepszym szkoleniem.
Dawid Wojda, Fullstack developer: Na pewno kupiłbym videokursy. Sam posiadam kilka na Pluralsight. Video ma taki niewątpliwy plus, że często można prześledzić ścieżkę powstawania kodu, a co za tym idzie lepiej zrozumieć procesy myślowe autora, które dały wynikowy kod.
Pomimo wielu plusów, zupełnie subiektywnie powiem, że nie jestem fanem videokursów. Jestem trochę staroświecki, dlatego kupuję wiele książek. Btw. jeśli nie masz ogarniętego czytnika e-booków, uważaj na książki z przykładami kodu – często nie da się ich czytać w formie elektronicznej, wszystko się rozjeżdża.
Mateusz Wojczal, Full stack web developer: Przerabiałem kilka szkoleń online i nie mogę żadnego ochoczo polecić. Za 100 dolarów można pojechać na jakąś sensowną konferencję, na przykład 4developers. Dysponując taką kwotą chętnie też zrobiłbym szkolenie z Jiry. Albo to słaby system, albo po prostu ja nie umiem z niego korzystać. Za darmo można ściągnąć meetup i śledzić ciekawe eventy w każdym większym mieście; w Trójmieście co tydzień dzieje się coś ciekawego w branży.
Co poza programowaniem czyni programistę lepszym?
Wojtek Zając, Lead Front-end Engineer: Najczęściej pomijaną sferą wśród programistów to rozwijanie kompetencji miękkich (czyli np. inteligencja emocjonalna), a w szczególności praca nad umiejętnościami komunikacji. Jedną z moich ulubionych książek w tym zakresie jest Nonviolent Communication. Przeczytanie jej całkowicie otworzyło mi oczy na to, jak nasz codzienny język często powoduje niepotrzebne konflikty i nieporozumienia, oraz jak możemy lepiej odczytać prawdziwe intencje płynące od osoby z drugiej strony.
Szczególnie ważne dla osób pracujących zdalnie, gdzie przecież tracimy całą warstwę znaków niewerbalnych. Dla programistów zaczynających kierować zespołami, bardzo ważne jest poznanie typów osobowości, dopasowanie się do pracy z nimi i np. zmiana swojego stylu zarządzania na tej podstawie. Dobre źródło wiedzy w tym zakresie to newsletter Software Leadership Weekly, HBR oraz wszelkie treści od @lara_hogan.
Mateusz Nowak, Senior Java Developer: Na pewno wszelakiego rodzaju umiejętności miękkie związane z komunikacją. Programiści na co dzień pracują z innymi inżynierami, ale też z szeroko pojętym „biznesem”, analitykami, supportem i użytkownikami oprogramowania, które tworzą. Każda z tych osób może mieć inny punkt widzenia i inne spojrzenie na dany temat, i każde z tych podejść będzie właściwe. Umiejętność postawienia się na czyimś miejscu pozwoli uniknąć wielu konfliktów. Ważna też jest organizacja pracy, panowanie nad chaosem, napływającymi sprawami oraz ustalanie priorytetów. Kolejny temat to praca z danymi i wnioskowanie, czyli umiejętność patrzenia na dane, wykresy, metryki i wyłapywanie tego co istotne oraz świadomość istnienia i znajomość błędów poznawczych.
Łukasz Usarz, Senior Software Engineer: Myślę, że bardzo ważnym i często pomijanym czynnikiem jest odpoczynek. Dobry programista to wypoczęty programista. Żeby na chłodno reagować na problemy, które pojawiają się zarówno w kodzie, jak i w interakcjach pomiędzy programistami ważne jest zachowanie odpowiedniego dystansu, a będąc przemęczonym łatwo można wpaść w pułapki własnego ego.
Dawid Wojda, Fullstack developer: Niewątpliwie otwarty umysł, tolerancyjność, chęć poznawania świata, nieustanne zadawanie sobie pytania “dlaczego”, doza pokory oraz ogromna determinacja. Tymi cechami charakteryzowali się wszyscy najlepsi programiści, z którymi miałem okazję pracować.
Niedawno zauważyłem także, że wszystkie osoby, które uważam za świetnych specjalistów świadomie lub mniej świadomie, ale używają metody naukowej do rozwiązywania problemów technicznych.
Mateusz Wojczal, Full stack web developer: Przede wszystkim umiejętność komunikacji oraz korzystania z narzędzi. Znajomość angielskiego na poziomie zaawansowanym jest niezbędna, ponieważ wszystkie ważniejsze publikacje są pisane w tym języku. Oprócz języka trzeba rozwijać również swoje kompetencje miękkie, które są przydatne w każdym zawodzie oraz w życiu codziennym. Warto znać wszelkie narzędzia wspomagające naszą pracę: szkicowanie diagramów, modelowanie baz danych czy nawet podstawy google spreadsheets. Za niezwykle pomocne w tej profesji uważam rozwijanie abstrakcyjnego myślenia, o czym już wspominałem na początku.
W jakim języku programowania pisałeś trzy lata temu i dlaczego go zmieniłeś/dlaczego go nie zmieniłeś?
Wojtek Zając, Lead Front-end Engineer: Myślę, że trzy lata temu nie pisałem jeszcze w TypeScripcie, a teraz nie wyobrażam sobie bez niego życia.
Mateusz Nowak, Senior Java Developer: Java – głównego języka, w którym się specjalizuje nie zmieniłem od 5 lat. Co najwyżej staram się być na bieżąco z wersjami języka. Myślę, że sam język programowania nie ma aż takiego znaczenia. Można programować dobrze niezależnie od języka i podobnie można zepsuć każdy software, jak się nie stosuje „dobrych praktyk”.
Łukasz Usarz, Senior Software Engineer: Trzy lata temu pracowałem w projekcie jako full stack developer, gdzie na backendzie była JAVA. Później jednak skupiłem się na samym frontendzie gdzie jak wiadomo rządzi JavaScript. Podczas pracy jako frontend developer znaczną część czasu zajmuje mi także pisanie CSS/SCSS.
Dawid Wojda, Fullstack developer: Pisałem, piszę i będę pisać w JavaScripcie. Jest to mój ulubiony język, zakochałem się w nim i odkryłem jego potencjał lata temu, od tamtej pory o ile nie widzę jasnych przesłanek ku napisaniu czegoś w innym języku to tego nie robię. Poza tym język traktuję jako narzędzie, tworzenie oprogramowania to proces, który zachodzi w naszych głowach, problem mogę zapisać równie dobrze w postaci matematycznej lub pseudokodu.
Mateusz Wojczal, Full stack web developer: Mniej więcej trzy lata temu (lub też wcześniej) napisałem swoją ostatnią aplikację w zabitej technologii, jaką był Flash oraz całe jego środowisko wraz z super językiem ActionScript. Jak widać zmiana była dość wymuszona. Trzy lata temu pisałem też w JavaScripcie i PHP, były to wówczas inne języki. ES7 i PHP7 to naprawdę dojrzałe technologie, które na wiele pozwalają; mogą one bez kompleksów konkurować z resztą technologii webowych. Właśnie dlatego staram się na nich skupiać. Z JavaScriptem można również korzystać z WebAssembly i WebGL. Podsumowując — istnieje wiele opcji. Javascript używałem też dla zaprogramowania hardware’owej gry puzzle, która miała zaszyty Raspberry PI. Trzy lata temu na pewno nie pisałem zbyt wielu testów, a to właśnie bez nich nie wyobrażam sobie teraz programowania.
Wtedy i teraz, czyli jaką radę dałbyś sobie, kiedy zaczynałeś programować?
Wojtek Zając, Lead Front-end Engineer: Zdecydowanie “real artists ship” oraz “perfect is the enemy of good”. Przez lata stworzyłem dużą ilość małych projektów pobocznych, które zostały schowane do szuflady. Później podobne narzędzia opublikowane przez inne osoby stawały się popularne i prowadziły do ciekawych możliwości dla ich twórców. Myślę, że siła społeczności jest nie do przecenienia – częściej publikowałbym te projekty oraz, nawet jeśli nie byłyby w pełni idealne, pozwoliłbym innym osobom dołączyć do nich.
Mateusz Nowak, Senior Java Developer: Nie skupiajcie się mocno na frameworkach ani konkretnych API. Nauczcie się co to SOLID, nauczcie się testowania, poczytajcie o DDD. Te rzeczy odpowiedzą na większość pytań, przed którymi staniecie w przyszłości projektując i tworząc oprogramowanie. Będą dla Was drogowskazem na drodze nieskończonej ilość wyborów między różnymi rozwiązaniami. Przy okazji będziecie w stanie pisać kod, który jest łatwo modyfikowalny i zrozumiały dla innych. Najważniejsza w programowaniu jest czytelność kodu a nie to, że kod działa. To drugie zapewniają testy. Programy piszemy dla ludzi, żeby je mogli łatwo odczytać i zmodyfikować. Programowanie to gra zespołowa.
Dawid Wojda, Fullstack developer: Nie bądź tak uparty; ucz się od starszych i nie wykłócaj o wszystko, sprawdź, zbadaj i dopiero wtedy dyskutuj – nie oceniaj!. Nie pisz wszystkiego samemu, stracisz mnóstwo czasu; odpoczywaj więcej – praca to nie wszystko.
Mateusz Wojczal, Full stack web developer: Pierwsza rada to poznać podstawy. Im wcześniej, tym lepiej. A podstawy to rozróżnianie elementarnych pojęć, np. paradygmaty programowania, a także znajomość wzorców projektowych, struktur danych, klasycznych algorytmów. To także umiejętność wskazania różnic pomiędzy językami. Jako kolejny krok polecam lekturę klasycznych książek: “Pragmatyczny programista. Od czeladnika do mistrza.” Andrew Hunta i Davida Thomasa lub “Mistrz czystego kodu” Wujka Boba. Warto też jak najwcześniej przyswoić DRY, SOLID, TDD, KISS, RTFM itp.
Zdjęcie główne artykułu pochodzi z stocksnap.io.