Artikel top billede

(Foto: Computerworld)

Scratch – programmering for sjov

Kom nemt i gang med at programmere uanset, om du er 8 eller 68 år!.

Af Kenneth Geisshirt, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Programmering er sjovt – og til tider svært. Gennem årene har mange forsøgt at udvikle programmeringssprog og udviklingsmiljøer som gør det let at programmere. I slutningen af 1960’erne så Logo dagens lys som et forsøg på at udvikle et sprog til undervisning. Meget er sket siden, og et af de populære udviklingsmiljøer til undervisning af børn og unge i programmering er MITs Scratch. I denne artikel vil vi se nærmere på de muligheder, Scratch giver for børn i alle aldre!

Ingen installation
Scratch begyndte som projekt for snart 15 år siden. I de første mange år var Scratch et program, som du skulle installere. Med version 2.0 kræver det ingen installation, men kun en webbrowser med et Flash-plugin. Find Scratch her. Om Flash er en god idé eller ej, er ikke denne artikels emne, men ved at vælge Flash, har Scratch-udviklerne gjort det meget lettere at komme i gang (mange skoler vil aldrig tillade installation af software, og derved vil Scratch være lukket land). Selv billige Chromebooks kan afvikle Flash og også Scratch. Det skal dog nævnes, at der findes en app til tablets, hvor du kan udvikle Scratch-programmer, men funktionaliteten er mindre end den udgave, du finder i Flash-udgaven.

For at bruge Scratch skal du oprette en konto. Kontoen gør dig i stand til at tilgå dine projekter fra enhver browser. Alle projekter og programmer er gemt på Scratchs servere, og du behøver ikke tænke på, hvor dine filer er. Bruger du Scratch i forbindelse med undervisning, har det den fordel, at eleverne kan fortsætte hjemme ved blot at logge ind fra deres hjemmecomputer.
Scratch er mere end blot et udviklingsmiljø. Det er i virkeligheden også et socialt netværk, hvor du kan dele dine projekter med de andre brugere. Det er også muligt at følge andre brugere, så du kan se, hvad de arbejder på. Finder du et spændende Scratch-projekt, kan du altid se, hvordan det er lavet. På den måde kan du lære, hvordan du kan gøre nye ting – og blive inspireret af andres ideer.

Du er velkommen til at se mine Scratch-projekter på https://scratch.mit.edu/users/geisshirt/.

Sprites
Sprites er et af de centrale begreber i Scratch-programmering. En sprite er et lille stykke grafik, som du kan flytte rundt på skærmen. Til enhver sprite bygger du et Scratch-program op, og har du flere sprites i et Scratch-projekt, vil de forskellige Scratch-programmer blive udført samtidigt.

Der findes et meget stort bibliotek af færdige sprites, som du kan bruge. Du kan dog uden problemer lave dine egne. Det er muligt at tegne dem, idet der følger et meget enkelt tegneprogram med Scratch. Du kan også vælge at bruge et billede og uploade det til Scratch. Se oversigten på hovedbilledet på venstre side.

Ud over sprites kan du også skifte baggrunden ud til noget andet end blot en hvid baggrund. Også her kan du bruge baggrunde fra Scratchs store bibliotek eller lave dine egne baggrunde.

Programmer
Det er allerede været nævnt: til enhver sprite bygger du et program op. Programmet består en række blokke. Der er en række forskellige kategorier af blokke, f.eks. bevægelse (eng. motion), hændelser (eng. events) og kontrolstrukturer (eng. control). I de følgende afsnit skal vi se nærmere på en række af de mere almindelige kategorier og blokke.

Du trækker en blok mod højre ind i dit Scratch-program. Ved at hæfte blokken til resten af programmet, bliver blokken tilføjet til programmet. Du fjerner blokke ved at trække dem tilbage mod venstre.

I kategorien Motion finder du nogle blokke, som du kan bruge til at styre dine sprites bevægelser. Med move steps kan du rykke din sprite et antal skridt/pixel i en retning. En sprite har en retning, og du kan med de to turn-blokke ændre retningen nogle grader mod venstre eller højre.

Under kategorien Events finder du blokke, som kan sætte et program i gang. Blokken med et grønt flag er meget anvendt. Den sætter gang i et program, når du klikker på det grønne flag. Der er også en blok, hvor du kan starte dit program, når du trykker på en bestemt tast. Se figur 1.

Figur 1: Det er muligt at sende beskeder afsted og starte nye programmer op, når de modtages. Figur 1: Det er muligt at sende beskeder afsted og starte nye programmer op, når de modtages.

En af de mere smarte blokke i Scratch er, at du kan få udført program-blokke, når en besked modtages. Der er naturligvis også en blok til at sende beskeder. Internt i Scratch er det nemlig muligt at sende og modtage beskeder. En besked-orienteret arkitektur er et begreb som forbindes med enterprise-løsninger og kompleks middleware som IBM WebSphere MQ (tidligere MQSeries) og Java Message Service. Det er ganske finurligt, at et publisher/subscriber-mønster er at finde i et programmeringsmiljø målrettet undervisning og børn!

