To bez znaczenia czy dopiero myślisz o tym aby zostać programistą, czy już nim jesteś, prędzej czy później dojdziesz do momentu wyboru ścieżki Twojej kariery. Jak możesz sobie wyobrazić opcji jest wiele i każda z nich jest ciekawa, ma wiele zalet i wad.

Podczas gdy ostatecznie to Ty sam będziesz musiał wybrać, pomyślałem że w ramach tego wydania Przeprogramowanych, pokażę Ci jakie masz możliwości. Odpowiednie zrozumienie każdej z tych ścieżek, zwiększy Twoją szansę na podjęcie właściwej decyzji i dopasowanie Twoich mocnych stron do jednej z nich.

Zanim zaczniemy, musisz zrozumieć, że programowanie to bardzo szeroka dziedzina, która wkracza praktycznie w każdy obszar naszego życia. Od codziennego korzystania z Internetu, przez urządzenia domowe, samochody, medycynę, wojsko czy loty w kosmos. Za każdym z tych obszarów, w coraz większym stopniu stoi jakieś oprogramowanie. A chyba nie muszę podkreślać, że istnieje różnica pomiędzy kodowaniem strony www a programowaniem sztucznej inteligencji kontrolującej autonomiczny samochód.

Każda z tych dziedzin wymaga innego rodzaju kompetencji, wiedzy i daje różne doświadczenia. Jedna daje duży margines błędu a w przypadku innej, błędy narażają ludzkie życie. Jedna jest monotonna a druga zapewnia wiele emocji ale jednocześnie wymaga od nas bycia kreatywnym.

Ostatecznie najważniejsze jest to abyś wybrał ścieżkę, która pasuje do Ciebie najbardziej. Z jednej strony potrzebujesz doskonale zrozumieć siebie: swoje słabe i mocne strony a z drugiej, możliwości jakie przed Tobą stoją. Zła wiadomość jest taka, że opcji jest tak dużo, że nie będę miał możliwości przedstawić Ci ich wszystkich. Dlatego pogrupowałem ścieżki kariery programisty na cztery ogólne grupy, które pomogą Ci uchwycić odpowiednią perspektywę. Kończąc wstęp, podkreślam jeszcze, że tym razem skupiamy się wyłącznie na ścieżkach specjalisty. Kariera programisty może rozwinąć się w kierunku biznesu, trenera, konsultanta czy własnego biznesu. Ale o tym powiemy sobie może innym razem.

Front-end, Back-end, Dev-ops czy Full-stack?

Ogólnie rzecz biorąc, programistów możemy podzielić na cztery grupy: Ogólnie rzecz biorąc, programistów możemy podzielić na cztery grupy:

  • Front-end developerów*, stojących najbliżej użytkowników. To oni odpowiadają za interfejs i połączenie go z back-endem.
  • Back-end developerzy* dbają “o to, czego nie widać”, implementując logikę biznesową po stronie serwera.
  • Dev-ops’i* odpowiadają za część związaną z funkcjonowaniem infrastruktury wewnątrz których działają aplikacje.
  • Full-stack developerzy* to Ci, którzy próbują ogarnąć wszystko, co Ci trzej wyżej.

Powyższy podział bezpośrednio wynika z tego jak wygląda struktura aplikacji i środowisko w jakiej działa. Zatem wyróżniamy:

  • Interfejs użytkownika (front-end)
  • Logikę biznesową i bazy danych (back-end)
  • Infrastrukturę (dev-ops)

Każda z tych ścieżek wymaga innego zestawu kompetencji czy nawet cech charakteru. Jako front-end musisz być bardziej wyczulony na detale a jako back-end czy dev-ops, posiadać zdecydowanie bardziej analityczny umysł. Z kolei jeżeli wybierzesz ścieżkę full-stack developera, musisz posiadać bardzo wysokie zdolności szybkiego przyswajania wiedzy i dobrze się czuć, nieustannie zmieniając kontekst. Przy obecnym rozwoju technologii, coraz częściej mówi się o tym, że rola full-stack developera ma coraz mniej sensu (osobiście nie mogę się z tym zgodzić ale to temat na inny artykuł).

Przyjrzyjmy się teraz bliżej każdej z tych ścieżek.

Front-end Developer

Front-end to obszar, który w ostatnich latach bardzo dynamicznie się rozwija. Żarty o nowych framework’ach JavaScriptu już nie śmieszą, bo bariera wejścia w temat, stała się naprawdę bardzo wysoka. Coraz trudniej nadążyć za nowościami, nawet osobom które poważnie traktują rozwój.

