Veiledning til programmering valgfag

Fagets egenart

Å gi elever grunnleggende ferdigheter i programmering er med på å forberede dem til fremtidig arbeidsliv og samfunnsliv. Nesten alle områder i samfunnet preges av økt automatisering, for eksempel innen helse, fiskeri, transport og varehandel. Mange av fremtidens jobber vil kreve forståelse for hvordan digital teknologi fungerer. Kunnskap om programmering er viktig for å forstå muligheter og begrensninger ved teknologien som omgir oss. Programmering innebærer å skape digitale produkter, ikke bare å bruke dem. Denne kompetansen kan nyttiggjøres innen en rekke fagområder, og slik bidra til å styrke og utvide mulighetene i andre fag på skolen.

Elevene skal gjennom valgfaget lære å programmere. Elever som velger faget, skal designe og utvikle egne dataprogrammer, både individuelt og sammen med andre. De skal også forbedre eksisterende produkter. Valgfaget legger til grunn en bred forståelse av fagområdet programmering. I dette inngår prosessen fra å identifisere problemer og utforme mulige løsninger, til å lage kode som kan forstås av en datamaskin, systematisk feilsøke og forbedre denne koden, og dokumentere løsningen på en forståelig måte. Dette fører til at elevene opparbeider en forståelse av hvordan en datamaskin fungerer, og hvilke bruksområder den kan ha.

Faget bygger på elementer fra matematikk og naturvitenskapelige fag, og det åpner for å utforske verden gjennom simuleringer. Elevene kan også erfare nytten av datamaskiner ved å lage programmer som gjør utregninger knyttet til realfagene. Når flere utregninger skal gjøres, får de erfare hvordan programmer fungerer, samt hvor effektivt et program kan være. I tillegg styrker programmering sentrale ferdigheter i realfagene, f.eks. oppbygging av logiske resonnementer og feilsøking.

Hovedområdene modellering og koding

Valgfaget er delt inn i to hovedområder: modellering og koding. Hovedområdene må ses i sammenheng. Modellering og koding er ikke adskilte aktiviteter, og eleven vil som oftest veksle mellom disse hovedområdene når de utvikler programmer.

Modellering
Modellering handler i programmering om prosessen med å komme fram til en overordnet beskrivelse eller modell av det som skal utføres av dataprogrammet. Til dette hører kunnskap om hvordan datamaskiner virker, og hva slags problemer som er egnet for å løse ved programmering. Elevene vil gjennom arbeidet med modellering få mulighet til å utvikle algoritmisk tankegang og arbeide med problemløsning.

Modellering av matematiske og naturvitenskapelige fenomener er også en sentral del av hovedområdet. Modellering i denne sammenheng handler om å lage en forenklet framstilling (en modell) av virkeligheten og representere den ved hjelp av en datamaskin.

Koding
Koding er prosessen med å skrive og utvikle programmer ved hjelp av programmeringsspråk, og dette krever i stor grad at elevene bruker en datamaskin eller andre programmerbare enheter. Hovedområdet koding er nært knyttet til selve aktiviteten å skrive programkode i ulike programmeringsspråk. Elevene skal anvende vanlige prinsipper for utforming av programmer og forstå hensikten med dem.

Arbeidsmåter i programmering

Det er et mål at elevene kjenner til og bruker god programmeringsskikk, slik som å kommentere og dokumentere eget arbeid underveis. God programmeringsskikk inkluderer også vanlige måter å organisere arbeidet med programutvikling på i næringslivet. Punktene nedenfor beskriver noen slike arbeidsmåter i programmering.

Ulike tilnærminger til programutvikling

Det er vanlig å veksle mellom to hovedtilnærminger til utvikling av programkode: ovenfra-og-ned og nedenfra-og-opp. Denne veiledningen refererer ofte til ovenfra-og-ned ved at vi legger vekt på å begynne med en overordnet problemstilling, for så å bryte denne ned i mindre delproblemer som kan løses ved hjelp av programmering. For eksempel skal elevene lage et ping-pong-spill. De kan begynne med å beskrive hvordan et slikt spill virker, hvilke funksjoner spillet skal ha (ball som spretter, fart, vinkler, osv.), og deretter programmere løsninger for de ulike delene av hovedproblemet (hvordan lage ping-pong-spill).

I praksis vil elevene like ofte arbeide nedenfra-og-opp ved at de starter med å utvikle små programmer som løser mindre del-problemer, og siden bygger disse sammen i enheter som løser mer komplekse problemer. Et eksempel er å gå fra å lage et program som simulerer en ball som spretter, til å utvikle et ping-pong spill.

Iterativ og inkrementell prosess

