O klepaniu kodu i mitycznym ‚prawdziwym programowaniu’

By 14 września 2017Bez kategorii

Nawet nie wiemy, ile razy ten temat pojawiał się w mailach, komentarzach i prywatnych wiadomościach. Dzisiaj postaramy się rozwiać wszelkie wątpliwości i odpowiedzieć na pytania: Jak nie zostać klepaczem kodu? Kiedy jest się „prawdziwym programistą”? oraz Czy bez studiów jest na to jakakolwiek szansa? Ciekawi naszego zdania? No to zaczynamy.

Studia (niekoniecznie programistyczne)

Na temat studiów mam do przekazania kilka refleksji. Zacznijmy od początku – ja nie mam studiów programistycznych (studiowałam Technologię Chemiczną oraz Zarządzanie i Inżynierię Produkcji). Kuba ma inżyniera z Informatyki i nie dokończone studia magisterskie. Jako, że wpis ten piszę ja (Ania), to skupie się na własnych doświadczeniach.

Po pierwsze, chemię skończyłam studiować kilka lat temu i nigdy nie pracowałam w tym zawodzie. Nie mniej studia te były wymagające, a także bardzo rozległe. Moi znajomi, którzy zostali w branży mówili wprost, że w pracy muszą uczyć się wszystkiego od nowa (tudzież dokładniej). Mogę się odnieść dziś do mojej chemicznej wiedzy – przez to, że nie była ona wykorzystywana na codzień, nie pamiętam za wiele, a nawet średnio trudne zadanie z termodynamiki czy chemii fizycznej byłoby dziś wyzwaniem. Wiedziałabym jednak, gdzie zacząć szukać potrzebnych informacji i najprawdopodobniej po nauczeniu się pewnych rzeczy od nowa byłabym w stanie je rozwiązać.

Moje studia inżynierskie były bardzo mocno nastawione na pokazanie całego spektrum chemii i przedstawienie podstaw. Dopiero ostatnio semestr pokazywał nam bardziej specjalistyczne rzeczy. Faktycznie, by w pełni je zrozumieć warto było znać te podstawy, niemniej by np. wykonać specjalistyczną analizę instrumentalną próbki, o wiele bardziej były przydatne równie specyficzne wiadomości z zakresu danej metody pomiarowej, czy konkretnych substancji, które należało wykryć. Przed każdymi labolatoriami musieliśmy więc przygotowywać się dokładnie do wykonywanego ćwiczenia. Nie znam osoby, która nie uczyła się zarówno o nowej metodzie analitycznej, jak i o konkretnych substancjach, które będziemy rozpoznawać. Nawet prymusi musieli/chcieli to powtórzyć przed zajęciami.

Na roku były różne osoby. Niektóre faktycznie dzięki studiom odkryły, że chemia to ich powołanie, inni wiedzieli to znacznie wcześniej, ale spora część … po prostu studiowała. Mieliśmy więc osoby zainsteresowane przedmiotem, zainteresowane dobrymi ocenami oraz zainteresowanych zaliczeniem. Każda z tych grup inaczej podchodziła do nauki. Każda ukończyła studia z zupełnie innym poziomem wiedzy…

Ze studiów magisterskich mogę dodać jeszcze jedną historię. Mieliśmy w ramach technik wytwarzania dział  obróbka skrawaniem. W gronie osób, z którymi wtedy się trzymałam nie było nikogo, kto miał znaczącą wiedzę z tej dziedziny (wszyscy po inżynierce zmieniliśmy kierunek). Jedna ze znajomych miała wujka, który zawodowo pracował na obrabiarce CNC. Poprosiła go o pomoc w projekcie. Jej projekt, który na podstawie tych konsultacji, był uznany za technologicznie poprawny, został słabo oceniony. Dziewczyna przekazała uwagi prowadzącego do swojego wuja. On zaśmiał się, i stwierdził,  że jego zakład dawno by zbankrutował ,gdyby pozwolił sobie na takie straty w obróbce materiału, jak i ilość czynności, które komplikowały proces. Z praktyki należało bowiem robić przede wszystkim tanio i z poszanowaniem surowca.

