Umiejętności dobrego programisty

Page Title Shape 1
Page Title Shape 2
Page Title Shape 3

Jaki jest programista, każdy to wie. Siedzi w swojej jamie, pisze kod, a co miesiąc zgarnia miliony monet. Taki opis można usłyszeć wielokrotnie. Najczęściej będąc w towarzystwie, które nie ma pojęcia o pracy programisty. Najgorsze jest to, że 99% z tych osób zapytanych jakie są umiejętności dobrego programisty, odpowiada – “Hmm… no on pisze kod, więc musi znać język programowania”. Oczywiście jest to dobra odpowiedź, ale jakże niekompletna. Dziś chciałbym powiedzieć Ci, co powinien umieć dobry programista.

Poniższy zestaw umiejętności raczej dotyczy programistów bardziej zaawansowanych niż junior. Specyfika naszej pracy wcześniej czy później wymusza na nas naukę nowych rzeczy. Nie zawsze są to rzeczy związane z technologią, w której się specjalizujemy. Moim zdanem programista powinien raczej dążyć do zostania full stackiem. Wynika to z dwóch powodów. 

Po pierwsze mamy więcej kompetencji, co bezpośrednio wpływa na wysokość naszych zarobków. Po drugie jesteśmy bardziej niezależni w pracy jako freelancerzy. W oczach pracodawcy (na etacie) stajemy się pracownikiem uniwersalnym (czyt. bardziej przydatnym). Po tym jakże długim wstępie przejdźmy zatem do tematu głównego. Oto lista umiejętności, które moim zdaniem powinien posiadać dobry programista.

Wyrażenia regularne

Jeśli potrafisz tworzyć zaawansowane wyrażenia regularne, to w oczach mniej doświadczonych kolegów będziesz “szamanem”. Jest to bardzo uniwersalna wiedza, którą możesz zastosować prawie w każdym języku programowania. Czy tylko podczas programowania? Otóż nie. 

Większość IDE () posiada dziś możliwość wyszukiwania lub wyszukiwania i zamiany treści na podstawie RegExp’ów. Jeśli zatem musimy zrobić grubszy refaktor, to czasami wyrażenia regularne mogą nam zaoszczędzić wiele godzin pracy.

Dodatkowo możemy je stosować podczas pisania tzw. scraperów. Jest to nic innego jak automatyczne pozyskiwanie danych z zewnętrznych stron. RegExp pomoże Ci określić wzór, na podstawie którego zostaną wyciągane dane.

SQL

Kolejna umiejętność, która w mojej ocenie jest wysoce reużywalna. Nieważne, jaką technologię po stronie backendu opanujesz, z bazami danych (relacyjnymi) rozmawiasz w SQL. Wydaje mi się, że bardzo wielu programistów nie wykorzystuje pełnego potencjału baz danych. Wynika to z faktu, że mamy do dyspozycji ORM’y, które przejęły rolę pośrednika w rozmowach z bazami. Jest to bardzo wygodna forma, ale potrafi rozleniwić. 

Warto wykorzystywać mechanizmy takie jak np. widoki, aby przyspieszyć działanie aplikacji. Biorąc pod uwagę, że praktycznie każda aplikacja korzysta z bazy danych, istnieje wysokie prawdopodobieństwo, że ta umiejętność będzie Ci potrzebna wcześniej czy później.

Debugowanie

Podczas tworzenia aplikacji, nie unikniesz popełniania błędów. Proces debugowania, czyli wykrywania źródła błędu, jest kluczowy podczas pracy programisty. To oczywiste, że ta umiejętność jest niezbędna każdemu programiście. Jednak warto skupić się nad opracowaniem własnych metod debugowania, które pozwolą Ci szybko i sprawnie odnaleźć problem. 

Moim zdaniem jest to jedna z ważniejszych cech dobrego programisty. Możesz tworzyć skomplikowane struktury danych, warstwy abstrakcji. Pytanie brzmi, jak zachowujesz się, gdy popełnisz błąd. Rozkładasz ręce i prosisz o pomoc kolegów, czy sam mierzysz się z problemem i potrafisz szybko przeprowadzić analizę błędu? Z mojego doświadczenia wynika, że zasada pareto ma zastosowanie również w tym przypadku. W większości przypadków 20% czasu zajmuje mi znalezienie i zrozumienie błędu, a 80% poświęcam na jego naprawę oraz napisanie testów. 

