Jupyter notatbok i programmering

Etter at LK20 ble innført, er programmering blitt en del av det ordinære utdanningsløpet i flere fag, med matematikkfaget utpekt som hovedansvarlig for opplæring i programmering. Et slikt ansvar betyr at elevene i matematikkfaget både skal tilegne seg kunnskap i programmering ved å utforske matematiske kontekster, samtidig som programmeringen de lærer skal gagne samfunnet (Vidje, 2019).

Etter at LK20 ble innført, er programmering blitt en del av det ordinære utdanningsløpet i flere fag, med matematikkfaget utpekt som hovedansvarlig for opplæring i programmering. Et slikt ansvar betyr at elevene i matematikkfaget både skal tilegne seg kunnskap i programmering ved å utforske matematiske kontekster, samtidig som programmeringen de lærer skal gagne samfunnet (Vidje, 2019).

En utfordring for matematikklærere er å balansere opplæring i matematikk og opplæring i programmering. Hva elevene skal lære om programmering på hvert trinn er riktignok definert gjennom egne kompetansemål, men det kan være vanskelig å tolke hva disse kompetansemålene innebærer (Mæland & Myklebust, 2022). Spesielt fordi målene ikke alltid er knyttet til spesifikke matematiske tema. Det kan derfor være grunn til å tro at læreboka vil bli brukt som rettesnor for hvordan og når lærere skal inkludere programmering i undervisningen, siden læreboka for mange lærere fungerer som et bindeledd mellom kompetansemålene i læreplanen og den pedagogiske praksisen (Pepin et al., 2013).  

En progresjon for opplæring i programmering som gjenspeiler seg i de nye lærebøkene og tilhørende digitale læremidler i matematikk, er at elevene begynner med aktiviteter knyttet til analog programmering og de grunnleggende læringsmålene knyttet til algoritmisk tenkning allerede på småtrinnet. Deretter fortsetter de med blokkprogrammering i Scratch eller tilsvarende, før de begynner med tekstbasert programmering i løpet av ungdomstrinnet. Eksempelvis innfører både Maximum fra Gyldendal og Matemagisk fra Aschehoug Python fra 8. trinn. I bøker for videregående opplæring, som Aschehougs Matematikk 1T, møter elevene også Python.

Matematikklærere må med andre ord gi elevene grunnleggende opplæring i ulike programmeringsspråk, sørge for at undervisningen er i tråd med kompetansemålene og finne gode innfallsvinkler til arbeid med programmering, samtidig som mange selv må lære seg å programmere. Dolonen et al. (2019) konkluderte med at få lærere hadde kompetanse til å undervise i programmering, og understreket behovet for å finne frem til gode læringsressurser og undervisningsopplegg. Selv om det er grunn til å tro at mange lærere har økt sin kompetanse siden 2019, vil behovet for gode ressurser alltid være til stede. Hensikten med denne artikkelen er derfor å presentere en innfallsvinkel til arbeid med programmering for lærere på ungdomstrinnet, som har opparbeidet seg kompetanse i Python.

For selv om elever har tilgang på læreboka og eventuelle digitale ressurser, er det ikke uvanlig at lærere bruker andre opplæringsressurser i undervisningen (Lepik et al., 2015).  McEwan og Dubé (2015) påpeker i en undersøkelse om bruk av nettbrett i undervisning, at selv om det finnes mange gode oppgaver, nettsider og læringsvideoer, så kan det være problematisk for elever å bruke forskjellige ressurser samtidig. Spesielt utfordrende er det å sjonglere mellom kilder som formidler ulike typer fagstoff om matematisk innhold, grunnleggende opplæring i programmering, programkoder og tilhørende forklaringer. Hvordan lykkes da?  

For det første bør det være sammenheng mellom innhold i undervisning, oppgaver og vurderingssituasjoner, slik at elevene ikke selv må se hvordan ulike kilder relaterer seg til hverandre (Viberg et al. 2020, s. 10). For det andre er det viktig at det er sammenheng mellom design av aktiviteter, de digitale læremidlene og undervisningskonteksten for at integrering av digital teknologi skal være vellykket (Drijvers, 2015). Hvilke læremidler som brukes spiller derfor en avgjørende rolle og det er viktig at de valgte læremidlene inkludere både programmering og matematiske ideer samtidig. Dessverre viser aktuell forskning at dette ikke alltid er tilfellet (Viberg et al. 2020, s. 9).  Et verktøy som derimot gjør det mulig å kombinere matematiske ideer og programmering er Jupyter Notebook (heretter kalt Jupyter notatbok), et filformat som blant annet inkluderer Python programkoder.

Artikkelen vil videre vise hvordan en Jupyter notatbok ser ut og belyse noen muligheter filformatet gir for opplæring i programmering. I tillegg inneholder teksten eksempler på tilgjengelige programvarer, nettsider lærere kan bruke som opplæring, og materiell som kan brukes direkte i undervisning. Artikkelen er en utvidet versjon av artikkelen med samme tittel i trykket utgave av Tangenten.

Jupyter notatbok

Fordelen med en Jupyter notatbok, er at dette er en filtype som kan inkludere programkoder, tekst og illustrasjoner. Denne egenskapen gir elevene en ressurs hvor de kan samle oppgaver, forklaringer, nødvendig tilleggsinformasjon og muligheten til å programmere på et sted. For å gjøre dette mulig, har en Jupyter notatbok to typer celler, som vist i figur 1: Tekstceller og kodeceller.  

Figur 1: En kodecelle, etterfulgt av en tekstcelle med illustrasjon og forklaring av innholdet.

Tekstceller

I tekstcellene kodes det ikke, men skrives inn tekst, slik det gjøres i en vanlig teksteditor som Microsoft Word. Her kan læreren legge inn forklaringer og instruksjoner til elevene, og inkludere lenker og bilder, noe som ikke er mulig i en standard kodeeditor. I første omgang kan tekstceller brukes på samme måte som Word, for å legge inn tekst med enkel formatering. I tillegg kan man tilføye lenker, tabeller eller bilder. Figur 2 viser en slik tekstcelle:

Figur 2: Tekstcelle grensesnitt med valg for tekstformatering.

I motsetning til tekstprogrammer som Microsoft Word, er det ikke mulig å lage matematiske formler i tekstcellene. En mulighet er da å lage formler lokalt på PC, ta skjermbilde og legger bildet inn i tekstcellen. Sjekk ut dette dokumentet for en grundig gjennomgang av muligheter og begrensninger ved bruk av bilder i JuPyter notater.

Mer avanserte muligheter i tekstcellen

Hvis det er ønskelig med flere og mer avanserte muligheter, er det mulig å bruke markup språket «Markdown» brukes i tekstcellene, som gir penere formatering og mer kontroll over tekstcellene.  Markdown fungere slik at man bruker enkle kommandoer for å utforme teksten. «#» gir for eksempel en overskrift.

Markdown kan også brukes for å tilføye interaktive elementer som knapper eller felter som åpnes og viser ytterligere forklaringer eller informasjon dersom man trykker på dem. Introduksjoner til Markdown finnes mange steder på nett, for eksempel her. For brukermanualer med mer avanserte muligheter som er relevant, dersom man eksempelvis ønsker å lage oppgaveark, sjekk GitHub siden vår. Der finner du også informasjon og lenker til videoer med trinnvis gjennomgang av de vanskeligere stegene mot avanserte funksjoner.

Hvis man har behov for mange matematiske formler og vil unngå prosessen å tilføye dem ved hjelp av bilder, støtter tekstcellene i tillegg «LaTeX kode». LaTeX er et avansert system som kan brukes for å lage matematiske artikler eller bøker. Man trenger ikke å bruke LaTeX i JuPyter, om det er ukjent, men det gir nesten ubegrensete muligheter for å lage matematiske formler.  Introduksjoner til LaTeX finnes mange steder, sjekk for eksempel her eller her.

Figur 3: Tekstcelle i JuPyter notat, først med Markdown og LaTeX synlig, deretter formatert tekst.  

Kodeceller 

Kodeceller kjører programkodene, i dette tilfellet i Python. I samme Jupyter notatbok er det mulig å inkludere flere kodeceller som kan kjøres uavhengig av det som skjer i de andre cellene. Forklaringer og illustrasjoner kan plasseres i tekstceller mellom kodecellene. Å inkludere flere kodeceller, er en av de største fordelene ved å bruke Jupyter notatbøker. Selv om hver celle inneholder en egen programkode, så kan flere kodeceller kjøres etter hverandre, en etter en. Det gjør det mulig å utføre lengre programmer eller algoritmer trinn for trinn. Python husker hvilke celler som allerede har blitt utført og bruker tidligere beregninger og variabler. Hvis vi for eksempel setter en variabel a med verdi 1 i den første cellen, lagres denne verdien og er tilgjengelig i senere celler. Beregninger kan derfor benytte variabler som allerede er definerte.  

Hvordan komme i gang med JuPyter notater? 

For å kjøre Pythonkoder trenger datamaskinen en programvare som kan tolke kodene. Programvaren er med andre ord ansvarlig for å oversette Python kodene til noe datamaskinen kan forstår som en instruksjon. Det finnes ulike løsninger som både støtter Pythonkoder og Jupyter-notater.   

Det enkleste er å bruke Google Colab, en skytjeneste fra Google alle med en Google konto kan bruke. For Google skolekonto, kan det være nødvendig at administrator gir tilgang til Colab. Etter at man har logget seg på Colab, kommer man til et område som tillater at man laster opp JuPyter notater. I tillegg kan man laste inn notater fra Google Drive eller GitHub. GitHub er en kostnadsfri plattform på nett, hvor man kan laste opp og lagre filer. Vi tenker at først og fremt lærere kan bruke Github i planleggingsfasen og laste notater opp før timen. Elevene kan da logge seg inn i Colab ved bruk av sin Google konto, skrive navnet på den aktuelle GitHubkontoen og begynne med notatene. Notater, med endringer eller svar, lagrer elevene på Google Drive.  

Figur 4: Colab grensesnitt med muligheter for å se på Eksempler av JuPyter notater fra Google og mulighet å laste inn notater fra Google Disk, GitHub eller fra lokal maskin.

Du kan prøve Github med en gang! Logg på Colab, velg GitHub mappen og tast inn «ASchmeding» i søkefelt. Du får da tilgang på flere mapper med JuPyter notater. Der finner du for eksempel «Intro-2-Python-norsk» som inneholder et fullstendig introduksjonskurs for Python og mappen «JuPyter-for-ungdomsskole» med støttemateriell lagd for denne artikkelen.  

Det er imidlertid to ulemper med Colab: For det første må man huske å lagre eller laste ned arbeidet sitt, så det ikke blir slettet når man laster inn sider på nytt. Den andre ulempen er at Colab kan gi noen utfordringer, hvis man har inkludert illustrasjoner om de er lagt inn som bilder i JuPyter. En løsning er å laste opp bilder til Github og legge lenke inn i tekstcellene. For å lage slike lenker kan man se i enMarkdown brukermanual eller GitHub mappen «JuPyter-for-ungdomsskole», hvor det også ligger forklaringer.  

Et alternativ til Colab er den nettbasert, programvaren Binder. Binder tilbyr de samme funksjonalitetene som Colab, men viser også bilder lagt inn i JuPyter notater. Å bruke Binder, krever at man oppretter et Binder området fra en GitHub mappe, og man får en lenke elevene kan kopiere eller taste inn i sin nettleser. Også for Binder finnes det enkle brukermanualer som forklarer prosessen. Binder er riktig nok litt mer teknisk i bruk sammenlignet med Colab og kan derfor oppleves som mer tungvint.  

En tredje mulighet for å kjøre Python programkode på PC eller Macbook ved å laste ned Anaconda, som også er en gratis programvare. Programvaren installeres på datamaskinen og kan både kjøre tolke Pythonkoder og åpne JuPyter notater. For bruk i skolen, kan det være en ulempe at man må laste ned og installere Anaconda og at programvaren krever noen gigabyte. I tillegg er Anaconda er bygd for profesjonell bruk, med mange flere muligheter enn det vi trenger i undervisning. Man må dessuten ha enten Windows eller MacOS, noe som betyr at Anaconda ikke er mulig å installere på Chromebook.  

Bruk i klasserommet

En Jupyter notatbok kan i prinsippet inneholde alt fagstoff og alle oppgaver som trengs i ei undervisningsøkt. Lærere kan lage sine egne notater og introdusere en oppgave, påstand eller lignende, og bruke de ressursene de ønsker. Et annet alternativ kan være å ta utgangspunkt i oppgaver som finnes i læreboka elevene bruker og legge til nødvendige forklaringer, eksempler og kodeceller, så alt er samlet på samme sted. Det er også mulig å legge inn lenker til nettsteder. Da kan elevene fordype seg i relevant fagstoff, for eksempel i tverrfaglige opplegg eller tekstcellene kan brukes for å hjelpe elever som trenger tilpasninger. Læreren kan også legge inn ferdige koder hvor elevene skal finne feil eller som elevene skal forbedre eller endre. I liknende oppgaver i lærebøker må elevene ofte plotte disse kodene først. Når koden allerede er lagt inn i en kodecelle, kan elevene bruke tiden sin på det oppgaven spør etter.  

Når læreren har lagd en Jupyter notatbok på forhånd, kan den brukes både til gjennomgang av matematikk og programmering og for å aktivisere elevene. I timen vises Jupyter notatboken på Smartboard eller lignende, og materialet kan brukes til gjennomgang sammen med elevene. Under gjennomgangen kan elevene ha en kopi av notatet på sin PC, og legge inn egne notater. I tillegg kan læreren enkelt bytte undervisningsform fra gjennomgang av fagstoff til individuelt arbeid, noe som også gjør Jupyter notatbøker egnet for bruk i digital undervisning.  [AS1] 

Selvstendig arbeid

