Logo – dětská hračka nebo programovací jazyk?

26. 6. 2007
Doba čtení: 14 minut

Sdílet

Programovací jazyk Logo je vyvíjen již téměř čtyřicet let a ve světě se těší stále velké oblibě. Zejména na školách je používán pro výuku algoritmizace a především pro podporu konstruktivního učení. Někteří lidé považují Logo za pouhou dětskou hračku, ukážeme si však, že se jedná o zajímavý jazyk s možnostmi, které najdeme pouze ve vysokoúrovňových dynamických jazycích.

Obsah

1. Logo – dětská hračka nebo programovací jazyk?
2. Stručná historie Loga
3. Nejdůležitější vlastnosti Loga
4. Tvorba nových slov, postupné rozšiřování programu metodou zdola nahoru
5. Začalo to LISPem – práce se seznamy
6. Řízení běhu programu: podmínky, smyčky, rekurze
7. Mechanická želva a její digitální nástupce – želví grafika
8. Odkazy na další informační zdroje
9. Obsah následující části tohoto seriálu

1. Logo – dětská hračka nebo programovací jazyk?

Logo is the most fun when you start with what you know and discover new things as you move along.

Většina programovacích jazyků byla vytvořena buď pro praktické programování nebo pro výuku programování. Logo je v tomto smyslu poněkud odlišný jazyk, protože programování zde není cílem ale pouze nástrojem, který má pomoci při vzdělávání. Logo stojí na základech daných takzvanou konstruktivní vzdělávací filozofií a je navrženo k podpoře konstruktivního učení. Konstruktivismus vysvětluje znalosti a dovednosti, jak jsou vytvořeny žáky v jejich vlastních myslích, prostřednictvím vzájemné interakce s jinými lidmi a okolím. Tato zajímavá teorie je spojena především se švýcarským psychologem Jeanem Piagetem, který strávil mnoho času studováním a zdokumentováním učení malých dětí. S Piagetem v Ženevě spolupracoval i Seymour Papert, který později stál u vzniku Loga.

logo0101
Obrázek 1: Pohled na klasické Logo – grafická plocha a příkazový řádek

Papert se stal světoznámým díky svému bestselleru Mindstorms, ve kterém popisuje koncepci založenou na tom, že se dětem dá k dispozici jednoduchý ale rozšiřitelný nástroj, přičemž jejich energie a představivost může být použita k nalézání nových možností tohoto nástroje. Oním nástrojem se v této knize (a na mnoha školách a dalších vzdělávacích institucích i v praxi) stává Logo spolu s jeho želvou. Tím, že dítě „učí“ želvu novým dovednostem, tj. přidává další příkazy do Loga, se samo učí a především formuje svoji osobnost. Tento způsob učení je někdy nazýván „rozhovor se želvou“.

Želví grafika, o které si více řekneme v dalších kapitolách, má jednu velkou přednost: špatně napsaný program většinou vede k tvorbě zcela jiného obrázku, než je očekáváno. Chyby jsou tedy snáze nalezitelné, a co je důležitější: i chybný program může vést k vytvoření zajímavého výsledku, což děti (ale i my programátoři) akceptujeme mnohem lépe než chybové hlášky typu „null pointer exception at adress 0×1234“.

2. Stručná historie Loga

První testovací implementace Loga se jmenovala „ghost“ a byla vytvořena na MIT a BBN (Bolt, Beranek and Newman Inc.) v programovacím jazyce LISP na počítači PDP-1. U vzniku této implementace, která vznikla už v roce 1967, stál i Seymour Papert, který však jazyk neprogramoval (programátoři se jmenovali Daniel Bobrow a Wallace Feurzeig), ale pracoval jako odborný konzultant. Tato implementace Loga se po nezbytných úpravách postupně rozšířila i mimo MIT, například na univerzitu v Edinburgu. Jméno Logo se objevuje až později s implementací od Wallace Feurzeiga a Paula Wexelblata, ve které se poprvé objevuje známá želva (turtle) v mechanické podobě a ovládaná radiem (tento robotek se jmenoval Irving).

logo0102
Obrázek 2: Mechanická želva vytvořená z LEGA a ovládaná programem napsaným v Logu

Větší rozšíření Loga nastalo až s nástupem osmibitových domácích počítačů. V Evropě jsou známé především značky Sinclair, Atari a Commodore, ale v USA, kde se Logo začalo těšit prakticky masové oblibě, se ještě před těmito značkami rozšířily především osmibitové domácí počítače Apple II (zejména model Apple IIe), které obsahovaly mikroprocesor MOS 6502 (později MOS 6502C) taktovaný na 1MHz. O grafických schopnostech těchto počítačů jsem se již zmiňoval v seriálu o grafických kartách a grafických akcelerátorech. U Apple II bylo možné v grafickém režimu s vysokým rozlišením zobrazovat bitmapy o rozměrech 280×192 pixelů ve čtyřech, popř. v šesti barvách. Takové grafické schopnosti již dostačují k práci želví grafiky, na které je Logo částečně postaveno. Ve stejně době bylo Logo také portováno na počítače Texas Instruments TI 99/4.

logo0103
Obrázek 3: Počítač Apple II

Pravděpodobně nejúspěšnější implementace Loga pro počítače Apple II pochází od firmy LCSI (Logo Computer Systems, Inc.), která v roce 1980 vytvořila Apple Logo. Tato implementace se stala základem i pro verze určené pro novou generaci domácích počítačů – Atari Logo, Commodore Logo (jedna verze Commodore Loga byla postavena nad Terrapin Logem), atd. O tom, jak bylo Apple Logo úspěšné, svědčí i to, že některé moderní komerční implementace Loga ve svých manuálech uvádí převodní tabulku mezi příkazy Apple Loga a jeho moderním protějškem. LCSI však neusnula na vavřínech a o pět let později vytvořila LogoWriter určený především pro počítače MacIntosh. Toto „Logo nové generace“ obsahovalo podporu zpracování textu, možnost práce s více želvami (ta však již předtím existovala například v Atari Logu), vylepšení uživatelského rozhraní, atd.

logo0104
Obrázek 4: Detail klávesnice počítače Apple II+

V roce 1980 se na některých školách v USA rozjela obdoba českého „INDOŠe“, která však měla (celkem logicky) mnohem větší úspěch než její česká parodie. Jeden z pilotních projektů byl sponzorovaný MIT a společností Texas Instruments na škole Lamplighter v Dallasu. Jednalo se o padesát počítačů a 450 studentů, což je na tehdejší dobu docela slušné číslo. V témže roce byl stejnými institucemi (MIT a TI) spolu s Newyorskou akademií věd zahájen v New Yorku projekt „počítače ve škole“. V obou těchto projektech bylo pro výuku mimo jiné použito i Logo, které zde mělo velký úspěch – byl to ostatně jeden z mála interaktivních programů disponujících grafickým výstupem.

logo0105
Obrázek 5: Veleúspěšný Apple IIe, který byl vyráběn celých deset let a který se často používal ve výuce

Velmi zajímavým se pro mnoho dětí i dospělých stalo LEGO Logo, což je systém vytvořený z Loga (tj. programovacího jazyka) a LEGA (zejména motorů, kostek se světly, světelnými senzory a terčíkem, kterým je možné detekovat otáčení). Mezi další oblíbené implementace patří LogoWriter2 z Japonska, WinLogo ze Španělska a v neposlední řadě také Comenius Logo z dnešního Slovenska (pokud se dobře pamatuji, jeho vývoj začal ještě v dobách ČSSR a posléze ČSFR). Devadesátá léta přinesla moderní implementace, které většinou plně podporovaly multimédia, multitasking, komunikaci po síti a velmi velké či neomezené množství želv. Mezi tyto implementace patří především MicroWorlds z roku 1993 a StarLogo, které je neustále vyvíjeno (StarLogo TNG).

3. Nejdůležitější vlastnosti Loga

Logo se vyznačuje podobnými rysy, jaké má programovací jazyk LISP, Scheme či nověji také Python. Týká se to zejména chápání vlastního programu jako seznamu dat (program as data), dat jako programu (existuje příkaz typu eval), častého používání rekurze místo programových smyček, podpory dynamicky měnitelných datových typů (seznamů) a schopností snadné manipulace se slovy a symboly (symbolic computation). Na rozdíl od LISPu a Scheme však Logo používá snáze čitelnou syntaxi bez mnoha závorek a také zápis matematických výrazů je stejný, jaký se používá na školách – základní aritmetické operace jsou zapisovány infixovou notací a ne notací prefixovou jako v LISPu a Scheme. Dnes již nedílnou součástí Loga je také želví grafika, která bude představena v sedmé kapitole.

4. Tvorba nových slov, postupné rozšiřování programu metodou zdola nahoru

„Logo isn't just something to do at the computer. It's really about exploring new ideas – about discovering new ways to do things.“

Logo je určeno především k výuce analytického myšlení a k samostatnému objevování nových schopností počítače, především grafické želvy (viz sedmá kapitola). Samotný jazyk Loga obsahuje – podle schopností, které do jeho konkrétní implementace vložili vývojáři – několik desítek až stovek příkazů. Logo je možné velmi jednoduše rozšiřovat přidáváním dalších příkazů, které mohou do jazyka přidávat další prvky – může se jednat jak o běžné nové procedury a funkce, tak i o nové strukturované příkazy. Standardní Logo například neobsahovalo smyčky typu for, while a do-while či repeat-until, avšak vzhledem k tomu, že je programový kód dynamicky zpracováván, je možné tyto smyčky do jazyka velmi jednoduchým způsobem přidat.

Bez vysvětlení podrobností (k těm se dostaneme v dalších částech tohoto seriálu) si ukažme způsob postupného přidávání dalších příkazů do jazyka s cílem vytvořit schématický květ zobrazený na následujícím obrázku:

logo0106

Obrázek 6: Schématický květ nakreslený pomocí Loga

Grafická želva, se kterou se do všech podrobností seznámíme později, umí reagovat mj. na příkazy forward (posun dopředu o zadaný počet kroků), left (natočení směrem doleva a zadaný počet stupňů) a right (natočení směrem doprava o zadaný počet stupňů). Kresba květu, kterou chceme vytvořit, se však skládá ze čtverců, které želva prozatím kreslit neumí. Proto vytvoříme nový příkaz pro kreslení čtverce, čímž vlastně rozšíříme repertoár všech příkazů, kterými můžeme želvu ovládat:

to ctverec
    repeat 4 [
        forward 100
        left 90
    ]
end 

Po zadání příkazu ctverec se bude čtyřikrát opakovat sekvence příkazů forward 100 a left 90, čímž dojde k vykreslení čtverce s délkou hrany 100 kroků. Naše schematická květina vznikne opakovaným rozkreslením čtverce, vždy s určitým natočením. Můžeme například vytvořit 36 čtverců a každý natočit o 10°, k čemuž nám bude sloužit nový příkaz kvetina:

to kvetina
    repeat 36 [
        right 10
        ctverec
    ]
end 

S využitím tohoto příkazu, který ve své smyčce používá nově zavedený příkaz ctverec již můžeme květinu nakreslit. Celou sekvenci kreslení je vhodné vložit do dalšího příkazu, po jehož spuštění se pomocí clearscreen smaže grafická obrazovka, skryje se schematický obrázek želvy (hideturtle) a vykreslí se květina:

to kresli
    clearscreen
    hideturtle
    kvetina
end

kresli 

Na pomalejších počítačích či po zadání speciálního příkazu pro zpomalení práce želvy je možné sledovat postup vykreslování celého květu:

logo0107

Obrázek 7: Postup vykreslování schématického květu želvou

To však není všechno. Mírnou úpravou nově vytvořených slov, tj. ctverec, kvetina a kresli je možné vytvářet i složitější obrazce, například následujícího šne­ka:

logo0108

Obrázek 8: Šnek vzniklý mírnou úpravou předchozího programu

Jednoduché přidávání a tvorba nových slov představuje velmi důležitý prvek, díky němuž se mohou děti do práce s počítačem aktivně zapojit a objevovat tak jeho schopnosti.

5. Začalo to LISPem – práce se seznamy

Tvůrci Loga neskrývají, že se při návrhu svého nového jazyka inspirovali známým jazykem LISP, který dokázal programátory rozdělit na dvě skupiny: jedni tento jazyk nenávidí a druzí si ho nemohou pro jeho univerzálnost, vyjadřovací schopnosti a rozšiřitelnost vynachválit. Největší množství stížností si LISP vysloužil především kvůli jeho sice jednoduché, ale dosti zmateně vyhlížející syntaxi se spoustou závorek a prefixovým zápisem matematických a logických výrazů. Logo syntaxi LISPu do značné míry „polidštilo“ – matematické a logické výrazy se zapisují běžnou infixovou notací (binární operátory se vkládají mezi své operandy) a i závorek ubylo, protože není zapotřebí vyjadřovat strukturu volání funkcí pomocí seznamů, ale sekvencí příkazů s parametry.

Z LISPovských vlastností zůstala v Logu zachována schopnost práce se seznamy, dynamické typování proměnných a také dynamická interpretace programu, což umožňuje chápat programový kód jako data (seznamy) a naopak – data (seznamy) je možné interpretovat jako programový kód. Díky tomu je umožněno například vytváření nových typů programových smyček, serializace programu, použití funkcí typu eval (vyhodnocení zapsaného výrazu nebo příkazu) apod. Funkce pracující se seznamy jsou – opět narozdíl od původního LISPu – pojmenovány tak, že je z jejich názvu patrné, co funkce provádí (jedná se například o příkazy first, last, butfirst, item, foreach atd.).

Logo také pracuje se slovy (sekvence znaků), které je možné spojovat do vět. Slova je možné chápat jako prvky seznamu a věty jako celé seznamy. Práce s řetězci je tedy prováděna s celými slovy, což je pro mnoho praktických úloh přirozenější, než práce nad jednotlivými znaky, tedy tak, jak jsou řetězce chápány v jiných programovacích jazycích.

logo0109

Obrázek 9: Další obrázek vykreslený v Logu

6. Řízení běhu programu: podmínky, smyčky, rekurze

Logo pro řízení běhu programu nabízí standardní příkaz if, popř. jeho plnou verzi ifelse. Kromě toho je v mnoha interpreterech dostupný i příkaz case a cond, které nahrazují v několika ohledech běžnou programovou konstrukci typu switch-case. Pokud nějaký interpreter příkaz case či cond neobsahuje, je možné ho doprogramovat – stačí si uvědomit, že program je chápán jako (datový) seznam příkazů a podmínky je možné zapsat formou výrazů, které se vyhodnotí na logickou nepravdu či pravdu. Podobné názory na konstrukce typu switch-case sdílejí i tvůrci jazyka LISP a Python.

Standardní Logo programátorům nabízí pouze jeden typ smyčky. Jedná se o počítanou smyčku volanou příkazem repeat n, kde n je výraz znamenající počet opakování těla smyčky. Tvůrci Loga předpokládali, že se ostatní typy smyček nahradí rekurzí, podobně jako v programovacích jazycích LISP a Scheme, proto také žádné další typy smyček do interpreteru nepřidávali (dokonce i počítaná smyčka repeat nepoužívá počitadlo, tj. proměnnou, která by se zvyšovala s počtem opakování). Ve většině moderních implementací Loga však můžeme narazit i na další typy smyček, například smyčku for, while či do-while. Také se můžeme často setkat se smyčkami typu for-each, které jsou v Logu velmi užitečné, zejména při práci se seznamy a textem.

7. Mechanická želva a její digitální nástupce – želví grafika

Logo není z dnešního pohledu „pouze“ programovací jazyk, ale také celé interaktivní vývojové prostředí nabízející uživatelům vlastní programové knihovny, podporu pro tvorbu vektorové a mnohdy i bitmapové grafiky, zvuků, multimedií apod. Takřka nedílnou součástí většiny dnešních implementací Loga je takzvaná želví grafika (Turtle Graphics), která umožňuje dětem – ale současně i pokročilým uživatelům – vytváření zajímavých vektorových obrázků i s pouze elementární znalostí programování a geometrie. Dá se dokonce říci, že právě želví grafika velkou mírou přispěla k poměrně značné oblíbenosti a také rozšíření Loga, především v zahraničním školství.

Pojďme si nyní říci základní informace o této zajímavé součásti Loga a také o začlenění želví grafiky do dalších programovacích jazyků a aplikací (želví grafika totiž byla tak úspěšná a přitom implementačně jednoduchá, že se začala používat i mimo samotné Logo). Základem želví grafiky je virtuální želva (turtle), která se na základě poměrně malé množiny příkazů dodávaných napsaným programem (skriptem) či přímo pomocí interaktivního zápisu příkazů pohybuje po obrazovce a přitom vykresluje stopu ve tvaru úseček. Tato virtuální želva se tedy chová podobně jako reálná želva, která se pohybuje na hladké pískové pláži a zanechává za sebou stopu.

logo0110

Obrázek 10: Vzor vytvořený v Logu za pomoci želví grafiky

