Leluohjelmointikielten ykkönen – Aloitetaan Scratchista

Artikkeli on alun perin julkaistu Skrollin numerossa 2017.3.

Skrollilta kysytään usein, millä ohjelmointia voi tänä päivänä opetella. Vastaus on, että tällä.

Teksti: Janne Sirén
Kuvat: Mikael Heikkanen, Janne Sirén, Scratch Cat -logo (MIT Media Lab), LEGO

”SAY MOI… GO TO 10… Siis miten tää niinku toimii?” Vaikuttaa siltä, että yritykseni portata 1980-luvun suosituinta kotitietokonekoodia nykypäivään on tuhoon tuomittu. Olen muutenkin kuin kala kuivalla maalla Helsingin yliopiston Scratch-ohjelmointileirin vieraspäivänä. Asiat näyttävät tavallaan tutulta, mutta kaikki koodieditorista opettajien hiuksiin on värikkäämpää kuin ennen. Tämä ei ole isäsi bittileiri.

Yksi yleisistä Skrollin toimitukseen saapuvista kysymyksistä ei suinkaan ole ”Mikä on p*skin Commando-klooni?”, vaan millä ohjelmointia voi tänä päivänä opettaa ja opetella. Kun moni toimittajamme oli lapsi, ohjelmointiympäristö tuli tietokoneen mukana – yksinkertainen basic-tulkki saattoi olla koko käyttöliittymä. Koulut opettivat melko selkeää Pascalia ja kilpikonnalla visualisoitua Logoa. Vielä 1990-luvulla Microsoftin Visual Basic edisti helppoa ohjelmointia. Sitten kaikki alkoivat puhumaan Javasta – se oli aloittelijalle vaikea, vaikka kuinka Java-lehtori Arto Wikla yritti Suomen kansaa sivistää.

Palataan vielä siihen Visual Basiciin. Yksi kielen erikoisuuksista oli käytettävyysguru Alan Cooperin kehittämä Ruby-niminen (ei sukua nykyiselle Ruby-kielelle) graafinen raahaa ja pudota -käyttöliittymä. Tämä oli jotain uutta vuonna 1991, ja vaikutus näkyy osin nykyisissäkin ohjelmointiympäristöissä. Silti vielä tänäkin päivänä valtaosa ohjelmoinnista, jopa aloittelijoille suunnatuilla kielillä, tehdään kirjoittamalla. Kirjoittamisesta seuraa kirjoitus- ja syntaksivirheitä, eikä tekstikäyttöliittymä useinkaan esittele affordanssejaan, mahdollisuuksiaan, mikä lyö aloittelijalle kapuloita rattaisiin.

Miten tehdä ohjelmoinnista taas aloittelijaystävällisempää? Scratch tarjoaa yhden ratkaisun: Scratchissa komentoja ladotaan visuaalisesti kuin Lego-palikoita.

Miksi juuri Scratch?

Muistutetaan silti alkuun, että ohjelmoinnin oppiminen on monimutkainen pedagoginen, joidenkin mielestä lähes eettinen kysymys, johon vastaus ei aina ole ”aloita Scratchista”. ”Aloita konekielestä” voi myös olla oikea vastaus. Skrolli julkaisi aiheesta taannoin kattavan artikkelin Ohjelmoinnin opintiet, joka on edelleen ajankohtaista luettavaa ja pohdittavaa (ks. skrolli.fi tai Skrolli 2014.2). Scratch ei myöskään ole ainoa palikkapohjainen kieli, muitakin on.

Ohjelmointia voi lähestyä monesta suunnasta, ja koulukuntia on lähes yhtä monta kuin kouluja. Koulu, josta Scratch tulee, on kuitenkin hyvämaineinen: Massachusetts Institute of Technology eli MIT Cambridgessa, Yhdysvalloissa. Scratchin kehitti koulun MIT Media Lab Elinikäinen lastentarha -ryhmässään 2000-luvun ensikymmenellä, professori Mitch Resnikin johdolla. Nykyinen versio on vuodelta 2013. Scratchia pidetään myös muualla, jopa Skrollissa, varsin turvallisena tapana lähestyä ohjelmointia. Se kuulemma mädättää aivoja vähemmän kuin basic, jonka parissa moni nykypäivän ohjelmointiammattilainen aloitteli.

