laptop na ekranie którego wyświetla się kod programistyczny

Jakie umiejętności musi mieć full stack developer, by dobrze zarabiać w 2022 roku?

Full stack developer przez niektórych uważany jest za wszechstronnego komandosa, który poza kodowaniem powinien też znać podstawy mechaniki kwantowej, budowlanki, i mandaryńskiego. Od full stacka wymaga się wiele, ale nie przesadzajmy.

Paweł Kulig

Z pewnością są umiejętności, bez których trudno myśleć o byciu full stackiem. Są i takie, bez których można sobie poradzić, ale ich posiadanie może stanowić istotny atut. Dotyczy to oczywiście zarówno tych twardych, jak i miękkich kompetencji. W tym artykule opiszę więc je wszystkie wraz z przykładami konkretnych technologii, oraz wyjaśnieniem dlaczego odgrywają mniej lub bardziej istotną rolę.

Najważniejsze umiejętności twarde dla full-stack developera

Wymienione poniżej umiejętności uważam za absolutnie niezbędne. Jest ich stosunkowo niewiele, biorąc pod uwagę całkowitą liczbę podpunktów w artykule, natomiast mają one zdecydowanie największe znaczenie dla nowoczesnego full stack developera. 

Język i framework backendowy 

Przykłady: Java (Spring Boot), C# (ASP.NET), JavaScript (Express.js), PHP (Laravel)

Dla tych, którzy dopiero zaczynają przygodę z programowaniem, backend będzie z pewnością trudniejszą stroną do początkowego przyswojenia, jednak znajomość takich języków stanowi doskonały fundament do dalszej nauki. Jeśli celem jest bycie full stackiem, to właśnie backend brzmi jak najlepszy punkt startowy. Co do konkretnych języków – wśród najpopularniejszych obecnie języków można wymienić Javę, C#, JavaScript oraz PHP. Ich dobra znajomość wystarczy, by zapełnić skrzynkę ofertami. 

Język frontendowy + HTML i CSS

Przykłady: JavaScript + nowoczesny framework (React.js, Angular, Vue.js)

Jeśli ktokolwiek chce myśleć o pracy jako full stack developer, znajomość JavaScriptu i któregoś z nowoczesnych frameworków frontendowych to absolutny must have. Według ankiety Stack Overflow jest to najczęściej używany język na świecie i korzysta z niego 63% programistów (na 83 tys. badanych). Język ten używany jest w każdym projekcie webowym i ma olbrzymią społeczność twórców, którzy stale opracowują nowe wtyczki i biblioteki. Co najważniejsze, nic nie zapowiada, by miał stracić na popularności. To samo dotyczy znajomości HTMLa i CSSa, która idzie z JavaScriptem w parze i jest nieodzowna dla każdego frontendowca. 

System kontroli wersji

Przykłady: Git + zdalne repozytorium, np. GitHub lub GitLab 

W tej kwestii nie ma właściwie żadnego wyboru. Aby móc pracować jako full-stack (i w ogóle jako programista), znajomość Gita jest obowiązkowa. Poza tym, warto poznać jedną z metodyk pracy z Gitem, jak np. Gitflow. Korzystają z niej praktycznie wszystkie software house’y i inne firmy, które tworzą oprogramowanie. Można śmiało powiedzieć, że znaczna część programistów swój dzień pracy zaczyna od zajrzenia do właśnie do Gita. Pozwala on przywracać poprzednie wersje, śledzić wszelkie zmiany, które wprowadza się do kodu, i sprawdzać postępy innych członków zespołu.

Relacyjne bazy danych

Przykłady: SQL + jedna z baz danych: PostgreSQL, MariaDB, MySQL (open-source) lub Oracle, SQL Server (komercyjne)

Relacyjne bazy danych stanowią fundament zdecydowanej większości komercyjnych aplikacji webowych. Podobnie jak w przypadku JavaScriptu, tak tutaj możemy się spodziewać niezmiennej stabilności. Język do tworzenia i obsługi relacyjnych baz, czyli SQL, jest używany i rozwijany już od wielu dekad. 

