12 cech, które dobry programista posiadać powinien
Programowanie to rzemiosło czy powołanie? Co to znaczy być dobrym programistą? Na co zwrócić uwagę przy rozwijaniu własnego warsztatu? Jakie cechy pomogą programiście przy pracy w projektach?
Oto 12 umiejętności i cech, które naszym zdaniem są kluczowe, by być dobrym programistą.
Umiejętności IT
1. Podstawowe umiejętności informatyczne. istnieje zestaw umiejętności, które każdy powinien posiadać. Po pierwsze, programista musi mieć umiejętności badawczo-analityczne, umiejętność czytania ze zrozumieniem, w tym po angielsku, praktyczną wiedzę z zakresu znajomości wzorców projektowych, bibliotek i frameworków, a także umiejętność zrozumienia problemów informatycznych. Teoretycznie kluczowe mogły by być dobrze prowadzone zajęcia na uczelni, które pomagały studentom rozwijać umiejętności logicznego myślenia, twórczego rozwiązywania problemów i komunikacji. Zajęcia, oparte na pracy zespołowej, wymagałyby skutecznej komunikacji między członkami zespołu, który ma za zadanie wspólnie rozwiązać problem i wyjaśnić proponowane rozwiązanie innym słuchaczom. Niestety nasze uczelnie ciągle większy nacisk kładą na opanowanie wiedzy teoretycznej a nie na wykształcenie u młodych ludzi podstaw rozwijających u nich radzenie sobie w sytuacjach projektowych, umożliwiając przeniesienie wyuczonej wiedzy uczelnianej na grunt zawodowy.
2. Programowanie trzeba lubić. Programowanie nie jest dla osób, które naprawdę się tym nie interesują. Tylko programista, który naprawdę lubi to co robi będzie w stanie ciągle rozwijać swoją wiedzę i umiejętności. A biorąc pod uwagę tempo ciągłych zmian w obszarze języków programowania i narzędzi, ciągłe rozwijanie swojego warsztatu jest nieodłączną częścią zawodu programisty.
3. Poprawa jakości. całkiem jeszcze niedawno często dało się słyszeć wśród programistów opinię, iż testowanie nie jest zajęciem przewidzianym dla nich. Od czasu popularyzacji TDD – Test Driven Development, takie opinie to rzadkość, świadcząca raczej o małym doświadczeniu. Obecnie, programiści znają i rozumieją wartość testów, gdyż to właśnie ich nadrzędnym celem jest stworzenie poprawnie działającego systemu. Poprzez identyfikacje, wykrycie i eliminacje błędów, dążą oni do stworzenia niezawodnego kodu. Co więcej, dobry programista wie, że szkoda jest czasu na pisanie banalnych lub zbędnych testów. Zamiast tego, koncentruje się na badaniu i sprawdzaniu kluczowych elementów kodu już w trakcie ich tworzenia.
Dla doświadczonego programisty ważnym elementem poprawy jakości tworzonego kodu jest jego refaktoryzacja. Rozumie się to jako poprawianie kodu bez wprowadzania zmian w sposobie jego działania. A wysokie pokrycie unit testami jest czymś, co proces refaktoryzacji czyni niemal bezbolesnym.
4. Reusabliity. Po co wymyślać koło, skoro już jedno jest i działa? Życie jest zbyt krótkie, aby ciągle opracowywać kod, który rozwiązuje te same problemy. Dobry programista, w trakcie tworzenia oprogramowania analizuje, które jego części będą mogłby być wykorzystane w innych miejscach systemu lub w kolejnych projektach i tak je opakuje by proces ponownego użycia maksymalnie ułatwić nie tylko sobie, ale także swoim kolegom.
Dobry programista wkłada wiele wysiłku, aby ostatecznie stworzyć prosty i funkcjonalny system. Zdyscyplinowany inżynier myśli zarówno o procesie utrzymania, jak i ewolucji każdej linii kodu.
Natomiast dzięki projektom open source, programista nie jest zdany na siebie w trakcie procesu tworzenia oprogramowania. Wręcz przeciwnie – może budować z opracwanych przez innych klocków. A jeśli okażą się one niewystarczające, to nic nie stoi na przeszkodzie by pracować wirtualnie wraz z innymi programistami z całego świata, aby zrobić wspólnie coś jeszcze lepszego.
5. Programowanie z użyciem wielu języków. Chodzi nie tylko o to, że jeśli programista zna wiele języków programowania, jego szanse na znalezienie ciekawej pracy są większe. Chodzi przede wszystkim o to, że różne języki nadają się do rozwiązywania różnych problemów. Często jest tak, że wiążą się także z innym sposobem myślenia, który niesamowicie poszerza horyzonty.
Cechy charakteru
6. Dbałość o szczegóły. Kod bez komentarza i dokumentacji, niskie pokrycie testami jednostkowymi, hardcodowanie parametrów, nieznajomość wzorców projektowych…Tto wszysto są rzeczy, które czasem przemkną się niezauważenie w jednym czy drugim projekcie. Niemniej jednak, ostatecznie zagrażają całej karierze programisty. W dobrych zespołach, takie zachowania nie będą tolerowane, bo uderzają w jakość tworzonego produktu. Tym samym obniżają wartość pracy całego zespołu programistycznego.
Zawsze dbaj o szczegóły! Stąd już prosta droga, aby stać się naprawdę dobrym programistą.
7. Zrozumienie istoty biznesu klienta. nie rozumiesz, dlaczego rozwój i opracowanie coraz lepszego oprogramowania jest tak ważny w procesie utrzymania klientów? Koniecznie musisz rozważyć historię związaną z NASA. “To oprogramowane nigdy się nie psuje ani nigdy nie wymaga ponownego uruchomienia. Ono jest wolne od błędów. To oprogramowanie jest doskonałe – opracowane w sposób najlepszy z możliwych. Proszę wziąć pod uwagę te statystyki: trzy ostatnie wersje programu, o długości 420.000 linii kodu, zawierały tylko jeden błąd. Ostatnie jednaście wersji tego systemu zawierały łącznie 17 błędów. Komercyjne systemy o równoważnej złożoności zawierałyby ok. 5000 błędów.” Zdolność zrozumienia, dlaczego proces kodowania odbywa się właśnie w ten sposób jest kluczowy. Pozwala stworzyć produkt dla Klienta, który doceni jego wartość i funkcjonalność.
8. Ciekawość. Dla programisty stan ciekawości i zastanawiania się, dlaczego dana rzecz jest zrobiona w taki a, nie w inny sposób, jest stanem naturalnym. Wielu programistów ma podobne wspomnienia. Będąc dziećmi, często wpadali w niezłe tarapaty, rozkładając zabawki lub mniejsze czy większe urządzenia domowe. W ten sposób dowiadywali się jak coś działa.
Tworzenie oprogramowania jest procesem twórczym. Warto również podkreślić, iż wielu programistów znanych jest za swoich artystycznych zainteresowań. To właśnie wspomniana ciekawość pozwala myśleć w sposób kreatywny, niestereotypowy, w trakcie projektowaniu programów. I oczywiście zostaje jeszcze ten dreszczyk emocji: kiedy okazuje się, iż coś co zaprojektowałeś, działa! I kolejny, gdy widzisz, że używają tego ludzie.
9. Doświadczenie. Oprócz praktycznego doświadczenia, pożądaną cechą przyszłego programisty jest również wiedza z zakresu matematyki i innych nauk ścisłych. Co więcej, umiejętność dobrej organizacji pracy jest również dużym atutem. Jednocześnie, należy podkreślić, że nawet wielcy programiści są świadomi, że nie zgłębili wszystkich tajników programistycznej wiedzy i wiele jeszcze przed nimi. Dlatego umiejętność i chęć dalszego kształcenia jest niezbędna w dziedzinie, w której zmiana jest nieunikniona.
10. Dyscyplina. Nawet jeżeli programista bardzo lubi swoją pracę, nie oznacza to, że kolejny projekt może wykonać niedbale. Dbanie o szczegóły jest bardzo ważne, tak samo jak i umiejętności organizacji pracy. Duża ilość błędnego kodu zazwyczaj jest napisana przez programistów, którzy nie do końca wiedzieli o co chodzi i co mają wykonać w zleconym projekcie.
11. Cierpliwość: Błędy w kodzie są naturalne. Pomyłki w trakcie projektowania są również czymś normalnym. Niedbałe kodowanie wykonywane przez innych programistów jest częstym zjawiskiem. Stąd prosty wniosek: każdy programista zdaje sobie sprawę, iż to właśnie cierpliwość jest kluczem do osiągnięcia wymaganej jakości.
12. Praca zespołowa: Nieliczne projekty są na tyle małe i wymagają ograniczonej liczby umiejętności, aby mogły być wdrażane tylko przez jedną osobę. Nauka pracy zespołowej jest jednym ze sposobów, który może pomóc przebić się ponad stereotypowy sposób postrzegania programisty-samotnika. To właśnie praca zespołowa – czy wirtualna (ta wbrew pozorom jest trudniejsza), czy w biurze, jest podstawą sukcesu dobrego programisty. Co więcej, dobrzy programiści posiadają dobre umiejętności komunikacyjne, które są kluczowe nie tylko w rozmowach projektowych z innymi programistami. Przydaje się to także przy komunikacji z klientami, podczas opracowywania dla nich funkcjonalnych rozwiązań.