AI na WarsztacieO niezadowalającym poziomie forum Warsztatu słyszałem już wielokrotnie. Że pytania dotyczą głównie podstaw programowania, że wiele z nich to mniej lub bardziej zakamuflowane “No i co tu jest źle?”, że odpowiedzi na większość z nich znajdują się na drugim końcu wyszukiwarki – i tym podobne. A jeśli już jakiś wątek nie podpada pod którąś z tych kategorii, to albo jest kolejnym “genialnym” pomysłem na grę, albo off-topikiem, albo w najlepszym razie dotyczy jakiegoś zagadnienia z zakresu programowania grafiki.
Pewnie coś w tym jest. Jednak ostatnio ku mojemu zaskoczeniu (i pełnej aprobacie) pojawiło się też kilka dyskusji na tematy związane ze sztuczną inteligencją. Niby taki dział też jest, ale jakoś dotąd nie zauważyłem, by był zanadto aktywny.
A tu proszę: kilka ciekawych wątków w ciągu paru dni. Może to nic wielkiego i może niespecjalnie nawet jest tu o czym pisać, bo ich tematyka jest dość ograniczona (głównie sieci neuronowe), a dziedzina raczej akademicka i pewnie nawet niekoniecznie związana z gamedevem. Ale…
Ale myślę, że jednak warto o tym wspomnieć :) Przede wszystkim po to, by nikt nie zapomniał, że gry to nie tylko ładna grafika i że w dzisiejszych czasach powinny one być choć trochę – z braku lepszego słowa – ‘inteligentne’.
A poza tym miałem też ochotę zwrócić uwagę na istnienie tego właśnie działu forum Warsztatu – więc niniejszym właśnie to czynię :]
Niekończące się liczby
Nieskończoność jest jednym z tych pojęć matematycznych, które z samej natury nie dają się odnieść do codziennego życia. W informatyce chyba najbliższym do niej odniesieniem jest nieskończona pętla - czyli taka, której warunek stopu nigdy nie będzie prawdziwy. Wiadomo jednak, że w rzeczywistości ową pętlę prędzej czy później przerwie jeśli nie debugujący kod programista, to jakiekolwiek inne zdarzenie z gatunku losowych, z brakiem prądu włącznie.
Dlatego też intuicyjne pojmowanie tego pojęcia często bywa nieadekwatne do jego faktycznego, matematycznego znaczenia. Można się było o tym przekonać niedawno za sprawą pewnego wątku na forum Warsztatu.
Dotyczył on pewnego matematycznego faktu - iż liczba 0,(9) równa się po prostu 1. Zapis 0,(9) oznacza tutaj - zgodnie z przyjętą powszechnie konwencją - ciąg 0,999... nieskończonej liczby dziewiątek w rozwinięciu dziesiętnym liczby.
Powyższa równość bywa często kwestionowana przez osoby niezbyt dobrze zaznajomione z bardziej abstrakcyjnymi koncepcjami matematycznymi, jak chociażby granice, szeregi czy własności zbioru liczb rzeczywistych. "Intuicyjnie" - aczkolwiek zupełnie błędnie - może się wydawać, że 0,(9) nie jest równe jeden, a jest jedynie liczbą bardzo, bardzo jej bliską. Najlepiej tak bliską, że już żadnej bliższej być nie może.
To oczywiście jest kompletną bzdurą, bo taka liczba nie istnieje. Jedną z najważniejszych cech liczb rzeczywistych jest właśnie to, że:

czyli że dla dowolnych dwóch takich liczb zawsze da się znaleźć trzecią, dającą się "włożyć" między nimi. Co więcej, takich pośrednich wartości jest całkiem sporo, bo dokładnie tyle samo co w całym zbiorze
- nieskończenie wiele.
I tu właśnie już wyraźnie pojawia się nieskończoność, która - jak sądzę - jest głównym "winowajcą" stwierdzeń, że jakoby
. Gdy spotykamy się z nim, dość naturalną reakcją jest bowiem zapytanie, ile wobec tego wynosi różnica
. Następująca dalej próba zapisania rzekomej "liczby tak bliskiej zera, że już bliższej nie ma" kończy się następnie wyprodukowaniem potworka w rodzaju 0,(0)1. W założeniu ma być on odczytywany jako liczba, która w zapisie dziesiętnym ma nieskończoną liczbę zer, po których następuje jedna jedynka...
Chwila! Jak w ogóle coś może występować na końcu nieskończonego ciągu?!... Ano właśnie - tutaj następuje efektowna logiczna sprzeczność, która ładnie dowodzi nieprawidłowości założenia (czyli nieszczęsnej równości
). Pokazuje też, że mamy tu w gruncie rzeczy z nierozumieniem pojęcia tzw. nieskończoności potencjalnej, czyli najprostszego ujęcia idei nieskończoności: jako takiej ilości, która jest większa od każdej, dowolnie dużej skończonej liczby.
A to przecież nie wszystko, co matematyka na temat nieskończoności ma do powiedzenia. Wręcz przeciwnie - to dopiero marny wycinek, jako że teoria zbiorów przekonuje nas, że tak naprawdę rodzajów nieskończoności jest... nieskończenie wiele :) Uff, jak dobrze, że w informatyce wszystko, na czym się w praktyce operuje jest z założenia skończone i możliwe do policzenia... A jeśli nawet nie, to przecież zawsze można się ograniczyć do jakiegoś ograniczonego z góry zbioru wartości, które wspieramy. Tak jak pewien protokół używany do routowania, dla którego nieskończoną liczbą jest już... 16 :]
Wartość pomysłów
Podobno w informatyce najcenniejszym zasobem są pomysły. Bo o ile zrealizowanie gotowej idei to praca czysto rzemieślnicza i - przynajmniej teoretycznie - możliwa zawsze do wykonania przy odpowiednim czasie i przy właściwej liczbie osób, to z kolei "wzięcie skądś" pomysłu nie jest taką prostą sprawą. W końcu, jak to ktoś powiedział, pomysły nie rosną przecież na drzewach :)
Tak to zwykle wygląda z rynkowego punktu widzenia. Dlatego bardzo ciekawy jest fakt, że np. na Warsztacie wygląda to - jak się wydaje - zupełnie odwrotnie. Objawem tego jest choćby fakt, że działy z pomysłami i projektami na forum są jednymi z większych i bardziej aktywnych. Jak to możliwe?
Wydaje mi się, że przyczyny są co najmniej dwie. Po pierwsze, na Warsztat trafiają osoby zainteresowane programowaniem gier i przynajmniej część z tych (a w rzeczywistości pewnie całkiem spora część) chcę zająć się tym tematem między innymi dlatego, że mają w głowie pomysł na jakąś grę. Albo na kilka od razu. A że na początkowym etapie nauki nijak nie da się tego zrealizować, owe genialne idee lądują we wspomnianym dziale forum.
Poza tym, nie ma co ukrywać: większość z nich jest w istocie marnej jakości - nawet jeśli litościwie odsiejemy projekty kolejnych MMORPG-ów, jakie dość często się pojawiają :) Oczywiście dla swoich autorów są one zawsze niezwykle innowacyjne i warte zrealizowania, ale nie łudźmy się: tak naprawdę podobne epitety można przypisać tylko ich małemu ułamkowi.
Innymi słowy, jest duża różnica pomiędzy pomysłem a dobrym pomysłem. Tych pierwszych każdy z nas ma pewnie dziesiątki tygodniowo. Nieuchronnie trzeba więc wybierać z nich tylko te najbardziej wartościowe. Do pozostałych najlepiej jest zaaplikować garbage collector :)
Koniec pory karmienia
Niecały rok temu napisałem tutaj co nieco o tym, dlaczego nie podobają mi się różnego rodzaju "wynalazki statystyczne", obecnie na forum Warsztatu. Wtedy pomysł usunięcia karmy i licznika postów nie spotkał się z jakimś szerokim poparciem. Pewnie było jeszcze na to za wcześnie. Musiało minąć te kilkanaście miesięcy, żeby pozostali moderatorzy zauważyli w końcu to, że obecność tych śmiesznych cyferek nie powoduje wcale podniesienia jakości forum - wręcz przeciwnie :)
No, ale lepiej późno niż wcale ;> Wczoraj - jako skutek głosowania w gronie moderatorów - zarówno karma, jak i licznik postów zostały usunięte z widoku. Ta pierwsza zniknęła całkowicie, zaś liczbę postów można wciąż obejrzeć w profilu użytkownika. Całkiem rozsądne wyjście, moim skromnym zdaniem.
Engine jest wielki, a ja malutkiZapewne niespotykana często koniunkcja planet sprawiła, że na forum Warsztatu pojawiło się ostatnio kilka przypadków dość specyficznych pytań. Ich autorzy chcieli dowiedzieć się, czy - najogólniej mówiąc - są w stanie coś konkretnego w dziedzinie programowania osiągnąć. "Czy dam radę napisać taką-a-taką grę?" jest przykładem takiego właśnie pytania.
Skrajnie zresztą dziwnego, moim skromnym zdaniem. Nie chodzi tu nawet o fakt, że odpowiedź na podobne pytanie jest niemożliwa do udzielenia. Bardziej zdumiewa mnie to, iż obecni adepci sztuki koderskiej jakoś lubią wynajdywać sobie różne potencjalne przeszkody. A może za mało wiem o programowaniu? Może za słabo znam matematykę? Albo jestem po prostu za młody?... Takie i podobne "argumenty" są bowiem przytaczane przy okazji wspomnianych pytań.
Jest dla mnie dosyć zaskakujące, że dzisiejsi 'młodzi' (raczej w sensie umiejętności) tak szybko się "starzeją". Jeszcze całkiem nieźle pamiętam, że będąc początkującym prawie w ogóle nie przejmowałem się realnością podejmowanych amatorskich projektów. Gra 3D, strategiczna czy sieciowa (MMORPG-ów raczej wtedy nie było) z innowacyjnym gameplayem i nowatorskimi rozwiązaniami technicznymi? Ależ oczywiście, toż to praca najwyżej na tydzień ;D Jak się kończyły takie zamiary, nietrudno zgadnąć. Ani mi, ani podobnym do mnie 'kolegom po fachu' nie przeszkadzało to jednak próbować.
Co więc zmieniło się, że teraz widzę coraz więcej nowicjuszy pełnych wątpliwości? Czy chociażby programowanie gier stało się trudniejsze? Powiedziałbym raczej, że wręcz przeciwnie (weźmy np. coraz więcej gotowych silników i coraz lepsze wersje graficznych API), a trend ten wydaje się przy tym stabilny. Ale nawet gdyby tak nie było, to jaki sens zadawanie niedorzecznych pytań w stylu "Czy mi się uda?". Nie, nie uda ci się - to mogę ci powiedzieć w ciemno. Z każdego nieudanego projektu można jednak wyciągnąć wnioski i nauczyć się pożytecznych rzeczy. I dlatego nie ma co przerażać się, że to trudne, niezrozumiałe czy wymagające napisania wielkich ilości świetnie działającego kodu. Wszystko przecież przychodzi z czasem, a porażki są nieodłączną częścią postępów w nauce.
Zatem - motyki w garść, Słońce czeka ;)
Krótkie i długie odpowiedziOstatnio doszedłem do wniosku, że odpowiadanie na z pozoru trywialne pytania początkujących programistów (głównie na forum Warsztatu, rzecz jasna) nie jest w rzeczywistości takie proste. Zwykle nie chodzi oczywiście o samą naturę problemu, który w większości ogranicza się do "tajemniczego" (głównie dla pytającego) komunikatu kompilatora, narzekającego na taką-a-taką linijkę w kodzie. Owszem, rozwiązanie często widać na pierwszy rzut oka. Gorzej jest z odpowiednim jego przekazaniem.
Z jednej strony można odpowiedzieć krótko, zwięźle i precyzyjnie, trafiając w samo sedno sprawy bez zbędnych wyjaśnień. Wtedy jednak nierzadko okazuje się, że taka odpowiedź rodzi raczej dodatkowe pytania, chociażby ze względu na odruchowe posługiwanie się pewnymi bardziej zaawansowanymi pojęciami, które dla nowicjusza będą nieznane. A stąd już niedaleko do bycia postrzeganym jako zarozumiały mądrala.
Zamiast tego można oczywiście udzielić długiej i wyczerpującej odpowiedzi, omawiającej spory zakres zagadnienia, którego dotyka problem. Można - jeśli ktoś ma na to czas i ochotę ;P Przy okazji można też niestety skutecznie oduczyć delikwenta samodzielności w znajdowaniu rozwiązań swoich programistycznych problemów.
A więc i tak źle, i tak nie(zbyt )dobrze :) Ale nie jest to w sumie zaskakujące: przecież podobno nie ma niewłaściwych pytań, a jedynie takież odpowiedzi. A przedstawiony wyżej dylemat ma też jedną poważną zaletę: jest całkiem dobrym pretekstem, aby przestać zajmować się cudzymi kłopotami i wziąć się za własny kod ;]
Szkółka jest OKParę tygodni temu w wyniku spontanicznej akcji jednego z moderatorów na forum Warsztatu pojawił się dział o nazwie Szkółka. W założeniu mają tam trafiać wątki reprezentujące niższy poziom niż te, których miejsce jest w innych zakątkach forum. Mówiąc wprost, ma to być dział dla początkujących, jakich na Warsztacie nie jest wcale tak mało.