Tosiasia myös on, että Scratch on suosittu. Ohjelmointi teki paluun Suomen peruskouluihin viime syksynä, ja yksi keskeinen väline on sielläkin Scratch. Lukuisat ohjelmointikerhot ja leirit, meillä ja maailmalla, opettavat Scratchia. Lieneekin niin, että Scratch on 2010-luvun basic – Z-sukupolvelle ohjelmointi on Scratchia. Kaiken lisäksi Scratch on ilmainen ja toimii vaikka internet-selaimella. Oikeastaan ainoa rajoittava tekijä on ikääntyvän Adobe Flash/AIR -laajennuksen vaatimus virallisessa Scratchympäristössä. Tämäkin korjaantuu seuraavassa versiossa.

Graafisia ohjelmointikielivirityksiä on toki nähty maailman sivu. Usein ääriyksinkertaisina leluina tai pelieditorin tapaisina erikoisuuksina. Myös Scratch-ohjelmointikieli kuuluu niin sanottujen lelukielten perheeseen: sillä tuskin tehdään kaupallisia tuotantosovelluksia. Mutta Scratchissa helppokäyttöisyyteen yhdistyy kaksi asiaa, jotka sen lajitovereilta usein puuttuvat: ilmaisuvoima ja yhteisön voima. Lelu tai ei, Scratchilla voi tehdä jotain, jolla on väliä – ja sillä on väliä.

Scratch on yhteisö

Scratch-ohjelmointikieli löytyy osoitteesta scratch.mit.edu. Scratchin keskiössä on visuaalinen Scratch-kehitysympäristö, jota voi käyttää internet-selaimella verkossa taikka paikallisesti. Scratch-tuotos puolestaan on nimeltään projekti. Projektit luodaan Scratch-kehitysympäristössä. Scratchin nykyisessä kakkosversiossa ne tunnistaa .sb2-päätteestä tiedostonimessä. Tyypilliset projektit ovat kielen luonteen vuoksi pelejä tai ohjelmoituja animaatioita, mutta muunkinlaisia audiovisuaalisia taideteoksia löytyy.

Scratchin kehitysympäristö. Suoritusnäkymä eli näyttämö vasemmalla ylhäällä, projektin sprite- ja taustaoliot vasemmalla alhaalla sekä ohjelmointipalikat oikealla. Kielivalintoja on lukuisia, muun muassa suomi ja englanti.
Scratch on tulkattu ohjelmointikieli, joten projektien suorittaminen vaatii ajoympäristön. Ajoympäristö on integroitu kehitysympäristöön. Lisäksi projekteja voi sisällyttää muille web-sivuille, kunhan (vielä toistaiseksi) käytössä on Adobe Flash. Kolmannet osapuolet ovat kehittäneet myös välineitä, joilla Scratch-projekteja voi käyttää ilman Flashia. Yhteisö on kehittänyt muun muassa käännöstyökaluja, joilla projektit saa muunnettua exe-tiedostoiksi.

Lisäksi Scratch-projekteja voi jakaa Scratchin kotisivuilla. Scratch-portaali on jaettu kahteen osaan: luomiseen ja tutkimiseen. Ensin mainittu on ohjelmointia ja jälkimmäinen ohjelmien käyttämistä. Scratch-yhteisön jäsenet voivat myös hallinnoida omia Scratch-studioitaan, joissa voi keräillä yhteen ja nostaa esiin muiden projekteja. Scratchista onkin muodostunut omanlaisensa sosiaalinen media. Kissakuvien sijaan sinne lähetetään (kissa)ohjelmia – itse asiassa Scratchin logokin on kissa.

Scratch-portaalin tutkimuspuolikin palvelee luomistyötä. Julkaistua koodia saa uudelleenkäyttää Creative Commonsin Attribution-ShareAlike 2.0 Generic -lisenssin mukaisesti. Scratchaajat tutustutetaan siis varhain avoimeen lähdekoodiin. Scratch-kielellä puhutaan ”remixeistä”, kun tehdään muunnelmia toisten projekteista. Scratch onkin kuulemma saanut nimensä tiskijukkien skrätsäyksestä. Teosten tuunaaminen on Scratchinkin keskiössä, musiikin sijaan vaan remiksataan koodia.

Herää kysymys, onko Scratch siis lelukieli alkuunkaan: sillä tehdään tuotoksia, joita joku oikeasti käyttää. Samaa ei voi sanoa monista muinaisista basic-räpellyksistä.

Scratchilla ohjelmointi

