Scratch - plnohodnotný programovací jazyk nebo jen dětské puzzle? (3. část: Scratch a BYOB)

1. 11. 2011
Doba čtení: 17 minut

Sdílet

V desáté části seriálu o programovacích jazycích navržených pro výuku programování nejprve dokončíme popis projektu Scratch. Řekneme si, jak se pracuje s operátory a taktéž i základní informace o programování řízeném událostmi. Poté se zaměříme na popis jednoho rozšíření Scratche: projektu BYOB (Build Your Own Block).

Obsah

1. Operátory a funkce ve Scratchi

2. Událostmi řízené programování

3. Závěrečné zhodnocení předností a záporů projektu Scratch

4. Projekt BYOB – Build Your Own Block

5. Tvorba nových bloků – základ při dekompozici programů

6. Příkazové bloky s parametry

7. Demonstrační příklad – použití bloků s parametry

8. Demonstrační příklad – použití bloků při tvorbě rekurzivních algoritmů

9. Odkazy na Internetu

1. Operátory a funkce ve Scratchi

V předchozích dvou částech seriálu o programovacích jazycích navržených s ohledem na výuku programování jsme si popsali způsob tvorby aplikací v projektu Scratch, včetně popisu jednotlivých řídicích bloků, které jsou mj. použity i pro tvorbu podmínek a programových smyček. Dnes popis projektu Scratch dokončíme. Nejdříve si řekneme, jak je možné využívat operátory a funkce zabudované přímo ve Scratchi a ve druhé kapitole se zaměříme na téma událostmi řízeného programování, které je ve Scratchi podporováno. Ovšem projekt Scratch má i přes své nesporné přednosti i několik omezení, které se týkají jak prakticky neexistujících funkcí pro vstup a výstup dat (například do souborů), tak i toho, že ve Scratchi není možné tvořit procedury a funkce, tudíž v něm není snadné dekomponovat složitější programy na programy jednodušší ani implementovat rekurzivní algoritmy. Toto omezení bylo odstraněno hned v několika rozšířeních Scratche, kterým se budeme dále věnovat.

Obrázek 1: V této programové smyčce je při vyhodnocování, zda se má běh smyčky již ukončit, využit relační operátor „menší než“.

Začněme popisem takzvaných operátorů. Tento název je ve Scratchi použit pro pojmenování samostatné kategorie příkazových bloků – jedná se o bloky vykreslované se světle zelenou barvu pozadí implementující jak skutečné operátory, tak i funkce. Příkazové bloky ze „světlezelené“ kategorie je možné rozdělit na bloky implementující základní aritmetické operace (součet, rozdíl, součin, podíl, zaokrouhlení a dělení modulo), dále na bloky implementující nějakou matematickou funkci (goniometrické funkce, logaritmické funkce, výpočet odmocniny…), relační operátory (jsou podporovány pouze relace „menší než“, „větší než“ a „rovno“), logické operátory (AND, OR, NOT) a na závěr je zde přítomen blok generátoru náhodných čísel a bloky pro operace s řetězci. Všechny vyjmenované bloky obsahují jedno nebo dvě okénka, do kterých se buď zapisuje přímo hodnota operandu, nebo je sem možné přenést jméno proměnné (viz předchozí část seriálu), popř. i celý blok s jiným operátorem.

Obrázek 2: Použití funkce pro generování náhodných čísel spadajících do zadaného rozsahu.

Tímto poměrně jednoduchým a současně i přehledným způsobem je možné skládat i složité matematické a logické výrazy, které jsou díky použití bloků vždy správně „uzávorkovány“ a navíc se nemusí složitě popisovat asociativita a priorita jednotlivých operátorů (uživatel při tvorbě složitějších výrazů vlastně sám konstruuje derivační strom, podobně jako je tomu například v Lispu). Pokud se na řádek obsahující výraz dvakrát klikne levým tlačítkem myši, pokusí se Scratch celý výraz vyhodnotit a vypsat výsledek do „bubliny“, čehož je možné využít při ladění programů (použijí se aktuální hodnoty proměnných).

