kiedy-junior-staje-sie-midem

Ciekawe, kiedy awansuję – zastanawia się dziś wielu początkujących programistów, gdy dostaną pierwszą pracę. Na to pytanie z reguły nie ma jednoznacznej odpowiedzi. W różnych firmach różnie wygląda ścieżka kariery developera oraz zestaw umiejętności wymaganych od juniora, mida i seniora. Widać to najlepiej w ofertach pracy.

Gdy parę tygodni temu temu zapytałam moją sieć kontaktów na Linkedin i FB, o to „kiedy junior developer staje się midem a mid przchodzi na ścieżkę seniora?” – niespodziewanie wywołałam burzliwą, a jednocześnie bardzo ciekawą dyskusję. Analiza wszystkich opinii skłoniła mnie do spisania podsumowania w ramach niniejszego artykułu.

Otóż przede wszystkm okazuje się, że nie istnieje coś takiego jak sztywne kryteria określające, jakie umiejętności powinien posiadać programista na danym etapie ścieżki zawodowej. Wynika to z różnorodności realizowanych projektów i odmiennych wymagań stawianych przez firmy swoim kandydatom. To, co jednak pewne, to fakt, że obecnie przejście przez wszystkie stopnie programistycznej kariery zajmuje zdecydowanie mniej czasu niż jeszcze 10 lat temu..

Z czego to wynika?

Głównie z niemal nieograniczonej dziś dostępności materiałów do nauki kodowania i ogólnej zmiany specyfiki programowania jako takiego. 10 lat temu wykorzystywane były tzw. języki niskiego poziomu, których gruntowne poznanie pochłaniało zdecydowanie więcej czasu, niż nauczenie się któregoś z obecnie popularnych języków wysokopoziomowych (np.  Python czy Ruby).

Skillset idealny, czyli co junior developer wiedzieć powinien?

Wśród programistów spotkamy się najczęściej z podejściem, że junior developer to osoba pracująca pod okiem starszego kolegi. O ile takie podejście wydaje się mieć sens, o tyle, gdy przyjrzymy się ofertom pracy zauważymy, że na tym początkowym etapie pracodawcy nierzadko wymagają już umiejętności kodowania na poziomie, który pozwoli na samodzielną pracę. Standardem w opisie stanowisk oczywiście nadal jest podstawowa znajomość danej technologii – taka jak wiadomo, nie wystarczy, by móc samodzielnie pracować. Wniosek jest zatem taki, że w jednym przypadku Junior to ten, który dopiero zaczyna swoją przygodę z komercyjnym programowaniem, w drugim to już osoba z praktyką zawodową (wciąż jednak na poziomie juniora).

Zatem jak widzimy – junior juniorowi nierówny. Żeby przyjąć pewien wspólny mianownik, poniżej zaproponowałam – w mojej ocenie -uniwersalny zestaw umiejętności dla zupełnie poczatkującego junior developera, który chce wejść na ścieżkę zawodową:

  • Podstawowa znajomość języka i frameworka wykorzystywanych w firmie, w którym będziemy programować;
  • Umiejętność samodzielnego wyszukiwania rozwiązań. Zwłaszcza w sytuacjach,  kiedy konsola wyrzuca od 3 godzin błąd..;
  • Znajomość podstawowych kategorii błędów bezpieczeństwa (np OWASP Top 10 dla aplikacji webowych) i sposobów zapobiegania im używając odpowiednich funkcjonalności frameworków;
  • Nastawienie na intensywny rozwój – programowanie wymaga cały czas ‚bycia na bieżąco’ ;
  • Rozwinięte kompetencje miękkie – w dzisiejszych realiach komunikatywność czy zdolność argumentowania, jest wysoce pożądana i istotna w projektach realizowanych we współpracy z kolegami z innych działów;
  • Język angielski – czyli must-have każdego kodera;

Bez względu na język w jakim programujemy oraz środowisko, w którym przyjdzie nam pracować – czy będzie to software house, czy też duża korporacja – można się spodziewać, że wymienione powyżej cechy będą kluczowe dla pracodawcy.

Kiedy junior staje się midem?

Jedna z osób komentująca moje pytanie, podsumowała krótko : „w momencie, gdy nie trzeba go „pilnować”.:) Takie podejście jest dość logiczne, w końcu, dopiero gdy opanujemy dany poziom stając się samodzielni, możemy przejść dalej. Tylko kiedy to nastąpi? W wielu firmach spotykam sie z podejściem, że poziom mida zaczyna się po 2-3 latach komercyjnego kodowania. Tu również nie ma jednak żadnej reguły – każdy pewnie zna choć jednego developera, który może się pochwalić, że awans na stanowisko seniora zajął mu raptem rok. Szybko – choć z drugiej strony wiadomo, że staż pracy nie zawsze idzie w parze ze skillami, różne osoby z różną intensywnością mogą pracować nad kodem i po roku ich umiejętności będą na zupełnie różnym poziomie.