Rola front-endu polega na przeniesieniu pracy designera na działającą aplikację oraz połączenie jej z częścią aplikacji po stronie serwera.

Przykładowo jeżeli designer projektuje formularz kontaktowy, rolą front-end developera jest to, aby można było go wypełnić, a zapisane dane trafiły na serwer, gdzie back-end developerzy dbają o to, aby wysłać e-mail z powiadomieniem i zapisać wymagane dane w bazie danych.

Kodowanie określonych funkcji to tylko część z obowiązków front-end developera. Podczas gdy projektanci doświadczeń użytkownika (UX designer) je … projektują, tak to rolą front-end developera jest ich odpowiednie odzwierciedlenie i dostosowanie do okoliczności (urządzenie, rozmiar ekranu, prędkość internetu czy jego brak itp.).

Kiedyś front-end developerzy nie zawsze byli traktowani poważnie, głównie ze względu na fakt, że posługiwali się praktycznie wyłącznie HTMLem i CSSem z lekkiem dodatkiem JavaScriptu, który wówczas miał niewiele wspólnego z “prawdziwym programowaniem. Obecnie wiele się zmieniło i coraz częściej mówimy nawet o podziale front-endu na front-end i middle-end. Stało się to przede wszystkim za sprawą natywnych aplikacji oraz bardzo szybkiego rozwoju JavaScriptu.

Ścieżka front-end developera w mojej opinii przeznaczona jest dla osób, które posiadają wysoki zmysł estetyczny i zwracają uwagę na detale wizualne. Odpowiednie odwzorowanie projektu i empatia w stosunku do użytkowników aplikacji, często są bardzo kluczowe w tej roli.

Narzędzia wykorzystywane przez front-end developera to nadal przede wszystkim HTML, CSS i JavaScript. Przy czym w tej chwili wszystkie te technologie są ze sobą mocno powiązane za pośrednictwem komponentów (kiedyś oddzielnie pisaliśmy kod strony w HTML, CSS i JavaScript, teraz tworzymy tzw. komponenty czyli małe fragmenty aplikacji, które zawierają w sobie wszystkie te technologie). To sprawia, że coraz “aby zacząć” musimy znać przynajmniej w dobrym stopniu HTML, CSS i przynajmniej podstawowym jakiś framework (np. React, Vue lub Angular).

Back-end Developer

Back-end z kolei od samego początku kojarzony jest z pełnoprawnym programowaniem i to właśnie tu zwykle działo się najwięcej. Obecnie tutaj również się pozmieniało, ponieważ nacisk rozwoju aplikacji przeniósł się z części serwerową (back-end) na część klienta (front-end). Rola back-endu sprowadza się do udostępnienia odpowiedniego API, za pośrednictwem którego komunikuje się z front-endową częścią aplikacji.

Zatem rolą back-endu obecnie jest utworzenie odpowiedniego API i zarządzanie bazą danych. Wspomniana wyżej zmiana nacisku rozwoju aplikacji, nie sprawia jednak, że część back-endowa stała się prosta czy jej znaczenie jest niższe. Pojawiły się tu nowe wyzwania dotyczące chociażby projektowania odpowiedniego API i zarządzenie strukturą w taki sposób, aby była dostosowana do obsługi aplikacji front-endowych, działających często na wielu różnych platformach.

Bez wątpienia w przypadku back-end developerów, wymagany zestaw kompetencji jest nieco inny niż w przypadku front-end developerów. Praca z danymi i projektowanie architektury, wymaga znacznie bardziej analitycznego umysłu niż w przypadku front-endu (chociaż zaznaczam, że w ostatnich 2-4 latach, sytuacja na froncie się zmienia).

Narzędzia wykorzystywane przez back-end developera to przede wszystkim technologie takie jak Node.js, Java, Python, .NET czy PHP. Oprócz tego każdy back-end developer musi świetnie orientować się we wszystkim, co dzieje się po stronie serwera. Mówimy tu m.in. o obsłudze linuxa, baz danych (mySQL / mongoDB), czy silników wyszukiwania (np. ElasticSearch / Solr)

Podsumowując, jeżeli bliżej Ci do designu ale chcesz programować, prawdopodobnie front-end będzie Ci bliższy. Z kolei jeżeli zawsze bliżej było Ci do tabelek, wykresów i analiz, prawdopodobnie w back-endzie bardziej się odnajdziesz.

Dev-ops

