Chcesz zostać programistką, czyli tak naprawdę kim?

Chcesz zostać programistką, czyli tak naprawdę kim

Chociaż pierwszą linijkę kodu napisałam jakieś 20 lat temu (i czuję się okrutnie staro, pisząc te słowa), to tak naprawdę wcale nie wiedziałam od zawsze, że chcę pracować jako programistka. Co więcej, nawet po tym, jak już rozpoczęłam swoją karierę, nie wiedziałam, co tak naprawdę najbardziej mnie w tym programowaniu kręci i kim chcę być z zawodu. Bo zawód programistki (czy też programistki) ma wiele twarzy. Dzisiaj postaram się przedstawić Ci pokrótce niektóre z nich.


Dla porządku wpis podzieliłam na 3 większe sekcje:

  • pierwsza z nich dotyczy tzw. “product engineering”, czyli stanowisk związanych z implementacją konkretnego produktu; 
  • w drugiej omawiam stanowiska związane z utrzymaniem i działaniami wewnętrznymi; 
  • na zakończenie opowiem Ci jeszcze o różnych rolach, które możesz pełnić w zespole programistycznym i jak może wyglądać Twoja ścieżka kariery.

Pamiętaj też, że to oczywiście nie jest pełna lista – daj znać w komentarzu, jeśli Twojego stanowiska nie ma na tej liście! Przy niektórych stanowiskach podaję więcej niż jedną nazwę, gdyż różne firmy różnie je nazywają.

Product engineering, czyli stanowiska związane z implementacją produktu

Kiedy myślę o product engineering, to myślę o mojej Mamie i jej koleżankach z pracy. Mama chciała kiedyś pokazać swoim znajomym, czym ja się zajmuję i poprosiła mnie o jakiegoś linka, adres strony, czy aplikacji. Spytała wtedy, czy może wskazać jakiś konkretny przycisk, albo okienko, które ja zrobiłam… [spoiler alert: nie mogłam nic takiego pokazać]. 


Możliwość przedstawienia swojej pracy znajomym w ten sposób to właśnie taki bonus, kiedy pracuje się na stanowisku ściśle związanym z implementacją produktu. W tej sekcji opisuję kilka różnych stanowisk, które być może zainteresują Cię i zachęcą do podążenia tą ścieżką kariery.


1. Frontend engineer

Osoba zajmująca się front-endem, to ktoś, kto odpowiada za implementację interfejsu użytkownika. Może być to np. zakodowanie wyglądu strony internetowej, oprogramowanie aplikacji okienkowej i tak dalej. Frontendowiec zna HTML, czy CSS, ale w dużej mierze korzysta też z JavaScriptu. Nie daj się jednak zwieść i uznać, że to “prosta”, czy też nudna robota – wcale tak nie jest. 

Osoba na tym stanowisku ogarnia z reguły kilka różnych frameworków (czyli zestawu dodatkowych bibliotek wykorzystywanych, by usprawnić programowanie w danym języku) i bibliotek, a jej praca nie kończy się na zmianie kolorów na stronie internetowej. Frontendowiec poza kolorami i układem strony może zajmować się też bardzo kompleksowymi rozwiązaniami – na przykład grami w przeglądarce, czy wszelkiego rodzaju edytorami online. Pierwszym z brzegu przykładem, który przychodzi mi do głowy, jest Canva – aplikacja internetowa służąca do rysowania i tworzenia grafik.

Pracując na tym stanowisku, ściśle współpracuje się z PMem (product managerem, menedżerem produktu), czyli osobą, która tłumaczy oczekiwania klientów na bardziej zrozumiały dla programistów zbiór wymagań.

W końcu to, co wyjdzie z komputera frontend engineera jest najbliższe użytkownikowi. Ma się więc poczucie, że Twoja praca naprawdę ma znaczenie.


2. Backend engineer

Programiści backendu odpowiadają za “serwerową” część aplikacji. Rzeczy takie jak autoryzacja użytkownika (logowanie i określenie, do jakiej części aplikacji dany użytkownik ma dostęp), serwowanie danych (np. pobranie konkretnych informacji z bazy danych i ich przetworzenie przed przesłaniem do aplikacji), czy wszelkie inne “zasobożerne” operacje (jak przygotowanie pliku do pobrania z Canvy), to operacje wykonywane po stronie serwera. Jest wiele języków wykorzystywanych do tworzenia takiego oprogramowania, do popularnych zaliczają się: Go, python, Java, czy C++.

Pracując na stanowisku backendowca masz stały kontakt z osobami odpowiedzialnymi za front-end aplikacji oraz PMem. Dzięki temu wiesz, jak nadawać priorytet swoim zadaniom, rozumiesz końcowy cel i z łatwością ustalasz dalsze kroki i kontrakt między aplikacją a serwerem.

