Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
251 lines (203 sloc) 20.7 KB

Kurs: Programmering för lärare F-9 i matematik och teknik

Uppgift på kursen Att vara lärare i högre utbildning

av Mikael O. Bonnier

Jag påbörjar utvecklingen av en kurs i programmering för främst grundskollärare i matematik och teknik. Jag försöker då se till att bl.a. Högskoleförordningen, kapitel 6 § 15, om kursplaner, följs. Min ursprungliga målgrupp var redan verksamma och legitimerade lärare, men man kan även tänka sig denna kurs för blivande lärare. Kursen är tänkt att vara på 7,5 hp och gå på halvfart. Finns det många sökande kan man dela upp kursen i flera -- för olika stadier och ämnen. Man kan ha en gemensam programmeringsdel och sedan ha olika varianter för matematik- respektive tekniklärare. Vad som är möjligt och lämpligt att lära ut på olika stadier skiljer sig.

Jag har själv undervisat årskurs 3-9 i trä- och metallslöjd och 7-9 i matematik, fysik, kemi, biologi, teknik och bild. Jag har även undervisat på gymnasiet i matematik, fysik och teknik, och på högskolan i programmering. Jag har varit aktiv i flera år i ideella organisationer som ger läxhjälp till grund- och gymnasieelever i t.ex. matematik (Röda korset och Mattecentrum), samt i en annan ideell organisation som undervisar barn i programmering på flera orter i världen: CoderDojo (finns ett stenkast från Lärarutbildningen, MAH). Jag har gått en kurs "Matematik för lärare" vid Lunds universitet, och denna kurs "Programmering för lärare" skulle vara liknande, men om programmering.

Man kan stöta på barn som kan klara många övningar och kan skriva ganska avancerade program. Oftast har de föräldrar som kan programmering. Man kan även se barn som går igenom hur man löser programmeringsuppgifter på YouTube. De provar sig ofta fram och ser vad som fungerar.

Numera använder man ofta blockprogrammering för att lära barn programmering. Det kräver bara att man kan läsa lite text på blocken eller att man känner igen dem på form, färg eller symboler. Man behöver bara skriva in lite text för egna namn och för sådant programmet skall skriva ut. Man kan bara sätta ihop blocken till körbara program och slipper många småfel. De flesta programspråk för vuxna använder ovanliga specialtecken: ^~!#&\ o.s.v. Man ser vilka block man kan välja och behöver inte memorera ord. Blockprogramspråken har oftast texten på många valbara mänskliga språk, vilket är en fördel nu när många har annat modersmål än svenska. Man kan även ganska lätt göra egna översättningar. Orden i programspråk för vuxna är alltid på engelska, eller kryptiska symboler i något enstaka fall.

När man undervisar hela klasser måste man använda en annan strategi än om man undervisar barn enskilt, ty man har inte möjlighet att svara på alla frågor som kan uppstå. Man behöver i början något system som ger uppgifter på en lagom nivå och som rättar automatiskt. Code.org har ett sådant system och de har olika kurser. Lärarna borde gå igenom deras accelererade kurs på 20 h -- den är även bra för elever och finns översatt till många språk. Då lär man sig ett blockprogramspråk, Blockly, och gör olika uppgifter som att rita olika saker med program eller konstruera program som styr en figur genom en labyrint. Datorn kan se om ens program ritar rätt eller kommer fram och ser om man använder fler block än nödvändigt. Man kan lära sig om villkor, iterationer (d.v.s. upprepningar), procedurer och variabler med denna 20 h-kurs. Dock lär man sig inte om stränghantering och listor. Texter i datorer kallas sedan länge strängar -- det syftar möjligen på en tråd med pärlor, vilka motsvarar bokstäverna. Exempel på en lista är en inköpslista och sedan finns det procedurer och funktioner för att lägga till och ta bort elementen (d.v.s. varor i fallet med inköpslista). En viktig del i detta delvis automatiserade kursavsnitt är att man får hjälp av programmeringslärare medan man gör dessa uppgifter. För att examinera att studenterna kan 20 h-kursen på Code.org kan de göra liknande uppgifter live så att man ser att studenterna klarar att lösa uppgifterna själva, d.v.s. en sorts muntlig tentamen eller praktiskt prov.