Skupiając się na cechach, którymi odznacza się ‚regularny’ mid, można przyjąć:

  • Samodzielność w rozwiązywaniu problemów;
  • Zdolność oceny wydajności tworzonego kodu i jego modyfikacja w celu poprawy działania;
  • Pisanie przejrzystego kodu , który jest łatwo edytowalny dla innych;
  • Zdolność odnajdowania i naprawy złożonych bugów;
  • Zdolność do oceny bezpieczeństwa własnego kodu (w oparciu o obowiązujące standardy, np OWASP ASVS dla aplikacji webowych), wybór najlepszych z punktu widzenia bezpieczeństwa i wydajności komponentów i bibliotek;
  • Umiejętność konfiguracji bezpiecznego środowiska programistycznego (np zmiana domyślnych konfiguracji);
  • Zazwyczaj min. 3 letnie doświadczenie programistyczne – osoba na tym etapie ma już w swoim portfolio zrealizowane większe projekty komercyjne (indywidualne lub grupowe) ;
  • Wiedza, która pozwala na bycie wsparciem dla młodszych kolegów;
  • Umiejętność pełnej i samodzielnej konfiguracji środowiska programistycznego;

Na koniec spotkać się można też z poglądem, że developer na poziomie mida wykona te same zadania co senior, tylko trochę wolniej i być może jego kod będzie nieco mniej wydajny.

Senior – ten, który sprawdza kod młodszych kolegów

Senior developer to szczebel w karierze, do którego dąży niemal każdy programista. Zdefiniowanie uniwersalnego zestawu kryteriów i funkcji seniora przysparza jednak najwięcej kłopotów. Patrząc chociażby na rekrutacje prowadzone na platformie IT-Leaders.pl, widać, że są takie, które wymagają od seniora 4-5 lat programistycznego doświadczenia, jak i te, w których pracodawca szuka kandydata z 8-letnim stażem.

Mimo trudności w jednoznacznym zdefiniowaniu kim jest senior developer, poniżej zawarłam zespół cech, które moim zdaniem powinny określać osobę wpisującą się w profil seniorski:

  • Dobre zrozumienie biznesu i zagadnień bieznesowych, nad którymi pracujemy;
  • Zaawansowana znajomość technologii wykorzystywanych w procesie rozwoju oprogramowania;
  • Umiejętność projektowania rozwiązań i modyfikowania już istniejących;
  • Zdolność naprawy skomplikowanych błędów w kodzie oprogramowania;
  • Ocena bezpieczeństwa kompletnych rozwiązań, modyfikacja istniejących celem podniesienia ich bezpieczeństwa, wskazywanie błędów bezpieczeństwa w cudzym kodzie jak i proponowanie najlepszych sposobów ich usunięcia, przygotowywanie wewnętrznych standardów tworzenia bezpiecznego oprogramowania;
  • Sprawna komunikacja, zdolność argumentowania i umiejętność przekazywania wiedzy młodszym stażem kolegom;

Poza wymienionymi oczywiście zawsze ‚mile widziane’ u seniora będą zdolności managerskie czy zapewnienie płynnej organizacji i podziału pracy przy projekcie. Te umiejętności umożliwią mu sprawną współpracę w zespole. Z kolei komunikatywność (która przyda się oczywiście na każdym etapie kariery) u seniora zyskuje szczególne znaczenie, co wynika z faktu, iż często uczestniczy on w projektach interdyscyplinarnych, niejednokrotnie komunikuje się bezpośrednio z klientem i bierze udział w prezentacjach oprogramowania. Bez zdolności sprawnego komunikowania i słuchania rozmówcy, projekt nie będzie miał szans powodzenia.

Czy zatem osoba z 2-3 letnim stażem może spełniać kryteria wymagane na stanowisku starszego programisty? Teoretycznie tak.

Senior developer tylko teoretycznie…

Przypadki błyskotliwej kariery deweloperów z 3-letnim stażem, którzy zarządzają zespołami programistów, dzisiaj już nie są mitem. W dobie olbrzymiej dostępności materiałów do nauki kodowania jest to możliwe. Jednak 26-letni programista na stanowisku senior developera to raczej wciąż rzadkość, mimo wszystko bardziej zaawansowany wiek przekłada się na większe doświadczenie, umiejętności i co szczególnie istotne dobre zrozumienie biznesu, które osobiście postrzegam jako klucz do rozróżnienia omówionych poziomów.

Czy przedstawione cechy można rozwinąć do dodatkowe? Zachęcam do pozostawienia komentarzy.:)

Ps. Specjalne podziękowania dla Pawła Mality , Security Architect z G2A.com za opracowanie i propozycję opisu wymagań w zakresie bezpieczeństwa kodu.

Autor:

Barbara Kowalewska | Growth Manager & Co-founder IT-Leaders