labyrinth-1738043_1920

Łamigłówki dla programisty

Dzisiaj taki dość przyjemny temat na niedzielny wieczór. Mianowicie o tym co lubię robić, kiedy mam chwilę czasu i chęć na poćwiczenie umysłu. Otóż moim ulubionym przedmiotem w szkole była matematyka a algorytmy to jedna z rzeczy, które najbardziej mnie interesowały na studiach. Niestety w pracy w tym momencie nie wykorzystuję zbytnio tych „algorytmów akademickich”, ale staram się by w mojej głowie nie zaśniedziały one za bardzo.

Matematyka i algorytmy

Już wiele lat temu znalazłam stronę „Project Euler”, która to zawiera zbiór problemów matematycznych (w tym momencie około 600). Rozwiązanie polega po prostu na wpisaniu poprawnej odpowiedzi w okienko. Zadania mają przypisany stopień trudności, więc możemy wybrać sobie łatwiejsze bądź trudniejsze.

Tak jak wspomniałam – strona ta istnieje już bardzo długo, a w międzyczasie, szczególnie ostatnio, pojawiło się dużo podobnych a nawet o wiele fajniejszych.

Zadania z rekrutacji

Wydaje mi się, że tego typu zadania zyskały dużą popularność wraz z powstaniem Codility – jest to strona często wykorzystywana przez firmy jako jeden z procesów rekrutacji programistów. Choćby z tego powodu warto się z nią zapoznać oraz z typami zadań jakie tam są. Jest duża szansa, że z czymś podobnym spotkacie się w przyszłości.
Na czym to polega? Macie jakieś zadanie typu znaleźć cyfrę, która nie znajduje się w podanej tablicy – np. w tablicy [3, 2, 5, 1] nie znajduje się 4. Rozwiązanie trzeba zakodować w wybranym przez Was języku – oczywiście z tych dostępnych na platformie. Następnie rozwiązanie jest automatycznie weryfikowane pod względem poprawności i wydajności. Czasem kluczem do rozwiazania jest tylko poprawność a kiedy indziej wydajność. Warto zatem mieć w głowie kilka możliwych sposobów rozwiązania zadania.

Pomijając praktyczne wykorzystanie wiedzy algorytmicznej przy zdobywaniu nowej pracy, uważam że tego typu portale dostarczają naprawdę fajnych łamigłówek i jeśli ktoś lubi coś takiego, może miło spędzić czas. Co więcej – o ile początkowo zadania idą jak po grudzie, zwłaszcza jeśli studia mamy dawno za sobą, to po rozwiązaniu ich już kilkunastu czy kilkudziesięciu idzie nam to zdecydowanie szybciej. Generalnie wszystko sprowadza się do zapamiętania pewnych wzorców postępowania i zdobycia sprawności w ich stosowaniu.

Platform, gdzie możemy rozwiązywać algorytmiczne zadania jest całkiem sporo i ja sama mam już duży problem z tym, które wybrać. Ostatnio spędzam czas głównie na HackerRank oraz Codewars.

Co ciekawego jest na HackerRank?
  • Sporo zadań ze wspomnianego Project Euler
  • Ścieżka Cracking the Coding Interview – czyli bardzo fajny zbiór zarówno filmów jak i zadań, które objaśniają tematy często poruszane na rozmowach kwalifikacyjnych. Filmy są zrealizowane przez Gayle Laakmann McDowell, autorkę książki „Cracking the Coding Interview” w której na konkretnych zagadanieniach pomaga przygotować się do niemalże każdego procesu rekrutacyjnego od strony technicznej i nie tylko. Gayle jest też założycielką portalu CareerCup, gdzie użytkownicy wrzucają pytania z rekrutacji w których brali udział.
  • Niektóre firmy – w tym momencie Booking.com wystawiają tam swoje zadania, których rozwiązanie jest tożsame z aplikacją do firmy i jednocześnie pierwszym etapem rekrutacji.
  • Zadania są zgrupowane według ścieżek – np Algorytmy, Matematyka, Struktury danych, SQL a także języków – w ten sposób łatwiej można dotrzeć do tematyki, która nas interesuje
  • Cyklicznie organizowane są też różnego rodzaju zawody z nagrodami
    Co ciekawego jest na Codewars?
  • Tutaj zadania to tzw Kata, których trudność określana jest ilością kyu – czyli mamy taki trochę japoński klimat.
  • Grupowanie zadań określają nam tagi, który jest cała masa – Algebra, Geometry, Integers, Loops, Binary itd
  • Głównym przeznaczeniem tej strony jest ćwiczenie pewnych „kata” czyli różnych powtarzalnych w pracy programisty czynności najlepiej w różnych językach aby tym bardziej gimnastykować umysł

Ale to tylko dwa serwisy z całej masy i ciągle mi szkoda, że nie mam tyle czasu, by spędzać go w większym stopniu na tego typu zadaniach.

Inne portale

CodeFights – również duży zbiór zadań przygotowujących do rozmów kwalifikacyjnych, rywalizacja z innymi użytkownikami
LeetCode – dość ważna strona jeśli myślicie o aplikacji do Google, Amazon czy Facebook itp – znajdują się tam zadania z prawdziwych rekrutacji, więc jest szansa, że traficie na któreś z nich w swoim procesie rekrutacyjnym.
CodeEval – tutaj też czekają nas różne rankingi i rywalizacje

Dość ciekawą opcją są też nieco starsze:

Polski SPOJ
Oryginalny SPOJ
Timus Online Judge
MasterCoder – z tej osobiście jeszcze nie korzystałam, ale zapowiada się ciekawie

Nie można też zapomnieć o potyczkach algorytmicznych czyli corocznym konkursie w którym rozwiązuje się różne ciekawe zadania.

Zachęcam do korzystania z tych portali, ponieważ nasze szare komórki również potrzebują nieco treningu od czasu do czasu:) A może Wy kojarzycie jeszcze inne fajne strony? Zachęcam do komentowania!

 

4 myśli na temat “Łamigłówki dla programisty”

  1. Sam korzystam w wolnych chwilach z kilku portali. Takie łamigłówki są doskonałą okazją do poznania nowych języków (jak było w moim przypadku, gdy uczyłem się Clojure na HackerRanku https://www.hackerrank.com/ekhart).
    Namawiał do tego Uncle Bob w swojej książce „The Clean Coder: A Code of conduct for Professional Programmers” porównując je do ćwiczeń kata: czyli nauczeniu się często powtarzających się rozwiązań znanych problemów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *