Ciekawe pytanie, prawda? Niby wszyscy potrafią na nie odpowiedzieć. Senior developer to 3 lata doświadczenia komercyjnego i dobra znajomość springa. Taki obraz wyłania się z ogłoszeń o pracę. Jednak nie o to chodzi.

Senior developer/starszy programista powinien spełniać pewne warunki w trzech obszarach.

Wiedza i doświadczenie

Najbardziej oczywisty obszar obejmuje tak zwane umiejętności twarde. O ile wiedza techniczna jest cechą, która powinna charakteryzować każdego programistę, to starszy programista posiada też wiedzę z innych obszarów. Po pierwsze ma wiedzę ogólną na temat branży. Nie tylko wie jakich narzędzi należy używać, ale też wie, jakie są obecne trendy, co przyniesie nam najbliższa przyszłość czy też gdzie szukać rozwiązań. Wiedza to też znajomość narzędzi, oprogramowania, sprzętu w zakresie pozwalającym na przykładowo wyceny.
Po drugie wiedza domenowa, co wynika z doświadczenia. Ta wiedza pozwala na rozmowę z biznesem w znacznie elastyczniejszy sposób. Pozwala też w pewnym zakresie pozbyć się translacji dokonywanej przez analityków, a w przypadku wykorzystania narzędzi w rodzaju event stormingu na zadawanie dodatkowych pytań.
Wiedza połączona z doświadczeniem pozwoli na szybsze tworzenie oprogramowania, ponieważ w takim układzie starszy programista nie traci czasu na dopytywanie o podstawy.
Wiedza i doświadczenie pozwalają też na świadome łamanie reguł. Co do zasady osoba, która zaczyna pracę jako programista, ma ogólne pojęcie o zasadach SOLID, wzorcach projektowych czy metodykach w rodzaju TDD. Jednak nie zawsze jest to wystarczające. Umiejętność świadomego łamania tych reguł oznacza, że potrafimy uzasadnić, dlaczego je złamaliśmy oraz w jaki sposób można poprawić kod, gdy przyczyna stanie się nieaktualna. Najlepszym przykładem jest odpuszczenie części testów jednostkowych w celu wyrobienia się w czasie z projektem. Po udanym wdrożeniu możemy wrócić do naszego kodu i stworzyć odpowiedni zestaw testowy (zapewne integracyjny), który w kolejnym kroku pozwoli na refaktoryzację i stworzenie odpowiednich testów jednostkowych.
By osiągnąć ten moment, musimy mieć kompetencje w kolejnym obszarze.

Biegłość w tworzeniu kodu

Mała rzecz a cieszy. Znajomość IDE to podstawa. Senior developer to osoba, która zna swoje narzędzia na wylot. Tutaj nie ma miejsca na zastanawianie się, jaki jest skrót klawiaturowy, bo ten jest już wdrukowany w nasze mięśnie.
Tak samo z dodatkowymi narzędziami. IDE jest naprawdę zintegrowanym środowiskiem, co oznacza, że potrafimy dobrać sobie odpowiednie wtyczki tak, by poradzić sobie z praktycznie każdym zadaniem. Z własnych obserwacji – wiele razy spotykałem się z ludźmi, którzy mieli pootwierane kilka różnych edytorów. Coś do Javy, coś do SQLa, do tego terminal. Po co, skoro w IDE można mieć te wszystkie elementy dostarczone w spójny sposób? Biegłość w pisaniu kodu pozwala na skupieniu się na rzeczach istotnych i ważnych.
Starszego programistę będzie dodatkowo cechować jeszcze jedna umiejętność. Umiejętność radzenia sobie bez narzędzi. Nie zawsze mamy do dyspozycji mocny komputer z zainstalowanymi naszymi zabawkami. Czasami jest to jakaś konsola zdalna z zainstalowanymi vi i „gołym” kompilatorem. Tu właśnie doświadczenie pozwala na pracę i dostarczanie kodu, pomimo trudności. Co więcej, w takim przypadku senior developer potrafi jasno określić, czego potrzebuje, a to łączy się z kolejnym obszarem.

Umiejętności organizacyjne

Zespół cech, których spodziewamy się u menadżera, a nie u programisty. Jednak chodzi mi tu o umiejętność organizowania sobie i innym pracy w taki sposób, by była wydajna. Nie oznacza to, że starszy programista będzie dobrym menadżerem. Musi jednak umieć przekazywać swoje racje reszcie zespołu, proponować i argumentować rozwiązania oraz przekazywać swoją wiedzę w uporządkowany sposób. Jeżeli taka osoba będzie współpracować z juniorem, to będzie musiała tak podzielić zadania, by obie strony były wstanie je zrealizować, a jednocześnie czegoś się nauczyć.
Pod tym pojęciem kryje się jeszcze jedna umiejętność – radzenie sobie w korpodżungli. Pójść zapytać, podręczyć osobę odpowiedzialną, albo odpowiednio ustawić listę CC w mailu z ponagleniem i nie bać się zawracania dupy osobom odpowiedzialnym za daną rzeczy (jeżeli rzeczywiście tego wymaga sytuacja). Czyli coś, czego brakuje młodym pracownikom.

Podsumowanie

Starszy programista ma wiedzę, umiejętności i doświadczenie, które w połączeniu z rzemieślniczą biegłością w wykorzystaniu narzędzi pozwalają mu pracować na 110% bez zbędnego przepracowywania się. Jednocześnie umie ogarniać nie tylko techniczne sprawy, ale też rozmawiać z klientami oraz z innymi działami w firmie by praca była płynna i nie stawała się koszmarem.
Jak to osiągnąć? Wiedza to samokształcenie, czytanie, kursy, szkolenia, konferencje, JUGi. Doświadczenie przychodzi z czasem. Biegłość to znowuż ćwiczenia (kata!) i powtarzanie pewnych czynności, aż wejdą w nawyk. Umiejętności organizacyjne zazwyczaj wynikają z doświadczenia oraz tego, jak dobrze dogadujemy się z konkretnymi ludźmi. Choć tutaj ważny jest też element przekazywania wiedzy.