Co wynika z tych refleksji? Żadne studia nie uczynią z ciebie magika, eksperta, specialisty. Wiedza nieużywana szybko paruje z głowy. Nikt się za Ciebie nie nauczy, a samo zaliczenie nie gwarantuje, że znasz i rozumiesz dane zagadnienie. Często to co działa w labolatorium czy jest przekazywane na uczelni, jest zbyt oderwane od rynku i współczesnych praktyk. Oczywiście studia mogą też pomóc. Przede wszystkim w znalezieniu swojej dziedziny, zapoznaniu z pewnym spektrum ważnych tematów, czy po prostu nawiązaniu znajomości, które zaprocentują na przyszłość. Jednak sam dyplom nie gwarantuje niczego. 

Klepanie kodu

Co to tak w ogóle znaczy klepać kod? Dla mnie to programować bezmyślnie, bez zrozumienia. Bardzo proste zadania, które nie wymagają wysiłku, myślenia …

I teraz pomyśmy przez chwilę od czego zależy, czy programista będzie miał takie zadania… Po pierwsze od projektu, bo czasem projekty utrzymaniowe mogą po prostu polegać na takich drobnych przeróbkach – z drugiej strony, jeśli dołączasz do projektu, który jest na produkcji już od kilku lat, to samo zapoznanie z już istniejącym kodem może stanowić wyzwanie. Niemniej, w „nieciekawym projekcie” łatwiej o nieciekawe zadania.

W projekcie Scrumowym to zespoł jest odpowiedzialny za podział zadań. I powiedziałabym, że niezależnie od pozycji, czy lat doświadczenia, ta decyzja jest podejmowana. Bardziej liczy się zaangażowanie, chęć nauki, progres jaki robi się w ramach projektu, albo, czy ma się w danej chwili czas. Nigdy nie byłam w sytuacji, gdy zadania były dzielone na łatwe i trudne i przyznawane wg stanowisk/edukacji/płci itp. Fakt, czasami w ramach firmy, by np. zmienić projekt, musisz nauczyć się na temat danej technologii, czy poznać konkrenty wycinek biznesu. Nie jest to jednak wiedza tajemna, niedostępna, czy nie do przeskoczenia.

Wszystko jest w Twoich rękach. Swoboda i doświadczenie przyjdzie oczywiście z czasem i będzie okupione ciężką pracą, jednak dzięki niej i Twojemu rozwojowi będziesz mógł rozwiązywać coraz to bardziej skomplikowane problemy, ale też odnajdywać ciekawszą stronę tych prostych „małpich” zadań.

Klepanie kodu jest wyborem programisty. Być może boi się, nie jest jeszcze pewnien swoich umiejętności, nie chce zmieniać projektu, czy firmy. Nie chce wziąć odpowiedzialności za siebie, swój rozwój i kod. Woli pasywnie czekać na zadania. Woli marudzić, albo zwyczajnie jest mu z tym co robi dobrze (i to też jest ok, nie każdy musi być Programming Guru, a good enough w wielu przypadkach jest dobrą opcją).

Nie chcesz klepać kodu? Ucz się, rozwijaj. Dociekaj, zadawaj pytania. Staraj się zrozumieć problem, samodzielnie szukać rozwiązań. Bądź proaktywny. Jeśli twoje zadanie jest powtarzalne i nużące z dużym prawdopodobieństwem można je zautomatyzować. Domagaj się zadań, które będą dla Ciebie wyzwaniem, i które pchną Twój rozwój. Bądź odpowiedzialny nie tylko za efekt końcowy, ale też za cały proces definiowania User Story. 

„Prawdziwy kod” dla „prawdziwego programisty”

Uwaga, zdradzę Ci sekret. On nie istnieje. A przynamniej nie z poziomu Twojego IDE i tego, co w nim wpisujesz….

Wszystko co wytwarzamy, to nie sztuka dla sztuki, ale coś, co w rezultacie ma zaspokoić potrzeby użytkownika. Prawdziwy kod jest wtedy, gdy przynosi korzyść biznesową, zarabia na siebie.

Programując szybko powineneś zauważyć, że jest to bardzo elastyczne i różnorodne zajęcie. Co więcej, że każdy z nas (programistów) będzie lubić coś innego. Są programiści, którzy zajmują się fizyką w grach, są programiści przekładający modele matematyczne na kod, są tacy, którzy głównie skupiają się na optymalizacji i zwiększeniu wydajności. Jedni mają bzika na punkcie front-endu, inni wielbią back-end. Są tacy, którzy idą mocniej w strone architektury i wyboru technologii, są też tacy, dla których bardziej interesująca będzie praca bliżej klienta czy biznes analityka. Jedni chcą poznać jak najwiecej różnych technologii i języków programowania, inni chcą dojść do mistrzostwa w bardzo wąskiej dziedzinie…. Niemniej ciężko szukać przykładu osób, które są świetne we wszystkim i płynnie, bez wysiłku, bazując na magicznej wiedzy nabytej nieświadomie, są w stanie programować wszystko, zawsze i wszędzie.