Efter detta kan man lära sig ett snarlikt system, Scratch 2, för att utveckla program helt fritt. Man kan även lära sig MIT App Inventor 2 för att utveckla mobilappar med hjälp av Blockly. Senare kan det vara intressant att lära sig textprogramspråk: t.ex. Python eller JavaScript. Att skriva textprogram som gör lika avancerade saker som de barn kan skriva i Scratch är dock ganska svårt. Scratch kallas ibland ett superhögnivåspråk, men det gäller bara vissa saker som har med bild och ljud att göra -- resten är primitivt, just för att barn skall lära sig logik och programmering. Scratch bygger på en lång tradition vid MIT som började med Seymour Papert, som i sin tur är influerad av Piaget. Det är Mitchel Resnick som är huvudansvarig för Scratch.

Scratch har en unik fördel som inget annat system för unga programmerare har: det är lättare att skapa nya processer (ä.k. trådar) än att inte göra det. Man kan t.ex. skriva program som simulerar myror, trafik och gas, där varje aktör (myra, fordon, molekyl) kör egna processer. Redan ScratchJr för F-1 har möjlighet till flera processer och att skicka meddelanden mellan dem. ScratchJr har många begränsningar och saknar listor, vilket gör att man vill gå över till Scratch 1.4 eller Scratch 2 när barnen kan läsa lite. Jag var testare av ScratchJr när det utvecklades.

Kunskaper i programmeringssystemen görs med inlämningsuppgifter som man även har muntligt förhör på. Dels kan man utveckla varianter av klassiska datorspel som Pong, Snake och Tetris, dels program som eleverna kan köra för att lära sig matematik & teknik. I tekniken bör man kombinera programmering med elektronik för att göra robotar och olika apparater. Man kan i viss mån göra apparater med Scratch och vanliga laptoppar, t.ex. tidtagare som mäter när man passerar olika datorer, ty man kan märka att något rör sig framför kamerorna, och man kan kommunicera via Internet med s.k. molnvariabler.

Både Scratch.MIT.edu och Code.org har möjlighet att samla elevernas resultat i en lärarportal.

Innehållet i kursen skall vara sådant att lärarna klarar av att undervisa i den programmering som ingår i kursplanerna för matematik och teknik för grundskolan. Jag har läst igenom dessa ändringar i kursplanerna på Skolverket. Förutom att kunna undervisa så kan lärarna själva använda programmering för att lösa uppgifter i sitt arbete. Jag har t.ex. själv utvecklat program för massutskick av e-post till elever och föräldrar där varje e-brev har ett delvis unikt innehåll som hämtas från en databas. Man kan utveckla motsvarande system för SMS. Nu finns det troligen färdiga system man kan köpa, men de gör kanske inte precis det man vill. Man kan också utveckla program för att öva in namn på eleverna och för att hjälpa till med undervisningen.

Det finns en bra videoserie om Datavetenskap: Crash Course Computer Science. Varje video är ca 10 min. Dock tar den inte upp programmering mer i detalj.

Jag anser att kurser skall vara planerade tidsmässigt så att man inte får för stor arbetsbelastning helt plötsligt. Man kan ta reda på hur lång tid kursböckerna tar att läsa genom att hitta talböckerna, ty nästan alla kursböcker finns inlästa. Övriga texter kan man mäta tiden för genom att omvandla dem till ljudfiler. Videofilmer som ingår vet man tiden på. Kursmaterialet och uppgifter skall vara jämnt utspridda över kursen. Det finns t.ex. Scratch 2.0 Sams Teach Yourself in 24 Hours -- där tar varje kapitel med övningar 1 h, men jag har inte undersökt om den är lämplig som kursbok.