Inden vi kommer for godt i gang med selve programmeringen, er det værd at se på variabler. Mange programmeringssprog har et overflødighedshorn af typer og datastrukturer, men det har Scratch ikke. Der er kun skalar værdier (tal og strenge) og lister. Du opretter variabler i kategorien Data. Når en variabel er oprettet, får du adgang til flere blokke. De nye blokke kan bruges til at tildele værdier og ændre værdier af variabler.

Kategorien Operators giver dig mulighed for at bruge dine variabler i udtryk. Du finder regneoperatorer (addition, multiplikation, osv.) og sammenligningsoperatorer (større-end, osv.). Sammenligningerne kan du bruge i kontrolstrukturer, som vi kommer til senere. Se figur 2a, 2b og 2c.

AOD05_scratch03

AOD05_scratch04

Figur 2a, 2b, 2c: Oprettelse og brug af variabler sker også ved at trække blokke over i dit program. Figur 2a, 2b, 2c: Oprettelse og brug af variabler sker også ved at trække blokke over i dit program.

Løkker og forgreninger
I imperative programmeringssprog som PHP, Python, C++ og Java, er der to kontrolstrukturer, som går igen. Der er tale om løkker og forgreninger. Begge kontrolstrukturer er mulige i Scratch, og du finder blokke under kategorien Control.

Lad os begynde med løkkerne. Scratch har flere løkker at vælge imellem. For eksempel kan du gentage samme sekvens et fast antal gange. Udover betingelsesløse løkker har du også mulighed for at bygge betingelser ind i løkkerne som stopbetingelsen. Se figur 3 med en betingelsesløs løkke.

Figur 3: Med en betingelsesløs løkke kan du elegant få udregnet 3-tabellen. Figur 3: Med en betingelsesløs løkke kan du elegant få udregnet 3-tabellen.

En anden vigtig kontrolstruktur i mange programmeringssprog er forgreninger. Her kan dit program vælge forskellige sekvenser afhængig af værdier af variabler. Se figur 4 med enkle regneudtryk og forgreninger.

Figur 4: Med enkle regneudtryk og forgreninger kan du finde alle de lige tal. Figur 4: Med enkle regneudtryk og forgreninger kan du finde alle de lige tal.


Skildpadde-grafik
Programmeringssproget Logo er kendt for skildpadde-grafik (eng. turtle graphics). I 1980’erne var Myresnak meget populært i Danmark efter Regnecentralen lancerede en dansk udgave af skildpadden. Den basale idé bag skildpadde-grafik er, at du ser sporet efter en skildpadde – set fra oven. Dit program flytter skildpadden nogle skridt frem eller drejer den nogle grader mod venstre eller højre. Ved at bruge et par variabler og løkker, er det muligt at tegne komplekse geometriske figurer.

Det er også muligt at lege med skildpadde-grafik ved at bruge forskellige blokke. De vigtigste blokke finder du i kategorien Motion, for eksempel blokke til at gå et antal skridt frem eller dreje et antal grader til venstre eller højre.

Naturligvis kan du kombinere skildpadde-grafik med alle de andre elementer i Scratch. Men det kan være sjovt at beskrive forskellige geometriske former som Scratch-programmer. Se et eksempel på komplekse geometriske figurer på figur 5.

AOD05_scratch08

Figur 5: Med enkle blokke kan du bruge Scratch til at tegne komplekse geometriske figurer – som her en spiral. Figur 5: Med enkle blokke kan du bruge Scratch til at tegne komplekse geometriske figurer – som her en spiral.

I kategorien Pen kan du vælge blokke som er målrettet skildpadde-grafik. Som udgangspunkt kan du se, hvor din sprite/skildpadde bevæger sig, men det er muligt at “løfte pennen fra papiret” med Pen up og gøre sporet usynligt. Det er også muligt at skifte farve på pennen.

Input og output
Intet programmeringssprog er meget værd, hvis det ikke giver programmøren mulighed for at lade et program reagere på input fra en bruger. Og selv om Scratch har et visuelt udtryk i form af bevægelige sprites, kan det være en fordel at skrive små tekster ud på skærmen, mens programmet kører.

Tale- og tankebobler er særlige blokke, som du finder i kategorien Looks. Du kan bruge både strenge og variabler i begge typer blokke. Som du vil opdage, findes der to udgaver af boblerne: en som venter i et nærmere angivet antal sekunder, før boblen forsvinder, og en hvor boblen bliver hængende indtil næste boble vises.

Skal du have tekster ud som kommer fra forskellige variabler og strenge, kan du bruge operatoren join, som du finder i kategorien Operators. Operatoren er meget enkel, idet den blot sætter de to variabler sammen til én streng. Har du brug for at sætte tre variabler sammen, må du bruge operatoren to gange.

