Kluczowe kompetencje i predyspozycje programisty

kompetencje-programisty

Obecnie wielu z Was zastanawia się czy warto zostać programistą. Nawet jeśli sami nie macie takiego dylematu – bo z sukcesem realizujecie się zawodowo w swojej branży – to z pewnością ktoś z Waszych znajomych lub rodziny myśli o zmianie zawodu i wejściu do świata IT. Dlatego postanowiłem napisać o tym jakie kompetencje powinieneś posiadać i rozwijać aby dobrze realizować się w zawodzie developera.
Z własnego doświadczenia wiem, że umiejętności techniczne to nie wszystko. A co jeszcze się liczy?

Spis treści

Stereotypy są wszędzie

Zapewne spotkaliście się ze stwierdzeniem, że programista powinien doskonale znać matematykę, skończyć studia informatyczne i interesować się komputerami od zawsze, a przynajmniej od dzieciństwa. Ile w tym prawdy? Szczerze, tyle co nic. Czemu więc mimo tego, że zmieniły się czasy oraz wymagania względem kandydatów do pracy w branży IT nadal wielu z nas błędnie postrzega rzeczywistość? Bo niestety łatwo ulegamy stereotypom na temat tej branży.

O mitach związanych ze światem IT rozprawiłem się w tym artykule. Zachęcam do lektury, gdyż ci z Was którzy są bardziej podatni na stereotypy i powszechnie rozsiewane opinie o świecie IT, mogą się poczuć zaskoczeni po tej lekturze 🙂

Przejdźmy więc do kompetencji i predyspozycji. W dalszej części wpisu dowiecie się, które z nich są kluczowe przy przebranżowieniu w kierunku IT oraz pomocne w rozpoczęciu pracy jako programista.

W zgodzie ze sobą

Nikt nie rodzi się programistą, podobnie jak spawaczem, psychologiem czy pośrednikiem nieruchomości. Skąd te porównania? Ano stąd, że każdy z tych zawodów wymaga od nas zestawu pewnych predyspozycji i kompetencji. Bez nich nadal możemy wykonywać daną profesję, ale bardzo prawdopodobne, że będzie nas ona męczyć, frustrować i w konsekwencji szybko wypalać. A tego z pewnością nie chcemy.

Dlatego tak ważne, aby to w czym jesteśmy dobrzy, co nam wychodzi na co dzień i do czego mamy smykałkę – nasze predyspozycje – w jak największym stopniu pokrywały się z tym co chcemy robić w pracy. W końcu nie trudno wyliczyć, że przeciętnie spędzamy w niej 1/3 naszego życia (w wieku produkcyjnym). Co odejmując czas na sen zajmuje połowę naszej aktywności w ciągu dnia. Dużo!

Rozwaga jest w cenie

Zanim podejmiecie decyzję o przebranżowieniu, zachęceni np. tak jak ja dniem otwartym w szkole programowania, ciekawością lub po prostu idąc za namową bliskich, warto żebyście zastanowili się i przed podjęciem ostatecznej decyzji odpowiedzieli sobie na kilka ważnych pytań. Bynajmniej nie mam tu na myśli kwestii formalnych np. wykształcenia, ale właśnie predyspozycje, realne mocne strony, o których wiecie z doświadczenia.

Nie ma nic gorszego niż zainwestowanie czasu, energii i pieniędzy w coś z czym nie będziemy mieli potem do czynienia prawda? Dlatego tak ważne jest świadome podjęcie decyzji i wcześniejsze rozważenie za oraz przeciw. Sam wiem, że nie łatwo jest się odciąć od opinii innych osób i przeanalizować swoje kompetencje pod kątem branży IT.

Ciągły rozwój

Po pierwsze, praca w IT, a już na pewno praca programisty, to ciągła nauka. Dosłownie. Nawet senior developer szybko wypadnie z rynku lub w najlepszym razie zmarginalizuje się i spadnie na koniec stawki, jeśli nie będzie się rozwijał, podążał za nowościami i trendami w branży. Jeśli po prostu lubicie się uczyć, macie pęd do wiedzy, a zdobywanie nowych umiejętności sprawia Wam frajdę, to znak, że IT może być dla Was. Celowo użyłem sformułowania „może być” zamiast „jest”, gdyż nauka to tylko jedna z wielu kompetencji.

