Kim powinien współczesny programista? Głęboka wiedza vs. szeroka wizja

8 września
Yurii Yurchenko
Kim powinien współczesny programista? Głęboka wiedza vs. szeroka wizja

Pracuję w IT od 35 lat, z czego ponad 20 w rozwoju oprogramowania, głównie jako trener. Od tego czasu zajmuję się szeroko pojętym wsparciem. Bezpieczeństwo informacji. Realizacja procesu. Zawsze z głębokim zrozumieniem biznesu klienta. Nauczanie, mentoring, szkolenia, wszelkiego rodzaju oraz wykłady. A co najważniejsze, udział w tworzeniu zespołów, które potrafią prawie wszystko i wykonują zadania  z przyjemnością. Ponieważ team lubi swoją pracę, a jego członkowie lubią pracować razem.

Kiedy usiadłem do napisania tego artykułu, dotarło do mnie, że minęło dużo czasu od ostatniego udzielonego przeze mnie wywiadu. A rozmowa to ciekawy proces: pobudza neurony, a jednocześnie po co to ukrywać - to dobre dla samooceny. Ale kto przeczytałby wywiad z nieznaną osobą przeprowadzony przez nieznanego redaktora? Uważałem za niezręczne narzucanie się znanym dziennikarzom. Wtedy pomyślałem: a może powinienem sam przeprowadzić wywiad ze sobą? Jest to wygodne, bezpieczne i przyjemne, a także na pierwszy rzut oka wydaje się na tyle dziwnie, by kogoś zainteresować. I oczywiście ilustruje moje własne uniwersalne umiejętności: nawet w niestandardowej sytuacji potrafię zadawać pytania i na nie odpowiadać. Tak więc, siedząc wygodnie na krześle, naprzeciw siebie, przechodzę do zadawania pytań.

- Czy z twojego doświadczenia wynika, że moda na uniwersalnych specjalistów to trend ostatnich lat?

- To trochę bardziej skomplikowane. Kiedy mówimy o różnicach między ludźmi a innymi żywymi gatunkami, prawie zawsze przychodzi nam na myśl nam zdolność posługiwania się narzędziami. Tak, wydra morska rozbija kamieniem muszlę ostrygi, a wrona może nawet otworzyć orzech, wrzucając go pod pociąg, ale to nasz odległy przodek, który podniósł patyk, przesądził o przyszłych losach całej planety. Ponieważ kij był narzędziem uniwersalnym: można się na nim oprzeć chodząc, strącić owoc z drzewa, uderzyć wroga lub rzucić nim w swoją ofiarę, zmierzyć głębokość kałuży albo szturchnąć mrowisko.

Modernizacja tego narzędzia dała początek włóczni, łopacie, grabiom, łukowi itp., które są już specjalistycznymi narzędziami. Mogłyby być z łatwością wykorzystane przez tę samą osobę - uniwersalnego specjalistę swoich czasów - do rozwiązania konkretnego problemu. Ale głównym narzędziem zawsze był ludzki mózg, który pozwala uczyć się nowej wiedzy i umiejętności, czyli poszerzać zakres swoich umiejętności, a tym samym zdobywać przewagi konkurencyjne kluczowe dla dalszego przetrwania.

Odchylenia w kierunku specjalizacji zaczęły się w epoce przemysłowej, zwłaszcza wraz z pojawieniem się produkcji taśmowej. Mój przyjaciel spędził całe życie przykręcając tylne nogi do sof w fabryce mebli. Było trochę nudno, chociaż modele sof były okresowo ulepszane. Kiedy firma została zamknięta, nie mogąc wytrzymać konkurencji, znajomemu trudno było znaleźć pracę. Teraz takie rutynowe operacje podlegają robotyzacji, a ludzie zajmują się kreatywnymi specjalnościami. Na przykład ogólnie pojętą technologią informacyjną, a w szczególności programowaniem.

Jeśli spojrzeć na historię IT, na początku języki programowania były jak patyk prymitywnego człowieka. Za pomocą kodów maszynowych i assemblera można było zademonstrować wszystko, do czego zdolna jest maszyna do elektronicznego przetwarzania danych. Jednak praca z nimi zajmowała dużo czasu i była dość niewygodna dla programisty. Dlatego języki wysokiego poziomu, takie jak PL, REXX czy Fortran, pojawiły się dość szybko. Jednocześnie pamiętaj, że język programowania jest takim samym językiem komunikacji, jak każdy inny. Po prostu pozwala nam komunikować się nie tylko między sobą (to też jest dobre), ale także z maszynami. Oznacza to, że poszerza krąg kontaktów, czyniąc naszą zdolność komunikowania się bardziej uniwersalną.

