Emne - Avansert programmering - PROG2006
Avansert programmering
Vurdering og obligatoriske aktiviteter kan bli endret frem til 20. september.
Om
Om emnet
Faglig innhold
Denne emnet er for skapere og utviklere som vil ha både fart og korrekthet. Du vil skrive små, men reelle programmer i Rust (eierskap, levetider, samtidighet) og Haskell (algebraiske datatyper, monader, renhet), deretter profilere og begrunne hvorfor de fungerer. Vi utforsker hendelsesdrevne og reaktive design, uforanderlighet, utsatt evaluering (lazy), minnehåndtering og sikre mønstre for enkle smartkontrakter. Du trener på kodegjennomganger, egenskapsbasert testing og målt ytelsesoptimalisering. Moderne KI-verktøy inngår i arbeidsflyten—du lærer når de kan stoles på og hvordan resultater verifiseres. Forvent praktiske labber, tett tilbakemelding og artefakter klare for porteføljen din.
Advanced Programming kombinerer Rust og Haskell for å utvikle robuste mentale modeller og vaner på produksjonsnivå. Med Rusts eierskap og levetider side om side med Haskells typer og renhet, designer og implementerer du programmer som er sikre, raske og forklarbare. Kjerneemner inkluderer uforanderlighet, utsatt evaluering, minnehåndtering, hendelsesdrevne og reaktive arkitekturer samt praktiske samtidighetsmønstre. Vi anvender dette i små, ende-til-ende-verktøy og enkle smartkontrakter, med vekt på sikkerhet og testing. Gjennom hele emnet bruker du generativ KI og kodegenereringsverktøy for å akselerere arbeidet, kombinert med egenskapsbaserte tester, profilering og kodegjennomganger slik at kvaliteten ikke kompromitteres. Selv om Rust og Haskell er hovedspråkene, refererer vi til moderne C++, Go, Java/Kotlin, Dart og Solidity når det skjerper intuisjonen eller øker overførbarheten. Ved slutt skal du kunne begrunne designvalg, måle ytelse framfor å gjette, og levere vedlikeholdbar og robust kode.
Læringsutbytte
Ved slutten av emnet skal studentene ha spesialisert kunnskap og ferdigheter.Forkortelser: R Husk, U Forstå, A Anvende, An Analysere, E Vurdere, C Skape.
Kunnskap
- Definer kjernebegreper i fler paradigme programmering og skill mellom sentrale paradigmer (OO/meldingsbasert, funksjonell, reaktiv, hendelsesdrevet, defensiv). (R,U)
- Forklar λ-kalkylen (syntaks, β-reduksjon, Church-kodinger) og koplingen til funksjonell programmering. (U)
- Beskriv utsatt evaluering (lazy evaluation) og oppsummer konsekvenser for semantikk, tids-/plassbruk og kjøreatferd. (U)
- Forklar beregnings- og minnehåndteringsutfordringer i sekvensielle implementasjoner av late språk (thunks, deling, samspill med søppelinnsamling/GC). (U,An)
- Kjennetegn ved hendelsesdrevne og reaktive modeller (strømmer, propagasjon, mottrykk) og kontraster dem med imperativ styringsflyt. (U,An)
- Forklar samtidighetsmodeller (tråder/låser, futures/async, aktører) og identifiser typiske farer (kappløpsforhold, dødlåser, sult). (U)
- Beskriv hva smarte kontrakter er, hovedbrukstilfeller og plattformbegrensninger (eksekveringsmodell, gebyrer, determinisme). (U)
- Oppsummer styrker/begrensninger ved generativ KI og store språkmodeller, inkludert feilmodi (hallusinasjon, skjevhet, prompt-sensitivitet) og trygge bruksrammer. (U,An)
Ferdigheter
- Anvend funksjonelle og reaktive mønstre (uforanderlighet, høyereordens funksjoner, komposisjon, strømprosessering) for å implementere fungerende programvare. (A)
- Refaktorer kode til å bruke polymorfi (OO og funksjonell) og generalisér løsninger via typeabstraksjon. (A,An)
- Bevis enkle egenskaper ved funksjonelle programmer med algebraisk/likningsbasert resonnering og induksjon; valider refaktoriseringer mot lover (f.eks. funktor-/applicative-/monadelover). (An,E)
- Analyser tids- og plasskompleksitet, inkludert effekter av latskap (deling vs. duplisering, strenghet, asymptotikk). (An)
- Design og implementer flertrådede/konsurrente løsninger; synkroniser sikkert og diagnostiser/avbrytsamtidighetsfeil. (A,An,E)
- Utvikle og teste enkle smarte kontrakter etter grunnleggende sikkerhetsmønstre; rull ut til et testnett og verifiserforventet atferd. (A,C)
- Bruk LLM-er effektivt: formuler presise prompt, avgrens verktøy/kall, kriter og verifiser utdata, og integrerresultater i en utviklingsflyt. (A,An,E)
- Optimaliser implementasjoner for ytelse og minnefotavtrykk; instrumenter og tolk profileringsdata. (A,An,E)
- Konstruer/utform funksjonelle programmer med algebraiske datatyper, mønstermatching og monadestakker; vurder alternativer. (C,E)
Generell kompetanse
- Kommuniser designbegrunnelser og avveiinger tydelig i kodegjennomganger, demoer og tekniske tekster. (U,E)
- Velg og begrunn egnet paradigmearkitektur for et gitt problem og sammenlign alternativer med evidens. (An,E)
- Samarbeid i fagfelle-/medstudentvurdering (kodegjennomgang) og gi/motta handlingsrettet tilbakemelding. (A,E)
- Vurder etiske, cybersikkerhetsmessige og bærekraftige implikasjoner (f.eks. energi/ytelses-avveiinger, datahåndtering, misbruksrisiko) av designvalg. (E)
- Bidra til desentraliserte systemer ved å designe, implementere og vurdere små smartkontrakt-komponenter i tråd med sikkerhet og styring. (A,C)
- Syntetiser idiomatiske Rust- og Haskell-mønstre til vedlikeholdbare småprogrammer og forsvar arkitekturen i kodegjennomganger. (C,E)
Læringsformer og aktiviteter
- Forelesninger
- Laboratorieøvelser, gruppeoppgaver
- Nettbasert læring (nettbaserte leseressurser, nettførelesninger og video-veiledninger)
Merk: Avhengig av underviseres tilgjengelighet vil forelesninger og undervisningsaktiviteter gjennomføres på campus eller digitalt.
Obligatoriske aktiviteter
- Oppgaver
- Medstudentvurdering
Mer om vurdering
Slutteksamen (100 %)
- Format: Skriftlig, digital, på campus, ingen hjelpemidler.
- Karakter: Bokstavkarakter (A-F).
- Kontinuasjon: Kontinuasjon i august. Instituttet kan endre format til munnlig ved behov.
Obligatorisk arbeidskrav (bestått/ikke bestått, ingen kontinuasjon)
- Oppgaver: 6-8 små ukentlige oppgaver. Må leveres innen oppgitte frister og godkjennes.
- Medstudentvurdering: Aktiv deltakelse og fullføring av tildelte fagfelle-/peer-review-aktiviteter (gi og motta tilbakemelding som instruert).
- Eksamensadgang: Begge arbeidskrav må være godkjent for å kunne gå opp til slutteksamen.
- Gyldighet: Godkjente arbeidskrav gjelder for inneværende eksamenstermin og for neste års emnetilbud.
Akademisk integritet og opptreden
- Regler for samarbeid og bruk av KI-/kodegenereringsverktøy angis per oppgave.
Spesielle vilkår
Krever opptak til studieprogram:
Data - Ingeniørfag (BIDATA)
Programmering (BPROG)
Anbefalte forkunnskaper
IDATG2102 Algoritmiske Metoder
Forkunnskapskrav
PROG1003 Objekt-orientert programmering eller IDATG2003 Programmering 2
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