Původní Logo nedisponovalo pouze virtuální (vykreslovanou) želvou, ale skutečným malým robotem ve tvaru želvy, který byl radiovým spojením propojen s řídicím počítačem a reagoval na základní příkazy: pohyb vpřed, pohyb vzad, otočení doleva a otočení doprava. Navíc uměl tento robot reagovat i na jeden „multimediální“ příkaz – zapnutí zvonku. Je zřejmé, že pro výuku dětí je pohybující se reálný předmět zajímavější než pouhý obrázek, na druhou stranu však byl (prý) pohyb robota poměrně nepřesný, zejména při otáčení.

Dnešní implementace Loga většinou (kromě několika komerčních distribucí, například LEGO/Loga) touto možností již nedisponují, takže se budeme muset spokojit s virtuální želvou pohybující se na obrazovce. V některých implementacích jazyka Logo je želva zobrazena poměrně reálným obrázkem želvy viděné z ptačí perspektivy (Atari Logo, Commenius Logo, Imagine), většinou se však na obrazovce zobrazuje pouhý rovnoramenný trojúhelník, podobně jako ve hrách typu Xpilot nebo Asteroids. Jednotlivé implementace se také liší tím, zda za sebou želva stopu vykresluje „hlavičkou“, svým středem či „zadečkem“. To jsou však pouze kosmetické rozdíly, funkce želví grafiky tím není nijak ovlivněna, což konkrétně znamená, že při zatáčení želvy nedochází ke kreslení oblouku, ale pouze k ostrému lomu kreslené polyčáry.

logo0111

Obrázek 11: Další vzor vytvořený v Logu za pomoci želví grafiky

8. Odkazy na další informační zdroje

  1. Abelson H.:
    Turtle geometry. The Computer as a Medium for Explorning Mathematics,
    The MIT Press, Cambridge Massachusetts, 1981
  2. Clayson James:
    Visual Modeling with Logo
    MIT Press
  3. Cuoco, Albert:
    Investigations in Algebra
    MIT Press
  4. Friendly M.:
    Advanced LOGO a Language for learning
    New Jersey, Hillsdale, 1988
  5. Goldenberg E. Paul, a Wallace Feurzeig:
    Exploring Language with Logo
    MIT Press
  6. Hoyles Celia:
    Culture and computers in the matematics classroom
    University of London, 1985
  7. Hoyles Celia a Richard Noss
    Learning Mathematics and Logo
    A collection of research papers about various aspects of the use of Logo in math classrooms
  8. Lewis Philip:
    Approaching Precalculus Mathematics Discretely
    MIT Press
  9. Mc Dougall A., Adams T., Adams P.:
    Learning LOGO on the APPLE II
    Firemní dokumentace k počítači Apple
  10. Muller Jim:
    The Great Logo Adventure
    Young People's Logo Association:
  11. Papert S. A.:
    Mindstorms
    Brighton, The Harvester Press, 1980
  12. Pokluda Jiří:
    Interpret jazyka LOGO
    VUT Brno, Fakulta informačních technologií, 2002
  13. Prusinkiewicz, Przemyslaw a Aristid Lindenmayer:
    The Algorithmic Beauty of Plants
    Springer-Verlag, 1990
  14. Tržilová Dana:
    LOGO a matematika
    JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH, PEDAGOGICKÁ FAKULTA, 1993
    učební text pro studenty výběrového semináře
  15. Young People's Logo Association:
    The Turtle's Source­book
  16. Young People's Logo Association:
    The Turtle's Discovery Book
  17. Young People's Logo Association:
    The Misadventures of Mrtle
  18. Young People's Logo Association:
    The Logo Library
  19. Young People's Logo Association:
    Learning Logo On and Off the Computer
  20. Logo Foundation:
    http://el.www­.media.mit.edu/grou­ps/logo-foundation/

ict ve školství 24

logo0112

Obrázek 12: Další vzor vytvořený v Logu za pomoci želví grafiky

9. Obsah následující části tohoto seriálu

V následujících třech pokračováních seriálu o programovacím jazyce Logo si řekneme, jaké komerční (převážně placené) i volně dostupné implementace jazyka Logo je možné v dnešní době použít. Samozřejmě nezapomeneme ani na implementace funkční v Linuxu či na implementace multiplatformní, které mohou pracovat například v operačních systémech Linux, Microsoft Windows, Mac OS X apod. Kromě toho se seznámíme s použitím želví grafiky (ta tvoří pravděpodobně nejvíce známou součást Loga) v dalších programovacích jazycích, například v minulosti v Turbo Pascalu či nověji v Pythonu.

Autor článku

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