praca programisty

„Programista 15k”, czyli wszystko, co musisz wiedzieć o pracy w IT w Polsce

Czym się różni programista od software developera?

No właśnie – programiści i software developerzy. Obie nazwy zostały przeze mnie wspomniane już kilkukrotnie. Czym różnią się jedni od drugich? Pewnie każdy pracownik branży IT przedstawiłby ci trochę inną odpowiedź na to pytanie. Ja przygotowałem uproszczoną wersję.

Programista bierze “taski” (z ang. task – zadanie) i tylko sobie “kodzi” te rzeczy. Nie interesuje go, po co to, jaki to ma szerszy kontekst w rzeczywistości, komu ma to służyć itp. Po prostu posłusznie wykonuje kolejne taski, pisze kolejne fragmenty kodu, skupia się na technicznie jak najlepszym wykonaniu zadania, ale robi niewiele ponad to. W branży prześmiewczo takich wykonawców zadań nazywa się “code monkeys” (kodujące małpki).

Chociaż software developer nie musi być programistą (temat na inną publikację), to przyjmijmy na teraz, że jest to w gruncie rzeczy programista – tylko taki „rozszerzony”. Przede wszystkim developer rozumie, że dany produkt softwarowy ma komuś służyć i przynosić realne korzyści z jego posiadania. Aby osiągnąć cel, programista musi się stale kontaktować z klientem, z menadżerem swojego projektu oraz z innymi członkami zespołu projektowego. Nierzadko wykorzystuje przy tym język obcy. Musi sygnalizować wszelkie problemy, dopytywać, drążyć temat, często nawet przekonywać klienta, że niektóre jego pomysły są nietrafione. Musi też dbać o relacje w zespole. Można powiedzieć, że dobry software developer ciągnie cały projekt do przodu, zależy mu na sukcesie aplikacji, którą tworzy.

Warto mieć na uwadze, że sami developerzy często mówią o sobie potocznie “programista”, aby nie tłumaczyć powyższej różnicy otoczeniu.

Podsumowując, można stwierdzić, że zarówno programiści, jak i developerzy muszą mieć dobrze rozwinięte tzw. umiejętności twarde – czyli techniczne, związane bezpośrednio z pisaniem kodu, myśleniem algorytmami, z konkretnymi językami programowania i narzędziami. Jeżeli jesteś poza obiegiem IT, jest duże prawdopodobieństwo, że myślisz o programowaniu, jak o czarnej magii, która wymaga znajomości wyższej matematyki. Prawda jest taka, że wcale tej matematyki tak wiele nie ma i najczęściej wymagania nie przekraczają zdolności ucznia szkoły podstawowej. Owszem, są specjalności, w których niezbędna jest znajomość całek i pochodnych, ale tęgą przesadą byłoby powiedzieć, że zaawansowana znajomość matmy jest niezbędna do tworzenia większości aplikacji.

Konieczna natomiast będzie znajomość jakiegoś popularnego języka programowania. Jakie to języki? Zapraszam tutaj. Aktualnie „lingua franca” świata IT to JavaScript (nie myl z językiem Java – inaczej narazisz się na srogie żarty ze strony innych programistów). Dużą zaletą JavaScript jest przystępność oraz mnogość zastosowań. Rozumiejąc jego składnię, napiszesz program desktopowy (czyli taki, który instalujesz bezpośrednio na komputerze), aplikację webową (czyli taką, która wyświetlisz w przeglądarce internetowej) czy aplikację mobilną (do odpalenia na smartfonie) oraz wiele, wiele innych rzeczy.

Tyle jeśli chodzi o twarde, techniczne umiejętności i wiedzę. Bo to, co odróżnia software developerów od programistów, to – jak już zauważyliśmy – dobrze rozwinięte umiejętności miękkie. Czyli, w skrócie, zdolność komunikacji, stawiania granic, negocjacji, motywacji i zaangażowania.

Dlaczego warto ćwiczyć tzw. umiejętności miękkie?

Programiści (czy też developerzy) z dobrze rozwiniętymi umiejętnościami miękkimi zwyczajnie zarabiają więcej. Dzięki skutecznemu komunikowaniu się z innymi członkami zespołu, będziesz robił mniej niepotrzebnej nikomu roboty, bo wszystkie szczegóły dogadasz ze współpracownikami. Umiejętnie zwracając uwagę na możliwe problemy zabezpieczysz się przed ewentualnymi konfliktami w przyszłości (co w żargonie nazywamy „dupochronem”), a potrafiąc mówić „nie” być może unikniesz nieciekawych czy skazanych na klęskę projektów.

Nauczysz się, jak zażegnać większość konfliktów i kryzysów w projekcie, zachowując odpowiedni ton i metodyczność postępowania, a to pozwoli zadbać też o własne zdrowie psychiczne.

