Kiedy w 2009 roku myślałem o pierwszym programistycznym etacie „na topie” było kodowanie aplikacji webowych. Był to akurat czas kiedy internet się rozpędzał i coraz bardziej sensowne stawało się wrzucanie aplikacji gdzieś na serwer i udostępnianie ich (poprzez przeglądarkę) wielu użytkownikom jednocześnie. Zdecydowałem się pójść wtedy „z duchem czasu” (oraz potrzebą rynku) i cały czas w tym siedzę.

W tamtym momencie nie miałem zbyt dużego wyboru (przynajmniej na lokalnym rynku). Programowanie gier, które jest marzeniem większości nastolatków działo się raczej w dużych miastach, aplikacje desktopowe stawały się passé ;), a poza tym to nie wiedziałem, co więcej mogę robić 😀 No może jeszcze słyszałem o systemach wbudowanych (za sprawą oddziału firmy Alcatel-Lucent w sąsiedniej Bydgoszczy).

Ty dzisiaj, możesz być kimkolwiek chcesz! I nie jest to tylko szumne hasło. Świat przez te kilka lat poszedł tak mocno do przodu, że programowanie „rozszczepiło się” i podzieliło na specjalizacje. Kiedyś byłeś programistą, a dziś jesteś… no właśnie kim? To może po kolei 🙂

Mainframe developer

Dawno, dawno temu, w czasach których możesz nie pamiętać, nie było komputerów domowych w podobnej formie do tych obecnych. Komputery służyły tylko do „zadań specjalnych”, a o pojawieniu się ich w domach można przeczytać choćby w biografii Steve’a Jobsa. Mimo tego, że dzisiaj komputery spotykamy w znacznej większości gospodarstw domowych, to maszyny klasy mainframe (te do zadań specjalnych) nadal mają się bardzo dobrze i nadal poszukiwani są specjaliści w ich oprogramowaniu.

„Backend” developer

Obecnie backend developer kojarzony jest często z tym gościem, który tworzy tę część aplikacji webowej, której nie widzi jej użytkownik. I to jest całkiem słuszne skojarzenie. Na drugim końcu znajduje się jakaś aplikacja widoczna w przeglądarce, która komunikuje się z tymże backendem i wszystko ładnie śmiga. Pamiętaj jednak, że to co widzi użytkownik w przeglądarce nie jest jedynym klientem, który może komunikować się z oprogramowaniem znajdującym się na serwerze. Równie dobrze może z nim rozmawiać… inna serwerowa aplikacja lub klient dostępny tylko z wiersza poleceń.

Chodzi mi o to, że w głębokich czeluściach serwerów dzieje się znacznie więcej niż oczy użytkownika końcowego widzą, a jego umysł może ogarnąć 🙂 I to właśnie w czeluściach backendu jest dużo różnorodnej pracy do zrobienia. Siedzą tu choćby wielkie systemy finansowe, które pilnują spójności naszych kont bankowych, czy systemy związane z sieciami energetycznymi doprowadzającymi prąd do naszych domów. Jest tego znacznie więcej, ale ja chciałbym w tym miejscu zaznaczyć tylko tyle, że pojęcie „backend” nie jest związane wyłącznie z fragmentem aplikacji webowej.

Cykl artykułów "Vademecum Juniora"

Ten wpis jest częścią cyklu, w ramach którego opisuję moje doświadczenia i spostrzeżenia na temat programistycznego rzemiosła. Cykl jest dedykowany osobom rozpoczynającym swoją przygodę z zawodowym programowaniem lub planują taki krok w przyszłości.

Artykuły składające się na Vademecum Juniora zawierają różne porady, wskazówki i przykłady z pracy jako programista. Nie są one ani uporządkowane chronologicznie, ani mocno ze sobą powiązane. Możesz je więc czytać niezależnie od siebie i w dowolnej kolejności. Polecam jednak zapoznać się z treścią wszystkich wpisów, gdyż wierzę, że z każdego możesz dowiedzieć się czegoś wartościowego.

Embedded developer