En anden form for output er lyd, som du finder blokke for i kategorien Sounds. Scratch har et stort bibliotek af lyde, men du kan optage dine egne lyde eller bruge lydfiler fra din computer. Sidder du sammen med en gruppe børn, vil du erfare, hvor hurtigt de finder denne kategori af blokke.

Input er en anden kategori. Sensing er navnet på kategorien, hvor du finder en række forskellige blokke, som kan give dig input. Det mest enkle er input af tekst i form af din sprite stiller et spørgsmål. Blokken ask and wait har præcis denne funktionalitet. Se spørgsmål på figur 6.

Figur 6: At stille spørgsmål til brugeren og skrive tekst ud i form af talebobler er meget let i Scratch. Figur 6: At stille spørgsmål til brugeren og skrive tekst ud i form af talebobler er meget let i Scratch.

Du finder også blokke, som kan bruges til at tjekke, om en bestemt tast er trykket ned. Du kan bruge denne blok til at give brugeren mulighed for at styre en sprite. Der er også blokke, som kan tjekke, om din sprite rammer kanten af skærmen. Har du mere end én sprite, kan du også bruge touches-blokken til at detektere kollisioner mellem to sprites. Nu begynder du nok at ane, hvordan spil i Scratch kan bygges op. Se hændelsesdrevet programmering på figur 7 og blokke til detektion af kollisioner på figur 8.

Figur 7: Hændelsesdrevet programmering er meget udbredt til brugergrænseflader, og Scratch giver dig basale blokke til at bygge det op. Figur 7: Hændelsesdrevet programmering er meget udbredt til brugergrænseflader, og Scratch giver dig basale blokke til at bygge det op.
Figur 8: Ved at bruge blokke til detektion af kollisioner mellem to sprites, er det ikke svært at bygge et lille program til at lege fangeleg. Figur 8: Ved at bruge blokke til detektion af kollisioner mellem to sprites, er det ikke svært at bygge et lille program til at lege fangeleg.



Egne blokke
Hvis du har programmeret i andre programmeringssprog end Scratch, vil du vide, at det ikke er ualmindeligt at bryde et program ned i mindre dele. Nogle sprog kalder det for procedurer, andre for funktioner eller metoder. Denne del-og-hersk tankegang gør det muligt at vinde over kompleksiteten i et problem, idet de enkelte dele er lettere at overskue.

På tilsvarende vis kan du bygge dine egne blokke i Scratch. Under kategorien More blocks kan du vælge at oprette nye blokke. En ny blok består sådan set blot af andre blokke, men i stedet for at skulle trække måske fem blokke ind i et program, kan du nøjes med at trække en enkelt blok ind. Se hvordan du kan genbruge sekvenser på figur 9a og 9b.

AOD05_scratch13

Figur 9a og b: Ved at bygge en ny blok, kan du genbruge sekvenser flere gange i dine Scratch-programmer. Figur 9a og b: Ved at bygge en ny blok, kan du genbruge sekvenser flere gange i dine Scratch-programmer.

Har du lyst til, at Scratch skal nå ud over din computer, er det også i kategorien More blocks, at du kan finde spændende ting og sager.
LEGO har udviklet klodser og microcontroller under navnet WeDo, som kan bruges sammen med Scratch. En anden mulighed er PicoBoard fra PICO (Playfull Invention Company). Du kan hente data fra sensorer på WeDo og PicoBoard, og du kan tænde lys og styre motorer. Med andre ord, du kan bygge fysiske ting, som du kan styre fra Scratch!

Afslutning
Forhåbentlig har du med denne artikel fået lyst til at prøve Scratch. Har du bare en smule erfaring med programmering, vil du uden tvivl finde Scratch sjov og underholdende.
Min erfaring er, at børn i 10-12 års alderen ingen problemer har med at lege med Scratch. Kender du børn, som ikke har erfaring med programmering, bør du kaste dig ud i at hjælpe dem i gang! Det er sjovt at programmere – også for voksne!

 

Få mere at vide
Scratchs hjemmeside: http://scratch.mit.edu/
Lidt om Myresnak:http://www.kalibalik.dk/anders/software/myresnak/" target="_blank"> http://rc700.dk/files/documentation/PICCOLINE_Myresnak_mar1985.pdf og http://www.kalibalik.dk/anders/software/myresnak/
Lær at programmere i Scratch: Learn to Program with Scratch af M. Marji. No Starch Press, 2014.
Scratch-guide: Scratch 2.0 Beginner’s Guide af M. Badger. Packt Publishing, 2014.
Onlinekursus i Scratch: https://www.coursera.org/learn/intro-programming
LEGO WeDo: https://education.lego.com/en/lesi/elementary/lego-education-wedo
PicoBoard: http://www.picocricket.com/picoboard.html