Bądź profesjonalnym programistą

Drogi Programisto, kim Ty właściwie jesteś?

Artystą, rzemieślnikiem, inżynierem a może architektem…

Nie ma jednoznacznej odpowiedzi, ale przyglądając się konstrukcjom, wybudowanym przez programistów, da się odróżnić dobry kod od kiepskiego.

Dlaczego się nad tym zastanawiam? Bo to właśnie profesjonalizm i jakość są nieodłącznymi elementami historii sukcesu i to one przyczyniają się do powstawania produktów, które stają się kultowe. Weźmy na przykład historię Steve’a Jobs’a i firmy Apple, którym niezależnie od sympatii do samej marki, międzynarodowego sukcesu odmówić nie można. Steve miał obsesję na punkcie detali. Perfekcyjnie dopracowywał każdy szczegół od pudełka, przez technologie aż po finalne doświadczenia klienta, a nie będąc zadowolonym z efektów, potrafił wyrzucić do kosza projekt, na który poświęcono ogrom pracy i czasu. Podobnie wygląda praca programisty, który spędzając długie godziny na mozolnym rozpisywaniu kodu nie może po prostu odpuścić. Jeden drobny szczegół może zadecydować o całym dziele i finalnej ocenie jego twórcy.

Konstrukcje, które przechodzą do historii…?

Kim więc jest programista i po czym poznać, że jest profesjonalistą? Czy wystarczy do tego ukończenie studiów informatycznych? Niekoniecznie. Znajomość kilku języków lub frameworków? Raczej też nie… A gdyby tak zapytać samego programistę?

– Drogi Programisto, kim Ty właściwie jesteś?
– Eee… yyy… ale że… o co się rozchodzi?
– No wiesz – artystą, rzemieślnikiem, wyrobnikiem, błędnym rycerzem, kosmitą, nindżą…
– Aaa, ok. No w zasadzie to kimś pomiędzy inżynierem a artystą
– Inżynierem, powiadasz… Takim jak na przykład ci, co projektują mosty?
– Mniej więcej
– I jeszcze artystą… Czyli to tak jakbyś tworzył te ładniejsze mosty? Albo projektował takie na przykład katedry?
– Nooo, powiedzmy… Ale do czego zmierzasz?
– Czyli po tych Twoich „koderskich mostach” ludzie będą spacerować powiedzmy przez 100 lat…
– Nie no, bez przesady, cykl życia produktów informatycznych jest…
– … z dziećmi i znajomymi, i będą podziwiać ich piękno…
– Słuchaj, to nie tak…
– … i będą czuć się miło i bezpiecznie, bo zaprojektował i stworzył je jakiś profesjonalista?
– … Wiesz co, muszę lecieć, bo mam parę bugów do załatwienia…

Jeden z moich byłych szefów definiował profesjonalizm, jako „umiejętność przewidywania skutków podejmowanych decyzji i zabezpieczenia się przed tymi negatywnymi”. Idąc tym tropem rolą programisty jest więc przewidywanie przyszłości i tego, jak ze stworzonego przez niego produktu będą korzystać użytkownicy i jak jego funkcjonalności będą zachowywały się wobec zmieniającego się otoczenia. Tak jak w przypadku dobrego mostu, którego konstrukcja musi być solidna, design ponadczasowy a funkcjonalność niezależna od zmieniającego się krajobrazu miasta.

Tak jak nikt nie ingeruje w pracę architekta, który posiada specjalistyczną wiedzę, tak i w tym przypadku Drogi Programisto wszyscy kierownicy, handlowcy, konsultanci i klienci pokładają swoją ufność w Tobie, liczą na Twój profesjonalizm, oczekują sprawdzenia, czy ich wymagania pasują do systemu. Nikt inny nie potrafi rzetelnie ocenić, czy świeżo zamówiona barierka na Twoim „koderskim moście” nie runie wraz z kawałem całej konstrukcji, gdy oprze się o niego kilka osób jednocześnie.

Słuchaj, ale polegaj na doświadczeniu