Co prawda, mogą zdarzyć się sytuacje, kiedy dane role w zespole developerów nie wymagają pracy nad bazami danych, ale ich znajomość zawsze daje bardzo istotną przewagę. Dzięki temu rozumiemy całość systemów i relacji pomiędzy ich elementami.

Jeśli więc myślisz poważnie o byciu full stackiem, postaraj się je poznać. 

Umiejętności twarde, które warto mieć

Poniższa lista dotyczy umiejętności, które mogą stanowić kartę atutową w przypadku wielu rekrutacji, jednak i bez nich żaden programista nie powinien mieć problemów ze znalezieniem pracy. Posortowałem je od najbardziej do najmniej istotnych dla nowoczesnego developera.

Metodyki zarządzania projektami – te agile’owe (Scrum lub Kanban) i te tradycyjne (waterfall)

Pomimo tego, że metodyki zarządzania projektami, takie jak Scrum, Kanban, czy waterfall, są wykorzystywane w niemal każdej firmie software’owej, zdecydowałem się wrzucić je w kategorię nice to have z dwóch powodów: 

  1. Dla początkujących programistów brak znajomości tych metodyk nie powinien stać na drodze do znalezienia pracy. Opanowanie ich jest czasochłonne, więc firmy nie zwracają szczególnej uwagi na ten aspekt podczas zatrudniania juniorów. 
  2. Ci doświadczeni z kolei w 99% przypadków mieli już z nimi do czynienia.

Framework do testowania

Przykłady: w zależności od technologii, na przykład JUnit, Enzyme, Jest

ZOBACZ TEŻ:  PHP podstawy – kursy, tutoriale online – rekomendacje

Korzystanie z narzędzi do automatycznego testowania kodu jest bardzo powszechne wśród firm zajmujących się oprogramowaniem. Rozumienie tej procedury, czy samego pisania testów automatycznych może być istotnym atutem.

Konteneryzacja

Przykłady: Docker

Konteneryzacja oznacza zamykanie aplikacji razem z jej środowiskiem w jednostce zwanej kontenerem. Pozwala to na jej swobodne przenoszenie i uruchamianie na różnych maszynach i systemach operacyjnych (z dodatkowym oprogramowaniem). Zupełnie jak logistyczny standard wielkości i zasad transportu kontenerów na statkach (stąd nazwa), jest to ogólnie przyjęta metoda, więc zdecydowanie warto się z nią zapoznać. 

Podstawy protokołów sieciowych i sieci komputerowych

Przykłady: HTTP, REST, infrastruktura klucza publicznego

Prosta relacja – większość produktów, które się tworzy opiera się na protokole HTTP i kilku innych w zdecydowanie mniejszym stopniu. Można z nich korzystać przez lata bez głębszego pojęcia jak działają, ale w pewnym sensie to one pozwalają istnieć oprogramowaniu, które tworzymy. Poznanie ich jest kolejnym elementem w zrozumieniu całości projektów, nad którymi się pracuje. 

Podstawy technologii chmurowych

Przykłady: AWS, Azure, Google Cloud

Istotne w tym przypadku jest rozróżnienie na Infrastructure as a Service i Platform as a Service. Podział polega na tym, że w pierwszym przypadku mówimy o wynajmowaniu maszyn wirtualnych, które dostarczają moc obliczeniową, a w drugim platformę do wdrażania aplikacji opartą na chmurze. 

Systemy Continuous Integration

Przykłady: Jenkins, Travis CI, GitHub Actions, GitLab CI (te trzy ostatnie mają darmowe minuty)

Systemy te umożliwiają stałą kontrolę jakości kodu, zautomatyzowane testowanie i integrację zmian. Rozwiązanie to jest raczej niespotykane w małych projektach i podczas nauki programowania, więc najczęściej poznajemy je podczas pracy w agencji lub większej firmie. Nie mniej jednak, ich znajomość może okazać się bardzo przydatna i wartościowa. Aby je poznać, można skorzystać z ostatnich przykładów, gdyż mają darmowe pakiety.

Bazy danych NoSQL (Not Only SQL)

Przykłady: MongoDB, ElasticSearch, Redis