Programista systemów wbudowanych (ang. embedded system) to stanowisko sięgające pamięcią początków programu Apollo 🙂 Jeżeli lubisz działać bliżej hardware’u (aka. krzemu, aka. metalu) to to może być zadanie dla Ciebie. Nie miałem zbyt dużo do czynienia z tego typu programowaniem, ale obstawiam, że jest ono bardziej wymagające od programowania backendowego. Dlaczego? Bo o ile do serwera backendowego w krytycznych momentach można dodać więcej RAMu, czy dodatkowy procesor, to jako embedded developer jesteś zamknięty w obrębie konkretnego kawałka hardware’u i walczysz o każdy bit 😉

Internet of Things (IoT) developer

Internet rzeczy (internet przedmiotów, czy jak to tam jeszcze zwą) to termin spopularyzowany na szeroką skalę dosłownie kilka lat temu. Generalnie jest to idea połączenia każdego urządzenia, mogącego gromadzić jakiekolwiek dane w globalną sieć.

Wspominam o tym właśnie w tym miejscu, bo programowanie tego typu urządzeń jest „naturalnym potomkiem” programowania systemów wbudowanych oraz gwałtownego rozwoju technologii wokół internetu i może być ciekawą alternatywą lub rozszerzeniem dla embedded developera.

Desktop developer

Chociaż rozwój internetu pociągnął za sobą także migrację dużej części software’u gdzieś w chmury i powstanie oprogramowania w modelach typu Platform as a Service, to nie możemy zapominać, że stare dobre komputery stacjonarne oraz laptopy nadal istnieją i nadal możemy tworzyć oprogramowanie uruchamiane lokalnie bezpośrednio na nich. Zaczynając od tworzenia całych systemów operacyjnych, a kończąc na mniejszych lub większych programach czy skryptach. Ten rynek cały czas istnieje, chociaż ciężko znaleźć większy kawałek oprogramowania, który nie komunikowałby się w ogóle z internetem (chociażby po to, żeby automatycznie się zaktualizować).

Game developer (gamedev)

Tak jak wspomniałem na początku, programowanie gier jest prawdopodobnie pierwszą rzeczą, o której myślą najmłodsi adepci zafascynowani programowaniem. I w sumie mnie to nie dziwi, bo granie w gry komputerowe jest jednym z pierwszych doświadczeń z jakim ma się styczność siadając przed komputerem. Branża gier jest praktycznie tak stara jak same pecety i choć dzisiaj zawędrowała na wiele innych urządzeń, to na dobre rozkręciła się na wspomnianym chwilę wcześniej desktopie.

Wysokobudżetowy gamedev jest (z tego co słyszałem) bardzo wymagający i specyficzny. I nie chodzi tu nawet o same umiejętności, ale o konieczność poświęcenia momentami znacznie większej ilości czasu niż etatowe 40 godzin w tygodniu. Powodem są często oczekiwania inwestorów oraz zniecierpliwionych graczy.

Niezależnie od tego, czy chcesz zostać programistą gier, czy nie, to polecam wysłuchać jeden z najlepszych (IMHO) odcinków podcastu DevTalk, w którym Maciej Aniserowicz rozmawiał z Przemysławem Czatrowskim, który pracował jako programista gry Wiedźmin:

DevTalk#17 – O gamedev z Przemysławem Czatrowskim

Dzisiaj gamedev jest znacznie bardziej przystępny niż kilka lat temu. Praca nad wysokobudżetowymi grami nie jest bowiem jedyną drogą. Dostępność zaawansowanych, ale prostych w oprogramowaniu silników gier (np. Unreal Engine, Unity, libGDX) przyczyniła się do gwałtownego wzrostu popularności produkcji typu indie games. Dziś każdy „garażowy” programista może zostać producentem gier 😀

Jeśli interesuje Cię temat gier niezależnych, to zachęcam do przyjrzenia się YouTube’owemu cyklowi Twórcy Niezależni prowadzonemu przez Mateusza Kupilasa – jest od kogo brać przykład:

Web developer

Doszliśmy do drogi, którą wybrałem ja – programista aplikacji internetowych (webowych). „Boom” rozpoczął się kilka lat temu (wraz z rozpędzającym się internetem) i trwa do dziś, napędzany m.in. wszechobecnym przechodzeniem do chmury.

Czym zajmuję się taki programista? Duża część osób (szczególnie spoza branży) myśli, że robieniem stron internetowych. Kropka. I jest to po części prawda, ponieważ web development jest związany również z tym. Jednak słowem-kluczem są tu „aplikacje”. Aplikacje różnią się od stron… ciężarem 🙂 O ile strony przeznaczone są po prostu do wyświetlania treści, to pod maską aplikacji internetowych dzieje się dużo, dużo więcej.

Kiedy ja rozpoczynałem swoją przygodę jako Java Web Developer nie istniało jeszcze tak wyraźne odseparowanie backendu i frontendu. Frontend również starano się robić w tym co dawała Java, czyli np. w JSP lub w najlepszym przypadku w jakimś lżejszym silniku szablonów (np. FreeMarker). Dopiero rozwój technologii, okiełzanie i ucywilizowanie JavaScriptu oraz spopularyzowanie REST-a i JSON-a przyczyniło się do rozłamu i pokazania, że być może istnieją lepsze rozwiązania dla frontendu.

Wspomniany rozłam spowodował powstanie pod-specjalizacji. Tak narodził się:

  • backend web developer, który siedzi w piwnicy i zajmuje się tylko „niewidoczną” częścią aplikacji,
  • frontend web developer, który lubi pokazywać twarz i zmieniać JavaScriptowe frameworki jak rękawiczki, oraz
  • fullstack web developer, który większość życia spędza w piwnicy, ale od czasu do czasu lubi wystawić łeb na światło dzienne.

Ruchy separatystyczne na froncie spowodowały ukształtowanie się kolejnych stanowisk do obsadzenia. Być może UI/UX designerzy, o których w tym momencie myślę, wykraczają już poza krąg programistyczny, ale warto wiedzieć o ich istnieniu i o takim zapotrzebowaniu rynku.

Mobile developer

Kolejną „rewolucją”, która wybuchła już po moim wejściu w świat komercyjnego programowania było powstanie smartfonów z zaawansowanymi mobilnymi systemami operacyjnymi. Dla świata programistycznego punktem kulminacyjnym tej rewolucji było udostępnienie sklepów z aplikacjami (szczególnie Google PlayApp Store). Szeroko propagowana wizja zarobienia miliona dolarów poprzez sprzedanie miliona sztuk aplikacji po dolarze każda, przyciągnęła do programowania całe rzeszę nowych osób. Tak, czy inaczej powstał ogromny rynek, który w kilka lat wyprzedził desktopy i nadal daje programistom spore pole do popisu.

Big Data developer

Kilka lat temu ktoś pomyślał sobie, że fajnie byłoby zbierać dane… ze wszystkiego 😀 No bo być może uda się z nich czegoś ciekawego dowiedzieć 🙂 Tak (mniej więcej) powstał termin „Big Data” i pomysł ich analizowania. Do dziś nierozwiązany pozostaje problem „how big is big data” 😉 Mniejsza o większość. W każdym razie zrodził się kolejny obszar do oprogramowania.

Początkowo nazwy większości stanowisk związanych z Big Data krążyły po prostu wokół „analizy danych”. Dziś popularności nabierają takie terminy jak data science, czy znana od dawna sztuczna inteligencja (artificial intelligence) wraz z jednym z jej filarów – uczeniem maszynowym (machine learning).

Nieważne, czy terminy są świeże, czy odgrzewane. Wzrost ich popularności związany jest z gromadzeniem danych i próbami wyciągnięcia z nich daleko idących wniosków. A wszystko to wymaga zaangażowania m.in. programistów.

VR/MR/AR developer