Co więcej, nawiązując profesjonalny kontakt z klientem, pozostawiasz na nim równie profesjonalne odczucie twojej pracy (nawet jeśli sam kod nie będzie wybitny). Opinia klienta czy odbiorcy Twojego dzieła ma znaczenie, bo trafi w końcu do twojego szefa lub twoje usługi zostaną polecone przez klienta komuś z jego znajomych (pamiętaj, networking jest istotny).

Umiejętność argumentacji i dochodzenia swoich racji sprawią też, mówiąc mniej elegancko, że „sprzedasz się” komu trzeba – i nie ma w tym niczego złego. Prawda jest taka, że specjaliści od rekrutacji w IT, mając do wyboru niekomunikatywnego programistę, który pisze świetny kod oraz kandydata ze średnimi umiejętnościami technicznymi, ale za to bardzo atrakcyjnymi umiejętnościami miękkimi, wybiorą tego drugiego.

A to dlatego, że w wielu wypadkach podniesienie umiejętności miękkich jest trudniejsze i bardziej czasochłonne (a u niektórych ludzi prawie niemożliwe). Dlatego warto zainwestować w ich rozwój już na samym początku.

Jak wygląda przeciętny dzień pracy programisty?

Czytając moje wywody o umiejętnościach miękkich, możesz zacząć zastanawiać się, ile tak naprawdę jest kodowania w kodowaniu. Jeżeli ktoś spytałby mnie, ile procent czasu pracy przeciętnego developera (który skupia się wyłącznie na pracy, a nie na trwonieniu czasu) jest przeznaczane na poszczególne jego zajęcia, to z dość dużą pewnością odpowiedziałbym jak w tabelce poniżej:

Czynność

Procentowy udział

Spotkania (prezentacje, ustalenia, dopytywanie o szczegóły itp.)

10%–20%

Utrzymanie infrastruktury aplikacyjnej (zarządzanie serwerami oraz procesami projektowymi)

10%–50%

Czytanie kodu i jego rozumienie

30%–60%

Szukanie rozwiązania (w internecie, wśród współpracowników) i podejmowanie decyzji

20%–30%

Pisanie kodu

<15%

 

A w wielkim uproszczeniu:

Czynność

Procentowy udział

Czynności nie będące pisaniem kodu

85%–90%

Rzeczywiste pisanie kodu

10%–15%

Developer spędza nie więcej niż 15% swojego czasu na rzeczywistym pisaniu kodu?! To jakiś żart?

ZOBACZ TEŻ:  Macierz dojrzałości, czyli jak usprawnić proces tworzenia oprogramowania w całej organizacji

Nie. Taka jest rzeczywista proporcja czynności, jakie wykonuje programista (czy developer) w swojej codziennej pracy. Opieram się tu na obserwacjach poczynionych w ciągu dziesięcioletniej kariery developera – tak wyglądało to u mnie, tak wyglądało to u większości moich znajomych. Życie programisty to nie samo „wystukiwanie programów”.

Większość czasu poświęcamy analizie problemów i szukaniu najbardziej optymalnych ich rozwiązań.

Dlatego też bez satysfakcji z rozwiązywania problemów, nie da się w tym zawodzie być szczęśliwym. Młodzi adepci IT wyobrażają sobie, że praca programisty polega na uruchomieniu edytora i trzaskaniu kodu od dziewiątej rano do piątej po południu. Tymczasem owo trzaskanie kodu jest jedynie rezultatem całego szeregu innych czynności. Jeśli je zbagatelizujesz, odbije się to na samym kodowaniu (np. dlatego, że źle zrozumiesz wymagania klienta). I skończy sporym rozgoryczeniem.

Jakie są potencjalne minusy bycia programistą?

Jeśli połączymy dwa fakty – konieczność opanowania umiejętności technicznych oraz ćwiczenia umiejętności miękkich – możesz dojść do wniosku, że to masa nauki, ogrom roboty. I taka jest bolesna prawda. A zarazem jedna z częstszych przyczyn wypalenia zawodowego wielu starszych programistów. Może zrozumiesz teraz, dlaczego twoi przyjaciele z branży IT wywracają oczami, gdy górnik czy pracownik linii montażowej rzuca legendarne “ty to się nie narobisz”, albo sugeruje “zjedź na tysiąc trzysta, to przekonasz się, co to prawdziwa robota”.

Wbrew tego typu opiniom, bycie programistą jest ciężką pracą, podobną pod tym względem do innych zawodów. Wielogodzinna praca przed komputerem i konieczność ciągłego „kminienia” szczególnie wyczerpuje ludzi z ich zasobów kognitywnych (czyli wigoru umysłowego). Zostawia też piętno na organizmie człowieka – wielu cierpi na chroniczne bóle pleców, sztywnienie mięśni i stawów czy problemy z krążeniem. Problem jest tak znaczący, że nawet powstał dział literatury medycznej skierowanej bezpośrednio do tej klasy zawodowej (przykład takiej książki tutaj).