Nierelacyjne bazy danych są rzadziej spotykane na rynku niż relacyjne i służą do czegoś nieco innego, ale wciąż wiele firm z nich korzysta. Koncepcyjnie są prostsze niż bazy relacyjne, więc nauczenie się podstaw potrwa krócej. Wciąż jednak warto wiedzieć, że istnieją.

Tworzenie dokumentacji

Umiejętność pisania technicznego czy tworzenia dokumentacji to coś, co raczej nigdy nie jest wymagane od początkujących developerów. Jeśli jednak chce uchodzić się za zaawansowanego full stacka, wypada te skille posiadać. 

Podstawy UX/UI

Rozumienie najprostszych reguł, które rządzą UX/UI ułatwia komunikację, zrozumienie wytycznych, i role konkretnych elementów w całej układance. Nie jest to konieczne, ale może ułatwić pracę, a czasem nawet pozwoli zabłysnąć trafnym spostrzeżeniem lub poprawką. 

Jakie umiejętności miękkie powinien mieć full stack?

Posiadanie wielu umiejętności technicznych otwiera mnóstwo drzwi w świecie software developmentu, ale często to te miękkie atrybuty decydują o zdobyciu stanowiska. Nowoczesny developer coraz częściej musi wychodzić poza geometryczne ramy monitora 16:9 i wykazywać się w inny sposób. Co zatem warto potrafić pod tym względem?

Uważne słuchanie i efektywne komunikowanie

Bycie aktywnym uczestnikiem całego procesu pozwala na znacznie szybsze rozwiązywanie problemów i domykanie zadań. Nie jest to możliwe bez umiejętności sprawnej komunikacji, a przede wszystkim chęci słuchania i dzielenia się własnymi przemyśleniami. Maksymalna płynność w takich procesach ma wymierny wpływ na sprawne tworzenie kodu. 

Dotyczy to nie tylko pracy zespołowej. Programiści coraz częściej mają bezpośredni kontakt z osobami po stronie klienta, nawet w postaci prezentacji dla większej liczby osób. Doświadczenie w wystąpieniach publicznych może być więc bardzo istotnym atutem w niektórych rekrutacjach. 

Przystosowanie do zmiennych warunków

Praca w software house’ach oznacza często konieczność szybkiej zmiany projektu, którym się zajmuje. Umiejętność adaptacji, szybkiego przyswajania wiedzy, czy nawet nauki nowej technologii to ważne atuty programisty i olbrzymia wartość dla każdej agencji. 

Zrozumienie potrzeb biznesowych

Pisanie kodu zawsze przebiega sprawniej, gdy się zna jego cele i znaczenie poszczególnych elementów. Umiejętność zrozumienia biznesu klienta często pozwala też na identyfikowanie potencjalnych ryzyk lub błędów strategicznych. Dzięki szerokiej wiedzy i pracy przy wielu projektach, zaawansowani developerzy często stają się dzięki temu doskonałymi konsultantami biznesowymi, którzy nie tylko tworzą kod, ale czynią produkty realnie lepszymi. Dlatego często w procesie rekrutacji zaangażowany jest klient końcowy software house’u, któremu zależy na programistach znających jego branżę.  

Współpraca

Doskonała znajomość wszelkich narzędzi do pracy zespołowej nie czyni nas jeszcze dobrymi team playerami. To dopiero empatia, słuchanie, i rozumienie potrzeb współpracowników tworzy dobrą atmosferę, a w takiej atmosferze powstaje najlepszy kod. 

Last but not least

Ostatnia umiejętność, o której chciałbym powiedzieć zaburzy piramidalny porządek artykułu, gdyż jest absolutnie najważniejsza – dobry angielski w mowie i piśmie.

Brak jego znajomości zamyka olbrzymią liczbę możliwości w świecie software developmentu nie tylko ze względów komunikacyjnych, ale i edukacyjnych. Poza samymi językami programowania, olbrzymia część poradników, szkoleń, czy przydatnych forów dostępna jest tylko po angielsku. Brak znajomości języka oznacza więc brak rozwoju. Od tego więc zawsze należy zacząć. 

A ja na tym skończę. Dzięki za uwagę!

teleturniej programista100k

Zdjęcie główne artykułu pochodzi z unsplash.com.

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Ratowanie tonącego projektu. Najgorszy jest czwarty poziom