- Więc uważasz, że idea uniwersalności jest ściśle związana z zawodem programisty?

- Są programiści z dużym doświadczeniem, którzy wpisują się w projekty z perspektywą na kontynuację  przez wiele lat, np. w sektorze bankowym. Istnieją programy, które mogą pozostać niezmienione przez długi czas, ponieważ odpowiadają każdemu, kto ma z nimi bezpośredni kontakt. W takiej niszy można kodować stosunkowo spokojnie aż do osiągnięcia wieku emerytalnego. Ale, z jednej strony, liczba takich miejsc pracy jest ograniczona. Z drugiej strony, czy naprawdę chciałbyś wykonywać takie zajęcie? Nawet jeśli nie boisz się nudy i bardzo pociągają cię wysokie stawki, które zazwyczaj motywują ludzi do angażowania się w niemodne technologie, czy jesteś gotowy na takie ryzyko? W końcu, jeśli od emerytury nie dzieli cię rok lub dwa, są szanse, że nadal będziesz musiał szukać pracy. Programista z dużym doświadczeniem i niewielkim zestawem możliwości to najdziwniejsza postać na rynku pracy. Taka osoba może wzbudzić współczucie, ale bardzo rzadko zdarza się, żeby ludzie chcieli bliżej poznać ją w kontekście pracy w projektach.