Når elever skal lære å bruke et nytt digitalt verktøy, som Python, må elevene både lære seg hvordan de bruker verktøyet rent teknisk og hvordan det kan utnyttes med tanke på det faglige innholdet (Viberg, 2020). Bruk av Jupyter notatbøker gjør det enkelt å ivareta begge deler, siden det er mulig å kombinere koding og forklaringer av både matematikk og programmering. Elevene har oppgaver i Jupyter notatboken og løser disse ved å kode i kodeceller i det samme dokumentet eller ved å legge inn svar og forklaringer ved hjelp av tekstceller. Jupyter notatbøker kan dermed utformes slik at de er selvforklarende og egnet for bruk når elevene skal arbeide selvstendig. Dette kan være enten i undervisningsøkter, som hjemmearbeid eller for å undervise elever som ikke er fysisk til stede. I tekstceller er det også mulig å legge inn hint eller løsning på oppgaver som ikke umiddelbart er synlig for elevene, som vist i figur 5.

Figur 5: Løsningen er bare synlig etter et dobbeltklikk på linjen som inneholder «her».

Elevene ser ikke hintet eller løsningen før de trykker på en knapp i teksten i Jupyter notatboken. Eksempel på en slik kode og en brukermanual om hvordan man lager interaktive notatbøker egnet for selvstendig arbeid finner du her.

Vurdering

Jupyter notatbøker egner seg også for å lage oppgaver som læreren ønsker å vurdere, noe som allerede brukes i høyere utdanning ved universiteter i Norge. I grunnskolen og i videregående opplæring derimot, er det hensiktsmessig når elevene har prøver eller andre oppgaver læreren skal vurdere. I Google Colab finnes det en funksjon som evaluerer hele Jupyter notatboken ved å tilbakestille alt som er gjort tidligere, og kjøre kodene elevene har programmert i alle kodecellene etter hverandre. Den begynner med den øverste cellen i notatet og jobber seg nedover til alle celler er evaluerte eller til første feil i koden blir oppdaget. Å evaluere et notat er ikke nyttig bare når elevene skal bygge opp et store program. Siden automatisk evaluering av et notat avslutter når Python oppdager første feil i en kodecelle, avdekker det også om elevene har klart å lage koden uten programmeringsfeil. Oppgavearket retter seg med andre ord selv, noe som sparer lærere for mye arbeid. Riktignok avdekkes det ikke om koden er riktig svar på oppgaven som ble gitt. Viberg (2020) poengterer at det er viktig å overvåke elevens bruk av teknologi og sette dem på rett spor, om det er behov for det. Funksjonen vi nå har omtalt, kan gi lærerne en slik mulighet, samtidig som elevene kan gjøre selv for å se om det de har gjort gir forventet resultat. 

Her er et eksempel som viser hvordan et slikt oppgaveark kan se ut. Elevene skal i denne oppgaven lære å lage sine egne funksjoner i Python, for eksempel gjennom Collatz-sekvensen. Sekvensen fungerer slik at det for et gitt heltall  lages nye tall, enten ved å halvere  hvis det er partall eller ved å multiplisere med 3 og legge til 1 hvis  er oddetall. Figur 6 viser en oppgave som ber elevene om å lage en funksjon vi kaller «minCollatz». Denne funksjonen skal skrive ut Collatz sekvensen for et tall brukeren oppgir.

Figur 6: Eksempeloppgave Collatz sekvensen.

Introduksjon til funksjonen er allerede gitt i Jupyter notatboken. For å teste funksjonen legger læreren til en ny celle, som vist i figur 7. 

Figur 7: Kodecelle som tester funksjonen elevene skulle lage.

Det forhåndsdefinerte navnet på funksjonen brukes for å teste for ulike eksempelverdier. For disse verdiene kan resultatet beregnes eller be elevene om å beregne dem selv, uten bruk av datamaskin. Evalueres hele notatet, vil funksjonen elevene har lagd automatisk bli brukt.  

Hvis man vil bruke Jupiter notatbok, finnes det ferdige notater på nettet, som er lagd for bruk i ungdomsskolen og videregående skole. Dermed kan lærere ta Jupyter notater i bruk, utforske og bli kjent med mulighetene de gir. Det er ikke et mål at all undervisning i Python skal bli gitt ved bruk av Jupyter notatbøker, men formatet gir altså noen fordeler som gjør opplæring i programmering enklere, ryddigere og mer effektivt for både lærere og elever.

Sjekkliste for å komme i gang 

For å komme i gang med Jupiter notater må du: 

  1. Velge (og eventuelt last ned) et program som kan tolke Python-koder og hvor du kan lage JuPyter notater. Her finnes forskjellige muligheter:
          a) Anaconda som installeres lokalt på din PC. Introduksjon til Anaconda
          b) Binder som er en online løsning og hvor man trenger GitHub. Introduksjon til Binder
          c) Google Colab en enklere online løsning, men som krever en Google konto.  

For flere ideer om hvordan man kan bruke JuPyter notater i undervisning, se: JuPyter4Education nettbok eller bruk støttemateriale på GitHub som gir informasjon om hvordan man kan utforme JuPyter notater.