Scratch-ohjelman suoritusnäkymä – ohjelman ikkuna – on nimeltään näyttämö (stage). Tämä näkyy kehitysympäristön vasemmassa yläkulmassa. Ohjelmat koostuvat graafisista elementeistä, spriteistä tai hahmoista, jotka ”esiintyvät” tällä näyttämöllä. Näyttämölle voidaan lisäksi määritellä tausta (background). Spritet ja taustat näkyvät ruudun vasemmassa alakulmassa. Käyttäjäsyötettä Scratch vastaanottaa hiirtä ja näppäimistöä seuraamalla.

Jäljittely on hyvää harjoitusta. Scratchilla on toteutettu muun muassa sangen uskolliset imitaatiot Taito Chase HQ:sta (1988) ja Wolfenstein 3D:stä (1992). Suosittu taidemuoto ovat myös (usein vähemmän uskolliset) käyttöjärjestelmäsimulaatiot.
Yhdessä projektissa voi olla lukuisia spritejä ja taustoja. Lisäksi spriteillä voi olla useita kuvia eli asuja (costumes). Spriteihin ja taustoihin voi myös liittää ääniä ja muuttujia. Spritet ja taustat edustavat Scratchissa tavallaan olio-ohjelmoinnin olioita. Ohjelmointi tapahtuu näiden olioiden kautta: kuhunkin spriteen tai taustaan voi kuulua useita skriptejä, jotka koostuvat palikoista (blocks) eli Scratchin komennoista. Scratch käynnistelee skriptejä sitä mukaa, kun säädettyjä asioita tapahtuu.

Scratchin pihvi ovat nuo palikat, jotka näkyvät kehitysympäristön oikeassa laidassa. Ne ovat etäisesti Legoja muistuttavia värikkäitä laatikoita. Palikat on jaettu kymmeneen kategoriaan: liike, ulkonäkö, ääni, kynä, tieto, tapahtumat, ohjaus, tuntoaisti, toiminnot sekä lisäpalikat. Niistä muodostetaan kokonaisuuksia raahaamalla niitä pinoiksi. Joidenkin palikoiden sisään raahataan myös toisia palikoita, esimerkiksi muuttujapalikoita ehtopalikoihin. Palikat on tekstitetty kielivalinnan mukaan ja värikoodattu kategorian mukaan.

Scratchin palikat ovat tuttuja. Useimmat yleiset ehto- ja ohjausrakenteet sekä perustason matemaattiset operaatiot ovat mukana – listarakenteetkin ja pienoisena tuhmuutena globaalit muuttujat. Visuaalisella puolella tarjotaan palikat spritejen liikutteluun ja animointiin, mukaan lukien spritejen ja laitojen törmäystarkistukset. Koodiin voi jopa lisätä kommentteja: ne esitetään muistilappuina. Tärkeänä ominaisuutena lisäpalikoita voi määritellä itse, mikä vastaa funktio- tai metodikutsuja.

Scratchin keskittyminen spriteihin ja taustoihin ohjaa tuotoksia visuaalisiin esityksiin ja peleihin. Siihen sisältyy myös piirto-ohjelma sekä valokuvausmahdollisuus, mikä kannustaa spontaaniin hahmotteluun, joskin mediatiedostoja voi tuoda muualtakin. Scratchissa ei sen sijaan ole helppoa tapaa tuottaa esimerkiksi vapaata ohjelmallista tekstiä, vain puhekuplia ja sen tapaisia. Scratchissa on kuitenkin sekä kynätoiminto että spritejen kloonaus, joten pikseleitä piirtämällä vain suorituskyky on rajana.

Scratch-ohjelmoijalla on käytettävissään ruudun alareunassa lisäksi kaikkien projektiensa yhteinen reppu (backpack), jonne voi laittaa projektiensa kesken jaettavia resursseja.

Scratchin tulevaisuus

MIT ja uusi yhteistyökumppani Google kehittävät parhaillaan seuraavaa versiota Scratch 3.0. Kolmosversioon sisältynee muun muassa 16:9-kuvasuhteen näyttämö sekä 60 fps:n tai nopeampi päivitystaajuus nykyisen 4:3:n ja 30–40 fps:n sijaan. Muut parannukset liittyvät esimerkiksi tekstin esittämiseen ja merkkien käsittelyyn. Kakkosversiossa kun esimerkiksi sisäkkäisten merkkijonojen etsiminen on tehtävä työläästi käsin.