3. Full stack engineer, czyli połączenie frontendu z backendem

Nic dodać, nic ująć. Full stack engineer to w pewnym sensie “człowiek-orkiestra”. Osoba, której zainteresowania i umiejętności są na tyle uniwersalne, że może pracować zarówno na froncie, jak i “na tyłach” aplikacji. 

Ta uniwersalność jest szczególnie cenna w mniejszych firmach (tych, które nie mogą sobie pozwolić na osobny zespół front- i backendu), jak i w pracy freelancerki (dzięki temu samodzielnie możesz tworzyć aplikację od początku do końca). Będąc “full stackiem” możesz lepiej kierować swoją karierą (bo masz trochę większy wybór), jednak zwróć uwagę, że nie warto od tego stanowiska startować – lepiej zacząć od bycia dobrą w jednym z dwóch.

4. Mobile engineer 

Obszar zainteresowań i obowiązków programistki mobile (czyli aplikacji na telefony i tablety) jest zbliżony do frontendowca. Różnią się przede wszystkim technologie. Programistka mobile w swojej pracy wykorzystuje technologie takie jak Swift, C#, ale też JavaScript i CSS.

Tutaj ponownie ważna jest ścisła współpraca z PMem i zrozumienie użytkownika – w końcu to dla nich implementujemy interfejs! Programiści aplikacji mobilnych – choć wciąż wiele operacji (zwłaszcza tych “zasobożernych”) delegują serwerowi – mierzą się z wieloma ciekawymi problemami: kompatybilność z różnymi systemami operacyjnymi i sprzętem, słabe połączenie sieciowe lub kompletny brak internetu, dystrybucja aplikacji itd. Zwróć też uwagę na różnicę w marginesie popełnianych błędów – ponieważ aplikacja trafia na telefony użytkowników, programiści mobile mają ograniczone możliwości dostarczenia poprawek (bo zawsze znajdą się osoby, które odmówią zainstalowania nowszej wersji) i muszą dbać o poprawność wsteczną.

5. Sales engineer / Forward deployed SWE / Solutions architect

A może by tak stanowisko, które łączy w sobie technologię, programowanie i bezpośredni kontakt z klientem? Tak właśnie wygląda praca sales engineer. To programistka, która spotyka się z klientem i potrafi przełożyć oczekiwania na wymagania techniczne, a następnie opracować prototyp rozwiązania, które je spełnia.

W zależności od firmy taka osoba może pracować tylko nad początkową fazą projektu (rozmowa z klientem, zebranie wymagań i opracowanie prototypu, oraz przekonanie klienta do proponowanego rozwiązania), a może też później zajmować się opracowaniem faktycznego rozwiązania i jego wdrożeniem. Jest to niesamowicie satysfakcjonująca praca, w której ciężko się nudzić – co i raz poznając nowych klientów i pomagając im rozwiązać konkretne problemy przy pomocy dostarczanej technologii.

6. QA Engineer

QA (quality assurance, “jakościowiec” 🙂 ) engineer to osoba, dla której dostarczanie dobrych jakościowo rozwiązań jest bardzo ważne. Do głównych obowiązków osoby na tym stanowisku należy analiza wymagań projektowy, opracowanie testów i konkretnego planu działania. Dobra znajomość SQLa, czy języków skryptowych (bash, python) jest tu bardzo przydatna, podobnie jak wiedza na temat popularnych narzędzi i strategii wykorzystywanych przy testowaniu produktu.


Zwróć uwagę, że praca takiej osoby wcale nie kończy się na sprawdzeniu, że aplikacja robi to, co miała robić. Wbrew pozorom chodzi o sprawdzenie, że aplikacja nie robi czegoś, czego robić nie miała. Tworzenie takich scenariuszy, analiza potencjalnych interakcji użytkownika z aplikacją i tego, co może pójść “nie tak” to bardzo kreatywne zajęcie, niezbędne w procesie wytwarzania oprogramowania!

Stanowiska związane z utrzymaniem i działaniami wewnętrznymi

Jak już mówiłam, kiedy Mama zapytała mnie, czy mogę pokazać, co dokładnie zrobiłam w pracy – nie było zbytnio, czym się chwalić. Nie mogłam wskazać szczególnego przycisku, czy strony… Mogłam jednak powiedzieć, że od mojej pracy zależy to, czy dana aplikacja działa. I jeśli nie widać błędów, strona ładuje się w porządku i szybko, to z dużym prawdopodobieństwem, dobrze wykonuję swoją robotę! 🙂

