Programowanie jest sztuką bardzo dynamiczną. Wywiad z Łukaszem Białym, Java Developerem
Java utrzymuje swoją dominującą pozycję w świecie rozwoju oprogramowania już od wielu lat. Uniwersalność, wsparcie społeczności oraz niezawodność tego języka przyciąga wielu programistów szukających swojej ścieżki. W rozmowie z Łukaszem Białym, programistą Java w intive, zapytaliśmy o własne doświadczenia dotyczące swojej pracy.
Spis treści
Dlaczego wybrałeś akurat Javę?
Właściwie był to całkowity przypadek. Moją karierę w IT zacząłem od stanowiska programisty Cobola w Volvo IT. Plan był taki, aby stworzyć nowy zespół, który miał zastąpić programistów z Francji, zanim ci odejdą na emeryturę.
Jednak w 2008 roku przyszedł kryzys i firma zrezygnowała z tego pomysłu. W tamtym czasie kończyłem studia na PWR i dopiero uczyłem się Javy. Mimo to udało mi się przejść wewnętrzną rekrutację i przekwalifikować się na nową dla mnie technologię oraz stać się Java Developerem.
Swoją przygodę z programowaniem zacząłeś od języka Cobola, masz również doświadczenia ze Scalą i Pythonem. Który z języków był dla ciebie najbardziej wymagający?
Cobol jest bardzo niszowym/egzotycznym językiem, a trudność jego opanowania w głównej mierze sprowadza się do poznania całego ekosystemu z/OS. Dodatkowo jest bardzo niewiele materiałów i pomocy dostępnych w internecie. W tamtym czasie nie istniało żadne nowoczesnego IDE, a uczyć się programować można było, jedynie mając dostęp do prawdziwej maszyny, od IBM poprzez terminal.
Pomimo to, to Scala okazała się dla mnie bardziej wymagająca. Wraz z nauką tego języka, uczyłem się programowania funkcyjnego, a to wymagało ode mnie poprzestawiania sobie w głowie pewnych nawyków, utrwalanych wcześniej przez lata. Każdy, kto ukończył kurs Martina Odesky’ego na courserze wie jak wymagający i ciężki był to materiał (zwłaszcza na początku).
Czy Twoim zdaniem umiejętność programowania w kilku technologiach jest istotne na dzisiejszym rynku pracy? Czy każdy programista powinien być “poliglotą technologicznym”?
Jak w wielu przypadkach najtrafniejszą odpowiedzią jest: “to zależy”. Znajomość wielu języków na pewno poszerza horyzonty i w dobie programowania w chmurze i mikro serwisów jest jak najbardziej cenione. Pozwala to dobrać odpowiednie narzędzie do konkretnego problemu. Dobrym przykładem mogą być również lambdy na AWS. Tak zwany “zimny start” jest o wiele szybszy w przypadku NodeJs lub Pythona w porównaniu do C# lub Javy. Jeśli performance jest naszym głównym celem, wtedy warto rozważyć, czy nie użyć innego języka.
Znajomość kilku technologii przydaje się również w przypadku projektów, gdzie przepisuje się stare aplikacje na nowoczesne rozwiązania. Sam zostałem kiedyś zatrudniony stricte pod konkretny projekt, gdzie tworzyliśmy nową aplikację w Javie, która miała zastąpić swojego przodka napisanego w cobolu.
Myślę jednak, że nie każdy programista powinien być poliglotą. Dobry specjalista w jednej technologii również bez problemu znajdzie pracę. Osobiście uważam, że kiedy dobrze poznaliśmy choć jedną technologię, nie będzie ogromnym wyzwaniem, aby nauczyć się innej, o ile jest się odpowiednio zmotywowanym.
Podsumowując, znajomość kilku technologii na pewno zwiększa szanse na znalezienie ciekawego projektu, bo spełniamy kryteria większej ilości ogłoszeń.Taka wiedza jest doceniana przez niektórych pracodawców, co można zauważyć w ogłoszeniach o pracę. Coraz częściej możemy znaleźć oferty, gdzie poszukiwani są ludzie biegli w co najmniej 2 językach. Mimo wszystko jest to moim zdaniem wartość dodana, nie “must have”.
Do tej pory miałeś okazję brać udział w projektach dla tak dużych firm, jak Volvo, Audi, BMW, Intel, Blackberry. Czy praca dla tak znanych marek różni się bardzo od tej na rzecz mniej popularnych firm? Czy podczas pracy coś szczególnie zapadło Ci w pamięć?
Kluczowy dla mnie jest konkretny projekt, do którego trafię i ludzie, z którymi będę pracować. Zasadniczo praca jest bardzo podobna. Najczęściej duże firmy mają wypracowane pewne procesy/standardy co ma swoje wady i zalety. Z jednej strony dostajemy dostęp do profesjonalnych narzędzi i produktów, na które mogą pozwolić sobie tylko najwięksi gracze. Stack technologiczny jest zazwyczaj dobrze udokumentowany i znany co docenią początkujący programiści. Z drugiej strony to rozwiązanie może nas ograniczać i blokować nasz rozwój, a czasem i powodować frustrację.
Do tego należy dodać podział ról. Zazwyczaj w dużych firmach zajmujesz się zadaniem zgodnym z twoim doświadczeniem. W mniejszych projektach można często dostać zadanie nie do końca związane z programowaniem. Dzięki temu można poszerzyć swoje kompetencje o nowe umiejętności, które często są wykonywane przez kogoś na innym stanowisku jak: DevOps, DB admin, Security Specialist.
Pracując przy start up’ie czułem się trochę bardziej związany z produktem. Traktowaliśmy go jak nasze dziecko i całemu zespołowi zależało, aby był jak najlepszy.
Jakich narzędzi i frameworków Java używasz najczęściej w swojej pracy i dlaczego?
W Javie najczęściej korzystam ze Springa, ze względu na jego dominację na rynku. Jest to narzędzie sprawdzone i doskonale znane na całym świecie. Jeśli chodzi o Pythona to FastApi najbardziej mi się spodobał, ze względu na małą ilość kodu i rozwiązania podobne do tych dostępnych w Javie. Jeśli chodzi o narzędzie to zdecydowanie Intelli J, który de facto może zastąpić wiele innych aplikacji jak klienta bazy danych, postmana itp.
Niestety wielu programistów (w tym i seniorów) nie zna dobrze funkcji IDE i wykorzystują zaledwie pewnie około 30% tego narzędzia. Wielokrotnie zdarzało mi się użyć jakiegoś skrótu klawiszowego lub funkcji, po czym następowała chwila konsternacji i komentarz w stylu: “To tak się da?” W ramach jednego community miałem kiedyś nawet wystąpienie zatytułowane 100 tricks in Intelli J. Podobne można znaleźć na Youtubie i gorąco polecam każdemu zapoznanie się z takim materiałem.