Dobry programista. Czym się wyróżnia?

Wielu koderów będzie mówiło o sobie, że są dobrymi programistami. W niektórych przypadkach rzeczywiście tak będzie. Problem polega jednak na tym, że dla każdej z tych osób określenie „dobry programista” może oznaczać co innego. Dlatego warto zastanowić się, czym wyróżnia się dobry programista, co sprawia, że możemy go w ten sposób nazywać.
 

Według badania Evans Data Corporation na świecie jest 21 mln zawodowych programistów. To ogromna społeczność. O ilu z nich można powiedzieć, że to dobrzy programiści? Niestety, tego nie wiadomo. Nie ma żadnych wiarygodnych badań na ten temat. Czy łatwo byłoby je w ogóle wykonać? To pytanie do naukowców, ale możemy się domyślać, że najpierw trzeba by wyodrębnić pewne charakterystyczne cechy dobrego programisty, postawę, sposób działania. Postanowiliśmy sprawdzić, czym rzeczywiście wyróżnia się taka osoba. Dobry koder powinien mieć oczywiście dużą wiedzę na temat programowania i najnowocześniejszych technologii. To oczywiste. Ale co jeszcze? Po długich analizach i wielogodzinnej zadumie doszliśmy do wniosku, że dobry programista to osoba, która:
 

Stawia na rozwój


Duża wiedza i umiejętności programistyczne, o czym już wspominaliśmy, to jedno, ale dobry programista stawia także na nieustanny rozwój. Jak pokazują statystyki wspomnianego już portalu Stack Overflow, ponad 76% profesjonalnych koderów ukończyło studia. Dla osoby, która chciałaby nosić zaszczytne miano „dobrego programisty” to jednak zaledwie jeden z etapów w rozwoju. Te same statystyki podają, że 91,1% profesjonalnych koderów regularnie się dokształca, z czego 46,6% uczęszcza na kursy organizowane przez pracodawcę lub szuka takich poza miejscem zatrudnienia, na przykład u nas, w Bulldogjob (zakładka Szkolenia), a 44,1% korzysta z kursów online, ponad 25% ćwiczy swoje programistyczne umiejętności w hackathonach i konkursach koderskich, a ponad 16% zdobywa branżowe certyfikaty.
 

Chociaż wiele osób kończy naukę wraz z opuszczeniem murów uczelni lub szkoły, dobry programista nie należy do tego grona. Taka osoba ma zupełnie inne nastawienie, charakteryzuje go coś, co można określić terminem „lifelong learning”, czyli uczenie się przez całe życie. Sama forma zdobywania wiedzy nie ma tu kluczowego znaczenia i zależy od indywidualnych preferencji, czasu, jaki można przeznaczyć na naukę, możliwości finansowych itp. Dobry programista ma instynkt poszukiwacza wiedzy, ma świadomość, że branża IT rozwija się bardzo szybko i trzeba ciągle się uczyć, doskonalić, aby pozostać wartościowym koderem. Robert C. Martin w książce „Mistrz czystego kodu. Kodeks postępowania profesjonalnych programistów” napisał nawet, że 40 godzin w tygodniu należy poświęcić pracodawcy, a 20 godzin zachować dla siebie, czytając, ucząc się i ćwicząc w tym czasie, aby zwiększać nieustannie swoje umiejętności jako programista. Martin przestrzega również w swojej książce: Biada programistom, którzy przestali się uczyć nowych języków. Będą mogli tylko popatrzeć, jak oddala się od nich czołówka. Dobry programista nigdy sobie na to nie pozwoli, a dodatkowo będzie regularnie sprawdzał poziom swojej wiedzy i swoje umiejętności w praktyce, na przykład korzystając z takich narzędzi, jak dostępny na Bulldogjob Realskill.
 

Szanuje czas


