Karel (programovací jazyk)

**Karel** je programovací jazyk (a väčšinou aj vývojové prostredie) zväčša určený na výuku programovania úplných začiatočníkov. V súčasnej dobe sa často používa aj na výučbu objektovo orientovaného programovania dokonca aj na vysokých školách.

## Pôvodný robot Karel
V minulosti sa objavilo už niekoľko pokusov o vývoj špeciálnych jazykov uľahčujúcich prvé kroky pri vyučovaní dieťaťa. Medzi najznámejšie patrí korytnačia grafika. V polovici roku 1960 Seymour Papert, matematik, ktorý pracoval so Jeanom Piagetom v Ženeve, po príchode do USA spolu s Marvinom Minskym založili Laboratórium pre umelú inteligenciu na Masatchusetskom technologickom inštitúte (MIT). Papert pracujúci pre firmu BBN (Bolt, Beranek and Newman), pod vedením Wallace Feurzeiga, v roku 1967 vytvoril prvú verziu Loga.

Do konca roku 1970 sa Logo rozšírilo na MIT a niekoľko ďalších výskumných miest: Edinburgh, Škótsko, Tasmániu a Austráliu. V miestnych školách sa viedli  malé bádateľské aktivity. Dan Watt a iní výskumníci z MIT dokumentovali svoje práce niekoľkými žiakmi základných škôl, kde používali Logo. Ich výsledky boli v tom čase publikované v MIT.
Rozmach zažilo Logo koncom 70-tych rokov spolu so vstupom prvých osobných počítačov na scénu. MIT Logo skupina vyvinula verziu Loga pre dva typy počítačov: Apple II a Texas Instruments TI 99/4. Samotný programovací jazyk Logo bol v obidvoch verziách totožný, rozdiely boli len vo využití.

Nové verzie Loga boli implementované vo viac ako dvanástich jazykoch na rozmanitých počítačoch. V severnej Amerike boli populárne Atari a Commodore Logo. V tom čase bol veľký záujem o Logo ako seriózny programovací jazyk, zvlášť na nových počítačoch Macintosh. Coral Software vyvinuli objektovo orientovanú verziu Loga, nazvanú Object Logo. Aj napriek tomu, že obsahovala kompilátor, nestala sa veľmi populárnou.

Pomerne veľký úspech malo Logo v Latinskej Amerike, kde sa každé dva roky v inej krajine konal Logo kongres. Ďalšie krajiny, kam zavítalo Logo, sú Japonsko, Anglicko, Španielsko a samozrejme Slovensko (Comenius Logo).

Programovací jazyk Logo, “nárečie” Lisp-u nebol navrhnutý špeciálne na výučbu programovania a na používanie korytnačej grafiky, ale podmnožina Loga sa ukázala ako veľmi vhodná. Napriek úspechu korytnačej grafiky jej možno vytknúť jednu chybu: na rozdiel od iných malých jazykov je korytnačka akoby slepá a nedokáže odpovedať na požiadavky, kontrolovať stav svojho sveta.

Prvý a veľmi populárny malý jazyk bol „Karel the Robot“ navrhnutý Richardom Pattisom ako úvod k vysokoškolským prednáškam o jazyku Pascal. Pattisov „Karel the Robot“ sa „narodil“ v roku 1981. Bol opísaný v knihe s rovnakým názvom. Pattis rovnako navrhol prvé programovacie prostredie pre Karola. Jazyk obsahoval všetky dôležité štruktúry z Pascalu na riadenie činnosti programu. Dal sa použiť na výučbu sekvenčného vykonávania programu, procedúr, podmienok a cyklov. Zložitosť programovania bola znížená vypustením premenných, typov alebo výrazov. Ovládaný objekt – robot Karel sa pohyboval po miestnosti, kde sa nachádzali steny, tehly a ďalšie objekty, Karel mohol vyberať tehly zo svojho vreca. Medzi základné príkazy, na ktoré vedel robot reagovať, patrili: krok, vľavo, vpravo, zober a polož. Celkom 18 predikátov umožňovalo Karlovi (programátorovi) kontrolovať stav svojho mikrosveta (prítomnosť tehál v okolí, stien, smer, atď.).