Obrázek 3: Ukázka složitější podmínky, v níž jsou použity tři relační operátory a dva logické operátory AND.

2. Událostmi řízené programování

Při popisu projektu Scratch nesmíme zapomenout ještě na jeho jednu velmi důležitou vlastnost. Jedná se o podporu programování řízeného událostmi. V principu se jedná o to, že program přiřazený ke každému spritu (a taktéž k pozadí) může běžet nezávisle na ostatních spritech a to dokonce i ve stejný čas. Díky tomu lze velmi snadno implementovat například několik pohybujících se objektů ve hře, typicky se může jednat o hráče a několik NPC. Na druhou stranu je však mnohdy nutné, aby spolu tyto objekty (protože se o nic jiného, než o objekty nejedná) nějakým způsobem komunikovaly. Tuto komunikaci je možné alespoň částečně zajistit pomocí proměnných sdílených mezi všemi sprity, protože již minule jsme si řekli, že u každé proměnné je možné specifikovat, zda se jedná o soukromou proměnnou vybraného spritu nebo naopak o proměnnou, k níž mají přístup i ostatní sprity. Komunikace pomocí proměnných sice umožňuje předávání informací mezi objekty, ovšem pro přesné načasování a synchronizaci je nutné použít jiný mechanismus. V případě Scratche se jedná o metodu nazvanou posílání zpráv.

Obrázek 4: Velmi jednoduchá reakce na zprávu se jménem „zprava1“. Po obdržení a zachycení této zprávy vypíše sprite na dvě sekundy do „bubliny“ text o obdržení zprávy. Po dvojkliku na spodní osamocený blok se tato zpráva rozešle všem objektům.

Tuto metodu lze ve Scratchi používat velmi jednoduše. Každý sprite může obsahovat jeden nebo více programů spuštěných ve chvíli, kdy je spritu (nebo všem spritům) poslána zpráva určená svým jménem. Ihned poté se začne tento program vykonávat. Scratch samozřejmě taktéž obsahuje příkazový blok pro poslání zprávy určenému spritu nebo všem spritům (některé na ni nemusí nijak reagovat) a taktéž blok pro poslání zprávy a čekání na její zpracování (lze tak rozlišit mezi synchronním a asynchronním voláním). Podobný mechanismus je využit i při tvorbě programů, které reagují buď na stisk ikony se zelenou vlajkou (tou lze například současně rozpohybovat všechny sprity), na stisk vybrané klávesy (včetně kurzorových šipek využitelných ve hře), popř. na klik myší na vybraný sprite. I když se na první pohled mohou tyto možnosti zdát nedostatečné, vzniklo již mnoho her, demoprogramů nebo prezentací ukazujících, že tyto čtyři typy událostí tj. přijetí zprávy, spuštění aplikace, stisk klávesy a kliknutí myší), dostačují i pro tvorbu složitějších aplikací s mnoha interagujícími objekty.

Obrázek 5: Reakce spritu na obdržení a zachycení zprávy.

3. Závěrečné zhodnocení předností a záporů projektu Scratch

Projekt Scratch, jehož popisem jsme se až doposud zabývali, se po relativně krátké době po svém představení veřejnosti stal velmi populární a to nejenom mezi učiteli základních škol (v USA a dalších zemích), ale i na středních školách a na školách vysokých (především na fakultách netechnického zaměření). Důvodů k této popularitě bylo a je několik, největším však zůstává možnost vytvoření i poměrně složitého programu bez toho, aby byl uživatel nucen zdlouhavě studovat syntaxi a sémantiku jazyka, učit se ovládat vývojové prostředí nebo prostředí interpretru a navíc ještě reagovat na různá kryptická chybová hlášení (ze syntaxe většiny běžných programovacích jazyků vyplývá, že například chybějící uzavírací závorka nebo klíčové slovo ukončující nějaký blok, vede ke vzniku chybového hlášení na jiném místě v programu, než kde se skutečně chyba nachází). Další předností Scratche je jeho orientace na tvorbu multimediálních programů a taktéž možnost snadno prezentovat výsledný projekt na Internetu.