Wychodzenie poza rzeczywistość jest kolejnym tematem, który w ostatnim czasie wrócił pod strzechy. Największa w tym zasługa firm technologicznych wypuszczających coraz to nowe urządzenia mające na celu przenieść nas do świata wirtualnej rzeczywistości (VR, virtual reality) lub rozszerzyć (AR, augmented reality) naszą rzeczywistość (albo jedno i drugie – MR, mixed reality).

Mark Zuckerberg na konferencji Mobile World Congress w 2016 roku

Mark Zuckerberg na konferencji Mobile World Congress w 2016 roku

Mimo tego, że zagadnienie poszerzania rzeczywistości nie jest nowe (zaskoczyło mnie nawet jak bardzo jest stare), to uważam, że technologiczny wyścig zbrojeń dopiero rozpoczął boom na VR/MR/AR, a otwarcie się z SDK przez praktycznie wszystkich dostawców tego typu sprzętu może wkrótce osiągnąć podobny efekt co powstanie App Store, czy Google Play. No i programista znów potrzebny 😉

Blockchain developer

Abstrahując od tego czy kryptowaluty (na czele z Bitcoinem) są bańką finansową, czy dobrą inwestycją, jedno jest pewne: zostały zbudowane na bardzo ciekawej i coraz szerzej adaptowanej technologii jaką jest blockchain.

Każdego dnia powstają nowe pomysły wykorzystania łańcucha bloków wykraczające poza wyłącznie finansowe zagadnienia. Nie ma również dnia, w którym przeglądając nowe oferty pracy nie trafiłbym na poszukiwaczy blockchain developerów.

DevOps/QA/IT security i inni…

…wyjęci spod prawa 😉

Powyżej starałem się przedstawić Ci najbardziej przekrojowo jak tylko potrafiłem „specjalizacje” na jakie dzieli się programowanie. O jednej rzeczy musisz pamiętać: te specjalizacje często się przeplatają i ze sobą wiążą, a ich granice zacierają. Być może można wyszczególnić jeszcze jakieś inne kierunki kariery programistycznej. Bardzo prawdopodobne jest również, że jutro powstaną kolejne. Niezależnie od wszystkich tych czynników, to co przedstawiłem powyżej powinno wystarczająco zobrazować Ci, co możesz robić decydując się zostać programistą.

Warto również mieć świadomość, że wokół kodu, bliżej lub dalej, krąży jeszcze kilka zawodów, które mogą Cię zainteresować. DevOps-i, specjaliści ds. zapewnienia jakości oprogramowania (aka. testerzy), specjaliści ds. bezpieczeństwa systemów IT, administratorzy, to tylko przykłady, które na szybko przychodzą mi do głowy. Każdy w końcu znajdzie coś co lubi. Naprawdę możesz być kimkolwiek chcesz 🙂

Mam do Ciebie gorącą prośbę. Jeżeli znasz kogoś, kto myśli o zostaniu programist(k)ą lub jest na początku tej drogi, to prześlij mu/jej powyższy artykuł – niech od razu zobaczy co go/ją czeka 😉 Za każde podzielenie się tym materiałem serdecznie Ci dziękuję! Docenię również i odpowiem na każdy wartościowy komentarz, który zostawisz poniżej. Do dzieła! 🙂


Bądź na bieżąco!

Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:

Dołączając do newslettera #NoweRozdanie2 otrzymasz dostęp do dodatkowych materiałów:

  • PDF: „Jednoosobowa działalność gospodarcza krok po kroku” (do artykułu)
  • PDF: „FAQ: Jak pracuje się dla Roche/Sii?” (do artykułu)
  • PDF: „Jak zmniejszyć prawdopodobieństwo wystąpienia kontroli i co zrobić kiedy urzędnik zapuka do Twoich drzwi?” (do artykułu)

Powyższe dane są przechowywane w systemie Mailchimp i nie są udostępniane nikomu innemu. Więcej szczegółów znajdziesz na stronie polityki prywatności.

lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować :)

Dołącz do grup na Facebooku

Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.

W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.

Wesprzyj mnie

Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.

Postaw mi kawę na buycoffee.to

Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.

Picture Credits