Utvikling av dataprogram innebærer som regel å repetere en prosess eller deler av prosessen for å komme stadig nærmere et ønsket mål eller et resultat. Hver repetisjon kaller vi en iterasjon, og for hver iterasjon legger eleven til noe (mer funksjonalitet, forbedret design, osv.). Det kaller vi en inkrementell prosess.  Det innebærer at programmereren ofte tester ut deler av programmet og gjør justeringer i modellen og designet fortløpende.

 
De ulike fasene i en utviklingsprosess for å lage et dataprogram.

Figuren viser ulike faser av en programutviklingsprosess. Først må vi se på hva vi ønsker å lage, og utarbeide en kravspesifikasjon ut ifra det. Her det det viktig å ta hensyn til hva programmet skal gjøre, og hvem som skal bruke det. Så må programmet planlegges før vi kan sette i gang med implementering. Da er det viktig å tenke på hvordan programmet senere skal kunne vedlikeholdes eller videreutvikles, når vi bestemmer strukturen. Når programmet er implementert, må vi teste om programmet fungerer og gjør alt det skal. Ofte vil vi erfare at noen ting fungerer og noen ting fungerer ikke, og da må vi evaluere hvordan vi kan forbedre og ferdigstille det som gjenstår. Når det er gjort, må vi implementere de nye spesifikasjonene og rette feil før vi så tester igjen. Denne prosessen gjentas frem til programmet fungerer slik det skal, og så kan settes ut i livet.

Valg av programmeringsspråk

Det finnes mange forskjellige programmeringsspråk. Alle har sine fordeler og ulemper, og det er viktig å velge et programmeringsspråk som egner seg til oppgaven eleven skal utføre. Vi deler dem ofte inn i blokkbaserte eller tekstbaserte programmeringsspråk, ut ifra hvordan kommandoene er representert. Blokkbaserte programmeringsspråk benytter seg av klosser som eleven setter sammen til større blokker og programmer, litt som å bygge med LEGO. Tekstbaserte programmeringsspråk består av tekstbaserte kommandoer, og det er viktig å følge korrekt syntaks for å få programmet til å kjøre.

Læreplanen legger ingen føringer for hvilke programmeringsspråk eller verktøy for programmering som skal benyttes i undervisningen i faget, men det er et krav at elevene i løpet av skoleåret bruker minst to ulike programmeringsspråk i sitt arbeid. Det er spesifisert i læreplanen at minst ett av språkene skal være tekstbasert.

Ulike språk har ulike styrker og bruksområder, for eksempel er språket “JavaScript” mye brukt når man lager ting på nett, mens Lua er et språk som er mye brukt i spill-utvikling. I valg av programmeringsspråk som skal benyttes i valgfaget, bør du som lærer vurdere følgende:

  • Hva slags erfaring og kompetanse du selv har.
  • Hva slags kompetanse som er tilgjengelig i nærmiljøet (kollegaer på egen eller nærliggende skoler, ev. på videregående skoler, høgskoler og universitet i nærheten, IT-bedrifter du kan samarbeide med, osv.).
  • Hva slags oppgaver du tenker å arbeide med i faget (nettutvikling, roboter, dataspill, osv.).
  • Hvor vanskelig eller lett det er å komme i gang med de ulike språkene.

 Dersom læreren (lærerne) i faget har begrenset programmeringserfaring, kan det være lurt å starte med blokkprogrammering i Scratch og gå videre til tekstbasert programmering i Python eller JavaScript. Men det kan være gode grunner til å velge noe annet, for eksempel hvis skolen har investert i programmerbare roboter som Lego Mindstorms og Spheros eller mikrokontrollere som Arduino.  Elevenes erfaring og kompetanse vil også påvirke valg av programmeringsspråk, for eksempel kan de bruke mer avanserte, tekstbaserte språk etter hvert.

Elever og valg av programmeringsspråk

Etter hvert som elevene får erfaring med flere ulike programmeringsspråk, vil det å velge rett verktøy (språk) til oppgaven de skal løse, også være en viktig oppgave. Elevene kan gjerne bli bedt om å vurdere ulike språk når de skal løse en oppgave, og hvordan de argumenterer for sitt valg, kan være del av vurderingsgrunnlaget.

Samarbeid og delingskultur

Programutvikling gjøres sjelden av enkeltpersoner alene, blant annet fordi oppgavene kan være store og komplekse. Det er en utbredt kultur for å dele sitt arbeid med andre og å bygge videre på andres programkode. I industrien gjøres programvareutvikling ofte av et team av programmerere som jobber sammen på et prosjekt. Dette bør reflekteres i undervisningen i valgfaget. Flere av de praktiske eksemplene i kapittel 3 legger til rette for at valgfagsklassen deles i samarbeidsgrupper på 2-5 personer. Det er flere ting det er lurt å ta hensyn til i gruppeinndelingen. For eksempel kan faglig homogene grupper være både inspirerende og gi faglig utfordringer til elever på alle nivåer. I aldersblanda klasser kommer dette virkelig til sin rett. I tillegg kan det være lettere å gi tilpasset undervisning til alle elever, uavhengig av om de har hatt valgfaget tidligere eller ikke.

