Ciągłe udoskonalanie się jest jednym z przewodnich motywów ruchu Software Crafstsmanship. Nie każdy może to lubić. Jedni podchodzą do pracy programisty w kategoriach odbicia swoich 8 godzin a nieważne jakim stylu. Inni zaś tego stylu szukają a raczej ciągle go udoskonalają.
Podobnie jest w innych dziedzinach gdzie ciągłe udoskonalania warsztatu sprawia, że satysfakcje z wykonywanego zajęcia jest większa. Może to być granie na instrumentach muzycznych, sport czy tak przyziemne rzeczy jak programowanie. Osobiście nie uważam się za super najlepszego w świecie programistę, jednakże z dnia na dzień staram się udoskonalać swój warsztat.
Jednym ze sposobów udoskonalania umiejętności w programowaniu jest rozwiązywania zadań algorytmicznych. Tylko, żeby były one efektywne to powinny się zmieniać. Nie ma sensu pisanie codziennie tej samej pętli for, czy rozwiązywanie jednego algorytmu na tysiąc różnych sposobów.
Fakt, że większość osób pracujących na co dzień z komputerem, pisze regularnie maile nie sprawi od razu, że każdy stanie się poczytnym autorem książek. Aby to osiągnąć to musi się zmieniać otoczenie, muszą zmieniać się zewnętrzne bodźce, które sprawią, że posiadane umiejetności wejdą na kolejny poziom.
Dla mnie jednym ze sposobów podnoszenia swoich umiejętności jest rozwiązywanie zadań algorytmicznych. Poza tym, że utrwalam dzięki temu możliwości języka w jakim programuje, to także mogę praktykować podejście Test Driven Development. TDD nie jest czymś co na co dzień każdy wykorzystuje w swojej pracy programistycznej. Nie zawsze pisanie testów w pierwszej kolejności jest efektywne. Czasami lepiej najpierw zaimplementować metodę, a później napisać do niej odpowiednią ilość testów jakie są konieczne do tego aby uzyskać jak największe pokrycie. Zarówno od strony linii kodu jak i przypadków testowych.
Rozwiązywanie, krótkich zadać algorytmicznych, gdzie np. zadeklarowana jest z góry sygnatura metody umożliwia napisania najpierw odpowiedniej ilości przypadków testowych a później ich implementację. Jest to bardzo ciekawa cecha tego typu zadań.
W sytuacji, gdy zadanie do rozwiązania ma już zdefiniowane przypadki testowe można też się nauczyć lepiej testować swój kod. Pokrycie kodu w 100% nie oznacza, że został on pokryty w 100%. To, że coś działa na jednym przypadku testowym, nie oznacza, że będzie działać na innych danych.
Zachęcam do poświęcenia w tygodniu godziny na napisanie kodu, który będzie rozwiązaniem na proste zadanie algorytmiczne. Nie ma potrzeby wymyślania zadań dla siebie. Takowe dostępne są na wyciągnięcie ręki. Poniżej kilka linków, gdzie można znaleźć zadania programistyczne w różnych językach.
Rozwiązywanie kata, to nie jest jedyny i najlepszy sposób aby stać się lepszym w tym co się robi. Jest to tylko jedna z dróg do celu.