Rozwiązywanie problemów. Dlaczego ta umiejętność jest kluczowa dla programisty?
Ostatnia aktualizacja 13 lutego, 2023
Znajomość popularnych języków programowania z pewnością pomoże ci stać się znakomitym programistą. Ale to nie umiejętności techniczne – w każdym razie nie tylko one – uczynią z ciebie wartościowego specjalistę. Czyli takiego, którego warto zatrudnić i utrzymywać w zespole. Dowiedz się dlaczego równie ważne jest m.in. rozwiązywanie problemów.
Rozwijanie oprogramowania nie sprowadza się wyłącznie do wprowadzania komend i dopisywania kolejnych linijek kodu. W istocie programiści realizują potrzeby biznesowe firm za pomocą narzędzi informatycznych – opracowywane przez nich aplikacje odpowiadają na realne wyzwania, przed jakimi stają organizacje. Tutaj bardzo cenną umiejętnością jest analityczne myślenie i rozwiązywanie problemów.
Świat wyzwań a rozwiązywanie problemów
Wyzwania te są dziś nierozerwalnie związane z masowym pędem ku digitalizacji. Administracja publiczna udostępnia coraz więcej usług cyfrowych, sektorem bankowym „zawładnęła” idea FinTech, a w branży retail mocne wejście w e-commerce jest sposobem na utrzymanie wyników sprzedaży w pandemii. Wraz z potrzebą dostarczania klientom nowych funkcji i aplikacji, rośnie zapotrzebowanie firm na usługi programistów, którzy te zadania wykonają.
Znaczenie i rola IT zasadniczo się zmieniły, a stereotyp programistów zaszytych gdzieś w swoim „kantorku” to taki sam relikt przeszłości, jak kaskadowe metodyki pracy, przewidujące sporadyczne wydania czy aktualizacje firmowych systemów.
Popularyzacja Agile i metodyk opartych na interdyscyplinarnych zespołach pracujących w sprintach wymuszają niejako współpracę departamentów IT i biznesowych. Tym samym IT – z dostarczyciela czy administratora – urosło do rangi aktywnego uczestnika procesu tworzenia i realizowania strategii biznesowej, rozumiejącego problemy biznesowe i pomagającego je rozwiązywać.
W miękkich kompetencjach siła
Nieprzypadkowo zdolność rozwiązywania problemów znalazła się na szczycie listy kompetencji najbardziej pożądanych przez pracodawców zatrudniających programistów w raporcie „2018 Developer Skills Report”, przygotowanym przez serwis HackerRank.
Pracodawcy cenią umiejętność logicznego, „matematycznego” rozumowania, rozkładania skomplikowanych problemów na mniejsze co najmniej równie wysoko (jeżeli nie wyżej), co posiadanie podstawowych umiejętności technicznych, wymaganych na danym stanowisku – czytamy w opracowaniu.
Rozwiązywanie problemów widnieje również na przedstawionej przez hackernoon.com liście 10 najważniejszych umiejętności miękkich, które powinien opanować każdy programista. Dla jasności: kompetencje miękkie to te, które ułatwiają porozumiewanie i współpracę z innymi pracownikami.
Sprawdź: Project manager – zarobki w Polsce
Podejście do kwestii rozwiązywania problemów jest tym, co odróżnia doświadczonego programistę od początkującego kodera. Największym błędem, popełnianym zwłaszcza przez młodych adeptów programowania, jest nadmierne koncentrowanie się na nauce składni zamiast na nauce rozwiązywania problemów – pisze V. Anton Spraul, autor książki „Think Like a Programmer: An Introduction to Creative Problem Solving”.
Metody rozwiązywania problemów są różne. Ważne, by osiągać wyniki
Bootcampy programistyczne, czyli intensywne kursy kodowania, reklamują się hasłami “Uczymy logicznego myślenia”. Dzieje się tak nie bez powodu. Nawet przedszkolne projekty z zakresu kodowania polegają przede wszystkim na wykształcaniu u dzieci zdolności analitycznych. Samo “kodowanie” odbywa się tam bez komputera.
Zresztą, zwróć uwagę jak wygląda typowy proces rekrutacji na stanowisko deweloperskie. Na pierwszym etapie kandydat otrzymuje zadanie do wykonania, polegające na napisaniu kodu rozwiązującego określony problem. Rekruter dzięki temu jest w stanie ocenić nie tylko przygotowanie merytoryczne potencjalnego pracownika, ale i jego zdolności rozwiązywania problemów. Dopiero w zależności od wyniku testu kandydat kwalifikuje się do dalszych etapów rekrutacji.
Świetną okazją do trenowania umiejętności rozwiązywania problemów są hackathony, czyli eventy dla programistów, w trakcie których grupy osób związane z wytwarzaniem oprogramowania rozwiązują problemy projektowe i programistyczne. Hackathony trwają zwykle jeden dzień lub weekend. Podczas nich można sprawdzić się w działaniu pod presją czasu, a przy okazji również zostać zauważonym przez firmy poszukujące nowych talentów. Bywają więc świetną okazją do złapania kontaktów branżowych, a także znalezienia nowej pracy.
Dlatego kod, który wychodzi spod twojej ręki, nie musi być idealny. Ważne aby był optymalny.
Rozwiązywanie problemów programistycznych
Aby znaleźć właściwe rozwiązanie problemu, należy go zrozumieć. Aby go zrozumieć, trzeba umieć go opisać – można przedstawić go koledze z zespołu albo posłużyć się tradycyjnym atrybutem programisty, czyli… gumową kaczką. Bo, jak powiedział znakomity amerykański fizyk Richard Feynman, nie rozumiesz zagadnienia, jeżeli nie umiesz wytłumaczyć go prostym językiem.
Na czym polega istota problemu? Musisz uzyskać wiedzę, jaki efekt chcesz osiągnąć i następnie będziesz mógł zacząć opracowywanie rozwiązanie, a na koniec – testować je. Pamiętaj, że zdolność rozwiązywania problemów przydaje się nie tylko na początku pracy z kodem. Również w fazie jego ewaluacji jest kluczowa. Powód? Ta polega na umiejętności wyszukiwania ewentualnych błędów w aplikacji. Jeżeli nie działa lub działa niezgodnie z założeniami, rozwiązywanie problemów okazuje się niezbędne.
Zobacz: Umiejętności komunikacyjne
Poradniki dotyczące rozwiązywania problemów programistycznych w pierwszej kolejności sugerują rozkładanie ich na mniejsze porcje. Takie, które łatwiej rozpracowywać pojedynczo (a gdy masz już rozwiązania, wystarczy “połączyć kropki”). Uwaga: pojedynczo nie oznacza liniowo – doskonale ilustruje to przykład opisany przez Lorenzo Pasqualisa w serwisie coderhood.com, dotyczący parzenia kawy.
Cel główny wydaje się prosty: przygotowanie napoju w oparciu o dostępne zasoby, w odpowiedniej kolejności wykonywania zadań. W procesie tworzenia oprogramowania twoimi zasobami są moduły/fragmenty kodu, a zadaniami – komendy czy przepływy danych. Gdy ustalisz, jak wyglądają te przepływy w poszczególnych fazach, będziesz mógł zwizualizować nielinearne zestawienie współzależności między nimi i oczekiwanych rezultatów. W takim procesie niektóre czynności wymagają przetworzenia w określonej kolejności, a które można realizować równolegle.
Wreszcie, pamiętaj, że nie musisz każdego elementu aplikacji pisać od zera. Gdyby tak było, nikt nie korzystałby z dorobku społeczności Open Source. Jeżeli utkniesz, poszukaj pomocy w serwisach GitHub czy Stack Overflow. Istnieje duże prawdopodobieństwo, że problem, z którym się mierzysz, ktoś już kiedyś rozwiązał. A jak wskazują statystyki gromadzone przez Stacka, 9 na 10 programistów korzysta z dostępnej tam bazy wiedzy w sytuacjach „kryzysowych”.
Wciągające gry logiczne dla programisty
Trenowanie umiejętności rozwiązywania problemów to nie tylko mierzenie się z nimi w swoich codziennych zadaniach. Mózg potrzebuje różnego rodzaju stymulacji, a gry logiczne to najlepszy sposób na przemycenie wartości połączonej z mechanizmem gratyfikacji. Taki trening pozytywnie wpłynie na koncentrację i szybkość przetwarzania informacji. Jakie gry logiczne sprawdzą się na chwile wytchnienia dla programistów?
Coderdle
Na fali popularności Wordle, która ostatnio przelała się szczególnie przez Twitter, No Fluff Jobs stworzył własną wersję tej wciągającej gry słownej – Coderdle. Odgaduj codziennie nowe słowo związane z branżą tech i przekonaj się na własnej skórze, że to bywa trudniejsze niż początkowo się wydaje.
Einstain’s Riddle Zebra Puzzle
Popularna zagadka, której autorstwo przypisuje się Einstainowi, stanowi nie lada wyzwanie. Doczekała się także wielu wersji, więc z pewnością nie będzie to jednorazowa zabawa. No więc jak? Rozwiążesz ten problem i odpowiesz poprawnie na pytanie: Kto jest właścicielem ryby?
Brilliant.org – rozwiązywanie problemów wielu dziedzin
To portal z codziennymi wyzwaniami, w których ważne jest łączenie logicznego myślenia z wiedzą matematyczną, fizyczną i geometryczną. Zagadki osadzone są na logicznych problemach rzeczywistego świata. To świetna propozycja dla osób, które oprócz treningu rozwiązywania problemów mają ochotę nabrać nowej perspektywy na rzeczy pozornie zwykłe.