Det er nyttig å skaffe seg en oversikt tidlig over hvilke elever som har programmert tidligere, enten i andre skolefag, via Kodeklubben eller på egen hånd, og hvilke kompetanser disse elevene har. I tillegg vil noen elever ha faget for andre og tredje år.

Samarbeidsformer og delingskultur

En arbeidsmetode som er mye brukt i såkalt smidig utvikling kalles ‘pair programming’ der to programmerere sitter sammen på samme arbeidsstasjon for å skape kode. Paret har hver sin rolle som byttes hyppig: ‘sjåføren’ skriver kode mens ‘kartleseren’ holder et mer overordnet blikk og kontrollerer at paret beveger seg i riktig retning.

Andre samarbeidselementer kan være å tipse hverandre om nyttige ressurser knyttet til det temaet elevene jobber med. Læreren kan presentere en grunnpakke med ressurser, og i tillegg legge til rette for at elevene kan bidra med tips til nettsteder og ressurser som kan brukes til oppgavene. Tipsene kan for eksempel deles med klassen gjennom et samskrivingsdokument, eller som innlegg i et forum på fagsiden på skolens læringsplattform. Det finnes en rekke gode ressurser knyttet til programmering, og siden dette er et fag i utvikling, vil det også stadig være nye ressurser som dukker opp på markedet.

Samarbeid i programmering kan også være å bygge videre på hverandres eller andres kode. Det kan innebære å gi tilbakemelding på hverandres kode og programmer. For eksempel kan elevene dele spillene sine med de andre i klassen, etterfulgt av at andre elever spiller det, og gir tilbakemelding på sin spillopplevelse og setter ord på hva som var bra, og hvilke mulige forbedringer som kan gjøres.

Det er flere måter å stimulere en delingskultur i klasserommet på. For eksempel kan samskriving, inkludert kommentering og tilbakemelding på hverandres arbeid, være en arbeidsmåte. En annen måte er å få elevene til å sette ord på det de har lært gjennom små minipresentasjoner for gruppen eller i klassen. En slik minipresentasjon kan være å vise hvilken tag eleven bruker for å lage linjeskift i HTML, eller hvordan få Scratch til å gå ti skritt bakover. Det er vesentlig at elevene viser koden sin, forklarer den, samt viser hvordan det vil se ut når programmet kjører. Gjennom en slik deling vil elevene få inspirasjon av hverandres arbeid, erfare ulike løsningsmetoder gjennom praktiske eksempler og dele tips og triks. Minipresentasjonen kan være et fint utgangspunkt for en gruppesamtale rundt alternative løsningsmetoder eller om overføringsverdien av eget arbeid.

Det finnes mange delingsarenaer for programkode, og elevene kan gjerne lære å finne eksisterende programmer og dele sine egne programmer på slike steder. For eksempel kan eleven i Scratch dele sine produkter med andre brukere rundt omkring i verden og “remikse” hverandres programmer. Et annet eksempel er GitHub, et nettsted der programutviklere deler programkode og foreslår endringer i eksisterende programmer. Det kan være motiverende å få tilbakemelding på det du har laget fra andre ‘kodere’, enn fra dem du går på skole med.  

Algoritmisk tankegang

Det er et mål for faget at elevene utvikler algoritmiske tankegang og evne til å løse problemer systematisk. Begrepet viser til det engelske “computational thinking skills” som kan forklares som “å tenke som en informatiker”. Algoritmisk tankegang innebærer at elevene lærer å tilnærme seg problemer på en systematisk måte, og foreslår løsninger som de kan bruke datamaskiner til å løse helt eller delvis. Det vil si både

å tenke på hvilke steg som skal til for å løse et problem

å bruke sin teknologiske kompetanse for å få datamaskinen til å løse problemet

Algoritmisk tankegang innebærer å bryte ned store, komplekse problemer til mindre, mer håndterlige del-problemer. Det er en problemløsningsprosess som inkluderer å organisere og analysere data på en logisk måte og å lage fremgangsmåter for å løse komplekse problemer. Det handler også om å lage modeller av den virkelige verden og å generalisere løsninger slik at den kan anvendes til å løse lignende problemer. Denne måten å arbeide på er sentral i programvareutvikling, men kan også brukes som metode i mange andre sammenhenger og fag. Dette beskrives nærmere i eksempelet “Fra problem til delproblem”.

Fant du det du lette etter?

0/250
0/250

Tusen takk for hjelpen!