No dobrze, to że junior developer dużo się uczy nikogo nie powinno dziwić, ale na czym konkretnie polega nauka – i szerzej – rozwój w przypadku regular (mid) oraz senior programisty? Może to być np. pójście w kierunku tzw. fullstacka, czyli nauka frontendu przez backendowca i backendu w przypadku frontendowca. Dobrym sposobem jest również zbieranie feedbacku od innych developerów i doskonalenie się w obszarze, który sprawia nam najwięcej trudności. Poza tym, jeśli jesteś developerem „z powołania”, to na pewno od dawna masz (przynajmniej w głowie) listę tematów i obszarów, które chcesz zgłębić i lepiej poznać. Przykładowe ścieżki developerskiego rozwoju znajdziecie tutaj.

Odpowiedni balans

Warto nie popadać również w skrajności i znaleźć zdrowy balans w rozwoju i nauce. Pamiętajmy, że dobry programista to przede wszystkim szczęśliwy i wypoczęty człowiek. Nie polecam więc wpadać w tzw. „kursozę”, czyli „zaliczanie” jak największej liczby materiałów edukacyjnych czy szkoleń. Lepiej podejść do tematu bardziej jakościowo niż ilościowo. Można przerobić przecież mniej kursów, ale przejść je bardziej świadomie i dzięki temu wynieść z nich więcej. Nie da się ukryć, że nauka programowania, to przede wszystkim praktyka i jeszcze raz praktyka. Inwestycja w nasze kompetencje. Nawet cała przeczytana książka, czy kilka przerobionych kursów może dać realnie mniej niż kilka godzin poświęconych na rozwiązywanie programistycznych problemów (np. realizacja własnego projektu).

Testy predyspozycji

W internecie można znaleźć bardzo wiele tzw. „testów predyspozycji”, które mają za zadanie zweryfikować to czy nadajemy się na programistę. Osobiście podchodzę do nich sceptycznie. Dlaczego? Sam rozwiązywałem taki test trzy lata temu kiedy przebranżawiałem się i aplikowałem na bootcamp programistyczny. Wiele z pytań i problemów, które miałem do rozwiązania, wydają mi się z dzisiejszej perspektywy nieprzydatne i niezwiązane z predyspozycjami jakie powinien posiadać programista. Cześć pytań dotyczyła dostrzegania wzorów w układach klocków oraz obliczeń matematycznych, co można znaleźć np. w teście inteligencji. Oczywiście, programista powinien być człowiekiem inteligentnym, ale (na miłość boską), na co dzień w pracy programistycznej rozwiązuję jednak nieco inne problemy i nie potrzebuję do tego klocków 😉

Analityczne myślenie

Wracając do analitycznego myślenia, to na pewno jest ono kolejną – obok ciągłego rozwoju – kluczową kompetencją związaną z pracą programisty. Mam tutaj na myśli wnikliwość i skłonność rozkładania problemów na mniejsze, analizowania ich z różnych stron. Czemu więc analityczne myślenie jest tak ważne w zawodzie developera? Dlatego, że praca programisty, to tak naprawdę w 95% rozwiązywanie problemów. Czasem trudności, które zastajemy w projekcie, czasem wymagań biznesu, które komplikują nam życie, albo po prostu wyzwań technologicznych, z którymi musimy się codziennie mierzyć.

Jeśli więc macie trudności ze skupieniem się na jednym temacie przez dłuższy czas, nie potraficie wgłębić się w zagadnienie i ciężko Wam się skupić na szczegółach i dostrzegać między nimi zależności – to wniosek – że programowanie może nie być dla Was. Warto zrobić sobie rachunek sumienia pod kątem tego czy potraficie myśleć analitycznie zanim podejmiecie decyzję o wejściu w świat IT. Z drugiej strony, nie ma co też demonizować tej kompetencji, bo można się jej w pewnym stopniu nauczyć i ją wyćwiczyć. Mimo wszystko, jako, że jest jedną z kluczowych predyspozycji, bez niej, bardzo ciężko odnieść sukces w programowaniu.

Przyczyna i skutek