W tej sekcji opowiem Ci więc o stanowiskach, których na pierwszy rzut oka nie widać, ale są niezbędne, by produkt końcowy mógł w ogóle istnieć.


1. Software infrastructure engineer / Production engineer

Pracując na tym stanowisku, nie masz zbyt wiele do czynienia z produktem jako takim. Programiści “infrastruktury” odpowiadają za opracowanie bibliotek i narzędzi wykorzystywanych wewnątrz firmy przez innych programistów. Może to być wdrożenie i utrzymanie systemu do wykonywania testów automatycznych, integracja rozwiązań open sourcowych czy produktów zewnętrznych (jak np. Amazon Web Services) z resztą systemu w firmie, czy też opracowanie biblioteki do komunikacji z bazą danych… 

Wszystko po to, żeby ułatwić i przyspieszyć proces wytwarzania oprogramowania przez innych programistów. Dzięki temu różne zespoły backendowe mogą korzystać z tych samych narzędzi, a dodatkowo zmniejsza się ryzyko duplikacji kodu. Na tym stanowisku lista wykorzystywanych technologii jest nieskończona – wszystko zależy od firmy. Jednak podobnie jak wykorzystywane technologie, tak i lista możliwości rozwoju nie ma końca! Pracując jako software infrastructure engineer możesz zajmować się przeróżnymi rzeczami – od bardzo niskopoziomowych (jak np. tworzenie oprogramowania odpowiedzialnego za utworzenie nowego serwera i instalację niezbędnych paczek), aż po opracowywanie schematów i standardów dla innych programistów! 

Nie daj się więc zwieść temu, że jest to praca niewidzialna dla zwykłego użytkownika – praca jako software infrastructure engineer jest niezwykle ważna, a Twoje działania mogą mieć wpływ na wszystkich programistów w firmie (i sprawić, że ich praca będzie szła sprawniej!).


2. SRE(Site reliability engineer)

Pojęcie SRE wykuto w Google i określa ono programistów, którzy zajmują się usprawnieniem i utrzymaniem systemu produkcyjnego. Osoby na tym stanowisku znają się na systemach operacyjnych, jak nikt inny i sprawnie oceniają ryzyko wypuszczenia danego produktu. W sytuacji takiej jak niedawna listopadowa awaria serwisu YouTube (mowa o awarii systemu z 11 listopada 2020), SRE odpowiadają za przywrócenie systemu do stanu sprzed awarii, a następnie analizują sytuację i popełnione błędy oraz zastanawiają się, jak zabezpieczyć się na przyszłość.


3. DevOps engineers

DevOps, podobnie jak SRE, odpowiadają za utrzymanie systemu produkcyjnego. Różnica między tymi stanowiskami jest jednak widoczna – podczas gdy SRE większość rozwiązań implementują samodzielnie, DevOps głównie zajmują się debugowaniem i analizą problemu, a ostateczną implementację oddają w ręce innych programistów. Dzięki temu programiści dostają jasne instrukcje o tym, jak testować błąd i co go powoduje, i mogą skupić się na dostarczeniu rozwiązania; podczas gdy DevOps analizują logi, i dane związane ze stanem serwera i aplikacji.

W pracy DevOpsów ważna jest dobra znojomość systemów operacyjnych i języków skryptowych (takich jak bash czy python).


4. DBA, czyli administrator bazy danych

Bazy danych to bardzo rozbudowane twory, które otwierają przed swoimi użytkownikami wrota do świata wielu możliwości… jeśli tylko wiadomo, jak ich poprawnie i wydajnie używać. 🙂 Ta odpowiedzialność zazwyczaj spada na barki administratorów baz danych, czyli osób, które potrafią taką bazę skonfigurować i dopasować jej działanie do potrzeb aplikacji. Odpowiadają one również za ewaluację nowszych wersji oprogramowania, dostosowanie zabezpieczeń, czy też projekt bazy.

Jak pewnie się domyślasz, najbardziej pożądana jest tutaj znajomość SQLa (i różnych jego wersji), jak też umiejętność obsługi różnych systemów operacyjnych, skryptowych języków programowania, a w naprawdę hardcorowych sytuacjach – PL/SQL!

5. Corp / IT

Ustawienie firmowego VPNa, czy też automatyzacja procesów w firmie i zarządzanie kontami pracowników, dostępami do różnych materiałów służbowych, a przede wszystkim – zarządzanie flotą służbowych laptopów i komputerów, ich zdalne monitorowanie i naprawy oraz ewaluacja oprogramowania zainstalowanego na służbowym sprzęcie to tylko czubek góry lodowej. Praca w dziale “Corp” niesie ze sobą wiele wyzwań, ale jest też bardzo ciekawa. Jest to stanowisko kompletnie niezwiązane z produktem firmy, ale jednocześnie niezbędne w większych firmach!