Obrázek 6: V tomto programu je uvnitř programové smyčky na základě vyhodnocení podmínky (kolize dvou barev) rozhodnuto, zda se má všem dalším objektům ve scéně poslat zpráva se jménem „got-me“.

Mezi další přednost Scratche, která sice není na první pohled zřejmá, ale zato se ukázala být poměrně důležitá, patří fakt, že je tento projekt naprogramován ve Squeaku, což mj. zajišťuje i jeho relativně snadnou rozšiřitelnost (sami se můžete přesvědčit, že se při instalaci Scratche nainstaluje binární virtuální stroj Squeaku, v němž se spouští Scratch.image. Scratch má však i několik nevýhod a omezení, které částečně vyplývají z toho, že jeho tvůrci nechtěli zbytečně komplikovat jeho uživatelské rozhraní ani počet dostupných funkcí. Z těchto snah o minimalismus vyplývá mj. i neexistence funkcí umožňujících práci se soubory, funkcí pro komunikaci přes počítačovou síť atd. Ovšem mnohem závažnější je nemožnost tvorby vlastních řídicích bloků, které by nahrazovaly podprogramy/pro­cedury/funkce. Není tedy divu, že – i díky tomu, že je Scratch snadno rozšiřitelný ve Squeaku – poměrně rychle vzniklo několik rozšíření Scratche. Především se jedná o projekty BYOB – Build Your Own Block a Panther.

Obrázek 7: Naprogramovaná reakce na zprávu se jménem „got-me“.

4. Projekt BYOB – Build Your Own Block

Nejznámějším a nejpoužívanějším rozšířením Scratche je v současnosti s velkou pravděpodobností projekt BYOB, neboli Build Your Own Block, jehož hlavními autory jsou Brian Harvey a Jens Moenig z univerzity v Berkeley (původní projekt Scratch naproti tomu pochází z neméně slavné Massachussetts Institute of Technology neboli MIT). Název tohoto projektu do značné míry napovídá, jaká nová funkcionalita byla do BYOBu přidána – jedná se o možnost vytváření vlastních příkazových bloků, což umožňuje dekompozici programů na menší, jednodušší a snadněji zvládnutelné části a samozřejmě též implementaci rekurzivních algoritmů. Ovšem ve skutečnosti projekt BYOB svým uživatelům nabízí i množství dalších funkcí, například tvorbu anonymních bloků, podporu pro přístup k atributům objektů, dotaz na typ libovolného objektu v čase běhu programu, vylepšenou práci se seznamy, funkce vyššího řádu atd.

Obrázek 8: Informace o autorech projektu BYOB i o autorech projektu Scratch.

V některých případech se sice jedná o poměrně složité techniky známé a používané například ve funkcionálních programovacích jazycích, ovšem základní rozšíření, které projekt BYOB svým uživatelům nabízí, tj. tvorbu vlastních příkazových bloků, je možné pochopit a začít využívat poměrně rychle, a to i v případě podprogramů s parametry. Uživatelské prostředí projektu BYOB se prakticky neliší od původního Scratche, což je zajisté výhoda při přechodu uživatelů mezi oběma projekty. Chybějící českou lokalizaci je možné alespoň částečně nahradit lokalizačním souborem ze Scratche – postačuje nakopírovat soubor cs.po z podadresáře scratch/locale/ do podadresáře byob/locale/. Český překlad samozřejmě nebude dostupný pro nové bloky, které se v originálním Scratchi nenachází, jejich překlad je však možné provést na základě šablony uložené v souboru byob/locale/BY­OB.pot.

Obrázek 9: Některé nové příkazové bloky, které je možné využívat v projektu BYOB.

5. Tvorba nových bloků – základ při dekompozici programů

Tvorba nových bloků v projektu BYOB je poměrně jednoduchá a přímočará. V sekci „Proměnné“ se v její dolní části skrývá tlačítko sloužící pro vytvoření nového bloku – viz též screenshot zobrazený na desátém obrázku. Po stisku tohoto tlačítka se zobrazí dialog, v němž je možné zadat jak jméno nového bloku, tak i sekci, do níž má být blok uložen. Třetí volbou je typ bloku, prozatím se však budeme zabývat bloky příkazovými – command. Blok získá barvu pozadí právě na základě sekce, do níž je přiřazen (screenshot zobrazený na obrázku číslo 11).

Obrázek 10: V dolní části sekce „Proměnné“ se nachází nové tlačítko sloužící pro vytvoření nového bloku.

Poté je již možné, stále v tomtéž dialogu, zvolit vstupní parametry bloku (viz též další kapitoly) a následně i vytvořit tělo bloku, tj. přenést a uspořádat v dialogu další příkazové bloky, které se mají vykonat. Ihned poté je již možné blok použít v programu. Blok může být viditelný buď pro právě aktivní (editovaný) sprite, nebo pro všechny sprity, které se v projektu nachází. S tím samozřejmě souvisí i oblast viditelnosti proměnných, ke kterým má blok přístup.

Obrázek 11: Dotaz na jméno nového bloku i na sekci, do níž má být nový příkazový blok uložen.

6. Příkazové bloky s parametry

Vytvoření i použití uživatelsky definovaných bloků je sice snadné a užitečné, ale ve většině případů je nutné do bloku předat i nějaké parametry. Je zřejmé, že použití globálních proměnných, popř. proměnných platných pouze pro vybraný sprite, není to nejvhodnější řešení. Ovšem ve skutečnosti není nutné tuto nedokonalou a v mnoha ohledech dokonce i potenciálně škodlivou techniku použít, protože pro každý uživatelsky vytvářený blok je možné zvolit jak počet parametrů, tak i jejich názvy (což asi všichni očekávají) a taktéž typ. Určení typu parametrů již pravděpodobně není tak obvyklé, především ne u jazyka určeného především pro výuku programování, ovšem ve skutečnosti je uvedení typu parametru pouze volitelná informace, která nemusí být explicitně specifikována, takže se jí začínající uživatelé-programátoři nemusí hned zpočátku zabývat (na druhou stranu může být specifikace typu parametru použita pro kontroly prováděné při spuštění programu nebo při pouhém zkoumání vlastností daného bloku).

Obrázek 12: Ikony se znakem + sloužící pro definici parametrů bloku.

Přidání nového parametru do vytvářeného bloku je velmi jednoduché – postačí přesunout kurzor myši nad název bloku, což vede k automatickému zobrazení dvojice kulatých ikon se symbolem „plus“. Po stisku ikony vpravo či vlevo od názvu bloku se zobrazí dialog pro výběr názvu parametru a jeho typu (pro tento účel je určen rozbalovací seznam skrytý za šipkou mířící doprava). Výběrem levé nebo pravé ikony „plus“ se navíc určuje, zda se parametr v ikoně bloku bude zadávat nalevo či napravo od jeho názvu, což mj. znamená, že je možné velmi snadno vytvořit i nový infixový operátor s funkcí podobnou již existujícím aritmetickým nebo logickým operátorům. Jakmile je parametr uživatelského bloku definován, je možné jeho ikonu zkopírovat (přetažením pomocí myši) přímo do těla bloku. Jméno parametru se tedy nemusí vypisovat s využitím klávesnice, podobně jako není nutné vypisovat jméno globální proměnné či proměnné lokální pro daný sprite.

Obrázek 13: Blok s dvojicí parametrů, z nichž první se zapisuje před název bloku a druhý naopak až za jeho název.

7. Demonstrační příklad – použití bloků s parametry

Využití uživatelsky definovaného bloku s parametry si ukážeme na příkladu, v němž se využívá blok určený pro vykreslení šestiúhelníku s volitelnou délkou stran. Tento blok je následně volán z programové smyčky s měnící se hodnotou parametru, což vede k vykreslení spirály složené ze šestiúhelníků.

Obrázek 14: Uživatelsky definovaný blok sloužící pro vykreslení šestiúhelníku s volitelnou délkou stran.

Obrázek 15: Program, v němž se v programové smyčce volá uživatelsky definovaný blok „sestiuhelnik“.

Obrázek 16: Výsledek běhu programu, jehož kód byl ukázán na obrázcích 14 a 15.

8. Demonstrační příklad – použití bloků při tvorbě rekurzivních algoritmů

Uživatelsky definované bloky lze samozřejmě použít i pro implementaci rekurzivních algoritmů. Blok je totiž ihned po potvrzení informací na prvním formuláři umístěn do zvolené skupiny a je ho tak možné přetáhnout do těla toho samého bloku. Jedním z nejčastěji ukazovaných a implementovaných rekurzivních algoritmů s grafickým výstupem je algoritmus pro vykreslení křivky Helge von Kocha, jejímž popisem jsme se již zabývali v seriálu Fraktály v počítačové grafice. Vytváření křivky Helge von Kocha spočívá v provedení následujících kroků (nejedná se o popis programu, ale geometrické konstrukce této křivky):

  1. Nejprve se zkonstruuje vodorovná úsečka o zadané délce.
  2. Ve druhém kroku se tato úsečka rozdělí na (stejně dlouhé) třetiny. Prostřední třetina se vyjme a na jejím místě se sestrojí dvě ramena rovnoramenného trojúhelníku. Vznikne tedy obrazec, který se skládá z lomené úsečky (polyčáry), jejíž délka je rovna 4/3 délky původní úsečky, tj. celková délka takto zkonstruované křivky se o třetinu prodlouží.
  3. Na vzniklý obrazec se opakovaně aplikuje pravidlo uvedené v předchozím bodě, tj. každá úsečka je rozdělena na třetiny, prostřední třetina se vyjme a nahradí se dvojicí ramen rovnoramenného trojúhelníka.

Obrázek 17: Uživatelsky definovaný blok s implementací vykreslení křivky Helge von Kocha. V parametru size se předává vodorovná délka obrazce, v parametru limit pak limitní (nejmenší) délka jednotlivých segmentů křivky.

Při implementaci uživatelsky definovaného bloku, jehož úkolem je s využitím želví grafiky vykreslit Kochovu křivku, se sice budeme řídit výše uvedenými pravidly pro geometrickou konstrukci křivky, vlastní implementace však bude dosti odlišná, protože odebírání částí úseček a náhrada odebraných částí úsečkami novými nejsou operace, které by bylo možné jednoduše provádět.

Obrázek 18: Blok z obrázku číslo 17 je v tomto programu volán celkem třikrát pro vykreslení Kochovy křivky s vodorovnou délkou 400 jednotek a rozdílným limitem (ten určuje úroveň rekurzivního zanoření).

ict ve školství 24

Zvolíme mnohem elegantnější řešení založené na rekurzi. Základem vznikajícího uživatelsky definovaného bloku bude vykreslení tvaru podobného první iteraci Kochovy křivky, tj. čtyř úseček, z nichž dvě krajní úsečky jsou vodorovné a prostřední úsečky tvoří dvojici ramen rovnostranného trojúhelníku. Tento tvar je možné vykreslit tak, že se nejprve nakreslí první vodorovná úsečka, potom se sprite natočí o 60° doleva a vykreslí se druhá úsečka. Po otočce o 120° doprava lze vykreslit úsečku třetí a po posledním otočení o 60° doleva je sprite opět orientován vodorovně a může tak vykreslit poslední část obrazce. Rekurze spočívá v náhradě kreslení úsečky za volání uživatelského bloku s délkou úsečky zmenšenou na jednu třetinu.

Obrázek 19: Výsledek běhu programu, jehož kód byl ukázán na obrázcích 17 a 18.

9. Odkazy na Internetu

  1. Scratch: oficiální stránka projektu
    http://scratch­.mit.edu/
  2. Scratch: galerie projektů vytvořených ve Scratchi
    http://scratch­.mit.edu/galle­ries/browse/ne­west
  3. Scratch: nápověda
    file:///usr/sha­re/scratch/Hel­p/en/index.html
  4. Scratch: obrazovky nápovědy
    file:///usr/sha­re/scratch/Hel­p/en/allscreen­s.html
  5. Scratch (Wikipedie CZ)
    http://cs.wiki­pedia.org/wiki/Scrat­ch
  6. Scratch (programming language)
    http://en.wiki­pedia.org/wiki/Scrat­ch_(programmin­g_language)
  7. Mitchel Resnick (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Mit­chel_Resnick
  8. Domácí stránka Mitchela Resnicka
    http://web.me­dia.mit.edu/~mres/
  9. BASIC-256 – BASIC256 – An easy to use BASIC language and IDE
    http://www.ba­sic256.org/
  10. PythonTurtle
    http://python­turtle.org/
  11. Turtle graphics for Tk
    http://docs.pyt­hon.org/libra­ry/turtle.html
  12. Scratch Lowers Resistance to Programming
    http://www.wi­red.com/gadge­tlab/2009/03/scrat­ch-lowers/
  13. Stopařův průvodce jedním převážně neškodným programovacím jazykem
    http://www.squ­eak.cz/
  14. CamelCase
    http://en.wiki­pedia.org/wiki/Ca­mel_case
  15. Smalltalk tutorial chapter 5 – Variables
    http://www.tu­torials4u.com/sma­lltalk/smalltalk-tutorial-05.htm
  16. History around Pascal Casing and Camel Casing
    http://blogs.msdn­.com/b/brada/ar­chive/2004/02/0­3/67024.aspx
  17. Xerox Alto
    http://en.wiki­pedia.org/wiki/Xe­rox_Alto
  18. WIMP (computing)
    http://en.wiki­pedia.org/wiki/WIM­P_(computing)
  19. Graphical user interface
    http://en.wiki­pedia.org/wiki/GUI
  20. Xerox Star
    http://en.wiki­pedia.org/wiki/Xe­rox_Star
  21. The Xerox Star 8010 „Dandelion“
    http://www.di­gibarn.com/co­llections/sys­tems/xerox-8010/index.html
  22. Fibonacci number
    http://en.wiki­pedia.org/wiki/Fi­bonacci_number
  23. Squeak home page
    http://www.squ­eak.org/
  24. XO: The Children's Machine
    http://wiki.lap­top.org/go/The_Chil­dren's_Machine
  25. Squeak na Wikipedii EN
    http://en.wiki­pedia.org/wiki/Squ­eak
  26. Squeak na Wikipedii CZ
    http://cs.wiki­pedia.org/wiki/Squ­eak
  27. Squeak by Example
    http://squeak­byexample.org/
  28. Squeak Land
    http://www.squ­eakland.org/
  29. SqueakNotes
    http://squeak­.zwiki.org/Squ­eakNotes
  30. Squeak FAQ
    http://wiki.squ­eak.org/squeak/471
  31. Learning Squeak
    http://c2.com/cgi/wi­ki?LearningSqu­eak
  32. Lazarus (Software)
    http://en.wiki­pedia.org/wiki/La­zarus_%28softwa­re%29
  33. FreePascal
    http://www.fre­epascal.org/
  34. „Why I Love Python“ slides
    http://www.min­dviewinc.com/dow­nloads/pub/ec­kel/LovePython­.zip
  35. „Why I love Python“ (presentation)
    http://www.sli­deshare.net/di­dip/why-i-love-python
  36. První jazyk: Python
    http://macek.san­dbox.cz/texty/prvni-jazyk-python/
  37. Programovací jazyk Python
    http://www.py­.cz/FrontPage
  38. Python – Wikipedia CS
    http://cs.wiki­pedia.org/wiki/Pyt­hon
  39. IPython
    http://en.wiki­pedia.org/wiki/I­python
  40. IPython: an interactive computing environment
    http://ipython­.scipy.org/mo­in/
  41. Category:Python
    http://rosetta­code.org/wiki/Ca­tegory:Python
  42. Educational programming language
    http://en.wiki­pedia.org/wiki/E­ducational_pro­gramming_langu­age
  43. Seriál Letní škola programovacího jazyka Logo
    http://www.ro­ot.cz/serialy/let­ni-skola-programovaciho-jazyka-logo/
  44. Logo Tree Project:
    http://www.eli­ca.net/downlo­ad/papers/Logo­TreeProject.pdf
  45. Language Poster (O'Reilly):
    http://www.ore­illy.com/news/grap­hics/prog_lan­g_poster.pdf
  46. Informace o Comenius Logu:
    http://www.com­logo.input.sk/in­dex.html
  47. Stránka nabízející stažení Comenius Loga:
    http://www.com­logo.input.sk/nas­tiahnutie.html
  48. Seminární práce o Comenius Logu:
    http://nwit.ped­f.cuni.cz/rotal9ap/lo­go/
  49. Informace o LEGO/Logu:
    http://educati­on.otago.ac.nz/nzlnet/L­ogo/legologo.html
  50. Informace o systému Elica:
    http://www.eli­ca.net/site/in­dex.html
  51. Informace o systému NetLogo:
    http://ccl.nor­thwestern.edu/ne­tlogo/
  52. Stažení NetLoga:
    http://ccl.nor­thwestern.edu/ne­tlogo/download­.shtml
  53. Uživatelský manuál NetLoga ve formátu PDF:
    http://ccl.nor­thwestern.edu/ne­tlogo/docs/Net­Logo%20User%20Ma­nual.pdf
  54. NetLogo FAQ:
    http://ccl.nor­thwestern.edu/ne­tlogo/docs/faq­.html
  55. Domácí stránka Daniela Azumy (autora implementace Turtle Tracks):
    http://alumnus­.caltech.edu/~da­zuma/home/
  56. Informace o aUCBLogu:
    http://www.phy­sik.uni-augsburg.de/~miche­ler/
  57. Domácí stránka MSW Loga:
    http://www.sof­tronix.com/lo­go.html
  58. Karel online
    http://karel.ol­dium.net/
  59. EDU-SIG: Python in Education
    http://www.pyt­hon.org/commu­nity/sigs/curren­t/edu-sig/
  60. Guido van Robot
    http://en.wiki­pedia.org/wiki/Gu­ido_van_Robot
  61. The Guido van Robot Programming Language
    http://gvr.sou­rceforge.net/
  62. An Introduction to Programming with Karel J. Robot
    http://blog.thin­goid.com/2003/10­/karel-intro/
  63. Teaching a young robot new tricks
    http://blog.thin­goid.com/2003/11­/karel-new-tricks/
  64. Karel and Company – More Robots
    http://blog.thin­goid.com/2003/12­/karel-and-company/
  65. Karel heads for the stars
    http://blog.thin­goid.com/2004/03­/karel-star/
  66. Karel programming language documentation
    http://mormegil­.wz.cz/prog/ka­rel/prog_doc.htm
  67. Karel J. Robot
    http://www.ma­inlandregional­.net/dklipp/Ho­nors%20Computer%20Sci­ence%20Java.htm
  68. Karel (programming language)
    http://en.wiki­pedia.org/wiki/Ka­rel_(programmin­g_language)
  69. Richard E. Pattis
    http://en.wiki­pedia.org/wiki/Richar­d_E._Pattis
  70. XKarel home page
    http://xkarel­.sourceforge.net/en­g/
  71. XKarel – screenshoty oken
    http://xkarel­.sourceforge.net/en­g/program.php#Ok­na
  72. Greenfoot
    http://www.gre­enfoot.org/abou­t/whatis.html
  73. Computer programming – Educational programming languages
    http://www.kid­slike.info/com­puter_program­ming_educatio­nal_programmin­g_languages
  74. Making Great Programmers: Why BASIC is Still Relevant
    http://kidbasic­.sourceforge.net/en/why­.html
  75. Gambas Wiki
    http://en.wiki­books.org/wiki/Gam­bas
  76. Free tool offers ‚easy‘ coding
    http://news.bbc­.co.uk/2/hi/tec­hnology/6647011­.stm
  77. Základy želví grafiky
    http://www.ro­ot.cz/clanky/za­klady-zelvi-grafiky/
  78. Bill Kendrick's Web Turtle
    http://www.so­nic.net/~nbs/web­turtle/

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.