Szczególna cecha umysłu

Czy istnieją superprogramiści? Opinie na ten temat wśród przedstawicieli firm zajmujących się tworzeniem oprogramowania są podzielone.

Czy istnieją superprogramiści? Opinie na ten temat wśród przedstawicieli firm zajmujących się tworzeniem oprogramowania są podzielone.

Superprogramistów można również nazwać 10xprogramistami, bowiem efekty ich pracy są o rząd wielkości - nie zaś kilkanaście czy kilkadziesiąt procent - lepsze od pozostałych osób parających się tym zawodem. O tym zdumiewającym zjawisku napisał niedawno w jednym z amerykańskich pism informatycznych John Parkinson, szef ds. technologii w firmie konsultingowej Cap Gemini Ernst & Young. Jego doświadczenia wskazują (przez wiele lat kierował pracami kilkudziesięcioosobowych lub większych zespołów programistów), że średnio 75% finalnego kodu jest dziełem zaledwie 5% programistów biorących udział w projekcie, a co więcej z ich rąk (czy też raczej umysłów) pochodzi praktycznie cały "soft" doskonałej jakości (tj. nie tylko bardzo efektywny, ale przede wszystkim od początku charakteryzujący się małą liczbą błędów). Na ocenę pracy programisty składają się zarówno szybkość pisania kodu, jak i liczba tworzonych błędów (a tak naprawdę iloraz tych dwóch wielkości), czyli umiejętność dochodzenia do szukanego rozwiązania. Jego warsztat zawodowy tworzy umiejętność wysławiania się w danym języku programowania.

Tajemnica osiągnięć superprogramisty nie tkwi w wykorzystaniu wyrafinowanych narzędzi czy metodologii. Nie jest również efektem heroicznych wysiłków i pracy ponad siły (chociaż superprogramiści charakteryzują się zazwyczaj silnie zindywidualizowanym trybem pracy i przyzwyczajeniami, które dla innych mogą się wydawać osobliwe). "To całkiem zwyczajna, choć tak rzadka umiejętność znajdowania najprostszego rozwiązania danego problemu. Przeciętny programista tworzy kod z grubsza dwa razy większy niż potrzeba i w dodatku trzy razy wolniejszy niż powinien, traci bowiem z oczu podstawowe cele, jakie powinny przyświecać jego pracy. Woli bawić się klockami, tyle że wirtualnymi " - mówi Tomasz Kunicki, prezes AdRem Software.

Kwestia wyobraźni

Coraz częściej podnosi się argument, że do efektywnego zarządzania zespołem programistów bardzo przydatna może być znajomość psychologii, w szczególności rozumienia procesów mentalnych, których efektem jest powstawanie kodu. W końcu programy tworzą ludzie, a nie komputery! W artykule Understanding the Psychology of Programming, opublikowanym przez znany serwis internetowy DevX (http://www.devx.com ), przeznaczony dla środowiska developerów, nowozelandzki konsultant Bryan Dollery stawia tezę, że wydajność programistów mocno zależy od fizycznych warunków otoczenia miejsca ich pracy. Programowanie jest procesem twórczym, wymaga zatem dłuższych okresów mentalnego skupienia oraz respektowania indywidualnych potrzeb poszczególnych osób biorących udział w tym procesie. Dobrzy programiści potrafią w znacznie większym stopniu i na znacznie dłużej niż przeciętna w populacji skoncentrować się na jednym zadaniu, przy całkowitym pominięciu wszystkiego, co nie przynależy do tego zadania (co zresztą stało się powodem do sformułowania przez niektórych psychologów słabo udokumentowanej hipotezy, że duża część programistów to osoby cierpiące na lekkie lub średnie stopnie autyzmu - nb. znany periodyk Wired w grudniowym numerze z ub.r. przytaczał dane o alarmującym wzroście liczby dzieci z syndromem Aspergera mieszkających w Krzemowej Dolinie).

Programowanie jest procesem, który w dużej mierze odbywa się w podświadomości. Dobry kod powstaje w sytuacji, w której programista w tak dużym stopniu jest skupiony na swojej pracy, że pewne rzeczy po prostu "płyną" z jego głowy. "Programowanie jest kwestią wyobraźni. Dobry programista potrafi sprawnie poruszać się po wielowymiarowych przestrzeniach, które tworzy w swojej głowie. Taki wirtualny model, tak ja sen, czasem jest uchwytny tylko w pewnych stanach umysłu" - uważa Piotr Nowak, senior project manager w Przedsiębiorstwie Usługowo-Produkcyjnym SPIN. Gdy tymczasem programista musi nagle zmieniać zupełnie kontekst swojego myślenia, odpowiadać na pytania nie związane z zadaniem wykonywanym w danej chwili, ten przepływ myśli zostaje zakłócony i powrót do właściwego stanu umysłu zajmuje kilka, kilkanaście czy nawet kilkadziesiąt minut. "Programy robi się całym sobą, w trakcie tego procesu nie może istnieć nic poza tym. Nie chodzi tu tylko o kodowanie - w tworzeniu dobrego oprogramowania nie ma ścisłej hierarchii i podziału ról. Każdy dobry programista musi być po części projektantem" - uważa Andrzej Odyniec. Potwierdza to Tomasz Kunicki. "Superprogramiści potrafią być jednocześnie budowniczymi i architektami, płynnie przechodząc różne poziomy abstrakcji, podczas gdy typowy programista zazwyczaj pozostaje na tym najniższym - procesie kodowania" - twierdzi Tomasz Kunicki.

Oczywiście czynnik skupienia jest istotny w każdej pracy umysłowej, ale w przypadku programowania odgrywa on kluczową rolę. Zatem o zbyt niskiej wydajności programistów często decydują zła organizacja ich pracy i lekceważenie krytyczności czynnika koncentracji, a więc także często podyktowana pozorną oszczędnością niesprzyjająca tejże koncentracji aranżacja miejsca pracy ( "Jeśli nie potrafisz wydobyć ze swoich programistów tego co najlepsze, to w jaki sposób zamierzasz tworzyć dobre programy?" - pyta Bryan Dollery).

Idąc tropem tez Dollery'ego, można by zauważyć, że superprogramiści to ludzie odporniejsi na działanie tych czynników zewnętrznych, bardziej od nich niezależni. Wyrwani ze stanu koncentracji umysłu potrafią doń błyskawicznie powrócić, zaś same fizyczne warunki miejsca ich pracy nie mają dla nich większego znaczenia. Oczywiście, jeśli tylko spełni się ich, czasem dziwaczne, zachcianki i wymagania.