Jag har läst en hel del böcker om programmering och även barnböcker om programmering. Tänkbara kursböcker är På äventyr med Raspberry Pi av Carrie Anne Philbin, Hjälp ditt barn med programmering av Carol Vorderman, Building Android Apps in Easy Steps av Mike McGrath, Android-apps uden programmering av Kristian Langborg-Hansen. De två senare böckerna handlar om MIT App Inventor 2 och Blockly. Att den sista boken heter "utan programmering" beror på vissa påstår att blockprogrammering inte är riktig programmering, men det är programmering -- det är bara en annan sorts redigerare. Man skulle med fördel kunna använda Raspberry Pi (en billig $35-dator), men många skolor saknar idag skärmar. Dock kan boken På äventyr med Raspberry Pi ändå användas, ty de flesta av de programmeringssystem som presenteras i den finns även till andra datorer. Dock kan man för tekniklärarna låna ut Raspberry Pi:er och andra kortdatorer som Microbit och Arduino, och eventuellt robotdelar.

På Linnéuniversitetet kommer Learn to Program with Scratch: A Visual Introduction to Programming with Games, Art, Science, and Math av Majed Marji att användas på kursen Introduktion till Programmering för Grundskolan.

Mål

Det finns fler mål på kursen och detta är bara ett exempel: Att kunna motivera en kombination av hårdvara, programspråk och utvecklingsmiljö (d.v.s. ett programmeringssystem/verktyg) av dem som presenterats på kursen. Man behöver kunna motivera valt system för programmering för elever och föräldrar eftersom vissa redan har favoritsystem.

Examination

Det finns fler examinationer på kursen -- denna är för exempelmålet ovan. Skriftlig inlämningsuppgift. Studenterna får olika programmeringssystem som de skall motivera. Detta är en sen uppgift på kursen. Det är en uppgift som testar högre förmågor som argumentationsteknik och att man verkligen förstår systemen. Jag tänker mig att det finns bara underkänt och godkänt som betyg, så det gör inte så mycket att de utdelade programmeringssystemen är olika komplicerade.

Programmeringssystem

Det finns många olika system för programmering med barn i skolåldern och även på förskola, t.ex. ScratchJr, Scratch 2, MIT App Inventor (Blockly), Pocket Code (Catrobat), Micro:bit (Blockly och JavaScript), Micro:bit med Mu (MicroPython), Koda.nu (JavaScript i webbläsare), Kojo (Scala), Arduino med Arduino (C++), Arduino med Scratch, Micro:bit med Scratch, Lego-robotar med kompilerad Scratch (egentligen Snap!) eller LabView, Code.org (Blockly) o.s.v.

Bilaga: Föreläsning som exempel på lösning: Scratch 2 på gymnasiet

I enlighet med: Diskussion i gruppen Matematikundervisning på Facebook.
Det var inte i frågeform där. Jag har lagt till många frågor och Scratch 2 har aldrig diskuterats som programmeringssystem på gymnasiet där. Trots att detta är en kurs för grundskollärare kan det vara intressant att utreda om ett system avsett för barn och yngre ungdomar går att använda på gymnasienivå. Vissa punkter nedan måste diskuteras senare i kursen efter att studenterna lärt sig dessa begrepp.

Duger verktyget för alla kurser på gymnasiet?

Scratch 2 duger kanske inte för alla kurser i programmering, ty man kan inte namnge data detaljerat. Scratch har inte bitvisa operatorer (men jag och andra har utvecklat sådana med hjälp av flyttalsfunktionerna). Vissa har implementerat emulatorer för processorer och gamla spelkonsoler, t.ex. CHIP-8, samt interpreterande och kompilerade programspråk, t.ex. LISP respektive FORTH -- det senare skapat av mig. Även 3D-spel typ DOOM finns, trots att det inte finns någon inbyggd 3D-grafik i Scratch utan bara pennor, vilka kan vara osynliga. Dock är Scratch inte lämpat för extremt avancerad programmering, utan det är mer en sport att skriva avancerade program ändå. Stora program är också svåra att hantera genom att släpa skript på skärmen.

Enkel installation?

Det är bara att gå in på http://scratch.mit.edu/ i webbläsaren (om den har Flash) och börja skapa. Man kan också installera en offline-version, men det är lite krångligare, ty Scratch 2 använder Adobe Air -- dock har förhoppningsvis nätverksteknikerna redan installerat allt.

Går det fort att komma igång med verktyget?