Dla profesjonalisty czas jest bardzo cenny. Dobry programista nie może pozwolić sobie na jego marnowanie. Dlatego taka osoba szanuje czas zarówno własny, jak i innych ludzi. Co to oznacza w praktyce? Przede wszystkim chodzi o mądre i efektywne zarządzanie czasem, a ściślej pisząc, odpowiednie rozplanowanie zadań i wykonywanie wszelkich czynności jak najmniejszym kosztem sił i przeznaczonych na to minut, na przykład unikanie wysyłania niekończących się e-maili (czasem lepiej zadzwonić), odpowiadania od razu na każdą wiadomość, pozostawiania najważniejszych i najtrudniejszych zadań na koniec dnia, rezygnacja z przedłużających się, bezproduktywnych spotkań itp. Można korzystać tak naprawdę z bardzo różnych metod zarządzania czasem, na przykład technika pomodoro (ustawienie czasomierza na 25 minut i w tym czasie skupienie się tylko i wyłącznie na konkretnym zadaniu), 5S (odpowiednio zorganizowane stanowisko pracy, które w rezultacie podnosi wydajność – usunięcie niepotrzebnych rzeczy, przypisane najczęściej używanym rzeczom konkretnych miejsc, zachowanie ładu na biurku, ustalenie stałych interwałów pracy i samodyscyplina we wdrażaniu tych zasad), czy prawidłowe używanie metodyki scrum (jedna z metodyk zwinnych, praca podzielona na mniejsze etapy, wyodrębnienie zadań zaplanowanych, realizowanych, weryfikowanych, pilnych do zakończenia, wykonanych) itp.
 

Dobry programista nie traci czasu, potrafi go oszacować w odniesieniu do specyfiki konkretnego projektu, świadomie planuje zadania i w skupieniu je wykonuje. Taki profesjonalista unika brnięcia w bałagan. Gdy dostrzega, że dany kod mógłby być lepszy, od razu go poprawia, ponieważ zdaje sobie sprawę, że prędzej czy później i tak będzie to musiał zrobić. Ważne jest także to, że dobry programista nie pozwala nakładać na siebie zbyt dużej presji, nie bierze dodatkowych zobowiązań, które mogłyby obniżyć jakość jego pracy. Taki koder unika pośpiechu, ponieważ doskonale wie, że to wróg wysokiej jakości pracy, woli skupić się na utrzymaniu czystego kodu, co pozwala mu dalej go rozwijać bez kłopotu. W czasie kryzysu i presji wywołanej deadlinem ciągle zachowuje spokój i stosuje swoje sprawdzone, wypracowane w praktyce metody. Często to właśnie takie podejście ratuje projekt, który nagle zaczyna się sypać.
 

Przygotowuje dokładną dokumentację


Wielu programistów przyznaje, że przygotowywanie dokumentacji jest jedną z tych kwestii, które są znienawidzone przez koderów. Nic dziwnego, że niejeden programista reaguje na słowo „dokumentacja” alergicznie. Problem polega jednak na tym, że z jednej strony programiści nienawidzą pisania dokumentacji, a z drugiej – nienawidzą źle napisanej dokumentacji. I tak źle, i tak niedobrze. Jednak dobry koder wyróżnia się także tym, że nie traktuje przygotowywania dokumentacji jako zła koniecznego. Ma zupełnie inne podejście do tej kwestii. Zdaje sobie doskonale sprawę, że im dokładniejsza dokumentacja już od samego początku rozwijania projektu, tym sprawniej będzie przebiegała praca, a członkowie zespołu będą mogli lepiej wykonywać swoje zadania. Dobry programista ma nawyk, aby maksymalnie ułatwiać pracę wszędzie tam, gdzie to tylko możliwe. Przekłada się to również na tworzoną przez niego dokumentację i jej poziom. Dobra dokumentacja jest dokładna, pozbawiona błędów, jest spójna i napisana w sposób jasny, a do tego można w niej znaleźć łatwo potrzebne informacje. Dzięki takiej dokumentacji nie tylko członkowie zespołu łatwiej pracują, ale również w przyszłości będą miały ułatwione zadanie te osoby, które będą wprowadzały zmiany w kodzie lub będą implementowały nowe funkcjonalności. Najczęściej kończy się to generowaniem znakomitej części dokumentacji z kodu przy pomocy odpowiednich narzędzi. I jeszcze jedno na koniec tej części artykułu: dobry programista regularnie aktualizuje dokumentację.

 