– Fajnie się mówi, ale wiesz jak jest w życiu…
– Możesz wyjaśnić?
– Terminy są takie, że nie ma kiedy oddechu złapać. Klienci wymyślają różne głupoty, handlowcy nam to wciskają na siłę do zrobienia, a jeszcze musimy łazić na jakieś bezsensowne spotkania
– No to może jakiś inny zawód zajmuje się jakością kodu, tworzonego przez Ciebie, Drogi Programisto?
– Eee… yyy… idź już sobie…

Nie da się ukryć, dużo w tym prawdy, a potwierdzeniem może być chociażby cytat z „Czystego kodu” Roberta C.Martina„Zaraz, zaraz. Jeżeli nie zrobię tego, co mi kazał mój kierownik, zostanę zwolniony”.

Prawdopodobnie nie. Większość kierowników to ludzie, którzy chcą prawdy, nawet jeżeli tak się nie zachowują; chcą dobrego kodu, nawet jeżeli mają obsesję na punkcie harmonogramów. Mogą z pasją bronić harmonogramów i wymagań — to ich praca. Naszą pracą jest obrona kodu z równie wielką pasją.

Wyobraźmy sobie następującą sytuację: przed operacją pacjent zdecydowanie żąda, aby lekarz przestał wreszcie myć ręce, ponieważ zabiera to zbyt wiele czasu. Jasne, że pacjent jest szefem, ale każdy lekarz absolutnie odrzuci takie żądania. Dlaczego? Ponieważ lekarze wiedzą więcej niż pacjent na temat ryzyka choroby i infekcji. Byłoby to nieprofesjonalne (a oprócz tego karalne), gdyby lekarz w tym przypadku zgodził się z pacjentem.

Mocne, prawda?

– No niby tak, ale ostatecznie ważne jest tylko to, żeby program działał zgodnie z założeniami.
– A gdzie ten artysta, o którym wspominałeś?
– Wiesz, czasami jak mam wenę, to strzelę w jednej linii taki kod, który innym zająłby z pół ekranu.
– A ci „inni” potrafią potem rozszyfrować ten Twój przebłysk geniuszu?
– Eee… yyy… a czemu pytasz? To ważne?

Ważne. Statystyki mówią, że praca programisty to w około 90% czasu… czytanie kodu. Nie pisanie – czytanie! Oczywisty wniosek nasuwa się sam- jeśli muszę się przebić przez kiepski kod, stracę więcej czasu na modyfikację niż w czystym kodzie. Programiści to wiedzą – ale i tak często ulegają presji tworzenia bałaganu, byleby dotrzymać terminów. W efekcie następna modyfikacja zaśmieconego kodu zajmuje trochę więcej czasu (bo coraz trudniej się rozczytać), kolejna – jeszcze więcej, i tak w kółko.

Jedynym sposobem utrzymania łatwości i tempa rozwijania aplikacji jest utrzymywanie czystości w kodzie. Jak pisze Grady Booch artyzm programisty poznaje się po czystym kodzie, który „[…] jest prosty i bezpośredni. Czysty kod czyta się jak dobrze napisaną prozę”.

Wszystko zależy od Ciebie

Nikt Cię nie wyręczy w bronieniu jakości Twojego kodu. Wręcz przeciwnie – to od Ciebie ludzie oczekują fachowości. Płacą Ci spore pieniądze (wg Pracuj.pl już dawno przegoniliśmy prawników i lekarzy) nie za odrabianie pańszczyzny, tylko za wykazywanie się profesjonalizmem w swoich zajęciach. Chcą, żebyś brał na siebie odpowiedzialność za tworzone produkty, żebyś dążył do mistrzostwa i sam wprowadzał wysokie standardy w zakręconym programistycznym światku. A że połączenie przyzwoitych zarobków z autonomią i mistrzostwem jest świetnym źródłem motywacji (co potwierdza Beata Nowakowska w swoim poście, Daniel Pink i inni) – to tym lepiej! Właśnie dlatego ciągłe dążenie do profesjonalizmu może być dla programisty pasją, za którą w dodatku dostaje godziwe pieniądze. Czego sobie i Tobie, Drogi Programisto, życzę.

– Fajnie, ale w mojej firmie nikt nie dba o dobre praktyki, mamy inne cele i w ogóle ciężko się przebić z dobrymi pomysłami.
– Zawsze masz dwa wyjścia: Możesz zmienić tą firmę w nieco inną, albo zmienić tą firmę na nieco inną

Art-18