Scratch 3.0 siirtyy Flash-vaatimuksesta universaaliin HTML5-tekniikkaan. Myös käyttöliittymä saa kasvojenkohotuksen. Testaa itse: wiki.scratch.mit.edu/wiki/Scratch_3.0.
Tärkein parannus on kuitenkin Adobe Flash/AIR -riippuvuuden poistuminen. Seuraava Scratch on toteutettu HTML5:llä, joten se tulee tukemaan suoraan myös iOS- ja Android-laitteita. Scratch 3.0:n ennakkoversio on jo jakelussa ja seuraavaa päivitystä on lupailtu ensi vuoden alkupuolelle. Pessimistisimmät veikkaavat, että Scratch 3.0:n viralliseen julkaisuun menee vielä pari vuotta. Suurin puute 3.0:n ennakkoversiossa kun on sen yhteisön puute…

Niin, entäpä se GO TO. Sellainen palikka kyllä löytyy Scratchista, mutta mitään tekemistä basicin Goto-ohjausrakenteen kanssa sillä ei ole. Scratchissa Go to liikuttaa spritejä paikasta toiseen. Basicin kaltaista hyppyrakennetta aina välillä toivotaan, mutta tekijät ovat tiukkana: Goto on rumaa koodia, Scratchissa on parempiakin ohjausrakenteita. Gotoa emme siis kolmosessakaan saa. Silti, vinkkinä hyppyjen ystäville, Broadcast-palikka on melkein kuin Gosub… Kyllä, basic sulatti aivot.

Löydät tämän artikkelin linkit ja lisää osoitteesta: skrolli.fi/numerot [täällä]


Scratchin kaverit

Scratch on avoimen lähdekoodin projekti ja on siten poikinut lukuisia virallisia ja epävirallisia sivujuonteita. Tässä muutama kiintoisa.

Tuki LEGO WeDo 2.0 -opetusroboteille löytyy sisäänrakennettuna. Scratchissa on palikat moottoreiden, valojen sekä kallistusja etäisyysantureiden hallintaan.

Scratch tukee myös muun muassa PicoBoardia suoraan, mutta lisäksi esimerkiksi PICAXE-mikrokontrollerille löytyy erikseen tuki S2P-lisäpalikan muodossa (picaxe.com). Scratchilla voi näin hallinnoida mikrokontrolleriin kytkettyjä laitteita. Myös Arduinolle löytyy laajennus: S4A (s4a.cat).

ScratchJr (scratchjr.org) on nuorille lapsille, iät 5–7, suunnattu kevyempi tablettiversio Scratch-ohjelmointiympäristöstä. ScratchJr:ssä pystysuuntaisten komentopinojen sijaan raahataan kuvallisia palikoita vaakasuunnassa.

Lisää Scratch-laajennuksia: scratchx.org.


Scratch-nuorisoa yliopistolla

Scratchia käytetään opetukseen jopa yliopistotasolla: muun muassa Harvardin tietojenkäsittelytieteen peruskurssi aloittaa siitä. Paras opetuksellinen hyöty Scratchista saadaan kuitenkin peruskoulutasolla, mikä on huomattu Suomessakin. Esimerkiksi Helsingin yliopiston tietojenkäsittelytieteen laitoksen Linkkikeskus (linkki.cs.helsinki.fi) järjestää Scratch-leirejä ja -kerhoja juuri koululaisille. Skrolli kävi kesällä tutustumassa viikon mittaiseen päiväleiriin.

Matias Sirén, 12, toteuttamassa hai-aiheista tulkintaansa kilpa-ajopelistä.
Peliohjelmointiin keskittynyt aloittelijaleiri oli suunnattu 9–12-vuotiaille. Käytännössä lähes jokaisena viisipäiväisen leirin päivänä ohjelmoitiin yksi uusi peli Scratchilla, nousevalla vaikeusasteella. Lisäksi tehtiin tutustumiskierroksia yliopiston tutkimustiloihin, joista mieleen jäi etenkin Faradayn häkki – koska ”siellä ei toimi netti”! Karmea paikka… Jos kotona toimi netti, leiritehtäviä saattoi jatkaa siellä, sillä ohjelmointi tehtiin avoimessa Scratch-pilvipalvelussa verkkoselaimella.

Leiritehtävät olivat variaatioita tutuista peliteemoista: kalastuspeli, jossa haavin varsi toteutettiin hauskasti kalastaja- ja haavi-spritejen välisenä vektorina; ylhäältä kuvattu rallipeli; labyrintti ja pong. Ohjeita saatiin sen verran, että aloittelijakin pärjää, mutta tuotoksiin tuli kyllä riittävästi myös vaihtelua ja omaa oivallusta. Tarjolla oli myös lisätehtäviä, kuten kloonit Asteroids- ja Flappy-peleistä. Skrolli suosittelee.