Jo, det startar snabbt och är lätt för nybörjare i och med att man kan se kategorier och tillgängliga block i dem. Det har inbyggd grafikeditor för bitmap- och vektor-grafik, samt ljudredigerare. Det finns inbyggda bibliotek med bakgrunder, sprajtar, ljudeffekter och musikinstrument. Scratch 1.4 och 2 är lämpat från 8 år och ScratchJr från 5 år.

Enkel syntax och enkelt användargränssnitt?

Scratch har en teateranalogi med scen, skådespelare (sprajtar) och kostymer. Att bygga program med block behöver man också lära sig. Man kan välja bland många naturliga språk. Man kan bara sätta ihop blocken till körbara program -- man undviker alltså syntaxfel. Man slipper skriva långa texter och memorera kommandon. Man kan enkelt ändra namn på variabler m.m. Det går inte att söka efter text. Undo med flera nivåer saknas. Man kan tyvärr inte stega sig igenom koden.

Det finns ett alternativt gränssnitt för att utveckla Scratch-kod som text: Tosh.

Lätt att skapa roliga/relevanta animeringar?

Ja, men det finns inte något automatiskt system för att skapa filmer med hjälp av enbildstagning. Man kan spela in 1 minut långa filmer från Scratch 2. Man kan utveckla spelprogram som reagerar på tangentbordet, musen, mikrofonen (ljudnivå) och kameran och man kan ändra bild och ljud direkt. Det finns både musikinstrument och ljudeffekter.

Kan verktyget lätt skapa diagram och tabeller?

Man kan spara i listor och dessa kan exporteras (och importeras) från redigeringsläge. Dessa kan sedan plottas med andra program, t.ex. Excel. Man får skriva program för att rita diagram -- eller hitta färdiga kodbibliotek. Koordinatsystem är som i matematiken, men vinklarna är som på en kompass, vilket retar matematiker. Det finns bakgrunder som är koordinatsystem.

Stödjer verktyget villkorssatser och iteration i form av loopar och/eller rekursion?

Ja, dock finns bara rekursiva procedurer och inte rekursiva funktioner som returnerar värden.

Hanterar verktyget underprogram i funktionsform?

Man kan ha procedurer med argument, men de kan inte returnera värden. Man kan använda variabler i objekten sprajtar för att lagra resultat.

Finns stöd för att använda funktioner som argument till andra funktioner/underprogram?

Ja, man kan skicka som meddelanden och man kan ha strängar (d.v.s. texter skapade av programmet) som argument till procedurer som sedan blir meddelanden. Dock kan "skicka meddelande" inte returnera värden eller ta argument.

Stabilt?

Jo, det är stabilt och har ett stort utvecklarteam och flera miljoner användare över hela världen. Scratch är mer buggfritt än liknande system: t.ex. Snap!.

Skyddat privatliv?

Jo, man kan använda mikrofonen i Scratch-program, men den kan bara registrera ljudnivån och ej frekvenser. Man kan använda kameran för att visa bilder på skärmen, men man kan inte läsa av skärmen förutom med en extremt långsam metod (matcha exakt färg på pixel) som skulle ta många timmar. Scratch och dess officiella community är konstruerat för att vara tryggt för barn. Det är t.ex. väldigt svårt att mobba någon utan att bli upptäckt, ty det finns inga dolda kommunikationssätt, och man kan inte frysa ut någon genom att blockera, ty det går inte att blockera.

Är verktyget interaktivt, d.v.s. kan man skriva kommandon på en kommandorad eller liknande och få ett svar?

Se: REPL
På sätt och vis. Man kan t.o.m. redigera program medan de kör och ändringarna slår igenom direkt. Man kan släpa in Scratch-kod m.h.a. ryggsäcken, men man kan inte använda klistra in (Ctrl+V) för att klistra in Scratch-kod från andra program.

Kan eleverna lätt dela kod med varandra och läraren?

Jo, det finns klassrum och man kan remixa andras program. Jag har dock ej testat klassrummen. Det finns en ryggsäck i online-redigeraren som gör att man kan transportera kod inom och mellan projekt. Det finns ett community där man kan få hjälp och man kan kommentera projekt. Projekt kan få beröm och kan hamna på första sidan, vilket är en stor ära: t.ex. Björnes äventyr.