Przyznam, że początkowo byłem dość sceptycznie nastawiony do tego pomysłu. Szkółka powstała jako odtrutka na plagę pytań banalnych, oczywistych oraz takich, które zahaczają bardziej o podstawy programowania w ogóle niż programowania gier (a to drugie jest przecież zakresem tematycznym Warsztatu). Na pewno jednak nie miała być miejscem, gdzie toleruje się wybryki lamerskie, jak wątki typu "Oto mój kod, co tu jest źle?" czy pytania, na które odpowiedź można w 10 sekund znaleźć dowolną wyszukiwarką.
Moje wątpliwości dotyczyły tego, czy da się ten zamysł zrealizować w praktyce. Rzekoma Szkółka mogła bowiem łatwo stać się strefą wolnej amerykanki, gdzie dozwolone byłoby wszystko lub prawie wszystko.
Teraz jednak muszę stwierdzić, że ten eksperyment chyba jednak się powiódł. Korzyści z jego realizacji są całkiem spore: przede wszystkim jest to powolne zacieranie się wrażenia, iż na Warsztacie moderatorzy bez wahania banują każdego nowego użytkownika. (Co oczywiście było zawsze bardzo dalekie od prawdy, ale mniejsza o to ;P). Dodatkowo mamy też znacznie wyraźniejsze rozgraniczenie między początkującymi a lamerami dzięki przejrzystym zasadom moderacji w Szkółce. Dowolny wątek może bowiem być z niej usunięty tylko z powodów regulaminowo-netykietowych, a nie na podstawie rzekomo "zbyt niskiego poziomu" (którego ocena, nie ukrywajmy, jest zawsze w jakimś stopniu funkcją widzimisię danego moderatora).
Można oczywiście narzekać, że istnienie Szkółki obniża poziom Warsztatu jako całości. Argument ten opiera się na twierdzeniu, że ów wysoki poziom jest cenną wartością, którą należy usilnie chronić. Osobiście zupełnie się z tym nie zgadzam (o czym zresztą pisałem jakiś czas temu), więc ten postulat nie robi na mnie wielkiego wrażenia :) Za konieczną niedogodność istnienia Szkółki uważam jedynie to, iż przeglądając forum pod kątem ewentualnych interwencji moderatorskich (że tak eufemistycznie to nazwę ;]) należy zwracać uwagę na to, w którym dziale jest dany wątek. A to nie jest przecież jakoś specjalnie kłopotliwe.