Poradniki

Ze świata IT: jak zostać programistą Java? Co warto wiedzieć?

Albert Lewandowski
Ze świata IT: jak zostać programistą Java? Co warto wiedzieć?
15

Java pozostaje jednym z najpopularniejszych języków programowania i łatwo dostrzec, jak dużą popularnością nadal się cieszy. Nic dziwnego, ponieważ wyróżnia się możliwością działania na dowolnej platformie i pozwala na wykonywanie nawet najbardziej skomplikowanych projektów. Co warto wiedzieć chcąc zostać programistą Java?

Programowanie w Javie wciąż modne

Mimo że Java nie należy już do najmłodszych języków, to nadal jest dynamicznie rozwijana i w kolejnych wersjach możemy odkryć sporo nowości. Poza tym warto wspomnieć, że jej znajomość pozwala na wygodną późniejszą zmianę używanego języka i zdecydowanie nie będzie to stanowiło poważnego wyzwania. Obecnie potencjalnie zainteresowane osoby mogą liczyć na sporą liczbę ofert. Nie da się jednak ukryć, że dominują tu posady dla osób na pozycje mid i senior, czyli z pewnym doświadczeniem. Jeżeli chodzi o posady juniorskie, to panuje spora konkurencja i wpływ na to ma również fakt, że szkoły programowania często promują kursy programowania właśnie w Java.

Na pewno na korzyść Javy działa to, że z jej wykorzystaniem jesteśmy w stanie stworzyć dowolny projekt, zarówno z kategorii aplikacji mobilnej, programu na desktopa czy pod przetwarzanie danych. Dla początkujących przydatne będą kursy dostępne w sieci, które naprawdę dobrze przedstawiają to zagadnienie i pozwalają nauczyć się niezbędnych podstaw. Nie da się ukryć, że tu praca musi przede wszystkim wychodzić z naszej inicjatywy. Tworzenie projektów wydaje się być tu jak najbardziej wskazana.

Jakie wymagania na pozycję programista Java?

Po pierwsze należy znać sam język programowania Java. Nie wystarczy jednak znajomość samej składni, ponieważ to zdecydowanie zbyt mało. Należy wiedzieć, jak kod działa od podszewki i tu trzeba zadbać o znajomość JVM (Java Virtual Machine). Po drugie wymagana jest wiedza z zakresu algorytmiki. Po trzecie Java to nie wszystko, wypada również znać bazy danych SQL, aby móc napisać proste zapytanie, a po czwarte aktualnie niezastąpiona pozostaje znajomość systemu kontroli wersji Git.

Rynek programistów Java prezentuje się teraz naprawdę atrakcyjnie. Mnóstwo projektów i stabilne perspektywy zdecydowanie zachęcają do obrania tego kierunku, tym bardziej, że potem można zająć się innymi językami wykorzystującymi JVM, jak Kotlin czy Scala.

Teraz głos oddaję specjalistom, którzy mają najlepszą wiedzę na temat tego rynku.

Wywiad z rekruterką, Joanną Wachowicz, Sabre Polska

Co jest kluczowe przy wyborze programisty Java?

Choć wypowiadam się z perspektywy firmy, w której pracuję, według mojej opinii przedstawiony punkt widzenia jest w dużej mierze uniwersalny.  Szukając programisty Java weryfikujemy dwa obszary. Z jednej strony jest to oczywiście wiedza techniczna, znajomość samego języka programowania, jego wersji (w Sabre dominuje Java 8) i nowych funkcjonalności, a także framework’ów (tj. np. Spring czy Hibernate) oraz innych technologii czy narzędzi, których są potrzebne do pracy nad danym produktem czy w danym zespole.

Drugi aspekt, który podlega ocenie, to odpowiedź na pytanie czy dany kandydat posiada zestaw pewnych kompetencji miękkich tzw. soft skills, które są dla nas ważne i niezbędne, gdyż warunkują dobrą i owocną współpracę. Mam tutaj na myśli takie kompetencje jak umiejętność komunikacji, zdolności interpersonalne, umiejętność pracy w zespole, umiejętność rozwiązywania problemów czy chęć uczenia się i zdobywania wiedzy. Motywacja kandydata również ma znaczenie. Warto zaznaczyć, że stricte finansowa  z reguły źle wróży i tacy kandydaci mają zdecydowanie mniejszą szansę na powodzenie w procesie rekrutacji. 