Zdolność automatyzacji

Podczas codziennej pracy, na pewno często zdarza Ci się wykonywać procesy powtarzalne. Dla przykładu może to być np. czyszczenie bazy danych, cache oraz budowa nowej wersji frontendu. Każda z tych trzech operacji zajmuje X czasu. Musisz też pamiętać komendy, które pozwalają je uruchomić. Jednak dobry programista, to leniwy programista. Warto jest umieć wytwarzać własne narzędzia automatyzacji pracy. Brzmi poważnie, ale w praktyce oznacza to, umiejętność pisania skryptów np. bash, które pozwalają uruchamiać wiele procesów za pomocą jednej komendy.

Dla przykładu parę dni temu dokonywałem migracji swoich projektów na serwer VPS. Dopiero zaczynam zabawę z serwerami, ale podstawy linuxa mam opanowane. Postanowiłem stworzyć prosty skrypt w bash’u, który będzie tworzył automatyczny backup plików raz dziennie. Dodatkowo przy uruchomieniu będzie usuwał backup’y starsze niż 3 dni.

Oczywiście kopie zapasowe chciałem przechowywać na niezależnym dysku z ustawioną potrójną replikacją. Oto jak to wygląda w praktyce.

#!/usr/bin/env bash
_now=$(date +"%m_%d_%Y")
_file="/home/files/backup.$_now.zip"
_old=$(date --date="2 days ago" +"%m_%d_%Y")
_past="/disk2/files/backup.$_old.zip"

rm -rf $_past
zip -r "$_file" /home/files
mv "$_file" /backups

Prosta rzecz, a dzięki niej śpię spokojniej. Do tego ustawienie zdarzenia w CRON i gotowe. 

Umiejętność komunikacji

Porozmawialiśmy o aspektach technicznych. Teraz czas, aby porozmawiać na tematy miękkie. Jak wspomniałem na wstępie, obraz programisty w oczach innych to raczej postać introwertyczna. Nie rozmawia z nikim poza kolegami z zespołu, którzy są w stanie zrozumieć czym jest CQRS. Jeśli jesteś specjalistą w swojej dziedzinie, to nie idź tą drogą. Powód jest banalny. Osoby, które nie potrafią komunikować się z tzw. biznesem, zatrzymają swoją drogę zawodową na etapie bycia programistą. Jeśli marzysz o tym, aby zostać IT managerem, albo architektem systemów, musisz umieć rozmawiać z ludźmi. 

Dobry architekt nie podejmuje decyzji na podstawie rzutu orenem temerskim. Jego wybory są wynikiem rozmów z biznesem. Umiejętność wsłuchania się w potrzeby użytkowników jest kluczowa. Musisz też umieć przetłumaczyć opis funkcjonalny na bardziej techniczny. Niczym Neo z Matrixa musisz słowa ludzi widzieć jako te zielone paski kodu 🙂 A gdy słyszysz o funkcjonalności, która kłóci się z logiką całości, wkładasz rękę w tors agenta … nie tego nie rób! Po prostu z nim porozmawiaj. Pamiętaj, że bez nich zostaniesz bez pracy 🙂

Tak oto dotarliśmy do końca. Wymienione wyżej umiejętności są według mnie bardzo ważne. Nie są jednak jedynymi, jakie powinien posiadać dobry programista. Pamiętaj, że nie wolno zapominać o umiejętnościach tzw. twardych, technicznych. Zachowaj balans pomiędzy nimi. Daj znać w komentarzu, jakie według Ciebie inne umiejętności warto posiadać w branży IT? Nie zapomnij też odwiedzić mojego Facebooka oraz zapisać się na grupę “Koduj z nami”. Pamiętaj też, że jeśli masz do mnie jakieś pytanie, możesz śmiało napisać. Kontakt do mnie znajdziesz tutaj.

Previous Post
Newer Post

Brak produktów w koszyku.

X