Wiem, o czym mówię, bo sam wyjątkowo zaniedbałem swoje zdrowie w pogoni za wiedzą i rozwojem zawodowym. Mam około trzydziestu lat, a z fizjoterapeutą jestem po imieniu.

Wspominałem też wcześniej, że będąc programistą musisz czerpać przyjemność z rozwiązywania problemów. To główne źródło satysfakcji w tej pracy (poza oczywistościami w postaci zarobków). Niewiele jest na tym świecie rzeczy tak szczerych, jak uśmiech i ekscytacja developera, który właśnie rozwiązał poważny problem, poradził sobie z wyjątkowo upierdliwym bugiem (błędem). Dlaczego akurat to? Czy nie cieszy go najbardziej samo wystukiwanie programów, pisanie nowego kodu?

Dlatego, że pisanie programów od zera, możliwość twórczego rozplanowania aplikacji zanim jeszcze powstanie, to w gruncie rzeczy sytuacja dość rzadka. Smutna rzeczywistość jest taka, że z większym prawdopodobieństwem trafisz do projektu typu „legacy”, a więc będziesz pracować nad poprawianiem istniejącego kodu, rozszerzaniem gotowego programu. To trzeci – obok wyczerpywania zasobów kognitywnych i problemów zdrowotnych – z głównych problemów pracy programisty. Obecnie przeważająca większość etatów oznacza pracę właśnie w takim środowisku.

Oliwy do ognia nierzadko dolewa sam zleceniodawca. Nieokrzesany klient potrafi równie dobrze napsuć krwi ciągłymi zmianami, bezsensownymi decyzjami lub po prostu swoją osobą i stosunkiem do ekipy wykonującej zlecenie. Odpowiednio rozwinięte umiejętności miękkie pozwalają radzić sobie z takimi sytuacjami, ale nie spowodują, że przestaną one występować.

Praca programisty potrafi być i opłacalna, i satysfakcjonująca. Nie jest jednak, jak widać, pozbawiona trudności – które warto mieć na uwadze od samego początku kariery.

Jak brzmi najważniejsza rada dla młodych programistów?

Teraz wiesz już na co może liczyć programista w Polsce, gdzie może pracować, ile może zarabiać, jakie umiejętności powinien szlifować i czego wystrzegać się w pracy.

Bez względu na to, czy dopiero myślisz o rozpoczęciu kariery programisty, czy już znajdujesz się na początku ścieżki (np. będąc na studiach informatycznych), mam dla Ciebie jeszcze jedną, kluczową radę:

Nie ucz się sam.

Mówiąc językiem Mistrza Yody: programisty droga bardzo długa i wyboista jest. Owszem, możesz do wszystkiego dochodzić sam – tak jak początkowo robiłem to ja – ale wtedy droga będzie jeszcze trudniejsza. Dostępnych materiałów jest cała mnogość: książki, przewodniki, interaktywne szkolenia (często darmowe) czy artykuły takie jak ten. Łatwo jednak się w tym wszystkim pogubić i wybrać nieodpowiednią ścieżkę lub całkiem zboczyć ze szlaku.

Korzystaj więc z rady bardziej doświadczonych developerów. Nie wszyscy będą chętni pomóc i nie wszyscy będą potrafili przekazywać wiedzę. Sam na początku swojej kariery trafiłem na kolegę z zespołu, która okazał się – co tu dużo mówić – przepotężnym burakiem i na dłuższy czas zraził mnie do szukania pomocy u innych. Prawda jest jednak taka, że branża IT pełna jest przyjaznych, chętnie dzielących się wiedzą ludzi.

Odpowiedni mentor pozwoli Ci szybciej odkryć tę właściwą ścieżkę.

 

Szukaj doświadczonych wyjadaczy, którzy będą chcieli ci pomóc (a nie tylko pochwalić się wiedzą). Uczestnicz w lokalnych inicjatywach programistów, chodź na organizowane przez nich meetupy. Nie wstydź się zadawać pytań. Inwestuj swój czas w poszukiwanie mentora. Im bliżej początku ścieżki programisty jesteś, tym bardziej jest to istotne.

A kiedy sam będziesz już doświadczonym programistą, dziel się swoim doświadczeniem z innymi.

Powodzenia!

PS. Jesteś młodym programistą i szukasz firmy, w której mógłbyś się wiele nauczyć? A może pracujesz jako software developer już od wielu lat i lubisz przekazywać wiedzę? Odwiedź stronę gliwickiego The Software House – przepracowałem tam kilka dobrych lat jako developer, a potem szef działu PHP i wiem, że mają świetny program mentoringowy.

Zdjęcia ilustrujące artykuł pochodzą z pexels.com

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Buddy, czyli nie taki DevOps straszny, jak go malują