Om kurset
IN1900 har en standardisert emnebeskrivelse, men her følger litt mer detaljert informasjon om undervisningsopplegget.
Undervisningen
Forelesningenes struktur
Det er fire timer plenumsundervisning hver uke, som høsten 2026 vil være i Sophus Lies auditorium. Forelesningene vil være en kombinasjon av oppgaveløsning i plenum ("live-programmering"), og mer tradisjonelle forelesninger basert på foiler eller annet materiale. Gjennom å vise hvordan man løser programmeringsoppgaver "live" håper vi at studentene får et bedre innblikk i hvordan man tenker rundt det å programmere. Denne typen oppgaveløsning har prioritet over ordinære forelesninger, så noen ganger vil vi la introduksjonen av nye tema være selvstudium, og bruke mesteparten av tiden i forelesningene til live-programmering. Hver uke går vi gjennom ca ett kapittel fra læreboka.
Gruppeundervisningen
I tillegg til plenumsundervisningen er det to timer gruppeøvelser på terminalstue med en lærer man kan spørre. På disse øvelsene vil man vanligvis jobbe med utvalgte oppgaver, vanligvis 4-5 oppgaver fra forrige ukes forelesningstema. Oppgavene kan senere leveres inn elektronisk for retting og tilbakemelding fra gruppelærerne. Normalt skal du rekke ukens oppgaver på gruppetimen dersom du har forberedt deg med å studere kapittelet, foilene og plenumsoppgavene på forhånd.
Lærebok
I 2026 bruker vi denne læreboka, som kom ut i 2025 og er skrevet spesielt for kursene IN1900 og IN-KJM1900. Boka dekker hele pensum, pluss ganske mye mer, så ikke alle kapitler er pensum. Informasjon om hvilke kapitler vi går gjennom hver uke kommer på undervisningsplanen.
Det er første gang vi bruker en lærebok på norsk i IN1900, og vi tror at dette blir en nyttig forbedring for de aller fleste. Selv om stort sett alle norske studenter er gode i engelsk har det stor verdi å lære seg fagspråket på norsk og kunne snakke om programmering med medstudenter og forelesere. Å snakke om faget med andre er noe av det man lærer aller mest av, og for de fleste studenter på UiO er norsk det naturlige språket for slike "fagsamtaler".
For de som foretrekker bøker på engelsk er det mulig å bruke lærebøkene fra tidligere år. Første del av kurset dekkes av denne boka, mens siste del dekkes av denne. Begge disse bøkene er oppdaterte kortversjoner av en eldre bok som ble brukt i kurset i mange år: A primer on scientific programming with Python av Hans Petter Langtangen. Denne boka bruker en eldre versjon av Python (2.7), men det aller meste av innholdet er fortsatt relevant og gyldig. Boka går mye mer i detalj enn den nye læreboka og inneholder mange flere eksempler og problemstillinger, så den er en veldig nyttig tilleggsressurs for de som vil lære mer programmering. En elektronisk versjon er tilgjengelig fra UiO-biblioteket. Linken virker bare hvis du er logget på UiO sitt nettverk, og skal da føre til en side hvor du kan laste ned en pdf-fil.
Arbeidsform
Så hva skal du som student gjøre for å mestre stoffet og sikre deg en god karakter på eksamen? Eller enda viktigere: hvordan skal du arbeide for å oppnå gode ferdigheter i programmering for senere kurs? Opplegget er relativt enkelt:
- Delta på alle de 6 timene med undervisning hver uke. Hvis du kan litt programmering fra før, og derfor opplever de første ukene som altfor enkle, så er det selvfølgelig greit å droppe noen forelesninger. Det er likevel viktig å følge med på hva som blir gjennomgått, siden progresjonen er ganske rask og det helt sikkert kommer tema i løpet av høsten som du ikke kjenner fra tidligere.
- Les ukens kapittel i læreboka før forelesningen starter.
- Bruk litt tid på forhånd til å løse oppgavene som foreleser skal gå gjennom i plenum. Da vil du se hva du ikke har forstått og få mye mer ut av oppgavegjennomgangen. Hvis du ikke rekker å løse oppgavene ordentlig er det uansett nyttig å bruke litt tid på å tenke gjennom hvordan du ville løst dem, og om det er noen oppgaver eller deloppgaver som er spesielt utfordrende.
- Bruk litt tid på å etterarbeide disse oppgavene etter at du har sett løsningene (de er tilgjengelige på nett).
- Deretter forsøker du å løse ukens innleveringsoppgaver. Med forberedelsene over bør du greie oppgavene på et par timer, gjerne på gruppetimen.
Samlet tidsbruk på disse punktene bør være ca 11-12 timer, som er i underkant av 1/3 av en normal arbeidsuke på 40 timer. Denne planen og tidsbruken passer godt for de som har programmert lite eller ingenting tidligere. Hvis du har programmert litt tidligere er det selvfølgelig mulig å justere både planen og tidsbruken, men det er uansett viktig å følge med på det som skjer i undervisningen, og justere opp innsats og tidsbruk når det dukker opp nye tema.
Raske veier mot målet er ofte trege
Undervisningen tar utgangspunkt i at alle studenter jobber omtrent slik listen over beskriver, eller i det minste at alle følger med på undervisningen og kan det stoffet som er blitt gjennomgått. Hvis du har programmert litt tidligere er det vanligvis likevel best å følge all undervisning i starten, og heller justere ned tidsbruken hvis du føler du har kontroll på stoffet. Det er mye vanskeligere å skulle ta igjen det tapte hvis man har lagt inn for lite innsats i starten av kurset.
Tidligere hadde vi mange obligatoriske innleveringer i IN1900, og mange studenter prøvde å spare tid ved å droppe all frivillige undervisning og heller gå rett på løsning av de obligatoriske oppgavene. Dette endte veldig ofte med mye bortkastet tid og lavt læringsutbytte. Læring gjennom oppgaver er helt sentralt, men oppgaver du ikke forstår noe av fordi du mangler det teoretiske grunnlaget, er et ineffektivt utgangspunkt.
De siste årene er det selvfølgelig AI-verktøy som primært brukes til å "spare tid" i studiet. AI kan være et fantastisk verktøy hvis det brukes riktig, men å la AI løse alle oppgaver gir veldig lite læring, selv om man leser gjennom koden som genereres. Husk at AI ikke er tilgjengelig på eksamen.
God bruk av AI kan for eksempel være:
- Få forklaringer på begreper du ikke forstår
- Diskutere ulike løsninger
- Få vurdering og kommentarer til kode du har skrevet selv, og tips til mulige forbedringer
- Få generert alternative løsninger etter at du selv har løst en oppgave
Husk også at de fleste AI-verktøy normalt gir relativt kompliserte svar, som ofte er mer egnet for eksperter enn for IN1900-studenter. Kode som genereres er også ofte lang og omstendelig, med unødvendig mange kommentarer og bruk av biblioteker og teknikker som ikke er pensum i kurset. Det er derfor lurt å være nøye med instruksjonene man gir til AI-verktøyene, og spesifisere hvilket nivå man ønsker på forklaringer og kode.
Eksamen
Både midtveiseksamen og den endelige eksamen vil ligge tett opptil de oppgavene som gis som innleveringsoppgaver og oppgaver løst i plenum. Hvis du har forstått disse oppgavene blir eksamen en hyggelig opplevelse. For å forstå oppgavene, er det lurt først å lese relevant teori og eksempler i læreboken. Mange oppgaver er nemlig tett knyttet til stoffet i boken.
Samarbeid
Det kan være veldig nyttig å samarbeide med andre, men det kan også være et effektiv hinder for å oppnå egen forståelse og mestring. Det er viktig at du tidlig som student har et helt bevisst forhold til når og hvordan du skal samarbeide og når du bør studere på egenhånd.
Erfaring viser at i en gruppe som samarbeider om oppgaver og der kunnskapsnivået blant studentene varier mye, vil den faglig sterkeste ha stort utbytte av samarbeidet gjennom å lede oppgaveløsningen og forklare andre. De svakeste vil fort ende opp i en situasjon der de kopierer andres løsninger og ikke får nok tid til å forstå det som foregår. Med etterarbeid på egenhånd der man trenger dypt inn i detaljene og prøver å forstå dem, så kan dette likevel være en god form for læring. Dessverre erfarer vi at en del ender opp med bare å "skrive av".
Programmering er en ferdighet som krever mye trening
Svært få vil være så begavede fra naturens side at de forstår programmering bare ved å skrive av og lese løsninger. Så godt som alle må lære programmering (og regning og andre ferdigheter i realfag) ved å jobbe på egenhånd med et solid antall oppgaver. Mestring er krevende, men betalingen får du ved å kjenne på mesteringsfølelsen når du mestrer.