Gry w służbie programowania

Cześć! To jest fragment książki JavaScript od podstaw, która ma pomóc w nauce programowania od zera.

Nauka programowania to przede wszystkim praktyka, czyli nic innego jak godziny poświęcone na czytanie i pisanie kodu. Zarówno jedno, jak i drugie powinno stanowić odpowiednie wyzwanie: zbyt łatwe zadanie niewiele Cię nauczy, zbyt trudne będzie nieproporcjonalnym kosztem do wysiłku, a co więcej, może Cię zniechęcić. Dobre kursy podsuwają więc krok po kroku coraz to trudniejsze wyzwania. Jest jednak sposób by uczynić ten proces ciekawszym: zamiast mieć za zadanie wyświetlanie konkretnych tekstów, możemy pokierować robota działającego na stacji kosmicznej albo poprowadzić armię do walki. Taka właśnie idea przyświeca grom programistycznym.

Zrzut ekranu z gry CodeCombat, z jednego z początkowych poziomów. Po prawej stronie piszemy kod sterujący bohaterem, a po lewej możemy uruchomić ten kod i zobaczyć jaki uzyskamy efekt.

Grom programistycznym przyświeca cel łączenia dwóch światów: zabawy i nauki. Osobę z odpowiednim podejściem potrafią wciągnąć niczym najlepsza "strzelanka", a przy tym nauczyć niewiele mniej niż dobry kurs.

Dla mnie osobiście programowanie lub praca programisty sama w sobie przypomina grę strategiczną albo RPG. Ma się jasno zdefiniowany problem, poznaje się narzędzia i możliwości, a na koniec widoczny jest sukces. Trochę tak, jakby dostało się misję, następnie krążyło po świecie w poszukiwaniu podpowiedzi jak ją rozwiązać, aż w końcu uzyskiwało pożądany rezultat.

Odpowiednie podejście to sprawa kluczowa, gdyż osoby wysoko zmotywowane takie rzeczy mogą nie bawić, a wręcz przeszkadzać. Wybiorą one kurs programistyczny bez elementów graficznych i gamifikacyjnych1. Słusznie, nie należy się przecież zmuszać do zabawy. Z drugiej strony warto też docenić istnienie takich gier i poszukać czegoś, co mogłoby nas wciągnąć. Sam spędziłem na nich dużo czasu w młodości. Widziałem też wiele osób, które nauczyły się programować dzięki grom. Dostrzegam jakąś magię w tym, że człowiek wciągnięty w zabawę potrafi spędzić na nauce cały dzień, nawet nie zważając na upływający czas.

Warto pamiętać o czerpaniu przyjemności z nauki programowania. Programowanie uważam za coś naprawdę fantastycznego. Nie znam innej branży, w której z taką pasją podchodzi się do tego, co się robi. To pasja, której trzeba się nauczyć — i uwierz mi, warto. Przede wszystkim pomoże Ci w nauce, ale także rekruterzy zwracają na nią uwagę. Największym wrogiem nauki nie jest to, że zajmie ona trochę więcej czasu, ale to, że stracisz motywację i przestaniesz się uczyć. Tak, robienie i dostrzeganie postępów postrzegam jako bardzo istotne, ale frajda z samej nauki czyni ją łatwiejszą. Warto więc o nią zadbać. Jakkolwiek może to abstrakcyjnie brzmieć dla osoby chcącej jak najszybciej się przebranżowić — trzeba nauczyć się kochać programowanie. Bez tego ciężko zostać programistą, a jeszcze ciężej stać się dobrym w swoim fachu.

Przykładowe gry programistyczne

Gier programistycznych znamy mnóstwo. Jak wpiszesz w Google "programming games", to łatwo znajdziesz liczne zestawienia. Żeby jednak dać pewien przedsmak, z czego można wybierać, przedstawię te, w które sam grałem.

Historia zaczyna się od bardzo starych gier: Colobot oraz jego kontynuacja CeeBot. Są to już dość sędziwe pozycje, więc przedstawiam je raczej jako ciekawostkę i wprowadzenie. Steruje się w nich robotami na odległej planecie. W różnych częściach zajmujemy się kolonizacją oraz obroną planet, lataniem statkiem, a nawet wyścigami czy grą w kosmiczną piłkę nożną. W grze operuje się wymyślonym na jej potrzeby językiem podobnym do C++. Co ciekawe, Colobot uzyskał rekomendację Ministerstwa Edukacji i Nauki jako środek dydaktyczny na poziomie gimnazjum i szkół ponadgimnazjalnych w zakresie nauki tworzenia algorytmów oraz opanowania reguł programowania i składni typowych dla języków C++ i Java. Była to rzeczywiście pierwsza gra programistyczna, w którą grałem. Wiele się przy niej nauczyłem. Dziś już bym jej nie rekomendował, głównie dlatego, że mocno się zastarzała, wymaga instalacji, a poza tym lepiej przy nauce operować na języku, z którego potem planujemy korzystać.