Är verktyget rimligt vanligt? så att det finns mycket information om det på nätet

Jo, det är väldigt populärt och det finns inbyggd hjälp och ett stort forum och wiki, samt artiklar och böcker.

Är verktyget plattformsoberoende?

Jo, man kör Scratch 2 i webbläsare med Flash. Den tidigare versionen, Scratch 1.4, är ett desktopprogram, men finns även som app till iPad. Scratch 3 skall använda enbart JavaScript och klarar sig alltså utan Flash i Webbläsaren. Offline-versionen av Scratch 2 finns till Mac OS X, Linux, Windows, samt en speciell offline-version, till Raspbian på Raspberry Pi 2-3. Scratch 1.4 finns till Mac OS X, Linux, Windows och Raspbian på Raspberry Pi 0-3.

Körbart i webbläsare?

Jo, och om man bara vill köra program behöver man inte ha Flash, ty det finns ett system för enbart körning som använder enbart JavaScript: Phosphorus. Det finns ett liknande system för körning i mobiler och surfplattor: Sulfurous.

Användbart på högskola/arbetsliv?

Tyvärr inte, men det finns ScratchX som gör att man kan använda Scratch 2 till vad som helst genom tillägg i webbläsaren. I framtiden kommer kanske Scratch att användas på laboratorier för icke-professionella programmerare som ändå behöver utveckla program då och då.

Väl utvecklade kodbibliotek som innehåller funktioner för matematik/naturvetenskap?

Inte som standard, men det går att utveckla. Dock är det inte lika lätt att importera kodbibliotek i Scratch som i t.ex. Python, ty man måste släpa in dem eller starta från ett mallprojekt.

Strömförbrukning/Snabbhet?

Scratch är ett tolkat språk och alltså ganska långsamt. Scratch har dessutom fördröjningar så att t.ex. spel skall gå med samma hastighet på alla datorer. Dock kan man stänga av fördröjningarna genom att slå på turbo-mod. Det finns ett kompilerande system till Scratch 2 kallat Phosphorus som enbart kräver JavaScript och som är mycket snabbare.

Öppen källkod?

Ja, och gäller Scratch 3, Scratch 2, Scratch 1.4, ScratchJr. Att det är öppen källkod är en fördel eftersom det är mindre risk att det försvinner eller plötsligt blir dyrt att använda.

Flera processer?

Ja, och det är mycket lätt att skapa nya processer och för barn är det naturligt att skapa många processer.

Flera objekt?

Jo, de kallas sprajtar. De är dock inte lika generella som objekt i t.ex. Java eller C++. Sprajtarna kan dock klonas i Scratch 2, men inte i Scratch 1.4 eller ScratchJr.

Strängar?

Ja, men det finns inte färdiga funktioner för att plocka ut understrängar ur strängar utan det måste göras med program. Man kan omvandla listor till strängar automatiskt genom att använda en lista i ett strängsammanhang.

Listor?

Ja, men inte multidimensionella eller listor med listor. Det finns många inbyggda procedurer och funktioner för att hantera listor i Scratch 1.4 och Scratch 2. ScratchJr har inte listor.

Koppling till hårdvara?

Ja, via ScratchX kan man koppla till hårdvara, t.ex. Micro:bit och Arduino, eller talsyntes, eller 3D-skärm. Dock fungerar inte allt med alla operativsystem. Det finns speciella versioner av Scratch 1.4 för Lego-robotar och Raspberry Pi. Det finns en speciell version av Scratch 2 för Raspberry Pi som kan använda dess pinnar och ett tillbehör som heter Sense HAT.

Koppling till Internet?

Ja, via ScratchX. Man kan t.ex. läsa Twitter och princip göra allt som en webbläsare kan göra om man skriver plugginner i JavaScript: t.ex. SpeakTweet.

Preppad?

Scratch kan användas offline och man kan ladda upp projekten till annan server.

Pris?

Gratis och Scratch 1.4 kan köras på Raspberry Pi Zero som kostar ca 150 kr med kablar, men utan laddare, minneskort, skärm, tangentbord och mus.