Ponownie, pracując na tym stanowisku, dobrze jest znać się na systemach operacyjnych, czy znać języki skryptowe, które pozwolą nam automatyzować pewne procesy.

6. Network engineer

Sieci to temat rzeka, nic więc dziwnego, że zatrudnia się osobno specjalistów sieciowych, by ten temat ogarnąć. Network engineer to osoba, która dobrze rozumie internet i to, jak jest zbudowany. Do obowiązków osoby na takim stanowisku może należeć praca bezpośrednio z routerem i dostarczanie nowych wersji oprogramowania, jak i konfiguracja sieciowa, czy konfiguracja klastrów serwerów. Projekty w tym obszarze są niesamowicie ciekawe, a dodatkowo wpływają na ostateczne zachowanie się aplikacji – np. zapewnienie możliwie najkrótszego czasu odpowiedzi serwera niezależnie od lokalizacji użytkownika. 


7. Security engineer

Chociaż wymieniam to stanowisko jako ostatnie, to jednak jest ono kluczowe dla działania produktu. Security engineer jest odpowiedzialny za zapewnienie bezpieczeństwa danych użytkownika. Aby to osiągnąć, taka osoba analizuje i opiniuje plany i projekty innych zespołów z punktu widzenia bezpieczeństwa; opracowuje zasady przetwarzania danych użytkownika (np. oceniając, jakie informacje powinny znaleźć się w logach aplikacji, do której dostęp mają wszyscy pracownicy firmy); dostarcza certyfikaty i wykonuje wewnętrzne audyty.

Taka osoba poza oczywistymi oczywistościami – kryptografia, systemy operacyjne, języki skrytowe – trzyma rękę na pulsie i monitoruje internet w poszukiwaniu informacji o nowych błędach czy “dziurach” w kodzie i wdraża odpowiednie zabezpieczenia, zanim ktokolwiek miał szansę je wykorzystać w niecnym celu.

Jaką rolę w zespole odegrasz?

Powyżej opisałam różne stanowiska, które możesz zająć jako programistka. Teraz chciałabym opowiedzieć Ci o możliwych rolach. Aby lepiej zrozumieć tę zależność, wyobraź sobie szachownicę. Stanowiska to kolumny, a role to wiersze. Ty jesteś na przecięciach. Jakie są więc te role?


IC(Individual contributor)

Klepiesz kod razem z kilkoma innymi osobami w zespole? Bardzo prawdopodobne, że jesteś właśnie IC – czyli osobą, która po prostu odpowiada za wytwarzanie oprogramowania. W tej roli nie musisz martwić się o zarządzanie projektem – po prostu realizujesz kolejne kroki z planu.


TL(tech lead) / TLM(tech lead manager)

Mając już kilka lat doświadczenia na karku, masz szansę awansować do roli liderki zespołu. Teraz Twój czas będzie dzielić się między wytwarzaniem oprogramowania, a trzymaniem ręki na pulsie z tym, co robi reszta zespołu. Jako tech lead jesteś wzorem dla swojego zespołu, to Ty narzucasz kierunek (techniczny) i to od Ciebie Twój zespół się uczy. 


TLM jest bardzo specyficzną odmianą tej roli – to połączenie tech leada z managerem (czyli jeszcze mniej programowania, więcej pracy z projektami i projektowaniem oprogramowania).

Junior / Mid / Senior…

Jeśli stanowiska to kolumny, a role to wiersze, to “starszeństwo”, czy też poziom w firmie byłby kolorem pola. 

Juniorka jest zielona w tym, co robi; dopiero zaczyna swoją karierę jako programistka i ciągle się uczy. Raczej niezbyt samodzielna. 

Mid wie już, z czym się tę pracę programistki je. Ma już trochę doświadczenia w branży, służy radą i pomocną dłoniom innym juniorkom.

Seniorka na programowaniu zjadła zęby. Często zdarza się, że senior engineer już nawet nie programuje tak dużo – dzieląc swój czas między mentoring, a pracę projektową.

Podsumowanie

Jak widać – praca w branży technologicznej jest wielokolorowa! Jest więc szansa (i to raczej całkiem duża!), że znajdziesz ścieżkę kariery odpowiednią dla siebie. Najlepsze w programowaniu jest to, że wybór ten nie jest na zawsze – a stanowisko zawsze można zmienić!

Żeby więc zacząć – wybierz tę ścieżkę, która najmocniej ścisnęła Cię za serce, gdy czytałaś powyższe opisy i po prostu zacznij!

A jeśli uważasz, że któregoś stanowiska w tym opisie brak – daj koniecznie znać w komentarzu!