Jeśli chodzi o mityczne wręcz już zagadnienie czy programista powinien znać matematykę, to na pewno dziedziną, którą powinien znać jest logika. Mam tutaj na myśli jej zupełne podstawy, czyli np. rozumienie ciągłości zdarzeń, tego, że jeśli w naszym programie wystąpi zdarzenie „x”, to jego konsekwencją będzie zdarzenie „y” itd. Nie brzmi to skomplikowanie prawda? No właśnie, bo realnie, na co dzień w pracy operujemy dużą liczbą operatorów logicznych i arytmetycznych np. „if”, „else”, „while” itp. Poza tym, dodajemy, odejmujemy, dzielimy i przypisujemy wartości. Naprawdę, nie jest to trudne i wymaga bardzo podstawowej znajomości matematyki.

Zakładam, że ta właśnie kompetencja związana z logicznym i przyczynowo – skutkowym myśleniem jest predyspozycją, którą spełnia większość osób, niezależnie od wykształcenia. Warto jednak o niej nie zapominać i ćwiczyć ją na różne sposoby np. rozwiązując proste zagadki logiczne czy np. grając w różnego rodzaju gry (planszowe, komputerowe itp.). Zwłaszcza jeśli wiążecie swoją przyszłość z branżą IT.

Dokładność i sumienność

Trudno jest mi wyobrazić sobie programistę, który nie przywiązuje wagi do szczegółów, wyglądu kodu, jego jakości itp. Praca developera, to jak wspominałem, ciągła analiza i rozwiązywanie problemów, co samo w sobie już wymaga od nas dużej dokładności. Brzydki i niechlujny kod razi w oczy i jest trudny w utrzymaniu. Ba, w większości przypadków nie przejdzie code review i zostanie konstruktywnie (bądź nie) skrytykowany przez innych developerów. Nie bez kozery od programistów wymaga się konkretnego stylu pisania kodu, po to by innym pracowało się z nim przyjemniej i efektywniej.

Jeśli więc z natury jesteście chaotyczni i nie zwracacie uwagi na szczegóły (nawet tak po prostu w różnych sytuacjach życiowych), to znak, że może być Wam ciężko pracować potem z kodem, który zawsze wymaga dużej dokładności i sumienności. Warto abyście również pod tym kątem przeanalizowali swoje kompetencje.

Samoorganizacja i panowanie nad czasem

Praca programisty oprócz dokładności wymaga również umiejętności związanych z organizacją swojego czasu, miejsca oraz kultury pracy. Bardzo łatwo popaść w chaos i tracić – tak cenny w pracy programisty – czas na mało efektywne czynności. Może to sprawić, że będziecie pracować po godzinach i niepotrzebnie się wypalać.

Wyzwań jest wiele. Począwszy od środowiska programistycznego, komunikatora do pracy zespołowej, systemu kontroli wersji, terminala, klienta bazy danych, aplikacji muzycznej itd. A to wszystko na dwóch lub więcej ekranach… Nie brzmi jak sielanka? A może nią być, wszystko zależy od tego jak i czy sensownie poukładacie sobie otoczenie i środowisko, żeby nie dać się zwariować i nie pogubić.

Zwłaszcza w obecnych czasach pandemii, a co za tym idzie, powszechnej już pracy zdalnej, tego typu wyzwania organizacyjne stały się palącym problemem dla wielu firm i ich pracowników pracujących z domu. Jako, że jestem dużym fanem ułatwiania sobie życia i korzystania z możliwie najlepszych w danej sytuacji narzędzi poświęcę temu tematowi oddzielny wpis 🙂

Na ten moment warto podkreślić, że jeśli trudno Wam panować nad swoim otoczeniem, czujecie się zagubieni w kwestii organizacji swojego miejsca pracy (czy to w biurze czy to w domu), to warto popracować nad uporządkowaniem swojego otoczenia. Uwierzcie mi, że ta inwestycja zwróci się z nawiązką, a Wasza praca stanie się znacznie bardziej efektywna i przyjemna.

Kompetencje miękkie

Czy znacie jakiegoś typowego, a raczej stereotypowego programistę – człowieka nieco zaniedbanego, w powyciąganym swetrze, a co gorsza aspołecznego i niesympatycznego nerda przyklejonego do monitora? Ja na szczęście nie 😉 Wygląd to kwestia wyboru i gustu – nie podlegająca ocenie – i tym bardziej nie będąca przedmiotem tego artykułu (wybaczcie stereotypową wstawkę).

