Beregningsperspektivet for datastudenter Fra et forsøk ved HiB Jon Eivind Vatne Høgskolen i Bergen 27. oktober 2011
TOD065 - Diskret matematisk programmering Et førstesemestersemne på 5 stp. Obligatorisk for informasjonsteknologi. Vi ønsker å trekke lærdommer fra dette, og også innføre stoffet for dataingeniørstudenter.
Computing in Science Education CSE vil bidra til at laveregradsstudenter lettere kan bruke kombinasjonen av programmering og matematikk. Vårt emne er litt odde, siden temaene ikke inkluderer derivasjon og integrasjon, men diskret matematikk og lineær algebra. I tillegg kan våre studenter mye mer om programmering enn ingeniørstudentene ellers. Allikevel er det utfordrende å kombinere programmeringsferdighetene med matematikk tidlig i studiet.
Emner De viktigste stikkordene fra emnebeskrivelsen er Tallforståelse Graftegning Lineær algebra Løkker og induksjon Det varierer hvor mye vekt vi faktisk har lagt på de forskjellige delene.
Tallforståelse Dette har vært hovedfokus i starten. Stikkord: Heltall, flyttall, overflow, avrundingsfeil. Programmering: Store tall, typekonvertering, rasjonale tall. Så vidt tatt med: Komplekse tall. Java-eksempel 1: akkumulert avrundingsfeil.
Graftegning Remy Monsen har laget et graftegningsbibliotek for dette kurset, som vi vil holde svært enkelt. Siden matematikkemnet ikke har med funksjonsdrøfting, har vi valgt et litt utradisjonelt synspunkt: Om vi kan tegne enkeltpunkt kan vi tegne hva som helst! Eksemplene er typisk en parabel, mangekanter, sirkler og liknende. Vi bruker også biblioteket til å tegne strekkoder (!) og fraktaler, og til å se at 3D-objekter behandles i 3D og projiseres til 2D til slutt (for å vises på skjerm). Java-eksempel 2: noen grafer. Enkle eksempler fra fraktaler.
Lineær algebra Dette er vårt siste tema, og vi bruker mye av det studentene har lært. Standardkonstruksjoner som skalarprodukt, vektorprodukt og løsning av likningssystemer. Gauss-Jordan?Ikke tid, men naturlig å ta med. Gram-Schmidt? Kun i 3 dimensjoner. Skifte av basis? Ikke grundig. Dette er svært viktig for datagrafikk. Transformasjoner, med påfølgende projeksjon fra 3D til 2D. Java-eksempel 3: Torus.
Løkker Mest via eksempler: Fakulteter, n! = n (n 1)! med startbetingelse 0! = 1. Binomialkoeffisienter, ( ) ( n n 1 = k k ) + ( ) n 1 og k 1 ( ) n = 0 ( ) n = 1. n Interessant for oss av flere grunner, overflow, rekursjon, formatering. Ellers sniker det seg inn mange steder. Induksjonsbevis har vi gjort lite med.det er naturlig å koble konstruktive induksjonsbevis til implementering.
Problemer med forsøket dette semesteret Flere av teknikkene vi har brukt i TOD065 har ikke vært innført i programmeringsfaget på det tidspunktet vi har trengt dem. Det har vært frustrerende for studentene. Uten tabeller får vi gjort lite! Ellers er kanskje filbehandling det viktigste som kommer sent i programmeringsfaget. For studentene har det selvsagt også vært kjedelig at pensumlitteraturen ikke har vært tilgjengelig fra semesterstart, siden jeg har skrevet pensum etterhvert.
Anbefalinger Det har vært veldig kjekt å arbeide med dette emnet, og jeg håper vi velger å videreføre det i en eller annen form. På grunn av de kommende omleggingene må noe endres uansett. Start noen uker senere! Ikke så vanskelig, siden det må bli en del av et emne på ti stp. Bruk tankegangen i senere emner! Opplagte eksempler er statistikk og andre matematikkemner, men forhåpentligvis også andre emner. Gjennomarbeidet litteratur. Felles for informasjonsteknologi og dataingeniør? Fortsatt tett samarbeid med matematikk og programmering. Behold det i første semester! Nyttig med tidlig ekstra programmeringserfaring.
Matematikk+ for dataingeniør ved HiB Den foreløpige planen for fordeling av emner i matematikk for dataingeniørene våre, ordnet etter semester: 1. 10 stp diskret matematikk og programmering. 2. 10 stp diskret matematikk og statistikk/sannsynlighetsregning. 3. 10 stp analyse og lineær algebra. Naturlig fortsettelse med å programmere matematikk i andre og tredje semester. Dette krever egen litteratur!
Takk for oppmerksomheten!