W listopadzie zostałam seniorem, niemniej mój awans zaczął się trochę wcześniej. Nie powiem, że odkąd podjęłam swoją pracę w IT, chociaż oczywiście każde doświadczenie i problemy, które rozwiązywałam przyczyniły się do nauki i mojego rozwoju. Powiedziałabym, że świadomie, mój awans zaczął się pół roku przed faktyczną datą, a to wszystko dlatego, że w ramach ewaluacji mojej pracy, zaczęłam zastanawiać się czego jeszcze powinnam się nauczyć/ doświadczyć by objąć to stanowisko. Poniżej podsumowanie tych przemyśleń.
Obecny rynek pracy zdecydowanie nie ułatwia stworzenia jednej, uniwersalnej definicji roli i wymagań senior software engineera. Niestety duży niedobór pracowników i walka o ich utrzymanie, a także ogromna ilość firm podwykonawczych, które mogą swojego klienta podliczyć za więcej za seniora, powoduje że osoby z takim tytułem mogą nie mieć podobnych kwalifikacji czy doświadczenia w pracy. Z drugiej strony, firmy, uznawane za najlepsze w naszej branży raczej mają tutaj dość wyśrubowane wymagania. My natomiast wychodzimy z założenia, że senior jako sposób pracy, to coś do czego powinien dążyć każdy programista i dlatego w tym wpisie postaram się wytłumaczyć, czego powinieneś od siebie wymagać, i co powinno odróżniać Cibie od osoby na stanowisku software engineer, Wierzę, że dzięki temu wpisowi uda Ci się wyznaczyć cele zawodowe, albo być może dzięki niemu będziesz mógł dodać sobie pewności siebie w aplikowaniu o awans.
Umiejętności techniczne
Dobra baza techniczna Zaczęłabym tutaj od biegłej znajomości języka programowania a także doświadczenia w używaniu bibliotek i popularnych frameworków z nim związanych. Pisanie czystego, przetestowanego i udokumentowanego kodu mam nadzieję, ze rozumie się samo przez się. Do tego biegłość w używaniu narzędzi deweloperskich. To zdecydowanie takie minimum, które powinno dać solidna bazę. Nie chodzi tu znajomość każdej możliwej technologii, ale o wiedzę, którą możesz przenieść na np. pokrewne technologie czy biblioteki. Zrozumienie jak rzeczy we frameworkach działają pod spodem powinno być transferowalne między nimi, a drobne składniowe różnice nie powinny stanowić problemu. Do tego dochodzą powszechnie stosowane dobre praktyki i standardy. Świadomość, że nie warto wymyślać koła na nowo, ale warto stosować ogólnie przyjęte zasady, używać ponownie kod, dbać o jego standaryzację wewnątrz projektu i organizacji.
Umiejętność wyszukiwania rozwiązań technicznych
Do tego umiejętności robienia technicznego researchu i krytycznego spojrzenia na dostępne narzędzia / rozwiązania z uwzględnieniem tego jak będzie wyglądało ich utrzymanie i skalowanie( wiadomo nie da się przewidzieć wszystkiego, ale warto wykonać takie prognozy na podstawie dostępnych informacji). Dbanie o utrzymanie Kolejna rzeczą, która warto uwzględnić jest jakość kodu i rozwiązań. Senior powinien więc umieć korzystać z metryk i wskaźników i reagować na spadki wydajności, stabilności czy bezpieczeństwa aplikacji. W przypadku tych czynników powiedziałabym, że bardzo istotna jest umiejętność ich obrony i argumentowania dlaczego warto je poprawić.
Umiejętności miękkie
Kompetencje miękkie w moim przekonaniu są w naszej pracy kluczowe, a to dlatego, że rzadko kiedy we współczesnych projektach programista pracuje samodzielnie (nawet jako freelancer musi on kontaktować się z innymi ludźmi, budować zaufanie i markę). Dlatego w moim przekonaniu umiejętności komunikacji i pracy z ludźmi są kluczowe, a ich rozwój może pomóc wyróżnić się i iść do przodu w karierze.
Komunikacja
Efektywna komunikowanie to podstawa. Mówienie o postępie w pracy, efektywne komentarze dodawane do review kodu, czy szczerość i pokora przy udzielaniu i wysłuchiwania informacji zwrotnej to przecież filary naszej pracy. Efektywne komunikowanie się pozwala na jasne przekazywanie swoich opinii, czy precyzyjne określenie oczekiwań, a umiejętność uważnego słuchania ułatwia mierzenie własnego rozwoju. Dla jasności nie chodzi tu o to, że każdy musi być ekstrawertykiem czy mówcą na konferencjach. Efektywnie komunikować można się za pomocą każdego z naszych narzędzi od kodu, gita przez slack i spotkania scrumowe.
Praca w zespole i współpraca
Pracować z innymi nie zawsze jest łatwo. Odmienne zdania czy sposób pracy mogą łatwo stać się przyczyną nieporozumień. Ale w efektywnym zespole wcale nie chodzi o to by mówił jednym głosem ale by potrafił go wypracować. I być przy tym po prostu człowiekiem, który chce zrozumieć drugiego, który umie przyznać się do błędu, ale też docenić swoich współpracowników.
Dzielenie się wiedza i onboarding
Nie jest wcale sztuka być guru i jednoosobowym źródłem wiedzy. Niestety takie doświadczone osoby, które wiedza wiele, ale nie dziela się swoją wiedza nadal można spotkać w organizacjach. Może nawet zdarzyło ci się z kimś takim pracować? Dokumentowanie wiedzy, pomoc kolegom z zespołu i programistom w organizacji to bardzo rozwijające zajęcia. Często właśnie w takich momentach będziesz doczytywać, przypominać sobie, myśleć o warunkach brzegowych. A żeby przekazać efektywnie wiedzę trzeba ją sobie najpierw samemu dobrze uporządkować, co prowadzi do tego, że naprawdę w ten sposób można się uczyć skutecznie.
Doświadczenie
To coś czego przeskoczyć się nie da, bo tylko w praktyce można sprawdzić swoją wiedzę, ale i dostosować „idealne” podręcznikowe rozwiązanie, do nieidealnych (ale prawdziwych) sytuacji.
Dlatego różnorodność projektów i zespołów z którymi się pracuje, jest ważna, bo zmniejsza nam ilość nieznanych i nowych czynników. Oczywiście, rzadko jest tak, że rozwiązanie można przenieść 1:1 z jednego projektu do drugiego, niemniej dzięki doświadczeniu można łatwiej dokonać wyboru, pomiędzy dwoma bibliotekami lub różnymi podejściami sugerowanymi przez innych..
Doświadczenie z więcej niż jednej organizacji
Umówmy się, nie ma firm idealnych. Niemniej, zazwyczaj w każdej organizacji znajdziesz coś wartego naśladowania i coś, co przeszkadza w pracy i rozwoju. Praca w więcej niż jednej firmie na pewno może pozytywnie wpłynąć na Twój rozwój, bo możesz doświadczyć jak można pewne procesy prowadzić inaczej. Adaptacja do nowych zasad to też ciekawe doświadczenie rozwojowe, bo pozwala poczuć jak to jest dostosowywać się do nowych zasad jednocześnie starając się zaimplementować dobre praktyki, które działałby w poprzedniej firmie.
Doświadczenie z więcej niż jednego projektu/produktu
Mam tu na myśli zarówno pracę w różnych zespołach jak i z różnym kodem. Praca w projektem, który jest na produkcji kilka lat to zupełnie coś innego niż zaczynanie pisania aplikacji na nowo. Oba przyniosą inne, nowe wyzwania.
Każdy zespół jest trochę inny, bo inni ludzie go tworzą. Umiejętność wypracowania zasad, dostosowania się do nich, ale też samodzielnej pracy podczas współpracy z innymi ludźmi to ciekawe doświadczenie.
Branie odpowiedzialności
To jest jedna z tych cech, które powiedziałabym rozróżniają seniora od młodszych stażem pracowników. Być w stanie pracować nad zadaniem od początku do końca, zaproponować rozwiązanie, technologie, zaplanować wdrożenie, odpowiednie testy i deploy na produkcję i wziąć odpowiedzialność za te decyzje. Dochodzi do tego umiejętność pracowania z osobami w innych rolach (np. Product Ownerem i UX Designerem, grafikiem, biznes analitykiem, zespołem FE jeśli jesteś BE itp), tak by na pewno zrozumieć potrzeby biznesowe i problemy użytkowników.
Mam nadzieję, że powyższy spis okaże się przydatny, a omówienie pomoże w zaplanowaniu Twojego rozwoju. Zachęcam też do podzielenia się swoją opinią na ten temat- jak ty byś zdefiniowała seniora?