Gdzie trenować swoje umiejętności?

Taki mały zbiór linków do miejsc, gdzie można sobie potrenować kodowanie.

SPOJ

Najczęściej polecane miejsce w polskich internetach. Strona, wygląd, mocno w starym stylu co to ma działać, a nie wyglądać. Przy czym raczej early 2000 niż 90’s. Zadania są podzielone na trzy grupy łatwe, średnie, trudne, a dodatkowo jest jeszcze challenge. Każde zadanie składa się z oschłego opisu, który znamy z na przykład podręczników do matematyki wraz z opisem formatu wejścia i wyjścia oraz jakiegoś krótkiego, przykładowego zestawu danych testowych.

Ogromną zaletą serwisu jest wsparcie dla różnych języków programowania, w tym tych mniej popularnych jak na przykład COBOL czy Pike. Dla odważnych jest też asembler (kilka do wyboru), jak i Whitespace czy Brainfuck. Przy czym nie wszystkie zadania można wykonać we wszystkich językach.

Wady są dwie. Pierwsza to, dziwnie działający ranking dla zadań. Bez podziału na poszczególne języki, co promuje rozwiązania w C, które siłą rzeczy są najszybsze. Co więcej, ranking jest dość dziwnie wyliczany, to znaczy każde rozwiązanie jest traktowane osobno. W efekcie jeden użytkownik może okupować daną część rankingu. Dodatkowo niejasne są reguły oceny, bo czy brana jest pod uwagę pamięć, czas wykonania, wielkość kodu źródłowego, nikt nie wie. Ranking globalny (per użytkownik) jest już OK. Bonusem jest forum, które w polskojęzycznej części jest mocno „elektrodowe”. Drugi problem to interfejs użytkownika. Nawet nie chodzi o wygląd, ale SPOJ potrafi zgubić informację o ustawieniach językowych. Mała rzecz, a wkurwia niemiłosiernie.

Code wars

W pewnym sensie mój ulubiony portal tego typu. Stylizowany na „amerykańską wizję Japonii”, z systemem rankingowym opartym na stopniach kuy, które są wymysłem na potrzeby amerykanów. Do tego mamy zadania w dwóch grupach:

  • kata – gdzie uczymy się programować i poziom trudności rośnie z czasem.
  • kumite – gdzie możemy stworzyć własne zadanie i niech inni je rozwiązują

Zadania mają opis w stylu podręcznika oraz krótki przykład z danymi testowymi. Nic nadzwyczajnego, choć całość po angielsku może zaboleć niektóre osoby. Zadania można rozwiązywać w różnych językach i nie wszystkie są dostępne w każdym z języków. Oczywiście jest też system rankingowy.

Do zalet tego serwisu zaliczam bardzo fajny i przyjazny interfejs, sensownie zrobiony system rankingowy oraz możliwość łatwego tworzenia i udostępniania własnych zadań. Całość jest dość intuicyjna. Baza zadań duża i na bieżąco uaktualniana. In plus możliwość tworzenia własnych zadań na bazie istniejących. Zadania są pogrupowane według tematyki i jak chcemy skupić się na specyficznych elementach, to nie błądzimy po omacku.

Wadą tego serwisu jest uboga baza języków. Znaczy są tylko te najpopularniejsze (26) w tym Brainfuck, ale już taka Scala czy Kotlin nie są dostępne dla zadań ze zbioru kata. Trochę to dziwne, bo jednak to JVM, a Java i Clojure są dostępne. Podobnie jest z Elixirem, który jest dostępny i erlangiem, który nie jest.

Coding Game

Najbardziej bajkowa strona. Zadania w formie minigierek, gdzie nasz kod steruje jakimś obiektem na mapie, a my musimy coś tam zrobić. Całkiem fajny pomysł, bo pozwala na skupienie się na konkretnym elemencie języka, który chcemy opanować. W połączeniu z grafiką z rzeczywistych gier wygląda to super. Zadania mają rosnący stopień trudności i są podzielone pod kątem elementów języka. Całkiem fajne.

Niewątpliwą zaletą jest wygląd i próba grywalizacji całości, która sensownie działa. Zadania są też całkiem fajne i o zróżnicowanym poziomie trudności. W dodatku można je rozwiązywać na wiele różnych sposobów, a sposób rozwiązania ma wpływ na grę.

Chyba największą wadą jest nieintuicyjny interfejs, który potrafi napsuć krwi. Na przykład nadal nie potrafię zmienić swojego języka programowania. Trochę słabo. Poza tym nie każdemu będzie pasować oprawa graficzna.