Robot dostal meno podľa známeho českého spisovateľa Karla Čapka. Ten ako prvý v scenári divadelnej hry R.U.R. pomenoval stroj podobajúci sa človeku. Túto divadelnú hru prvýkrát uviedli v pražskom Národnom divadle 25. januára 1921. Vtedy ešte určite netušil, že jeho nápad sa bude používať aj ako motivačný prvok a základy detského programovania sa budú vyučovať pomocou robota, ktorý bude niesť meno po svojom objaviteľovi.

V Pattisovej verzii sa robot pohyboval v meste pozostávajúcom z vodorovných ulíc (*streets*) a zvislých bulvárov (*avenues* –- zvislý smer mali pripomínať prvé písmená: *AV*).

Robot rozumel piatim základným príkazom: *move* (presuň sa na ďalšiu križovatku), *turnleft* (otoč sa vľavo), *putbeeper* (polož bzučiak), *pickbeeper* (zdvihni bzučiak) a *turnoff* (vypni sa); dokázal testovať, či je pred ním voľno, či sú v jeho blízkosti bzučiaky a na ktorú stranu je otočený. S pomocou týchto základných príkazov a programových konštrukcií (sekvencie, slučky, podmienené príkazy) bolo možné definovať nové príkazy a používať ich v programe.

### Príklad
Jednoduchý príklad programu v programovacom jazyku Karel:

```
BEGINNING-OF-PROGRAM
 
 DEFINE turnright AS
 BEGIN
   turnleft
   turnleft
   turnleft
 END
 
 BEGINNING-OF-EXECUTION
   ITERATE 3 TIMES
     turnright
 
   turnoff
 END-OF-EXECUTION
 
END-OF-PROGRAM
```


### Klony
Karel the Robot inšpiroval ďalších autorov k tvorbe ďalších malých jazykov, medzi priamo ovplyvnené patria: 
* Martino (Olimpo et al., 1985)  a Marta (Calabrese, 1989) v Taliansku. Marta je robot podobný Karolovi, základom ktorého je však Logo. Môže sa použiť ako ľahký úvod do programovania pre školákov i dospelých. Medzi vlastnosti rôzne od Karla patrí:
** Marta môže byť riadená klávesmi, čo je vhodné pre menších žiakov
** môže stavať svoj svet, vie postaviť a zrušiť stenu
** môže byť riadená potme, keď nevidno prekážky a značky
** ľahko sa dajú definovať nové príkazy a operácie, napísaním Logovských procedúr
** programovať sa dá na niekoľkých úrovniach – jednoriadkové programy, viacriadkové programy a Logovské procedúry
** Marta je ohraničená mriežkou rozmeru 7x15
** na jeden priesečník môže položiť najviac 4 značky 
* Darel (Kay & Tyler, 1993)  v Austrálii
* Jozef the Robot (Tomek, 1982 – 1983)

Pôvodný Karel the Robot sa dnes používa na mnohých univerzitách a školách v USA. Nová edícia knihy Karel the Robot vyšla v roku 1995 (Pattis, Roberts, & Stehlik, 1995). Karel sa neudomácnil len medzi deťmi. 
Napríklad pre paralelné programovanie je používaný projekt Robot Brothers, príkladom objektovo-orientovaného prostredia sú Playground, Gravitas a KidSim. Niektorí autori považujú objektovo-orientované malé jazyky za najlepšiu možnosť, ako vyučovať mladších žiakov základy programovania.

## Karel v Česku
V Česku bola pôvodná myšlienka ľahko upravená. Robot sa pohyboval po obdĺžlnikovej, šachovnicovo usporiadanej ploche, na ktorej políčka ukladal a z nich zdvíhal značky. Jeho základnými príkazy boli: *Krok*, *VlevoVbok*, *Polož* (rozumej značku) a *Zvedni* (značku). Okrem toho vedel otestovať, či pred ním múr, či pod ním značka a či je otočený na sever.

