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.
Obrázek 1: Pohled na klasické Logo – grafická plocha a příkazový řádekPapert 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).
Obrázek 2: Mechanická želva vytvořená z LEGA a ovládaná programem napsaným v LoguVě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.
Obrázek 3: Počítač Apple IIPravdě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.
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.
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ýuceVelmi 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:
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:
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 šneka:
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.
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.
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.
Obrázek 11: Další vzor vytvořený v Logu za pomoci želví grafiky
8. Odkazy na další informační zdroje
- Abelson H.:
Turtle geometry. The Computer as a Medium for Explorning Mathematics,
The MIT Press, Cambridge Massachusetts, 1981 - Clayson James:
Visual Modeling with Logo
MIT Press - Cuoco, Albert:
Investigations in Algebra
MIT Press - Friendly M.:
Advanced LOGO a Language for learning
New Jersey, Hillsdale, 1988 - Goldenberg E. Paul, a Wallace Feurzeig:
Exploring Language with Logo
MIT Press - Hoyles Celia:
Culture and computers in the matematics classroom
University of London, 1985 - 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 - Lewis Philip:
Approaching Precalculus Mathematics Discretely
MIT Press - Mc Dougall A., Adams T., Adams P.:
Learning LOGO on the APPLE II
Firemní dokumentace k počítači Apple - Muller Jim:
The Great Logo Adventure
Young People's Logo Association: - Papert S. A.:
Mindstorms
Brighton, The Harvester Press, 1980 - Pokluda Jiří:
Interpret jazyka LOGO
VUT Brno, Fakulta informačních technologií, 2002 - Prusinkiewicz, Przemyslaw a Aristid Lindenmayer:
The Algorithmic Beauty of Plants
Springer-Verlag, 1990 - 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 - Young People's Logo Association:
The Turtle's Sourcebook - Young People's Logo Association:
The Turtle's Discovery Book - Young People's Logo Association:
The Misadventures of Mrtle - Young People's Logo Association:
The Logo Library - Young People's Logo Association:
Learning Logo On and Off the Computer - Logo Foundation:
http://el.www.media.mit.edu/groups/logo-foundation/
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.