Zrzut ekranu z gry CeeBot.

Bardziej współczesną opcją, a przy tym moim osobistym faworytem, jest CodeCombat. Gra opiera się na sterowaniu bohaterem w świecie RPG. Aktualnie możesz do tego wybrać język Python, JavaScript, CoffeeScript lub C++. W kolejnych planszach mierzysz się z różnorodnymi wyzwaniami, od najprostszego chodzenia i walczenia, po wydawanie rozkazów całym armiom. Grę wspominam jako dobrze skonstruowaną i wciągającą. Warto ją traktować jak uzupełnienie w procesie nauki. Zakładając, że zaczynasz już z jakimś doświadczeniem, pierwsze poziomy mogą się wydać proste. Wystarczy przejść je szybko, aby dojść do większych wyzwań. Większym problemem będzie, gdy stopień trudności przekroczy twoje aktualne umiejętności. Nie przejmuj się, po prostu poćwicz na innym kursie i wróć do gry później. Podczas grania polecam robić notatki z dostępnych funkcji.

Zrzut ekranu z gry CodeCombat.

Kolejna popularna propozycja to CodinGame. Tutaj już bezpośrednio zajmujemy się rozwiązywaniem wyzwań programistycznych. Mamy do wyboru zarówno ogromną liczbę misji, jak i języków programowania. Do tego liczne elementy współzawodnictwa z innymi graczami, które sprawiają, że potrafi być ona naprawdę wciągająca. Jako ciekawostkę dodam, że zyskała popularność nie tylko wśród niedoświadczonych programistów, ale także wśród osób ćwiczących się w konkurowaniu na zawodach programistycznych (Competitive Programming)2.

Zrzut ekranu z gry CodinGame.

Warto wspomnieć o grach, które powstały przede wszystkim, aby dostarczyć rozrywki z samej gry, a nauka programowania lub konceptów programistycznych jest raczej dodatkiem. Przykładowo Hack 'n' Slash, który na początku przypomina zwykłą grę RPG, ale szybko odkrywamy, że mechanika pozwala na hakowanie gry, w którą gramy, a z czasem możemy nawet modyfikować jej kod źródłowy.

Zrzut ekranu z gry Hack 'n' Slash.

Powstał też szereg gier, w których w zasadzie nie pisze się kodu jako takiego, ale przy użyciu różnego rodzaju abstrakcji uczy się myślenia i algorytmiki wykorzystywanej w programowaniu. Taką pozycją jest na przykład Human Resource Machine. Więcej takich gier przedstawię w następnym rozdziale, o nauce programowania na telefonie.

Zrzut ekranu z gry Human Resource Machine.

Zakończenie

Nauka programowania to wspaniały proces. Zbyt często widzę, jak ludzie nie potrafią go docenić. Najpierw gnają, ciągle niezadowoleni jak wiele jeszcze nie wiedzą, a jak już osiągną pewien poziom i coraz mniej jest wiedzy do zdobycia, wspominają tamten czas z rozrzewnieniem. Wtedy programiści często zaczynają poszukiwać okazji do nauki czegoś nowego — kształcą się w nowych językach i technologiach, uczęszczają na konferencje i hakatony, spędzają wolny czas na pisaniu open source. Nauka uskrzydla, daje poczucie rozwoju i dostarcza niesamowitej satysfakcji.

Możesz przyrównać ten proces do wyprawy w góry. Tak, każdy chce zdobyć szczyt, ale przecież najprzyjemniejsza jest sama wspinaczka. Kiedy alpinista wejdzie na wymarzoną górę, przeważnie nie siedzi zbyt długo na jej szczycie, a już szuka następnego wyzwania. Chodzi o proces. Wątpię, by ktoś został dobrym alpinistą, przy każdym kroku będąc na siebie złym, że jeszcze nie dotarł do celu albo że zbyt wolno tam podąża. Tak samo w programowaniu – istota opiera się na czerpaniu radości z procesu samej nauki.

Jako jedną z możliwości urozmaicenia tej ekscytującej ścieżki polecam sięgnięcie po gry programistyczne. Pełnią różne funkcje, od uczenia podstaw, stawiania wyzwań programistycznych, aż po przybliżanie algorytmiki. Warto popatrzeć na aktualnie popularne gry programistyczne i przekonać się, czy jakaś Cię nie zainteresuje, bo programowaniem warto się bawić.

1:

Gamifikacja lub grywalizacja to celowe wykorzystanie mechanizmów stosowanych przy projektowaniu gier w celu aktywizowania, motywowania i utrzymania użytkowników.

2:

Aczkolwiek są do tego dedykowane platformy jak HackerRank, CodeChef czy CodeForces.