Robot Karel môže vykonávať veľmi rozmanité činnosti: od primitívnych príkazov typu VpravoVbok cez jednoduché skoky, obehy poľa a kreslenie rôznych obrazcov z Karlových značiek, až ku zložitému hľadaniu značiek v bludisku alebo sčítanie a porovnávanie čísel (predstavovaných počtom značiek na jednotlivých políčkach).

### Metodika
Okolo českej verzie Karla vznikla rozsiahla metodika so sériou najrôznejších výukových materiálov. Táto metodika v prvej etape výuky vôbec nepoužíva v programoch premenné, čím znižuje nároky na množstvo látky, ktorú je potrebné žiakom predniesť. Žiaci sa v tejto etape naučia predovšetkým dekomponovať zložitejšie problémy na sadu problémov jednoduchších a používať základné programovacie konštrukcie. Používanie premenných sa zavádza až pri prechode na konkrétny programovací jazyk. Tu žiaci používajú knižnicu simulujúcu im známy svet robota Karla. Najprv sa pri prepisovaní svojich programov pre robota Karla naučia základy syntaxe použitého programovacieho jazyka a v ďalších etapách začnú tieto programy zdokonaľovať s využitím premenných.

## Karel na Slovensku
Prvýkrát sa Karol na Slovensku objavil na sálovom počítači SMEP 1010 v roku 1984. Verziu vytvorili Eleonóra Buriánová a Gabriela Syslová.
Prvá grafická verzia bola na Slovensku vytvorená v polovici osemdesiatych rokov. Po návrate Jozefa Hvoreckého zo Spojených štátov amerických sa myšlienka využitia Karla na pedagogické účely opäť dostala aj na Slovensko. Pod vedením Andreja Blaha naprogramoval prvú verziu v roku 1986 Marián Vittek. Bola určená pre počítače PMD 85-2.
Keďže išlo o jeden z prvých programovacích jazykov, ktorý bol v slovenskom jazyku a počítače PMD boli najrozšírenejšie osobné počítače na Slovensku, Karel 3D sa stal veľmi rozšírený. Vyučoval sa na niekoľkých základných školách aj na niektorých gymnáziách. V časopise „Zenit pionierov“ vychádzala jedna strana venovaná práve jemu. Boli tam publikované rôzne zaujímavé úlohy a pekné riešenia.

O Karolovi vyšlo niekoľko publikácií, prvou učebnicou bola kniha „Kamaráti robota Karla“ od Ľuby Gašparovičovej a Jozefa Hvoreckého, ktorá bola návodom na používanie PC verzie Karla 3D z vtedajšej Katedry didaktiky informatiky z Matematicko fyzikálnej fakulty UK.

Karel 3D je upravený pre žiakov základných a stredných škôl. Pôvodného Karla prevyšuje niektorými vlastnosťami:
* robot sa pohybuje v trojrozmernom priestore zobrazenom v samostatnom okne. Ostatné okná sa využívajú na písanie programov, na menu a na kontextovo senzitívnu nápovedu.
* robot môže položiť tehlu, postaviť sa na ňu a hýbať sa hore a dolu – pohyb robota je trojdimenzionálny
* robot je riadený buď klávesmi (riadiaci, navigačný spôsob) alebo príkazmi (programovací spôsob)

Neskôr vznikla diplomová práca, obhajovaná v roku 1997, venovaná Karlovi 3D a v rámci nej aj verzia Karla pre Windows 3.11. Autorom tejto práce je Ľubomír Košút. Jej cieľom bolo preskúmať možnosti tvorby detských programovacích jazykov vo Windows. Vybraným detským programovacím jazykom bol Karel 3D.

