5 błędów (początkujących) programistów

12 września
Piotr Machlarz
5 błędów (początkujących) programistów
Spójrzmy prawdzie w oczy, programiści popełniają błędy. Dużo błędów. Koduję od 5 lat, od 3 robię to komercyjnie. Udało mi się w tym czasie zidentyfikować (również na własnej skórze) wiele problemów, które utrudniają programistom rozwój kariery.

Jako, że staram się być świadomy kodu, który tworzę, stale szukam sposobów na jego ulepszanie i lubię dzielić się przemyśleniami z innymi, spróbuję podsumować tutaj moje obserwacje i zaproponować sposoby na uniknięcie wspomnianych błędów.

  1. Niezadawanie pytań

    To jeden z głównych błędów początkujących programistów. Dostajesz nowe zadanie i od razu chcesz siąść do kodu, puścić pierwszego commita, zrobić dobre wrażenie i pochwalić się produktywnością. Wielu programistów przechodzi przez taki okres na początku kariery, ja nie byłem wyjątkiem.

    Zapał i motywacja to bardzo przydatne cechy, ale praca bez planu lub zrozumienia zadania, to zwykle strata czasu i energii. Zdarza się też, że w strachu przed zepsuciem dobrego wrażenia, początkujący programista wstrzymuje się przed zadawaniem pytań. Gdy natrafi na problem, chce za wszelką cenę rozwiązać go sam. W skrajnych przypadkach brak zrozumienia wymagań, w połączeniu z chęcią zrobienia dobrego wrażenia, kończy się katastrofą. Zadanie, które powinno zająć 2 dni, po tygodniu wciąż nie jest skończone i trudno oszacować ile czasu ta sytuacja potrwa. Im bardziej przekracza się założone terminy, tym trudniej poprosić o pomoc.

    Właśnie dlatego dobrze jest pytać za każdym razem, gdy natrafiasz na przeszkodę trudną do przeskoczenia. Im wcześniej, tym lepiej.

  2. Ignorowanie szerszego kontekstu

    Skupiając się nad implementacją lub strukturą kodu, łatwo przeoczyć szerszy kontekst. Programistom często nie chce się zaglądać do dokumentacji technicznej, czy popracować nad wiedzą merytoryczną związaną z domeną projektu. Skutkuje to nieoptymalnymi lub wręcz błędnymi decyzjami na poziomie designu oraz implementacji.

    Dokumentacja jest niezbędna do rozwiewania wszelkich niejasności. Podstawowa znajomość domeny projektu jest kluczowa, by dobrze rozumieć wymagania biznesowe. Doświadczony programista powinien poznać domenę każdego nowego projektu, by być efektywnym i podejmować dobre decyzje. W pracy nad projektem z branży finansowej niezbędna jest znajomość pojęć takich jak general ledger albo disbursement account, w branży e-commerce trzeba wiedzieć czym jest itinerary i fulfillment, natomiast w logistyce morskiej byłyby to port call albo berthing.

  3. Przyjmowanie zbyt wielu założeń

    W modelowaniu domeny zawsze trzeba przyjąć jakieś założenia. Gorzej, jeśli nasze założenia są błędne. Powodują wtedy trudne do znalezienia i rozwiązania problemy, nierzadko kończące się przepisywaniem dużych części aplikacji i skutkujące niepotrzebną stratą czasu i pieniędzy.

    To tylko część błędnych założeń programistów, na które trafiłem w mojej pracy:

    • system nie będzie używany w innych strefach czasowych (typowe dla Anglików),
    • strona internetowa nie będzie wyświetlana w mniejszych/większych rozdzielczościach,
    • użytkownik zawsze będzie miał dostęp do Internetu,
    • dwóch użytkowników nie będzie w tym samym czasie edytowało tych samych danych,
    • 21 bitów wystarczy do zapisu ceny biletu na pociąg,
    • użytkownik nie będzie używał AdBlocka.

    Więcej podobnych założeń można znaleźć wyszukując frazę „falsehoods programmers believe”.

    Formułowanie założeń jest naturalne, a błędy niestety w większości przypadków są nieuniknione. Dobrze jest być tego świadomym i przemyśleć dokładnie projekt systemu przed implementacją.

  4. Nieuzasadnianie swoich decyzji

    W codziennej pracy programisty korzystamy z wielu źródeł informacji. Szukając rozwiązania problemu, zdarza się znaleźć odpowiedź w postaci działającego kodu na GitHubie lub StackOverflow. Najłatwiej jest wtedy skopiować ten kod do swojego i cieszyć się, że działa. To nie wystarczy. Trzeba jeszcze potrafić wytłumaczyć, dlaczego działa. Bezrefleksyjne kopiowanie kodu pozwala zaoszczędzić czas tylko pozornie. W praktyce stawia to programistę w bardzo złym świetle, gdy ktoś poprosi o wytłumaczenie, dlaczego jest to napisane akurat w ten sposób. Widziałem wiele takich sytuacji podczas code review.

    Umiejętność uzasadnienia każdej swojej decyzji podczas pracy z kodem jest świetnym wyznacznikiem poziomu programisty. Oznacza to, że jest świadomy podejmowanych wyborów i poświęca czas na zrozumienie kodu i architektury aplikacji.

  5. Nieodpowiedzialność

    Przyjmowanie na siebie odpowiedzialności to oznaka dojrzałości. Programistom niestety czasem jej brakuje i przejawia się to np. niedotrzymywaniem terminów bez żadnej dodatkowej informacji, albo nietestowaniem swojego kodu. Nieodpowiedzialnemu programiście trudno jest awansować i raczej nikt nie powierzy mu trudniejszych (a przez to często ciekawszych) zadań. Dlatego warto dbać o swój wizerunek profesjonalisty. W tym celu zawsze dotrzymuj obietnic. Jeśli widzisz, że nie skończysz zadania na czas, poinformuj o tym wszystkich zainteresowanych i wyznacz nowy termin. Zawsze bądź gotów pomóc komuś zrozumieć twój kod, nieważne jak dawno napisany. Bierz na siebie trudne zadania – to świetnie podkreśli twój profesjonalizm i odpowiedzialność.

    Podsumowanie

    1. Zadawaj pytania. Samodzielne rozwiązywanie problemów jest jedną z podstawowych umiejętności programisty, ale trzeba wiedzieć, kiedy poprosić o pomoc.
    2. Dostrzegaj szerszy kontekst (big picture). Poznaj domenę problemu oraz spójrz na swoją pracę z różnych perspektyw.
    3. Weryfikuj swoje założenia. Think twice, code once.
    4. Uzasadniaj swoje decyzje. Bądź świadomy swoich wyborów.
    5. Bierz odpowiedzialność za swoją pracę. Bądź słowny i nie bój się wyzwań.