Ten obszar mi osobiście znany jest najmniej. W prostych słowach, dev-ops dba o to, aby aplikacja przygotowana przez front-end i back-end developerów, miała odpowiednie środowisko i infrastrukturę do tego, aby działać. Tutaj do gry wchodzi zarządzanie serwerami, automatyzacją ich aktualizacji oraz bezpieczeństwem.

Biorąc pod uwagę średnie zarobki, jest to najlepiej opłacana ścieżka spośród wszystkich, które do tej pory omówiliśmy. Wynika to przede wszystkim z faktu, że dev-ops musi posiadać bardzo solidne zrozumienie pozostałych obszarów. W sytuacji gdy aplikacja przestaje działać, na pierwszej “linii ognia” jest właśnie dev-ops w którego odpowiedzialności leży dbanie o to, aby takie sytuacje nie miały miejsca.

Warto zaznaczyć, że dev-opsi również posługują się językami programowania takimi jak Python czy Node.js. Natomiast ich największa kompetencja leży w doskonałym zrozumieniu systemów operacyjnych, serwerów i funkcjonowania sieci.

Ścieżka dev-opsa najczęściej łączy się z programowaniem po stronie back-endu. Spośród moich znajomych, którzy obecnie pracują w tej roli, praktycznie każdy wcześniej pracował jako back-end developer.

Full-stack Developer

No i doszliśmy do full-stack developera, który w mniejszym lub większym stopniu łączy wszystkie powyższe role. Już samego ich opisu łatwo można wywnioskować, że nie mówimy tutaj o osobie która “wie wszystko”. Chodzi tutaj o to aby wiedzieć wystarczająco wiele aby skutecznie poruszać się po różnych obszarach. Ze względu na bardzo szybki rozwój technologii, coraz częściej mówi się, że taka rola ma coraz mniej sensu i zdecydowanie lepszym scenariuszem, jest wybór konkretnej ścieżki i specjalizacja.

W mojej opinii jednak, pozostawanie otwartym na różne obszary jest możliwe i często bardzo przydatne. Oczywiście wymaga to odpowiedniego zestawu cech charakteru i niesamowitego tempa nauki. Rola full-stack developera świetnie sprawdza się w środowisku startupowym oraz w sytuacji gdy chcemy samodzielnie zaprojektować aplikację wokół której zbudujemy nasz przyszły biznes.

Bez wątpienia ścieżka full-stack developera jest mi najbliższa, ponieważ sam ją wybrałem. Teraz coraz mocniej przekształca się ona w rolę biznesową, jednak doświadczenia które mam pozwalają mi świetnie odnaleźć się w różnych sytuacjach i co ważne - w pełni rozumieć obowiązki osób z którymi pracuję.

I fakt, pozostawanie na bieżąco z wszystkimi nowościami jest niesamowicie trudne i wymaga coraz więcej uwagi i lepszych procesów nauki. Natomiast mi osobiście nie zależy na tym, aby specjalizować się w konkretnej dziedzinie. Uważam że brak specjalizacji, również może być specjalizacją.

Jakieś sugestie?

Nakreślone przeze mnie ścieżki to i tak dopiero początek. Każda z nich składa się z jeszcze mniejszych i tam również należy podejmować decyzje.

Ostatecznie jednak sądzę, że to na jaką rolę się zdecydujemy, powinno współgrać z tym kim jesteśmy - naszymi cechami charakteru, wartościami i celami, które chcemy osiągnąć.

Sugeruję abyś nie kierował się np. zarobkami podczas wybierania swojej ścieżki. Według statystyk, zarobki programistów na każdej z nich są zbliżone. Szkoda byłoby abyś nie miał możliwości wykorzystywania swoich mocnych stron dla większej o kilka procent pensji.

Istnieje szansa, że już teraz podświadomie wybrałeś swoją ścieżkę. Zastanów się nad tym co ostatnio robiłeś, jakie artykuły czy jakie aktywności związane z programowaniem przyniosły Ci więcej frajdy. A może cieszyło Cię wszystko i rola full-stack developera brzmi dla Ciebie najlepiej? Ja nie wiem. To Ty musisz podjąć decyzję.

Jeżeli po przeczytaniu tego artykułu nadal masz wątpliwości, proponuję abyś spróbował każdej z tych ścieżek. Kup książkę, kurs czy porozmawiaj z osobami, które pracują na określonych stanowiskach i zapytaj. Prędzej czy później znajdziesz odpowiedź.

I na koniec powiem tylko tyle: wiem że nie jest łatwo wybrać ale to naprawdę bardzo ważne.

Powodzenia!