Znacznie ważniejszą kwestią są kompetencje miękkie. Cieszę się, że obecnie w coraz większym stopniu brane są one pod uwagę podczas rekrutacji kandydatów na developerów (o samych rekrutacjach też będzie oddzielny wpis). Przecież dobry programista powinien posiadać nie tylko wysokie kompetencje techniczne, ale również – i to w równie dużym stopniu – umiejętności i predyspozycje miękkie takie jak komunikatywność, otwartość na inne punkty widzenia, koleżeńskość, czy umiejętność pracy w zespole.

Praca zespołowa

Nie umiem wyobrazić sobie nawet wybitnego technicznie programisty, który nie potrafi dogadać się z przełożonym i pozostałymi członkami zespołu, w którym pracuje. W takiej sytuacji z pewnością nie pracowałby w danej firmie z byt długo, a jego referencje pozostawiałyby sporo do życzenia. Na szczęście, kompetencje miękkie bardzo łatwo zweryfikować podczas rekrutacji (np. w czasie dnia próbnego) i w porę podjąć właściwą decyzję odnośnie kandydata.

Osobiście, w codziennej pracy developerskiej, dostrzegam ogromne znaczenie umiejętności miękkich. Co więcej, w firmie gdzie pracuję otrzymuję cykliczne informacje na temat tego jak innym pracuje się ze mną. To niezwykle cenna i motywująca praktyka, która wprost przekłada się na pozytywną atmosferę w pracy, motywację i podniesienie efektywności codziennie wykonywanych zadań.

Pamiętajcie o tym, że to jakimi jesteście współpracownikami dla innych członków zespołu i to jak się komunikujecie jest nie mniej ważne jak Wasze umiejętności techniczne. Nie muszę chyba dodawać, że dużo łatwiej nadrobić zaległości techniczne (przecież ciągle się uczymy) niż braki w komunikacji i kompetencje miękkie.

Wytrwałość

Na koniec jeszcze jedna istotna kompetencja, której wagę również dostrzegam w swojej pracy developerskiej. Jest kilka łatwych sposobów na jej zweryfikowanie. Możecie np. sprawdzić jak radzicie sobie z przerabianiem kursu programistycznego. Kluczowe jest to czy udaje Wam się go dokończyć i nie poddać się mimo, że nie wszystko Wam wychodzi.

Trudno pracować wiele lat nad kodem i realizować się jako programista poddając się przy pierwszej lepszej przeciwności. W końcu praca developera to codzienna walka z trudnościami i błędami, a także ich popełnianie. Nie ma w tym nic złego. Ważne tylko, aby starać się wyciągać z nich wnioski i nie poddawać się. Mówi się, trochę żartem, że prawdziwy senior developer, to programista, który widział i rozwiązał wszystkie możliwe błędy w kodzie 🙂

Słowem podsumowania

Jak widzicie, branża IT wcale nie jest jakąś ekskluzywną enklawą, w której żyją tylko wybrańcy 🙂 Wystarczy, że posiadacie pewne konkretne kompetencje i predyspozycje, dzięki którym łatwiej będzie Wam wejść do świata IT i odnieść w nim sukces. W większości są to kompetencje możliwe do nadrobienia i tym bardziej rozwinięcia. Z kolei część z nich, jak np. wytrwałość, kompetencje miękkie czy logiczne myślenie, posiada bardzo wielu z nas. Często nawet nie zdajemy sobie sprawy, że posiadanie ich może nam bardzo pomóc w odnalezieniu się w świecie IT.

Dajcie znać i podzielcie się w komentarzu swoimi przemyśleniami na temat kompetencji i predyspozycji w zawodzie programisty. Chętnie poznam Wasze zdanie! Może jest jeszcze coś o czym zapomniałem napisać 🙂

Możecie też napisać do mnie bezpośrednio np. tutaj.

Wojciech Pilich

Autor tego bloga. PHP Developer z pisarskim zacięciem. Wyznawca czystego kodu, a zwłaszcza zasad YAGNI i KISS. Pasjonat nowych technologii, fan Gwiezdnych Wojen, a po pracy miłośnik kotów syberyjskich. Z wykształcenia humanista, z zamiłowania programista.