Emne - Avansert programmering - PROG2006
Avansert programmering
Om
Om emnet
Faglig innhold
Kurset er på engelsk. Kurset introduserer studentene til et bredt spekter av programmeringsspråk og paradigmer, med fokus på multiparadigmeaspekter og moderne funksjoner ved programmeringsspråk. Kurset dekker det grunnleggende om lambda-kalkulus og funksjonell programmeringsstil, late beregninger, minnehåndtering, hendelsesdrevet og reaktiv programmering, samt flertrådede og samtidige programmeringsmønstre. Kurset bruker også nye programmeringsteknikker som Smart Contracts. Språkene som brukes kan dekke, men er ikke begrenset til, Rust og Haskell (hovedspråk), Golang, Java/Kotlin, Dart og Solidity. Referanser til moderne C++ og andre språk gjøres gjennom hele kurset.
Generativ AI og store språkmodeller brukes til noen oppgaver for å lære og få erfaring med prompt engineering. Det oppmuntres til bruk av moderne kodegenereringsverktøy og det gjøres øvelser i bruken av dem i kurset.
Læringsutbytte
På slutten av kurset skal studentene ha spesialisert kunnskap og ferdigheter:
Kunnskap
- Forstå det grunnleggende om multi-paradigme programmering
- Forstå det grunnleggende om lambda-kalkulus og funksjonell programmeringsstil
- Forstå hovedtrekkene til et lat funksjonsspråk
- Forstå beregnings- og minneadministrasjonsproblemene som påvirker sekvensiell implementering av late funksjonelle språk
- Forstå hendelsesdrevet programmering, reaktiv programmering, funksjonell programmering
- Forstå flertråds/samtidig programmeringForstå hva smarte kontrakter er og hva de kan brukes til
- Forstå styrken og begrensningene til generativ AI og store språkmodeller.
Ferdigheter
- Kunne diskutere ulike programmeringsparadigmer: objektorientert og meldingsformidling, funksjonell, reaktiv, hendelsesdrevet, defensivKunne skrive programmer i en funksjonell stil, reaktiv stil og andre
- Begrunn formelt om funksjonelle programmer
- Bruk polymorfisme i objektorienterte og funksjonelle programmeringsparadigmer
- Kunne bruke høyere ordens funksjoner
- Begrunnelse for programmers kompleksitet i tid og romKunne bruke moderne tilnærminger til flertrådede og samtidige programmeringsoppgaverKunne skrive enkle smarte kontrakter
- Kunne bruke generativ AI og veldefinerte spørsmål for store språkmodeller
Generell kompetanse
Har en forbedret evne til å diskutere programmeringsoppgaver
- Kunne diskutere ulike løsninger på ulike programmeringsproblemer ved hjelp av ulike metaforer og programmeringsparadigmerKunne bidra til et bredt spekter av programmeringsmiljøer
- Kunne vurdere og diskutere etiske, cybersikkerhets- og miljømessige (f.eks. ytelse og energiforbruk) begrensninger når du arbeider med programmeringsoppgaver
- Kunne bidra med kunnskap og diskutere til desentraliserte systemer gjennom smart kontraktsprogrammering
Læringsformer og aktiviteter
- Lectures
- Tutorials and exercises
- Web-based learning (online reading resources, online lectures and video tutorials)
- Internal assignments
- Project work
Merk: avhengig av lærernes tilgjengelighet vil forelesningene og undervisningsaktivitetene bli gjennomført på campus eller vil bli utført eksternt gjennom Zoom og Mentimeter. Dette er avhengig av undervisningsopplegg og lærernes tilgjengelighet våren 2026.
Mer om vurdering
Vurderingen er på engelsk. Sluttvurderingen er basert på mappen (60 %) og elektronisk skriftlig eksamen (40 %). Begge gjøres gjennom Inspera. Eksamen har bokstavkarakter. Mappen har også bokstavkarakter. Porteføljen består av flere oppgaver, typisk mellom 5-8 oppgaver. Det er noen obligatoriske oppgaver, og fullføring av nødvendige oppgaver er nødvendig for innlevering av den endelige mappen. De ikke-obligatoriske oppgavene er for ambisiøse elever på jakt etter bedre karakterer. Portfolioinnleveringen består av et individuelt prosjektlager, URL-er til oppdragsarkiv, refleksjonsdokumenter og en innspilt videopresentasjon av det enkelte prosjektet.
Kontinuasjon til skriftlig eksamen i august, kan enten gjøres skriftlig eller endres til muntlig.
Det er INGEN omprøve for porteføljen.Retaking av mappevurderingen kan gjennomføres for enkelte delvurderinger uten at alle delvurderinger må tas opp på nytt.
Spesielle vilkår
Krever opptak til studieprogram:
Data - Ingeniørfag (BIDATA)
Programmering (BPROG)
Anbefalte forkunnskaper
IDATG2102 Algoritmiske Metoder
Forkunnskapskrav
PROG1003 Objekt-orientert programmering
Kursmateriell
Det eksakte kursmaterialet kan variere fra år til år, basert på utviklingen innen programmeringsspråk, og nye versjoner og oppdateringer til standarder.
Eksempler på kursmateriell kan inneholde, men ikke være begrenset til, følgende:
- Haskell programming patterns
- Rust programming book
- Meta-programming, multi-threading patterns
- Advanced programming techniques
- Functional programming patterns: functors, monads, pure functions, higher-order functions
- Abstract data types (Haskell/Rust)
- Domain modeling using OO and Functional paradigms
- Languages used for examples: Haskell, Rust, C++, Python, Golang, Kotlin, Dart
- Reactive programming
- Advanced security techniques: defensive programming
Fagområder
- Informatikk
- Program/system-utvikling
Kontaktinformasjon
Emneansvarlig/koordinator
Faglærere
Ansvarlig enhet
Eksamen
Eksamen
Ordinær eksamen - Vår 2026
Skriftlig eksamen
Oppgitt rom kan endres og endelig plassering vil være klar senest 3 dager før eksamen. Du finner din romplassering på Studentweb.