Tämä hieno artikkeli on julkaistu alunperin tietokonekulttuurin erikoislehti Skrollissa, jolta pyysimme lupaa julkaista kirjoitus kaiken kansan luettavaksi!
-Suvi Syrjäläinen, Kodarit

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

Aloitetaan Scratchista

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?

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 Scratch-ympä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 http://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.

Kuvassa 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: http://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.

Scratchin kaverit

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

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

ScratchJr http://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: http://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 http://linkki.cs.helsinki.fi järjestää Scratch-leirejä ja -kerhoja juuri koululaisille. Skrolli kävi kesällä tutustumassa viikon mittaiseen päiväleiriin.


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.

Artikkeli on alun perin julkaistu tietokonekulttuurin erikoislehti Skrollissa.

Kodareiden kevään 2018 koodauskursseista Helsingissä, Tampereella ja Hämeenlinnassa:

Lasten kurssit

Aikuisten ja nuorten kurssit

Työpajat yrityksille ja yhteisöille

Aloitetaan Scratchista