Kandydaci, którzy spełniają nasze oczekiwania w obydwu tych obszarach oraz dodatkowo posługują się językiem angielskim w stopniu umożliwiającym swobodną komunikację (zarówno werbalną jak i pisemną), z dużym prawdopodobieństwem odniosą sukces rekrutacyjny.

Należy zaznaczyć, że sama wiedza techniczna, nawet na bardzo wysokim poziomie, nie jest wystarczająca ze względu na fakt, że przecież pracujemy w zespołach, a żeby te pracowały dobrze i osiągały zamierzone cele, to absolutnie niezbędna jest dobra i sprawna komunikacja oraz chęć współpracy.

Przedstawione kryteria oceny mają zastosowanie i są badane zarówno wobec osób z kilkuletnim doświadczeniem, jak i wobec  kandydatów dopiero wkraczających na rynek pracy. Z tym, że w przypadku tej pierwszej grupy mówiąc o wiedzy technicznej koncentrujemy się na komercyjnym doświadczeniu i stosowaniu danych technologii w praktyce, zaś w przypadku osób z niewielkim doświadczeniem lub w ogóle bez doświadczenia, skupiamy się na badaniu głównie wiedzy akademickiej i jej zastosowania w projektach studenckich czy własnych. 

W zakresie kompetencji miękkich ogólne oczekiwania są również zbieżne ale oczywiście interpretujemy je w sposób adekwatny do doświadczenia kandydata. W tej drugiej omawianej grupie (tj. osoby z niewielkim doświadczeniem lub bez) dodatkowo olbrzymią rolę odgrywa potencjał, zidentyfikowanie go u kandydata jest zawsze in plus.

Na co rekruter zwraca szczególną uwagę w CV?

Jako rekruter z wieloletnim doświadczeniem miałam sposobność zapoznać się  z tysiącami CV. Analiza tego dokumentu trochę inaczej wygląda w przypadku każdej z dwóch wcześniej wyróżnionych grup. Osoby, które są na początku swojej ścieżki zawodowej, często mają bardzo skromne CV, ale na pewno uwagę zwraca samo wykształcenie techniczne, ewentualnie ukończone kursy i certyfikaty oraz ciekawe projekty, które kandydat zrealizował - akademickie oraz własne (idealnie jeśli istnieje możliwość ich podglądu np. w serwisie GitHub). Oczywiście odbyte kierunkowe praktyki również stanowią atut i wyróżnik kandydata w tej grupie.

W przypadku osób z większym doświadczeniem, które rozpatrujemy pod kątem stanowisk na poziomie powyżej Juniora, nieco już inne aspekty zwracają uwagę. Wykształcenie ciągle jest ważne ale schodzi na nieco dalszy plan wobec doświadczenia komercyjnego, istotne jest bowiem czy kandydat pracował na analogicznym stanowisku z podobnym stosem technologicznym, w jakiej firmie i jak długo. Jeśli np. kandydat ma wieloletnie doświadczenie ale w żadnej z firm nie spędził więcej niż 12 miesięcy to jest to dla rekrutera bardzo istotna i jednocześnie alarmująca informacja, która wymaga głębszej analizy.

Wywiad z programistą Java, Jakubem Januszem, Sabre Polska

Jak opisałbyś swoje codzienne obowiązki?

Wbrew pozorom oraz powszechnej opinii ludzi niezwiązanych z IT, zawód programisty to nie tylko programowanie. Niemniej jednak całość pracy i obowiązków skupia się wokół kodu. Dla mnie osobiście programowanie to nie tylko kodowanie - dla mnie to głównie rozwiązywanie problemów i przekładanie wymyślonych rozwiązań na kod. To też jest moim głównym obowiązkiem, który zajmuje zdecydowanie najwięcej czasu. Przeważnie analiza i implementacja zajmują podobną ilość czasu, jednak zdarzają się sytuacje, kiedy zrozumienie problemu zajmuje nawet kilka dni, a implementacja rozwiązania trwa zaledwie kilka chwil. Sytuacje odwrotne także mają miejsce - problem jest widoczny niemalże natychmiast, jednak jego rozwiązanie jest bardzo czasochłonne i nietrywialne.

Do mniejszych, ale równie istotnych obowiązków należy m.in. ustalenie wymagań dotyczących rozwiązania (najczęściej z analitykiem biznesowym lub kimś pracującym z klientem, rzadziej bezpośrednio z klientem) oraz jego testowanie, demonstracja i udokumentowanie.

