Scratch je vizuální programovací jazyk[1], tzn. jazyk, který umožňuje vytvářet programy manipulací s grafickými programovými elementy a ne v textové podobě. Školáci, studenti, učitelé a rodiče ho mohou bezplatně používat jako multimediálníautorský nástroj ke snadnému vytváření různých her a mít ho jako odrazový můstek do vyspělejšího světa počítačového programování. Je vhodný pro výuku i zábavu a byl použit v řadě různých projektů včetně simulací a vizualizací pokusů, k přípravě přednášek s animovanými prezentacemi, při tvorbě interaktivního umění, hudby a animovaných příběhů pro sociální vědy.[2] Prohlížení existujících projektů dostupných na webových stránkách Scratche, jejich pozměňování a testování provedených úprav (bez jejich ukládání) nevyžaduje žádnou registraci.
Scratch uživatelům dovoluje používat programování řízené událostmi s různými aktivními objekty označovanými v angličtině jako „sprites“[1], v české verzi jako postavy. V jednoduchém editoru, který je součástí Scratche, je možné tyto postavy nakreslit – jako vektorovou nebo bitmapovou grafiku – anebo se mohou importovat z nějakého vnějšího zdroje, včetně webové kamery.
V současné verzi se Scratch nemusí instalovat, pracuje se s ním online způsobem v internetovém prohlížeči. Zájemci, kteří chtějí Scratch používat bez připojení k Internetu, si mohou stáhnout Scratch 3 offline editor ve verzi pro Windows, Mac OS nebo Linux. Jazyk Scratch je lokalizován do češtiny.
Existuje stránka pro konverzi Jazyka Scratch do JavaScriptu. V současné době lze soubory scratch, .SB2 a .SB3 konvertovat také do .exe. nebo do HTML souborů.
Původ názvu
Název Scratch je odvozen z techniky označované jako „scratching“ a používané diskžokeji, kteří v minulosti rozšířené vinylové desky během přehrávání na gramofonu rukou smýkali vpřed a zpět a tím generovali různé zvuky (scratching lze překládat jako škrábání, skřípání, drhnutí).
V informatice scratching znamená opakované využívání programů nebo jejich částí, které lze kombinovat, sdílet a přizpůsobovat jiným účelům. A právě takový „remix“ je význačným rysem jazyka Scratch, jehož uživatelé si mohou stahovat publikované projekty jiných účastníků, upravovat je podle svých představ a své výtvory opět zveřejňovat pro další zájemce.[3]
Historie
Vývoj Scratche 1.0 se odehrál v období 2003–2007. V roce 2007 také vznikly webové stránky, na nichž mohli uživatelé ukládat a sdílet své projekty. Dlouho užívaná a oblíbená byla verze 1.4 z roku 2009. V květnu 2013 se objevila verze 2.0, obsahující četná rozšíření a použitelná v internetovém prohlížeči, tedy bez instalace na vlastním počítači.[1] V lednu 2019 byla nahrazena současnou aktuální verzí 3.0.
S původní ideou přišel a u zrodu stál Mitchel Resnick ze skupiny Lifelong Kindergarten (Celoživotní mateřská škola), působící v rámci MIT Media Lab, který spolu s kolegy vyvinul první desktopovou verzi. Finančně přispěla National Science Foundation (Národní vědecká nadace). Celý projekt byl zaměřen na mladé lidi (převážně od osmi let výš), které měl snadnou a zábavnou cestou přivést k základním znalostem programování.[4]
Rozšíření a využití pro výuku
Podle zveřejňovaných statistik měl v roce 2015 Scratch v Česku asi 14 tisíc registrovaných uživatelů, převážně ve věku od 8 do 18 let. To je asi 14 uživatelů na 10 tisíc obyvatel a odpovídá to údajům z okolních států, kde se stejný ukazatel pohybuje od 7 (Německo) do 20 (Rakousko). Vyšší je v Polsku (30) a v severských státech (kolem 50). Nejrozsáhlejší je komunita v anglicky mluvících zemích – Velká Británie (150), USA a Austrálie (100).
Pokud jde o výuku programování, je Scratch vhodný pro základní školy, na nichž se takový předmět vyučuje. Údaje o jeho využití v českých školách nejsou k dispozici, ale nebude velké. Existující osnovy nepředepisují, jaký jazyk má učitel pro výuku použít, výběr je široký a záleží na osobních preferencích vyučujícího. Asi nejčastěji se žáci setkávají s jazyky Baltík a Imagine Logo. Ve srovnání s nimi vychází Scratch lépe, k jeho přednostem patří zejména jeho cloudové řešení, odolnost proti syntaktickým chybám a fakt, že je zcela bezplatný[5].
Scratch není určen výlučně k výuce programování. Protože obsahuje mnoho vizuálních prvků, programátoři v něm mohou vytvářet různé animované příběhy. Učitelé ho mohou použít při tvorbě vizuálních přednášek, k ilustraci pokusů a jako nástroj vizualizace obtížných pojmů, třeba mitózy rostlinných buněk, koloběhu vody v přírodě, Galileova teploměru nebo Hookova zákona. V sociálních vědách mohou lektoři sestavovat kvízy, hry a tutoriály, které stimulují myšlení a interakce mezi studenty. Scratch umožňuje mladým lidem vytvářet „smysluplné osobní a zároveň vzdělávací projekty“, které mohou být pro studenty praktickým nástrojem k sebevyjádření[3].
Přednášející na Harvardově univerzitě, David J. Malan, používá Scratch ve svém úvodním kurzu informatiky namísto obvyklého úvodu k programovacím jazykům jako jsou Java nebo C. V univerzitní výuce jsou ovšem přednosti Scratche omezené, proto doktor Malan ve svém kurzu hned po prvním týdnu přechází na jazyk C.[6][7] Podle závěrů studie[8] je graficky založený jazyk jako Scratch vhodný k seznámení s programováním pro začátečníky na základní i střední škole. Ale současně se potvrdilo, že už žáci základní školy jsou schopni zvládnout i textový programovací jazyk.
Uživatelské rozhraní
Obrazovku s grafickým uživatelským rozhraním ukazuje obrázek. Vpravo nahoře je „scéna“ (anglicky „stage“), kde lze pozorovat výsledky (například naprogramované animace, ve zmenšené nebo normální velikosti, možné je i celoobrazovkové zobrazení). Pod scénou jsou „v ohradě“ shromážděny všechny definované postavy. K určování pozice na scéně slouží souřadnice x a y, přičemž bod se souřadnicemi 0,0 leží ve středu scény a celá scéna má rozměry 360×480 pixelů.
Postavy a pozadí scény lze vytvářet různými způsoby. Uživatel si může postavu nakreslit pomocí „editoru kreslení“, který je součástí Scratche. Také si může vybrat nějakou postavu ze zabudované knihovny nebo použít postavu z jiného svého nebo cizího projektu, případně nějakou fotografii anebo jiný obrázek z počítačového souboru[9].
Pro postavu, která je v ohradě právě vybrána, lze v záložce Scénáře v levé části obrazovky vybírat příkazové bloky, přetahovat je myší do střední části obrazovky, a skládat je tam do „scénářů“ či programů, jimiž se daná postava má řídit. Bloky mají různé tvary a podobně jako dílky puzzle se k sobě dají sesadit jen takovým způsobem, který odpovídá správné skladbě (neboli syntaxi) programu. Protože existuje velké množství různých bloků, jsou rozděleny do desíti barevně odlišených kategorií s názvy Pohyb, Vzhled, Události, Ovládání, Vnímání, Operátory, Proměnné, Moje bloky a Rozšíření, tak jak ukazuje následující tabulka.
Kategorie
Poznámka
Pohyb
Pohyby a natáčení postav
Vzhled
Bloky ovlivňující vzhled postav, změny jejich velikosti, komiksové bubliny s řečí nebo myšlenkami, změny pozadí
Zvuk
Přehrávání zvukových souborů
Události
Počáteční bloky určující spouštěcí událost pro navazující posloupnost bloků
Ovládání
Podmíněný příkaz když-tak-jinak, cykly a zastavení programu
Vnímání
Postavy mohou reagovat na kontakt s okolím, které uživatel vytvořil (např. detekce barev)
Operátory
Aritmetické a logické operátory, základní matematické funkce, náhodná čísla
Proměnné
Vytváření proměnných a seznamů včetně práce s jejich hodnotami
Moje bloky
Uživatelské procedury (bloky)
Rozšíření
Přidávání rozšíření jako třeba pera, hudby nebo ovládání externích zařízení
Vedle záložky Scénáře jsou ještě další dvě. V záložce Kostýmy uživatel může měnit podobu postavy a tak docilovat různých efektů, včetně animace této postavy[1]. A v záložce Zvuky je možné k postavě připojovat zvuky a hudbu[9]. Podobně jako lze v ohradě vybrat určitou postavu, dá se tam vybrat také pozadí, a rovněž ho upravovat a připojovat k němu scénáře a zvuky.
Komunita uživatelů
Scratch se používá v mnoha různých prostředích: ve školách[10], muzeích[11], knihovnách, komunitních centrech i v domácnostech. I malé děti dokáží tvořit projekty ve ScratchJr (Scratch Junior) anebo používat Scratch s pomocí rodičů nebo sourozenců, protože je to docela jednoduché, a vysokoškoláci používají Scratch v některých úvodních informatických předmětech (dokonce i na Harvardu, jak bylo zmíněno výše). Scratch byl lokalizován do mnoha jazyků, aby jeho využívání nebránila jazyková bariéra.
Projekty vytvořené ve Scratchi nejsou „černé skříňky“, ale objekty, z nichž je možné namixovat jiné projekty. Projekty se hned po dokončení mohou ukládat na webové stránky Scratche a kterýkoli návštěvník si může stáhnout jejich úplný zdrojový kód, prostudovat ho a využít ho zčásti nebo celý k namixování vlastních nových projektů[12][13]. Členové komunity také mohou vytvářet projektová studia (skupiny projektů), komentovat, hodnotit, favorizovat nebo „lajkovat (love)“ cizí projekty, sledovat (follow) jiné členy a prohlížet si jejich projekty a aktivity, a sdílet nápady. Projekty mají velmi široký záběr, od her a animací až po konverzační roboty z oblasti umělé inteligence. Přestože se grafické možnosti Scratche mohou na první pohled zdát velmi jednoduché, je ve skutečnosti možné vhodnou kombinací rastrového obrázku umístěného na pozadí, pohyblivých i statických postav před pozadím a současně vykreslovaných stop, navíc s podporou správy událostí a běhu více scénářů najednou (tzv. multithreadingu), naprogramovat i relativně složité grafické aplikace[14].
Všechny projekty na webu jsou sdíleny pod licencí Creative Commons a dají se spouštět ve webovém prohlížeči. Online komunita je samozřejmě multijazyčná, čeští školáci mohou mezi sebou komunikovat česky, ale může je to i motivovat ke zvládnutí angličtiny. Existuje také komunita pro učitele, s názvem ScratchEd[15].
Den Scratche
Vývojový tým Scratche vyhlašuje jednou za rok Den Scratche. V ten den se na mnoha místech světa organizují skupinová setkání lidí, kteří oslavují Scratch jako bezplatnou programovací platformu a online komunitu pro děti a mládež. Mladí lidé využívají této příležitosti ke sdílení svých projektů, učí se od sebe navzájem a vítají všechny nově příchozí.
V roce 2020 kvůli pandemii covidu-19 tým nepropaguje žádná osobní setkávání a místo toho doporučil zájemcům organizovat jen online akce v průběhu celého května, který se tak pro tento rok stal měsícem Scratche.
Jazyk Scratch zahrnuje většinu rysů současných programovacích jazyků a k seznámení s programováním je vzhledem ke své jednoduchosti a snadnému použití velmi vhodný. Současně však má některá omezení, která jsou často kritizována. Týká se to například možnosti vytvářet vlastní uživatelské bloky nebo práce se seznamy.
Pro zájemce, kteří chtějí zvládnout a využívat i komplikovanější programovací prvky, je k dispozici zdokonalená varianta Scratche s názvem Snap! 5.0. Jazyk Snap! je rozšířením Scratche, které vzniklo na Kalifornské univerzitě v Berkeley a jehož autory jsou Jens Mönig a Brian Harvey.
Uživatelské prostředí Snapu vypadá stejně jako u Scratche a obsahuje prakticky všechny jeho prvky a možnosti, takže pro uživatele obeznámeného se Scratchem je přechod na Snap! zcela bezproblémový. Také se provozuje ve webovém prohlížeči a je rovněž lokalizovaný do češtiny.[16]
Od verze Snap! 4.0 z roku 2014 došlo ke změně názvu, předchozí verze nesly označení BYOB, což je zkratka z Build Your Own Blocks, v překladu vytvářejte si vlastní bloky. A právě možnost tvorby nových uživatelských bloků (procedur), které je možné pojmenovat a taktéž jim při volání předávat hodnoty, je jednou z velmi důležitých vlastností projektu Snap![16]
Vlastní bloky připouští sice i Scratch 3.0, ovšem jen skupiny bloků s operátory (číselnými, logickými, textovými). Ve Snapu je však možné vytvářet i vlastní bloky, které se dají použít jako operátory (faktoriál x). Uživatelský blok může využívat zadané vstupní hodnoty a taktéž odevzdávat hodnotu výstupní, tak jako například standardní blok „odmocnina z 64“, který představuje hodnotu 8. Na horním obrázku vpravo je ukázka takové uživatelsky vytvořené funkce faktoriál, která navíc využívá tzv. rekurze, tedy volá sama sebe, což je v programování dosti častý obrat. Ve spodní části obrázku je nový blok použit se zadanou vstupní hodnotou 5. Vypadá stejně jako standardní blok odmocnina. A jak je z obrázku patrné, stejně jako ve Scratchi, i zde při ladění programu stačí na blok kliknout a v bublině se ukáže jeho hodnota.
Základním požadavkem při návrhu Snapu bylo, aby všechna data v něm představovala tzv. first-class objekty (objekty první kategorie). To znamená, že všechny objekty mají být zcela rovnoprávné, takže se s nimi dá i naprosto stejně zacházet. Jestliže je například možné v daném jazyce sestrojit seznam, jehož prvky jsou čísla nebo znakové řetězce (což je možné i ve Scratchi), musí jít sestrojit i seznam, jehož prvky jsou jiné seznamy (a to ve Scratchi nejde). Tato vlastnost jazyka Snap! uživatelům umožňuje vytvářet různé nástroje určené pro speciální účely, které by jinak vyžadovaly speciální doplňky či rozšíření.
Zajímavým důsledkem tohoto principu je to, že i procedury mohou být použity jako data. Kdyby například jazyk Snap! neobsahoval standardní blok „opakuj n krát“, programátor by si ho ve svém projektu mohl sám vytvořit tak, jak ukazuje spodní obrázek vpravo[17]. Zde vytvářený blok „udělej“ má dva vstupní parametry, přičemž ten druhý je typu procedura. Při použití bloku nebude pro tento druhý parametr připraven obvyklý ovál, nýbrž vykrojení ve tvaru C. Do tohoto vykrojení je pak možné jako hodnotu vsunout nepojmenovanou proceduru – v tomto případě trojici standardních bloků. V pravé části obrázku je vidět světlehnědý standardní blok „opakuj“ a šedý uživatelský „udělej“ a oba vypadají i fungují naprosto stejně.
Uvedené dvě ukázky jen naznačují rozšířené možnosti Snapu, kterých ovšem je ve skutečnosti víc. Bloky mohou mít proměnlivý počet vstupních hodnot, mohou mít proceduru též jako výstupní hodnotu, jazyk má i tzv. first-class continuations, atd. V jazyce Snap! lze používat i objektově orientované programování[17].
Ve verzi 4.0 mezi first-class objekty ještě nepatřily postavy, ale verze 5.0 uvedená v roce 2019 toto omezení odstranila. Nyní je možné i postavy a jejich kostýmy v programu vytvářet, pracovat s nimi a rušit je stejně jako jiné objekty.
↑ abcdMARJI, Majed. Learn to Program with Scratch. San Francisco, California: No Starch Press, 2014. ISBN9781593275433. S. xvii, 1-9, 13-15.Je zde použita šablona {{Cite book}} označená jako k „pouze dočasnému použití“.
↑Scratch. Research on Scratch [online]. [cit. 2015-06-03]. Dostupné online.
↑ abLAMB, Annette; JOHNSON, Larry. Scratch: Computer Programming for 21st Century Learners. Teacher Librarian. April 2011, s. 64-68. Dostupné online [cit. 18 July 2015].Je zde použita šablona {{Cite journal}} označená jako k „pouze dočasnému použití“.
↑SHAPIRO, Jordan. Your Five Year Old Can Learn To Code With An IPad App [online]. Forbes Magazine [cit. 2015-04-23]. Dostupné online.Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
↑KREJSA, Jan. Výuka základů programování v prostředí Scratch. České Budějovice: Jihočeská univerzita, 2014. 119 s. Dostupné online.
↑YOUNG, Jeffrey R. Fun, Not Fear, Is at the Heart of Scratch, a New Programming Language. The Chronicle of Higher Education. July 20, 2007. Dostupné online [cit. 2015-05-09]. ISSN0009-5982.Je zde použita šablona {{Cite news}} označená jako k „pouze dočasnému použití“.
↑CS50 Syllabus [online]. [cit. 2015-05-17]. Dostupné online.Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
↑DORLING, Mark; WHITE, Dave. Scratch: A Way to Logo and Python. In: GRIFFITH, Belver C. Proceedings of the 46th ACM Technical Symposium on Computer Science Education. Kansas City, MO, USA: [s.n.], 2015. Dostupné online. DOI10.1145/2676723.2677256. Archivováno 25. 9. 2015 na Wayback Machine.
↑ abScience Buddies: Scratch User Guide: Installing & Getting Started with Scratch [online]. [cit. 2015-05-09]. Dostupné online.Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
↑Canadian schools starting to teach computer coding to kids [online]. CTV.ca, 2014-04-30 [cit. 2014-04-30]. Dostupné online.Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
↑Scratch Day [online]. [cit. 2014-01-25]. Dostupné v archivu pořízeném dne 2013-04-03.Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.