Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Jak 35-letnia gra rozwinie Cię jako programistę

Matt Rudge Senior Product Developer / Code Institute
Poznaj grę Core War i zmień swoje myślenie o programowaniu.
Jak 35-letnia gra rozwinie Cię jako programistę

Około 30 lat temu, na początku 1990 roku, przeczytałem stary artykuł Scientific American z 1984 roku autorstwa A.K. Dewdney’a. Określił tam specyfikacje gry, którą nazwał Core War. Podstawową zasadą było to, że każdy z dwóch graczy pisze „program bitewny” (znany jako „wojownik”), w języku kojarzącym się z pseudo-asemblerem, który nazwał Redcode. Każdy program miał być ładowany do losowej lokalizacji w tablicy pamięci (lub rdzeniu), z celem znalezienia i wyeliminowania drugiego. Turnieje miały trwać określoną liczbę cykli poleceń lub do momentu pokonania jednego programu przez przeciwnika.

Wziąłem kopię interpretera z jednej z bibliotek shareware, które były wtedy reklamowane w magazynach komputerowych i zacząłem grać. Gra dawała mi nie tylko wiele przyjemności, ale też wskazała mi, na czym powinienem się skupić przy tworzeniu kompaktowych programów. Było to również moje pierwsze wprowadzenie do idei von Neumanna na temat programów samoreplikujących się. 


Programowanie gier i wyzwań, pomoże Ci stać się lepszym programistą

Wyzwania, takie jak na stronie Advent of Code, są świetną zajawką specjalistycznych terminów, metod i algorytmów. Pomogą Ci udoskonalić swoje umiejętności i wskażą, w którym miejscu powinieneś poprawić swój kod.

Core War zafascynowało mnie jednak z innego powodu, który był cytatem z oryginalnego artykułu Dewdney’a, w którym ten mówił o „intrygującym pomyśle dwóch programów walczących w ciemnych i bezdźwięcznych zakamarkach rdzenia”.

Ciemne i bezdźwięczne zakamarki rdzenia… czyż to nie działa na wyobraźnię? Jestem romantykiem, jeśli chodzi o programowanie. Uwielbiam cytat Fredericka P. Brooksa z “The Mythical Man-Month”:

Programista, podobnie jak poeta, działa wyłącznie pozbawiony przyziemnych myśli. Buduje swoje zamki w powietrzu, z powietrza, pracując swoją wyobraźnią...

Magia mitu i legendy działa w naszych czasach. Ktoś wpisuje prawidłową inkantację na klawiaturze, a ekran ożywa, pokazując rzeczy, które nigdy nie istniały i nie miały istnieć. Powtarzam moim uczniom, że kiedy piszą program, dają mu życie. Jedną z najbardziej satysfakcjonujących rzeczy dla mnie jako programisty jest obserwowanie kogoś, kto korzysta z programu, który stworzyłem. Po chwili znają interfejs lepiej niż ja. Nawigują po nim szybciej niż ja, a także odkryli (lub wymyślili) skróty i sztuczki, których nigdy nie zamierzałem wprowadzać.

Oczywiście nie chcę antropomorfizować oprogramowania, ale chcę zmusić do pomyślenia o stworzeniu aplikacji i wypuszczeniu jej na wolność. Jako koderzy, jesteśmy twórcami. Naszymi narzędziami są nasze umysły, a także nasze edytory, debuggery i pakiety testowe. Nie piszemy po prostu kodu, a tworzymy... Innymi słowy: programowanie to nie tylko praca, a rzemiosło. I, jak każde rzemiosło, jego opanowanie wymaga czasu i poświęcenia.

Mój przyjaciel cieśla powiedział mi kiedyś, że lubi pracę z drewnem, ponieważ bywa to naprawdę zaskakujące zajęcie. Czasami musisz zmienić swój plan lub projekt ze względu na sęki, pęknięcia lub naturalne usłojenie drewna. Chociaż tworzymy „zamki w powietrzu i z powietrza”, nasze komputerowe medium może również rzucać nieoczekiwane wyzwania. Być może metoda lub biblioteka nie działa w oczekiwany sposób, może asynchroniczność lub idiom języka programowania spłata Ci figiel. Nieoczekiwane dane wejściowe lub po prostu złe dane mogą sprawić, że Twoja aplikacja zachowa się jak wojownik Core War w chwili śmierci. Umiejętność przewidywania i inteligentnego zarządzania tymi wyzwaniami jest cechą dobrego rzemieślnika.


Rozwijaj dumę ze swojego rzemiosła jako programista

35 lat od pierwszego wydania i 30 lat, odkąd pierwszy raz o nim usłyszałem, Core War nadal mnie fascynuje. Jeśli nie interesuje Cię język pseudo asemblera, zachęcam Cię do wypróbowania innych gier i wyzwań związanych z kodowaniem, które bez większego wysiłku znajdziesz w sieci. W ten sposób zwiększysz swoją biegłość jako programista, pogłębisz rozumienie informatyki i rozwiniesz swoje umiejętności. Jeśli chodzi o mnie, wracam do budowania mojej implementacji Core War używając Flaska, Pythona i JavaScriptu :)



To oficjalne tłumaczenie z języka angielskiego, a oryginał tekstu przeczytasz tutaj.

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej