Centralt innehåll i matematik åk 4–6
- Hur algoritmer kan skapas och användas vid programmering. Programmering i visuella programmeringsmiljöer.
- Enkla algebraiska uttryck och ekvationer i situationer som är relevanta för eleven.
- Strategier för problemlösning i vardagliga situationer.
Centralt innehåll i matematik åk 7–9
- Hur algoritmer kan skapas och användas vid programmering. Programmering i olika programmeringsmiljöer.
- Innebörden av variabelbegreppet och dess användning i algebraiska uttryck, formler och ekvationer.
- Strategier för problemlösning i vardagliga situationer och inom olika ämnesområden samt värdering av valda strategier och metoder.
- Hur algoritmer kan skapas, testas och förbättras vid programmering för matematisk problemlösning.
Här erbjuds en fördjupad läsning som bakgrund till lektionsplaneringarna och de generella principer för undervisning och lärande som lektionsplaneringarna är baserade på. Lektionsserien har flera olika mål, på olika nivåer. Ett övergripande mål med lektionsserien är att du som lärare ska utveckla din förmåga att utnyttja digital teknik i din ordinarie matematikundervisning. Ett didaktiskt mål är att skapa problemlösningssituationer i matematik och programmering, för att utveckla elevers problemlösningsförmåga. Här har vi valt att lyfta fram konstruktion i relation till lärande och problemlösning, där tanken är att elever lär sig genom att konstruera eget material och lösa de problem som naturligt uppstår i en sådan process. Sen har varje lektion ett lärandemål med fokus på ett programmerings-innehåll, som ligger till grund för varje lektionsplanering.
Programmering finns numera som centralt innehåll i matematikämnet. Skrivningar i styrdokumenten inom algebra syftar till att lära sig att programmera och skrivningar inom problemlösning syftar till att få uppleva programmering som ett verktyg för att lösa matematiska problem. Förmågan att se möjligheter att lösa problem med hjälp av datorkraft kallas datalogiskt tänkande. Datalogiskt tänkande kan delas upp i tre dimensioner, begrepp, praktiker och perspektiv. Begrepp innefattar de grundbegrepp som är återkommande i de flesta programmeringssammanhang, så som loopar och villkorssatser. Praktiker innefattar de grundpraktiker som är återkommande i de flesta programmeringssammanhang, så som debugging och kodning. Perspektiv handlar om ett sätt att börjar ifrågasätta och förstå hur vardagliga ting hänger ihop med, eller skulle kunna göra så att de hänger ihop med programmering. I denna modul kommer ni att främst jobba med begrepp och praktiker som utgör det centrala innehållet i algebra. Därtill kommer det utforskande arbetssättet där elevers problemlösningsförmåga utmanas, men då för att lösa programmeringsproblem snarare än matematiska problem. Inom programmeringsdidaktik pratar man om programmering som ett innehåll som utmanar elevers uthållighet, öppenhet och förmåga att hantera uppgifter som kan tolkas och lösas på många olika sätt. Argumentet är att dessa aspekter av problemlösning även är önskvärda vid problemlösning i matematik. Det har visats vara viktigt i arbetet med denna modul att även tydliggöra dessa aspekter för eleverna, så att de har rimliga förväntningar på sig själva. Vi föreslår att man diskuterar vad det innebär att lösa problem både i början och fortlöpande under arbetet med lektionsinnehållet.
För att arbeta med elevers förväntningar kan man organisera klassrummet och arbetet enligt några principer. Vi föreslår att man fysiskt placerar elever i mindre grupper eller två och två så att de har möjlighet att vända sig till varandra som primärt stöd när de inte löser ett problem. Det har också visats gynnsamt att kunna ta del av varandras lösningar, för att granska och ifrågasätta andras resonemang, samt få sina egna resonemang granskade och ifrågasatta av andra (code-sharing). Därför behöver eleverna även virtuellt organiseras så att de kommer åt varandras lösningar, genom virtuella klassrum där elevernas projekt är tillgängliga och kontinuerligt uppdaterade. Längre fram i denna text kommer ett exempel på hur detta kan fungera i programmeringsmiljön Scratch. För att uppmuntra eleverna, och utmana dem, att faktiskt träna aspekterna av problemlösning kan du använda flödesscheman som exemplet nedan.
Lärarens roll
Lektioner som till stor del bygger på problemlösning kräver en annorlunda lärarroll än till exempel vid lektioner med mängdträning av procedursförmåga. Det handlar om att förmedla för eleverna att vi tror på deras förmåga, och att det är de som förväntas vara problemlösarna snarare än läraren. I dessa fyra lektioner är tanken att läraren tar en mindre aktiv roll i problemlösandet och utmanar eleverna att bli uthålligare i sin process.
En metod som visats vara gynnsam är att istället för att fråga ”vad har du problem med?” när en elev räcker upp handen, är att möta eleven med frågan ”var är du i stegen?” med referens till figur 1. Vi ser två anledningar till detta. För det första handlar det om att göra lärarens arbetssituation hållbar i klassrummet. Eleverna behöver förlita sig mer på sin egen förmåga att lösa problem. Det ligger i uppgiftens natur att de kontinuerligt ska stöta på väl anpassade utmaningar som de förväntas lösa. Om normen i klassrummet är att söka hjälp från läraren när en uppgift inte har en känd lösning så innebär det att alla kommer räcka upp handen samtidigt. Det vill vi motarbeta med de olika stegen. För det andra behöver eleverna förstå att det de går igenom är en del av uppgiften. De kommer upprepade gånger bli frustrerade för att det inte fungerar på första försöket, men i fallet med programmering så handlar det ofta om att testa en lösning och sedan felsöka varför den inte fungerade exakt som tänkt. Vi vill därför förhandla fram en annan norm i sammanhanget, där det är okej att utmana elevers uthållighet vid problemlösning, öppenhet för vägar att ta sig an ett problem och förmåga att hantera när uppgifter kan tolkas och lösas på många olika sätt.
Det finns möjlighet att mellan lektionerna titta på elevernas projekt i studion för att kunna hitta intressanta uppslag till uppstarten av nästa lektion. Det kan t ex vara en elev som har gjort ett grundläggande misstag eller vars nästa steg är en viktig del av programmerings-kunskaperna. Om detta inte finns eller om läraren inte hinner med så skickar vi med ett sådant förslag som läggs in i klassens studio.
Programmeringsdidaktik
Modulens övergripande upplägg står på två ben, dels konstruktionism och dels code-sharing. Konstruktionismen är idén att elever bygger sin egen kunskap och modeller om världen omkring sig. Inom konstruktionismen tror man att det mest effektiva lärandet sker i skapandet av faktiska objekt, och förespråkar därför att arbeta med större projekt där eleverna måste skapa sina egna kopplingar mellan olika områden för att lösa problem[1]. Det är då viktigt att läraren och aktiviteten agerar mer som guide och stöd snarare än ger detaljerade steg-för-steglösningar. I denna modul dras detta perspektiv till sin spets när eleverna i lektion 3 och 4 ombeds konstruera sina egna spel i syfte att utveckla sitt datalogiska tänkande. Det andra benet, code-sharing, handlar om att skapa en kultur och en infrastruktur så att eleverna kan söka stöd i varandras lösningar och göra paralleller till sina egna problem. Genom att analysera andras lösningar får de ett fönster till ett stort utbud av typer av kopplingar som är möjliga att göra snarare än att likrikta allas lösningar i linje med lärarens förslag. Under arbetet med modulen kommer du att hitta tillfällen där du uppmuntras att lyfta elev-exempel till helklassdiskussion, eller där du förväntas uppmuntra eleverna att själva utforska varandras lösningar genom det gemensamma digitala klassrummet i Scratch.
Uppgifterna i denna lektionsserie bygger på tre olika programmeringsdidaktiska praktiker, som på engelska benämns tinkering, making och remixing. Detta har visats vara praktiker som används både av noviser som är i processen att lära sig att koda och av yrkeskunniga när de möter ett nytt problem som ska lösas med hjälp av programmering. Vi går igenom dessa tre i följande stycken.
Första lektionen i serien bygger på tinkering. Tinkering innebär att eleven får ett stycke färdig, oftast fungerande, kod och får sedan i uppdrag att testa att byta ut mindre saker i koden för att lära sig mer om hur helheten eller olika delar av koden fungerar. I ett konkret exempel ifrån lektion 1 så får eleverna tillgång till ett program som ritar en kvadrat. Eleverna får sedan i uppdrag att ändra längden på sidorna samt vinklarna i hörnen genom att ändra i koden. Eleverna ska då upptäcka hur instruktionerna i koden genomförs stegvis och i bestämd ordning. De får också inblick i hur just de raderna (blocken) kod påverkar i detta fall pennan som ritar kvadraten. De får också möjlighet att lära sig mer om varandras kod genom att allas kod är tillgänglig för andra genom code-sharing via det digitala klassrummet. På så sätt ges möjlighet att lära av andra elever som kanske löst ett problem man själv har haft svårt med. Var noga med att skapa pauser i elevaktiviteten där ni stannar upp och tittar på särskilt intressanta exempel på lösningar till uppdragen. I varje Scratch-projekt i lektion 1 finns ett antal lämpliga reflektionsfrågor du kan utgå ifrån vid helklassdiskussioner.
Lektion 2-4 bygger i första hand på making. Making innebär att eleven själv ska konstruera kod, först i enkla och avgränsade problem och sedan i mer avancerade och öppna. Eleverna tvingas då att fördjupa sin förståelse för kod-exempel som de använt i lektion 1 så att de kan kombinera dem på nya sätt när de skapar sina egna unika program. I konstruktionen finns ett lärande som bygger på att lösa problem och ta med sig erfarenheter från de situationerna. Denna typ av aktivitet är antagligen vad många associerar med att programmera, att skapa egen kod.
Lektion 3 och 4, där eleverna arbetar med sina egna spel, ingår även moment av remixing. Remixing innebär att eleven ska sätta sig in färdig kod, sin egen eller andras via code-sharing, och fundera över hur denna kan återanvändas i ett nytt sammanhang med mindre anpassningar. I dessa moment så går eleverna in i en utvald elevs program för att förstå hur hen har löst ett problem som är aktuellt för alla eller många av eleverna. Syftet med dessa moment är att utmana elever att se andra lösningsstrategier och förbli öppna för alternativa idéer. Det används som ett sätt att ge ny energi till lektionen, som eventuellt avstannar lite för att många fastnat på specifika problem. Vi vill få eleverna att tänka nytt, och uppmuntra att de tittar på andras lösningar för att få inspiration till sin egen. Om det behövs, kan detta även användas som en nivåanpassning för elever som har svårt att starta från noll och skapa något. Hänvisa dem då till ett halvfärdigt eller begränsat spel och be dem att utveckla det ditt en färdig produkt.
Den digitala tekniken
Programmeringsmiljön som är utvald att exemplifiera principerna i denna modul är Scratch. Scratch är en så kallad visuell programmeringsmiljö, eller blockprogrammeringsmiljö. Det innebär att man primärt arbetar med att kombinera färdiga block som får en virtuell karaktär, kallad en sprajt, att agera enligt instruktioner. Eleverna behöver då inte kunna programmerings-språket utan kan upptäcka det allt eftersom de använder det. Det beror på att blocken bara går att kombinera på förutbestämda sätt. Detta signaleras genom formen på blocken, och kan liknas lite vid att lägga ett pussel. Figur 2 visar hur några olika block kan kombineras, notera särskilt formen på blocken som indikerar var de kan sättas och färgen på blocken som indikerar dess funktion. Denna typ av programmeringsmiljö är främst tänkt att användas som en introduktion till programmering, men kan också utnyttjas till att skapa simuleringar och lösningar till matematiska problem när eleverna väl lärt sig grunderna.
Scratch körs enklast direkt i en webbläsare på en dator eller surfplatta med internet-uppkoppling. I klassrumsförsök har dock datorer visats fungera bäst, då muspekaren ger en överlägsen precision i arbetet med blocken. En fördel med att Scratch körs online är att elevernas program kan göras direkt åtkomliga för alla i klassen. Du som lärare har möjlighet att skapa ett lärarkonto i Scratch och sedan samla dina elever i olika virtuella klassrum. I detta klassrum distribuerar du sedan uppgifterna, och ser till att eleverna gör sina program tillgängliga för resten. Du får då möjlighet att titta in i varje elevs projekt och följa deras framsteg på samma sätt som eleverna får möjlighet att se exempel på hur deras klasskamrater har löst liknande problem som de själva står inför.
I framtagandet av dessa lektioner har vi använt oss utav skärminspelningar. Det är inget som krävs för att jobba mot målen med lektionerna, men har visats vara ett utmärkt utvärderingsverktyg. Så som ett sätt att få inblick i elevernas utveckling av deras problemlösningsförmåga, och ett potentiellt underlag för bedömning, uppmuntrar vi att testa datorernas inbyggda skärminspelningsfunktion. Du får då en videofil som resultat som fångat allt som hänt på skärmen under lektionen, samt de muntliga resonemang eleven fört.
Det matematiska innehållet
De programmeringsbegrepp som är i fokus i lektionerna är till stor del grundläggande för alla programmeringsspråk. Dessa är indata, utdata, variabler, villkor, villkorssatser och loopar. Dessa återkommer i varje programmeringsspråk och är en utgångspunkt för att lära sig att skapa instruktioner som en dator kan följa. Att programmera innebär att skapa algoritmer av dessa grundläggande funktioner som en dator kan förstå. Att skapa lösningar på problem som en dator kan förstå och genomföra kallas för algoritmiskt tänkande.
Utdata är resultat av ett program som ofta kommuniceras ut till användaren när programmet körs. Det kan vara till exempel en fråga som programmet ställer till användaren, eller resultatet av en beräkning som användaren vill ha svar på. I lektion 2 används ett block som heter säg för att kommunicera utdata till användaren[2].
Indata är information som en tänkt användare av programmet/spelet matar in då programmet körs. Det kan vara till exempel i form av text eller siffror, men också tangenttryckningar eller att peka med muspekaren. Detta kräver att programmet väntar på, eller på något sätt ber om, indata från användaren. Ett inledande exempel som används i lektion 2 är frågeblocket. Med frågeblocket kan programmeraren instruera datorn att ställa en fråga (en form av utdata) till användaren och vänta på ett svar. När användaren matar in sitt svar sparas denna i en variabel som kallas svar som kan användas i koden.
Variabler är sätt att lagra information, åtminstone temporärt, så att den kan användas i till exempel olika beräkningar. Det kan vara i form av svar-blocket som i exemplet i stycket innan, eller i form av egenskapade variabler . Variabler kan sedan användas till exempel för att hålla reda på poäng i ett spel, där spelaren får poäng för till exempel rätt svar på en fråga.
Variabler går också att använda i relation till villkor uppställda i en villkorssats . Det innebär att om en variabel uppfyller ett visst villkor, så utförs vissa instruktioner, och om villkoret inte uppfylls så utförs andra instruktioner. Dessa satser kallas ibland if-satser, och är den huvudsakliga metoden en programmerare har att bygga sina program med. Ett konkret exempel är i lektion 2 där programmet ska testa om det svar spelaren anger är större eller mindre än 5. Om svaret uppfyller villkoret (om svar > 5 är sant) så kommer sprajten att säga ”Det är större än 5!”, och om svaret inte uppfyller villkoret (om svar > 5 är falskt) så säger sprajten ”Det är mindre än 5!”[3].
Loopar är sätt att upprepa delar av kod. Det innebär att vissa instruktioner genomförs, i sin ordning, flera gånger om tills ett villkor uppfylls. Det skulle till exempel kunna vara en variabel som fungerar som en nedräkning, där 1 subtraheras från variabeln varje gång instruktionen upprepas fram tills variabeln är lika med noll. Loopar används för att förkorta och förenkla kod, och upprepade beräkningar är något som datorer gör mycket effektivare än till exempel människor. I lektion 2 används loopar för att upprepa hela koden, så att programmet startar om hela tiden, för att göra det mer som ett spel. Koden i exemplet från lektion 1, där en penna ska rita en kvadrat, kan förenklas med hjälp av en loop. Istället för att dra in varje block så många gånger som det behövs, räcker det med att upprepa instruktionerna för sida och hörn fyra gånger, se jämförelsen i figur 3.
Under och efter varje lektion:
- Spegla din egen undervisning i grundtanken med konstruktionismen, vilken roll spelar skapandet av ett program i elevens utveckling? Vilka unika möjligheter ges av att eleverna ombeds arbeta med ett större projekt under längre tid?
- Reflektera över hur du kan skapa normer i klassrummet som gör praktiken med de blå pilarna blir till en naturlig del i deras problemlösningsstrategi.
[1] Du kan läsa mer om konstruktion som grund för lärande i till exempel Papert, S. (1982). Mindstorms: children, computers and powerful ideas. London: Harvester Press.
[2] I lektion 1 ritar sprajten geometriska figurer som en form av utdata, för att få fram dessa rit-block måste du lägga till dem i ditt verktygsfält genom att klicka på knappen längst ner till vänster i verktygsfältet.
[3] Se lösningförslag i slutet av texten
Lösningsförslag till uppgifterna i lektion 2
Fördjupningsuppgifter