Zadaje pytania


Pamiętacie Sokratesa? Uparcie powtarzał przez cały dzień: Oida ouden eidos! To znaczy po prostu: wiem, że nic nie wiem. Z dobrym programistą jest podobnie. Potrafi się przyznać do swojej niewiedzy w przeciwieństwie do wielu innych koderów, którzy tylko stwarzają pozory, że ma wiedzę na jakiś temat. W rezultacie okazuje się, że ci ostatni w panice poszukują rozwiązania w internecie, bywa, że przywłaszczają go sobie. Wtedy niejeden współpracownik spogląda na takiego sprytnego kodera i myśli sobie „To jest dopiero programista!”. Jednak takie oszukiwanie współpracowników, a przede wszystkim samego siebie do niczego dobrego nie prowadzi. Programowanie to zawód oparty na wiedzy, a nie ma człowieka, który wie wszystko. Dobry programista nie ukrywa tego i potrafi zadawać pytania tym, którzy znają odpowiedź, zaprasza ich do wspólnego rozwiązywania problemu i jednocześnie przez cały czas się uczy. Poszukuje podpowiedzi i rozwiązań, korzystając z różnych źródeł, na przykład z artykułów firmowych na Bulldogjob. Przyznanie się do własnych ograniczeń jest pierwszym krokiem do wielkości, również w programowaniu.

Zawsze testuje swój kod


Dobry programista nie unika testowania własnego kodu. Robi to na każdym etapie pracy nad projektem. To bardzo rozsądne podejście, ponieważ pozwala uniknąć żmudnego poszukiwania błędu, gdy większość kodu jest już gotowa. Wtedy konieczne jest często zaangażowanie większych sił i zainwestowanie więcej czasu, aby wykryć bug. Nic dziwnego, że w takiej sytuacji dużą popularność zyskują takie techniki tworzenia oprogramowania, jak na przykład Test-driven development (TDD). Dobry programista doskonale wie, że lepiej wykorzystać TDD, niż później zmagać się ze żmudnym debugowaniem kodu. Dzięki testom jednostkowym profesjonalista sprawdzi, czy kod rzeczywiście działa tak, jak powinien. Oczywiście wyniki są najlepsze, gdy pokrycie kodu testami jest jak największe. Niektórzy eksperci posuwają się nawet do stwierdzeń, że do 2022 roku programiści, którzy nie wykonują TDD, staną się bezrobotni. Być może jest w tym nieco przesady, ale nie zmienia to faktu, że testy są bardzo istotne i oczywiste dla dobrego programisty. TDD to jeden z przykładów, bo profesjonalny developer może korzystać z wielu różnych rodzajów testów. Oprócz tego, że pisze testy dba o ich jakość, która jest dużo ważniejsza niż ich ilość.
 

Nasze zestawienie nie wyczerpuje wszystkich kwestii, jakie mogą wpływać na to, czy danego programistę uznamy za dobrego. Nie taka była zresztą intencja tego artykułu. Chodziło raczej o zasygnalizowanie problemu i sprowokowanie dyskusji, a także zadumy. Warto usiąść i rozejrzeć się dookoła. Być może w Waszym sąsiedztwie znajduje się taki dobry programista. Wtedy warto zastanowić się, co jeszcze sprawia, że uznajecie go za dobrego kodera. Wtedy dobrze jest pomyśleć również, co możecie zrobić, aby samemu stać się dobrym programistą. A może już nim jesteście?