Potom nasledovalo dlhé obdobie, keď sa Karlovi na Slovensku nikto nevenoval. Na základných školách sa začalo presadzovať najmä Logo a na stredných bol pozorovateľný najmä prechod na vyššie programovacie jazyky (Pascal, C++). Jediná aktivita, ktorá vznikla v tom čase, bol ročníkový projekt Ondreja Krška z roku 2001, ktorý bol nazvaný *[http://robotkarol.krsko.sk Robot Karol++]*. Jazyk bol pomerne jednoduchý, neobsahoval premenné, ale umožňoval vytváranie vlastných príkazov a podmienok (podmienka bol príkaz, ktorý dokázal vrátiť hodnotu: pravda alebo nepravda), rekurziu a poznal základné štruktúry na riadenie činnosti programu. Táto verzie bola neskôr preložená aj do češtiny, angličtiny a nemčiny.

Ďalšou implementáciou bola diplomová práca Michala Zemana z roku 2004. Autor sa venoval najmä pedagogickému prínosu a zameral sa na využitie Karola pre najmenšie deti.

V roku 2008 vznikol *[http://www.emil.input.sk//info_sk.htm Robot Emil 3D]* – atraktívna verzia 3D-Karla  pre počítače PC s Windows XP. Autor Andrej Černík sa pokúsil oprášiť myšlienku pôvabného 3D-Karla z čias 8-bitových počítačov na platforme PC, s využitím predností modernej počítačovej grafiky. Robot Emil sa pohybuje v trojrozmernej miestnosti voliteľných rozmerov, do ktorej môžeme nazerať z ľubovoľného smeru a vzdialenosti prostredníctvom kamery. Možno  nazerať na celú scénu, otáčať ju, sledovať činnosť  robota v detaile atd., pričom pozíciu kamery možno riadiť aj interaktívne,  aj príkazmi programu. Robot Emil (na rozdiel od Karla) môže klásť tehličky rôznych tvarov a farieb, vrátane priehľadných, vie maľovať farebné vzorky po podlahe a stenách atd. Poskytuje tak deťom viac inšpirácie pre tvorivosť – konštrukcia grafických objektov ako arkády,  veže, steny s dverami a oknami, budovy s výťahmi (a pod.) podporuje u detí priestorovú predstavivosť a algoritmické myslenie. Programovací jazyk robota Emila umožňuje vytváranie vlastných príkazov, intuitívne testovanie množstva podmienok súvisiacich s pozíciou, smermi, farbami, tvarmi atď., dovoľuje zoznámiť sa aj s typmi z vyspelejších programovacích jazykov (pole, zoznam, zásobník).               
Jazyk a prostredie existuje v slovenskej, českej i anglickej verzii.

Posledný prírastok do rodiny je Robot Karel pre iPad  od slovenskej firmy CloudMakers z roku 2014. Program má anglickú, nemeckú, slovenskú a českú lokalizáciu.

## Karel++
Programovací jazyk Karel bol neskôr rozšírený na objektovo orientovaný jazyk označený Karel++ (podľa vzoru C++). Tento jazyk je syntakticky podobný jazyku Java.

## Referencie
* Richard E. Pattis. *Karel The Robot: A Gentle Introduction to the Art of Programming*. John Wiley & Sons, 1981. ISBN 0471597252.
* Joseph Bergin, Mark Stehlik, Jim Roberts, Richard E. Pattis. *Karel++: A Gentle Introduction to the Art of Object-Oriented Programming*. John Wiley & Sons, 1996. ISBN 0471138096.

## Externé odkazy
* Syntax jazyka Karel (cs)
* Karel++ (cs)
* xKarel – prostredie a interpreter jazyka Karel
* Robot Emil 3D (sk) (cs) (en) – prostredie a interpreter
* ''Základy algoritmizácie'' (cs)
* vyuka.pecinovsky.cz
* Robot Karel pre iPad 
* Karel-3D v JavaScripte a C++ (sk) (en) (de) (es) 2018
* Karel-3D s WebGL (sk) (en) (de) (es) 2018

Kategória:Programovacie jazyky