Nie należy też zapomnieć o koordynacji pracy w zespole poprzez krótkie codzienne spotkania, na których planujemy co w danym dniu będziemy robić i co chcemy osiągnąć.

Jakie umiejętności techniczne są kluczowe, aby zostać programistą Java?

Pomijając na moment technologię Java, moim zdaniem najbardziej kluczowe ogólnie w byciu programistą jest logiczne myślenie. Analityczny umysł jest absolutnie konieczny i bez niego na niewiele się zdadzą inne umiejętności. Dzięki temu programista jest w stanie możliwie szybko i efektywnie rozwiązywać napotkane problemy. Istotne jest także zwracanie uwagi na detale. Często jest tak, że na pozór błaha i zaniedbywalna sprawa jest przyczyną sporych problemów, podczas gdy skupiamy się na szukaniu owej przyczyny w zupełnie innym miejscu.

Nadal pomijając Javę, Bardzo ważne są szeroko pojęte podstawy informatyki i działania komputerów - znajomość funkcjonowania podzespołów komputera i korelacji między nimi, podstawowe instrukcje sterujące, najczęściej używane algorytmy i struktury danych, paradygmaty programowania, mechanizmy bazodanowe i sieciowe, oraz wiele innych, bez których ciężko mówić o jakimkolwiek poważnym programowaniu. Wszystko to stanowi podstawę dalszej wiedzy, którą można już podpierać konkretną technologią czy językiem programowania.

Wracając do Javy - nie jest ona językiem trudnym do opanowania. Z takim też zamysłem była już ponad 20 lat temu projektowana. Zgodnie z ideą twórców, nadal jest prostym narzędziem do rozwiązywania niekoniecznie prostych problemów. Java sama w sobie, moim zdaniem, nie wymaga więcej umiejętności technicznych niż inne obiektowe języki programowania. Wspomniane wyżej podstawy wraz ze znajomością wzorców projektowych związanych z programowaniem obiektowym są w zupełności wystarczające, aby rozpocząć przygodę z Javą. Oczywiście w miarę poznawania technologii niejako od środka poszerzamy znajomość zaawansowanych mechanizmów Javy, czy też poznajemy dokładnie architekturę JVM (Java Virtual Machine). Nie jest to jednak niezbędne, aby móc programować w tym języku.

Jakie umiejętności miękkie są przydatne w roli programisty Java ?

Przede wszystkim komunikacja. Czasy solistów i indywidualistów raczej już przeminęły. Dzisiaj programowanie w pojedynkę często mija się z celem, jeśli chce się pracować przy ciekawym projekcie, z którego na koniec dnia ktoś będzie korzystał. Przyjęty współcześnie model zakłada pracę w zespole programistów, w związku z czym trzeba się miedzy sobą dogadywać. Ważna jest umiejętność wyrażania własnego zdania na dany temat wraz z jego argumentacją w sposób umożliwiający osiąganie kompromisów dobrych dla ogółu, a nie dla jednostki.

Kolejną istotną sprawą jest umiejętność szybkiej adaptacji. Zmieniając projekt w którym się pracuje, należy jak najszybciej go zrozumieć (najlepiej zarówno od strony technicznej, jak i biznesowej), aby móc efektywnie pracować. Ważna jest także umiejętność szybkiego uczenia się - czy to nowych technologii, czy też świata wokół produktu - biznesu z nim związanego i potrzeb osób, które z niego korzystają.

Dobrze też jest umieć sobie radzić ze stresem w sytuacjach skrajnych. W zależności od specyfiki projektu sytuacji tego typu może być całkiem sporo, mogą być sporadyczne bądź nie występować wcale. Niemniej jednak warto jest umieć odłożyć stres na bok i zająć się tym, na czym powinniśmy się aktualnie skupić. Stres może towarzyszyć także momentowi, kiedy należy szybko podjąć ważną decyzję projektową. Szczególnie warto umieć sobie z nim radzić w sytuacjach, kiedy pracuje się nad produktem tzw. life sensitive, czyli takim, od którego zależeć może ludzkie życie.

Inną wartą posiadania umiejętnością jest organizacja własnego czasu. Niejednokrotnie zdarza się, że przydałoby się zrobić kilka rzeczy naraz, najlepiej na wczoraj. Dobrze jest umieć ocenić sytuację i nadać zadaniom odpowiednie priorytety - czy to w zespole, czy w ramach pracy konkretnej osoby.