I choć obszary zainteresowań są różne, każdy z nich jest tak samo ciekawy i nieciekawy jednocześnie. Bo tylko od TWOJEGO zaangażowania, pasji, nauki i doświadczeń zależy czy będziesz zadowolona z tego co robisz ,i czy dla Ciebie, Twoja praca będzie prawdziwą pasją, czy może zwykłym klepaniem kodu.

Nigdy nie odważyłabym się powiedzieć, że moj obszar zainteresowania jest lepszy niż Twój. Jest inny, być może w innych jego meandrach będę napotykać trudności, a i inne zadania będą sprawiały nam satysfakcje.  (Mój) jest dla mnie bardziej interesujacy. Twój tak samo ważny. Bo razem z innymi aspektami (które są interesujące dla innych programistów) składa się na działającą aplikacje. Ba, bo dzięki temu, że Ty wolisz coś innego, razem świetnie się uzupełniamy i dostarczamy użytkownikowi naprawdę dobry produkt. 

A pod koniec dnia właśnie o to chodzi! O satyfakcje biznesu, oraz o Twoje własne zadowolenie. I jasne, by być architektem, tech leadem czy ekspertem dziedzinowym, potrzebna jest wiedza, a także trochę lat różnorodnego doświadczenia. Dojście do tego poziomu jest jednak : ‚simple, but not easy’ i oznacza po prostu ciężką i wytrwałą pracę nad swoimi umiejętnościami.

  •  
  •  
  •  
  •  
  •  
  • Wojciech Osak

    Według tego co piszecie – bardzo doświadczony programista (który zrobił już nie jedno, który wie co jak działa w danej technologii i potrafi szybko i sprawnie rozwiązywać problemy nawet o nich nie myśląc zanadto) będzie się nudził i „klepał kod” bo z takim doświadczeniem jakie on ma będzie tylko robił (według jego punktu odniesienia) ” Bardzo proste zadania, które nie wymagają wysiłku, myślenia …”.

    Jestem przeciwny temu co piszecie. W ogóle mam żal do naszej branży za to jaka się staje (obecnie widzę programistów jako ludzi po studiach coachingu którzy są tuż tuż od genialnego startupu! :D ). Ciągłe wymagania „rozwijaj się! Najnowsze technologie! Najlepsze rozwiązania! Tylko ciekawe projekty! ” stworzą ludzi którzy skaczą z technologii na technologię bo właśnie stała się modna (a za pół roku mało się o niej słyszy i mało się w niej robi). Poza tym ciągłe ciśnienie rynku na rozwój jest chore i stoi w sprzeczności z byciem dobrym programistą – czyli takim który będzie potrafił stworzyć pełne dobre rozwiązanie danego problemu. A do tego nie potrzeba najnowszych technologii (tylko tych już sprawdzonych wiele lat) i nie potrzeba do tego ciągłego rozwoju (bo w końcu dochodzi się doświadczeniem do poziomu gdzie problemy rozwiązuje się szybko i łatwo mając duży bagaż doświadczeń no ale wtedy jest się ‚klepaczem’ ).

    Wydaje mi się że właśnie ukazałem przeniesienie teorii względności w odpowiedzi na pytanie co znaczy być klepaczem kodu :P

    • Cześć,
      nie do końca tak to rozumiemy jak piszesz – jeśli takiemu doświadczonemu programiście zlecisz napisanie całego systemu, to owszem, w 90% jego praca będzie odtwórcza (czy będzie się nudził czy nie – to zależy od jego preferencji, obłożenia innymi zadaniami, aktualnych celów itp; i to swoją drogą jest głównym przesłaniem artykułu, że dla każdego co innego jest ciekawe i w czym innym się spełnia).
      Nie zgodzę się też do końca z tym, co napisałeś na temat braku potrzeby ciągłego rozwoju – rozwój to nie jest poznanie wszystkich najnowszych bibliotek i używanie ich. Doświadczenie to przede wszystkim umiejętność dobierania technologii do problemu, przy czym problemu rozumianego nie technologicznie ale projektowo. Czy trzeba znać rynek i dostępne możliwości, żeby móc wybrać najpraktyczniejszą opcję? Kłóciłbym się, że tak. Czy trzeba być w nich ekspertem lub mieć jakiekolwiek projekty ‚zaliczone’? Raczej nie.
      W kwestii rozwoju innych umiejętności (np. interpersonalnych) spójrz na to z perspektywy firmy – jeśli masz super wiedzę z jakiegoś obszaru, ale nie dzielisz się nią lub nie wspierasz innych w zdobywaniu jej, to jesteś ryzykiem (jeśli zachorujesz / znajdziesz inną pracę / zmienisz zainteresowania) i wąskim gardłem firmy/projektu/zespołu. Dlatego od osób na stanowiskach seniorskich oczekuje się umiejętności uczenia innych, przekazywania wiedzy i wspierania innych członków zespołu w szukaniu rozwiązań problemów. Dzięki temu ich wartość w organizacji nie ogranicza się do wiedzy, którą posiadają (w takiej sytuacji korzysta się po prostu z usług konsultantów). Jednocześnie radzenie sobie z ludźmi i wspieranie ich nie jest tak proste jak się może wydawać – bardzo mało osób umie to robić ‚naturalnie’, i choć studia czy kursy z pewnością Cię tego nie nauczą, to dają one pewne podstawy i narzędzia, z których możesz korzystać.
      Najbardziej nie zgadzam się jednak z Twoją definicją bycia dobrym programistą jako „czyli takim który będzie potrafił stworzyć pełne dobre rozwiązanie danego problemu” – jakikolwiek projekt większy od strony internetowej na zaliczenie w szkole wymaga kompetencji, które przerastają możliwości (zarówno czasowe jak i umysłowe) jednej osoby (jeśli ma on odnieść sukces oczywiście – jak najbardziej możliwe jest stworzenie ‚jakiegoś’ projektu przez jedną osobę). Nie spotkałem się nigdy z sytuacją, w której produkt czy projekt byłby zrealizowany przez jedną osobę i odniósł jakikolwiek sukces.

      Zgadzam się natomiast, że pewne rzeczy po prostu działają i na siłę używanie ‚najnowszych’ nie ma dużego sensu dla samego faktu używania najnowszych technologii (dla przykładu, jeśli masz zespół w Javie, to zmuszanie go do stworzenia projektu w Scali nie ma sensu; jeśli jednak Twój zespół jest ciekawy jak działa Scala czy też woli Scalę od Javy, to zrobienie tego samego projektu w Scali z tym zespołem ma zdecydowanie większy sens).

  • kawa

    Ciekawy artykuł :)
    Rozumiem komentarz poniżej, że „wszyscy ciągle tylko rozwój, rozwój” i że ciężko jest znaleźć na to czas, kiedy od rana do wieczora siedzi się w małorozwojowej pracy, a weekendy trzeba przeznaczyć na zajmowanie się domem i odrobinę odpoczynku lub życia towarzyskiego (zresztą był tu o tym artykuł niedawno ;)). Ale wyraźnie widzę, że branża IT to taka kraina czarów – „trzeba biec, żeby stać w miejscu” i może się to nie podobać, ale taka już jej specyfika. Ja akurat lubię się uczyć i nie boję się nowych rzeczy ;)
    Co do studiów, dobrze rozumiem odczucia, jestem po bardzo zbliżonym kierunku, można powiedzieć, że wymarzonym (przynajmniej kiedyś ;)). Mam też niepełne studia informatyczne i uważam, że dużo dają. Żałuję, że przy studiowaniu dwóch kierunków i staraniu się o pracę na stażach i praktykach nie miałam czasu i energii, żeby pełniej czerpać ze studiów informatycznych (jak bardzo chciałabym chodzić teraz na wykłady i ćwiczenia, rozwiązywać zadania programistyczne i matematyczne!). Oczywiście, że studia to nie wszystko, że potrzebna jest też praktyka, no ale to każdy chyba wie. Ogólnie, jeśli tylko ktoś ma możliwości (przede wszystkim dużo czasu), to bym zdecydowanie polecała. Z tym, że nie chodzi o to, żeby jakoś zaliczyć, bo to często nie jest trudne – ważne żeby, jak najwięcej z tego wynieść, co często oznacza sporo pracy poza zajęciami czy już kompletnie we własnym zakresie (o praktykach/stażach ZANIM się studia skończy też nie piszę, bo to też oczywiste). Tylko wtedy to ma sens.