Wszyscy pozostali programiści funkcjonują w innych warunkach: każdy, kto wybrał nowoczesne technologie, będzie musiał się ciągle uczyć. Albo będą musieli pogłębić swoją wiedzę na temat wybranej przez siebie początkowo specjalizacji, której narzędzia zmieniają się diametralnie (pamiętajcie C, C ++, C #, Golang), albo uważnie się rozglądać. Oczywiście najlepiej jest zrobić jedno i drugie.

Gdy zrozumiesz, jak działa program od momentu naciśnięcia klawisza Enter, do zapisania informacji w bazie danych, znacznie łatwiej będzie wykryć błędy w kodzie. Kiedy zrozumiesz, jak działa biznes klienta i dlaczego faktycznie opracowujemy nowy system, znacznie łatwiej jest wykryć niespójności logiczne. I zasugerować sposób na ulepszenie wyjściowego produktu. Osoby, które są w tym dobre, będą najbardziej popularne w każdym projekcie, zwłaszcza jeśli projekt wykorzystuje zaawansowane narzędzia.

Same technologie rozwijają się teraz w kierunku synkretyzmu, gęstej intersekcji, a nawet częściowego scalania różnych kierunków. Weźmy na przykład MLOps: łączenie technologii uczenia maszynowego i podejść do wdrażania opracowanych modeli w procesach biznesowych. Bardzo ważne jest, że nowy specyficzny obszar wymaga również nowego sposobu organizacji współpracy między przedstawicielami biznesu, matematykami, specjalistami ML i inżynierami IT. Nie byłoby to możliwe, gdyby wszyscy nie mówili tym samym językiem, czyli nie opanowali dyscyplin związanych z ich główną specjalizacją. Dziś specjalista musi być dobry przynajmniej w trzech dziedzinach (załóżmy, że czwarta to specjalizacja, z jaką dana osoba przyszła do projektu - ta, którą już opanowała). Specjalista musi być w stanie zrozumieć zarówno terminologię, jak i sposób myślenia we wszystkich trzech dziedzinach. Czy praca w projekcie MLOps jest interesująca? Nie sądzę, żeby większość ludzi odmówiła takiej okazji. Czy zostanie zatrudniona osoba, która nie jest gotowa do poszerzenia swoich kompetencji? To mało prawdopodobne, nawet jeśli ta osoba od dawna jest genialnym profesjonalistą w swojej wąskiej niszy.

Muszę powiedzieć, że nie jest to specyficzna cecha IT. Cała współczesna nauka działa na w punkcie przecięcia dyscyplin, które się przeplatają, oddziałują na siebie wzajemnie i się uzupełniają. Astrofizyka, biochemia, geografia historyczna. Archeologia od dawna jest ściśle związana z etnologią i genetyką. Jednoczesne korzystanie z wiedzy z różnych dziedzin pomaga w dokonywaniu nowych, czasem nieoczekiwanych odkryć.

- Okazuje się więc, że uniwersalność to przede wszystkim umiejętność rozumienia kolegów z zajmujących się innym obszarem?

- Ogólnie programowanie jest znacznie bliższe językoznawstwu niż klasycznym dyscyplinom inżynierskim. Jest to bardzo widoczne w interakcji między inżynierami a biznesem. Wszyscy wiemy, że klienci nie przychodzą do nas, powiedzmy, w celu migracji swojego systemu na nową platformę technologiczną. Klient musi tylko przetworzyć więcej informacji, skrócić przestoje lub obsłużyć więcej użytkowników. Jeśli podejmiesz się czysto technicznego zadania, możesz w końcu stworzyć produkt wysokiej jakości, którego klient w ogóle nie potrzebuje.

Dlatego maksymalną efektywność osiąga się, gdy każdy członek zespołu rozumie nie tylko, co robi w projekcie, ale także dlaczego to robi. Z reguły nie jest to możliwe bez zrozumienia obszaru domenowego, czyli istoty biznesu klienta. Oznacza to, że od programisty wymagana jest już pewna uniwersalność wiedzy.

- Więc każdy musi wiedzieć wystarczająco dużo o technologii i biznesie?

- Czy naprawdę MUSI - nie powiedziałbym tak. Ale jest to bardzo przydatne w pracy, komunikowaniu się z kolegami i zrozumieniu tego, co dzieje się na różnych poziomach. Ogólnie rzecz biorąc, poważna specjalizacja rozpoczęła się od wydzielenia roli administratorów baz danych. Wtedy pierwszy raz potrzebowaliśmy ludzi, którzy mieli dogłębną wiedzę na temat specyfiki pisania skryptów i konfigurowania DBMS od różnych producentów. Ostatecznie jednak ta specjalizacja się nie udała. Gdy tylko pojawił się DBA, wielu programistów stwierdziło, że mogą pisać kod, jak chcą, ponieważ administrator przyjdzie i zoptymalizuje wszystko. Ale wszyscy szybko zmęczyli się odpowiadaniem na pytanie „dlaczego zapytanie SQL działa tak wolno?” Kto jest zainteresowany ustaleniem, czy programista jest tylko kciukami, czy też administrator nie może skonfigurować serwera? Nie zmienia to istoty problemu.

Ta dziwna sytuacja została rozwiązana dzięki zdecydowanej decyzji: teraz programista backend musi zrozumieć wszystkie główne cechy bazy danych, dla której pisze zapytania SQL. W dzisiejszych czasach przyzwoicie jest podejść do DBA tylko z drobnymi problemami, które często wymagają oddzielnych badań, na które ludzie po prostu nie mają czasu. Administratorzy baz danych zaczęli powracać z konkretnym rozwiązaniem konkretnego problemu, który mógł dotyczyć np. konfiguracji na poziomie systemu plików czy budowania indeksów klastra. Ale żeby to zadziałało, programiści musieli nauczyć się cech dialektycznych konkretnego języka, którym mówili administratorzy baz danych.

W przybliżeniu to samo stało się podczas dzielenia rozwoju na obszary frontendowy i backendowy. Specjalizacja zawsze pozwala zagłębić się w temat, ale za zawężenie wizji płaci się wysoką cenę - utrudniona jest komunikacja z osobami o innych specjalizacjach. Jednym z modelowych przejawów uniwersalności jest fullstack. Jeśli ktoś chce lepiej zrozumieć, jak działa architektura jako całość, lub przeciwnie, zrozumieć, w jaki sposób użytkownik współdziała z systemem, prawdopodobnie pozwoli mu to obejść się bez drogich i niewygodnych “tłumaczy”, nawet jeśli ta osoba nadal pracuje głównie jako programista frontendowy lub backendowy. Tutaj dochodzimy do istotnego punktu: pisanie kodu, który działa optymalnie, jest znacznie fajniejsze niż pisanie zwykłego działającego kodu. Więc powinno mieć dla ciebie znaczenie, czy robisz to naprawdę dobrze.

- Kto może nazwać siebie uniwersalnym specjalistą?

- Uniwersalny specjalista to nie osoba, która opanowała jeszcze jedną, nieznaną mu technologię. Taki specjalista stale podąża za nowoczesnymi trendami i jest gotowy zainwestować czas, uwagę i energię w naukę nowych rzeczy. Jeśli mówimy o domenowym obszarze biznesowym, różne projekty mogą wymagać zupełnie innego stopnia zaangażowania i zrozumienia procesów po stronie klienta. To naprawdę nic nowego. Powiedzmy, że pamiętamy podstawy - na przykład cybernetykę stosowaną. W oddziale w Kijowie wiele osób jest absolwentami Wydziału Cybernetyki na lokalnym uniwersytecie. Dokąd idą ludzie po uzyskaniu dyplomu z matematyki? Niektórzy ludzie udali się do fabryki samolotów Antonov, gdzie studiowali aerodynamikę i wytrzymałość materiałów. Inni udali się do Instytutu Amosowa, aby uczyć się biologii i anatomii. Inni poszli do pracy w banku, gdzie zapoznali się z systemami płatności i przepływami gotówki. Zawsze zakładano, że jeśli nie jesteś tylko koderem, ale programistą, musisz znać swój obszar tematyczny. I że ciągle szukasz sposobu na własny rozwój w świecie technologii. Nie chodzi o znajomość dwóch, trzech lub pięciu języków programowania, podejść lub metod. Uniwersalność to przede wszystkim umiejętność ciągłego uczenia się.

Na przykład - w DataArt mamy grupę zajmującą się badaniem sztucznej inteligencji. Jest to otwarta społeczność, w której osoby z różnych branż i z różnych środowisk zawodowych dyskutują o tym, jak można zastosować sztuczną inteligencję w miejscu pracy. Przychodzą i rozmawiają, nawet jeśli w danej chwili ich dziedzina nie ma nic wspólnego z AI. To poszerzenie ich wiedzy pozwala im myśleć nieszablonowo w przyszłości.

Jeśli ktoś wybrał kierunek i dostał się do dużego projektu, w którym zamierza spędzić długi czas, to przede wszystkim warto przyjrzeć się technologiom, które mogą być przydatne w tym projekcie. Ale jakikolwiek projekt wcześniej czy później się skończy i warto zadać sobie pytanie „co chcę robić po obecnym projekcie?”.

DataArt opracowała, na przykład, specjalną tabelę, aby ułatwić poszukiwanie nowych obszarów rozwoju technicznego. Pozwala to określić poziom łączności między nową technologią a technologiami, które już znasz, i zapewnia przybliżone oszacowanie czasu, jaki będziesz musiał poświęcić na studiowanie nowej dziedziny, oraz zapewnia zalecany zestaw kursów i szkoleń.

Szkolenie nie jest stratą czasu, ale inwestycją w najczystszej postaci. Dlatego zawsze istnieje ryzyko, że twoja inwestycja się nie opłaci. Ale jeśli nie zainwestujesz, twój rozwój na pewno się zatrzyma i nie będziesz miał z tego nic. Oczywiście musimy spojrzeć na rynek i trendy, a także zdywersyfikować nasz pakiet inwestycyjny, jeśli to możliwe, aby zmniejszyć ryzyko. Jednak sytuacja życiowa często podpowiada, w którym kierunku należy się poruszać. Oto naprawdę niedawna historia: jeden z naszych programistów frontendowych zajął się ostatnio backendem i po 3-4 miesiącach otrzymał zaproszenie do dołączenia do projektu jako fullstack, z którym wiązała się znaczna podwyżka wynagrodzenia. Ale ponieważ jednocześnie poświęcił dużo czasu pracy zespołowej i porządkowaniu projektu (nie był kimś, kogo to nie obchodziło!), sześć miesięcy później zaproponowano mu zostanie liderem zespołu. To wygodne, że w naszych czasach, gdy mamy do czynienia z tak ogromnym zapotrzebowaniem na specjalistów IT, bez względu na to, czego się uczysz, oferty same cię znajdą. Po prostu nie przestawaj się uczyć.

Oczywiste jest, że każda osoba ma ograniczone zasoby czasu i siły. Tutaj będziesz musiał wsłuchać się w siebie: czy jesteś gotowy na przyjęcie dodatkowego obciążenia i czy możesz regularnie się uczyć? Czasami będziesz musiał przyznać, że jesteś zmęczony i będziesz musiał odpocząć od całego dodatkowego wysiłku, przynajmniej na chwilę. Szewc, który robi doskonałe buty, nie musi mieć zawodu malarza, byle tylko nie cierpieć z powodu sezonowych wahań popytu. Ale jeśli nauczysz się szyć botki i sandały, będziesz poszukiwany przez cały rok. Trudność w poszerzeniu zestawu umiejętności będzie prawdopodobnie mniejsza niż w przypadku poświęcenia wolnego czasu zupełnie nieznanej firmie.

Nawiasem mówiąc, nie podoba mi się często używany termin „przekwalifikowanie”. Jakby stara wiedza zniknęła, a na jej miejsce została zapisana nowa wiedza. Jest to z gruntu błędne: dla generalistów ich wiedza specjalistyczna za każdym razem się poszerza, a zgromadzone przez nich doświadczenie służy lepszej przyszłości. Dlatego w odniesieniu do informatyki bardziej właściwe jest użycie słowa „dodatkowy trening”. Jednocześnie nic nie stoi na przeszkodzie, abyś pogłębiał swoją wiedzę, zwłaszcza w ramach swojej głównej specjalizacji: cenieni programiści są zarówno uznanymi ekspertami w swojej dziedzinie, jak i są w stanie z łatwością porozmawiać ze specjalistami pokrewnych specjalności i dużo wiedzą o ich obszarze. Nawet jeśli nie są tak głęboko zanurzeni w temacie, jak w przypadku własnej głównej specjalizacji.

- Czy mogę sprawdzić swoją wszechstronność?

- Przede wszystkim, aby zrozumieć nową technologię, trzeba za jej pomocą rozwiązać jakiś prawdziwy problem. Może to być projekt pod okiem specjalisty, projekt poboczny, a nawet zadanie praktyczne w ramach kursu. Jeśli chodzi o zakres zainteresowań, mogę zaoferować dość prosty kalkulator. Spójrz na to, czego ostatnio się uczyłeś, jakie książki i artykuły przeczytałeś. Obecnie wiele materiałów jest otagowanych. Zbierz zestaw tagów, który wskaże, co zwróciło twoją uwagę w ciągu ostatnich sześciu do ośmiu miesięcy. Jeśli jest więcej niż pięć takich tagów, jest to bardzo dobry objaw.

Uniwersalnych specjalistów interesuje rynek i konkretne firmy, które zapraszają ich do pracy. Są wymienni, a urlop lub choroba jednego z członków zespołu nie zatrzymują projektu. Tacy pracownicy są dobrzy w znajdowaniu problemów, a każdy, kto w danej chwili jest trochę mniej obciążony, często może szukać błędów w tym, co już zostało zrobione. Po zakończeniu projektu znacznie łatwiej jest prowadzić dalej takiego pracownika, proponując mu nowe zadanie. Ale ważne jest również, aby każdy specjalista o dość szerokim wachlarzu umiejętności nie tylko nie ryzykował utraty pracy, ale także mógł wybrać dla siebie najciekawszy projekt. Otwiera to szerokie możliwości doskonalenia, a dana osoba może w ten sposób skupić się na nowym obszarze wiedzy, po prostu dzięki dobrze wyszkolonemu umysłowi. Na dłuższą metę może to uszczęśliwiać w życiu zawodowym. I pozwala z jeszcze większą pasją poszukiwać nowych rozwiązań zadań stawianych przez biznes.

- A więc czy specjaliści o wąskim profilu nadal są poszukiwani?

- W tym miejscu chciałbym zwrócić uwagę na subtelne rozróżnienie między pojęciami rzemieślnika i mistrza. Obie są konieczne i ważne. Istnieją obok siebie i często wzajemnie się uzupełniają. Oto kilka definicji, które właśnie zaczerpnąłem z Internetu, a które moim zdaniem dobrze odzwierciedlają różnicę między nimi:

Mistrz jest twórcą, a swoją twórczość traktuje z miłością. Ta kreatywność przynosi mu nie tylko radość, ale także trudne pytania i bolesne poszukiwanie odpowiedzi na nie.

Rzemieślnik to wysokiej klasy wykonawca, który regularnie wykonuje pracę, którą lubi. Ta praca sprawia mu przyjemność, ale niczego nie tworzy.

To mistrzowie, a nie rzemieślnicy, zawsze przyczyniali się do rozwoju ludzkości we wszystkich sferach działalności.  

Moim zdaniem wielu współczesnych wąsko sprofilowanych specjalistów początkowo wybiera IT jako rzemiosło. Ponieważ jest to branża obiecująca, modna lub po prostu opłacalna. Ale szybkość zmian w tym obszarze jest taka, że samo przykręcenie prawej tylnej nogi do sofy prawie nigdy nie działa. Kiedy opanowujesz jeden framework, pojawia się kolejny. W efekcie sam charakter pracy skłania nas do ciągłego uczenia się. W kierunku rozwoju i mistrzostwa.

***

Jestem bardzo zadowolony ze szczegółowej rozmowy, jaką ze sobą przeprowadziłem. A co z tobą - czy wierzysz w uniwersalność? A może lepiej płynąć na solidnym i stabilnym statku? Może ktoś odkrył trzeci sposób?