Nie da się jednoznacznie powiedzieć która z tych umiejętności jest najważniejsza. Moim zdaniem dobry programista to taki, który posiada je wszystkie. Brak choćby jednej z nich może niestety negatywnie wpłynąć na jakość pracy oraz czerpanie z niej przyjemności.

Co spowodowało, że postanowiłeś zostać programistą Java ?

Rozbiję to pytanie na dwa osobne. Co sprawiło, że zostałem programistą i jak zostałem programistą Javy.

Programowaniem zacząłem się interesować mając jakieś 14-15 lat. A przynajmniej tak mi się wydawało. Dopiero po latach zrozumiałem, że tworzenie statycznych stron internetowych nijak ma się do programowania. Będąc w liceum zacząłem się interesować programowaniem "na poważnie", jak na standardy nastolatka. Poznałem wtedy języki C++ i PHP, w których operowało się już na instrukcjach sterujących i strukturach danych, a nie na tagach w dokumencie. Przez całą szkołę średnią nastawiony byłem na studia związane z automatyką i robotyką. Światopogląd zmienił mi się w momencie, w którym usłyszałem zdanie, które z perspektywy czasu oceniam jako prawdziwe. Mianowicie zwiedzając w czasie dnia otwartego katedrę informatyki uczelni, na której planowałem studia (AGH) pewien prowadzący tam zajęcia doktor (który 3 lata później okazał się być opiekunem mojej pracy inżynierskiej) zapytał zwiedzających "co robi informatyk?". Po serii nietrafionych odpowiedzi typu programuje, zajmuje się grafiką, zarządza systemami i sieciami powiedział nam, że "informatyk się bawi". Urzekło mnie to na tyle, że zmieniłem zdanie i postanowiłem iść na informatykę. Można powiedzieć, że tak zostałem programistą.

Jeśli natomiast chodzi o Javę, to język ten poznałem już na studiach. Była to świetna odskocznia od dużo cięższych języków, którymi męczy się początkujących studentów. Mowa tu o C, C++ czy nawet Assembler. W Javie bardzo spodobało mi się to, że wielu rzeczy nie trzeba było implementować samemu. Liczba prostych w obsłudze wbudowanych mechanizmów, a także ilości dostępnych bibliotek zewnętrznych w porównaniu z językami, które znałem na tamten moment była zatrważająca. Programista momentami wydawał się zbędny. W miarę poznawania technologii okazało się jednak, że programista jest konieczny, a programowanie w tym języku to czysta przyjemność. Dlatego też postanowiłem, że właśnie Java jest technologią, z którą chcę pracować na co dzień.

Jak oceniasz perspektywy rozwoju?

Java pomimo swojego dojrzałego już wieku nadal jest rozwijana. W ostatnich kilku latach rozwój ten w zasadzie nawet przyspieszył. Trudno powiedzieć czy Java sama w sobie za 5, 10 czy 20 lat będzie istnieć. Należy jednak pamiętać, że dzięki znajomości Javy dużo łatwiej jest zaznajomić się z innymi językami obsługiwanymi przez JVM, a idąc dalej z językami bardziej współczesnymi. Koronnymi przykładami są Groovy, Scala czy też bardzo popularny w ostatnim czasie Kotlin. Przykładami spoza zakresu JVM mogą być Elixir, Go i Ruby. Moim zdaniem tego typu języki, tj. połączenie paradygmatu obiektowego z funkcyjnym i ubranie całości w podejście skryptowe, są przyszłością programowania. Jest to kolejny poziom zaawansowania języków programowania. A co będzie dalej, czas pokaże. Kiedyś języki obiektowe były rewolucją, dziś może jeszcze nie odchodzą do lamusa, ale muszą się liczyć z nowszymi rozwiązaniami, które stale przekonują do siebie kolejnych programistów.

Należy pamiętać, że Java bardzo często jest używana w aplikacjach webowych, które poza mnóstwem funkcjonalności backendowych, powinny też dostarczyć użytkownikowi interfejs graficzny. W związku z tym będąc programistą Java warto interesować się także rozwojem technologii frontendowych, żeby któregoś dnia nie obudzić się zbyt późno z myślą, że jednak warto było się czegoś nauczyć.

Podsumowując mój wywód dobrze jest umieć połączyć pracę w danej technologii z ciągłym uczeniem się i wdrażaniem innych. Zamykanie się na jeden język i jedno narzędzie może spowodować, że świat pójdzie do przodu i pewnego dnia dogonienie go może się okazać niemożliwe. W osiąganiu tego celu przydatna jest właśnie umiejętność szybkiego uczenia się.

Z jakimi technologiami głównie pracujesz?

Projekt, w którym aktualnie pracuję jest dość specyficzny. Jego stos technologiczny to przekrój wszystkich poważnych technologii z ostatnich 30 lat. Poczynając od skryptów bash, idąc dalej przez C++ i Javę sprzed 15 lat, dochodzimy do Javy jaką świat zna dzisiaj i z którą mam najwięcej do czynienia. Jeśli chodzi o technologie wokół Javy, z których na co dzień korzystam, to przede wszystkim Spring i Hibernate w połączeniu z frameworkami testowymi jak JUnit czy Spock. W kontekście frontendu również można znaleźć historyczny przekrój popularnych technologii - od XSLT, przez Ext JS i Flex, na ReactJS kończąc. Całości dopełniają procesy wsadowe (batch jobs), serwery Tomcat i baza danych Oracle. Warto w tym momencie wspomnieć, że programista powinien umieć swobodnie poruszać się po bazie danych i znać jej mechanizmy oraz możliwości, unikając przez to problemów z zarządzaniem danymi czy też wydajnością produktu.

Jest to dość spory stos technologiczny. Jak wszystko w życiu ma swoje wady i zalety. Największą wadą jest czas potrzebny na wdrożenie do projektu nowej osoby. Jednak zalet moim zdaniem jest zdecydowanie więcej. Oprócz tego, że mogę poznać ogrom różnych technologii, lepszych i gorszych, uczę się różnych podejść do różnych problemów w różnych technologiach. Dodatkowo moje umiejętności uczenia się i adaptacji stale wzrastają.

To, co na pierwszy rzut oka może się wydawać czymś nie do ogarnięcia, na koniec dnia może przynieść wiele korzyści.

Co polecasz do nauki i treningu osobom, które chcą zostać programistą Java?

Osobom, które nie miały wcześniej w ogóle do czynienia z programowaniem, polecam przede wszystkim inny język, najlepiej strukturalny. Moim zdaniem w ten sposób dużo łatwiej można zrozumieć mechanizmy instrukcji sterujących i podstawowe struktury danych. Dopiero z taką wiedzą polecałbym zapoznanie się z językiem Java i programowaniem obiektowym.

Natomiast osobom, które już w jakimś stopniu znają technologię Java, polecam znaleźć sobie jakiś problem i go rozwiązać. Masz problem z zarządzaniem czasem? Stwórz własny kalendarz. Chciałbyś zagrać w prostą grę? Stwórz ją. Moim zdaniem nie da się nauczyć rozwiązywania problemów nie rozwiązując ich. Bezmyślne przepisywanie kodu z kursów w mojej opinii mija się z celem. Nie jestem oczywiście przeciwnikiem żadnych kursów czy poradników typu "jak zostać programistą". Uważam jednak, że powinno się je traktować bardziej jak encyklopedię aniżeli powieść, czyli szukać rozwiązania napotkanego problemu, a nie czytać zdanie po zdaniu. Jeśli napotka się problem, wystarczy w dowolnej wyszukiwarce wpisać frazę "jak zrobić x w Javie" używając przy tym języka angielskiego i znajdziemy pokłady wiedzy do przyswojenia. Warto pamiętać, że większość problemów, które napotykamy ktoś już kiedyś zapewne rozwiązał.

Osoby chcące zostać programistą ogólnie zachęcałbym także do przyswojenia pewnych podstaw, o których wspominałem wcześniej. Bez nich trudno może być zrozumieć jak działa kod, który napisaliśmy. Poza tym na rozmowach kwalifikacyjnych często pyta się nie o to, co coś robi, tylko jak działa. Bez znajomości podstaw mało kto jest w stanie odpowiedzieć na tego typu pytanie. Sama znajomość składni i mechanizmów języka bardzo często jest niewystarczająca.

Programista Java - perspektywiczny kierunek

Mimo że powoli Java przestaje być dominującą technologią w projektach IT, to wciąż jest stosowana w wielu projektach i na pewno szybko nie zniknie z rynku. Moim zdaniem warto rozważyć rozwój w tym kierunku.

Co sądzicie o byciu programistą Java? Czy popularność tej ścieżki jest zasłużona?

Dowiedz się więcej o zawodach IT

Hej, jesteśmy na Google News - Obserwuj to, co ważne w techu