Kursanalys, INDA F96

Kursdata

Mål

Kursens målsättning är att ge kännedom om grundläggande begrepp inom datateknik och datalogi, ge färdigheter i användning och analys av grundläggande algoritmer och abstrakta datatyper, ge orientering om och förståelse för programmeringstekniker, ge praktisk användning i att använda dessa, samt ge kunskaper om problemlösning med hjälp av programmering.

Förändringar inför denna kursomgång

Denna kurs var helt ny året 95/96 och gick nu för andra gången. Vi använde en ny kursbok för C-delen av kursen. Kurskompendiet som var helt nyskrivet förra gången kompletterades till detta år. Alla laborationerna var nya från förra året och fungerade väl. Till i år gjorde vi därför endast mindre förbättringar i laborationsanvisningarna.

Vi hade planer på att göra en större insats för att komplettera kompendiet så att det ev. skulle kunna ersätta en av kursböckerna. När vi fick veta att denna kurs inte skulle få fortsätta i samma form ansåg vi det inte värt att göra alltför stora insatser till i år.

Sammanfattning

Kursen betonar programmeringsmetodik och problemlösning snarare än programmeringstekniska detaljer i något speciellt programspråk. Vi använder två språk i kursen: Scheme och C. Scheme är utmärkt för att ge eleverna möjlighet att tänka "matematiskt" på problemlösningen utan att fastna i alla detaljer kring variabler, datatyper, styrstrukturer och annat som ofta dominerar nybörjarprogrammerarens funderingar. C representerar de traditionella programspråken där det gäller att arbeta systematiskt och strukturerat för att åstadkomma felfria program.

Undervisningen

Liksom förra året har kursen delats upp i 6 delar med varsitt tema. Varje sådan del behandlas under två veckor och omfattar fyra föreläsningar (á 2 timmar), fyra övningar och en laboration (med fyra handledarledda laborationspass). Dessutom utdelas ett frivilligt hemtal för varje tema. Hemtal som lämnas in i tid rättas och ger bonuspoäng till tentamen. Den sjunde och sista laborationen är en individuell projektuppgift som skall göras på egen hand efter undervisningens slut. Tyvärr har det visat sig alltför lätt att skjuta upp denna I-uppgift vilket medfört att väldigt många elever fortfarande (dec 97) har denna kvar som rest.

På kursen används en bonuspoängsystem för att locka eleverna att inte skjuta upp laborationer och inläsning till strax före tentamen. Varje laboration som redovisas i tid och varje i tid inlämnat hemtal (övningsuppgifter som löses på egen hand) ger bonuspoäng till första delen av tentamen.

För hemtalen har vi haft policyn att man får bonuspoängen främst för att man har gjort hemtalet, nästan utan hänsyn till hur bra eller dåligt uppgiften lösts. Vi har upplevt att detta varit positivt eftersom kopierandet av färdiga lösningar varit betydligt mindre än tidigare då varje hemtal poängsattes med risk för avdrag av bonuspoäng om man lämnade in en mindre lyckad lösning. Eleverna tycker generellt att hemtalen fungerat precis som avsett, d.v.s. att man kommer igång att läsa i böckerna och jobba med övningsproblem.

Examination

Kursen examineras genom en tentamen och sju obligatoriska laborationer.

Tentamen är av problemlösningstyp med uppgifter av varierande svårighetsgrad. Vi försöker konstruera uppgifterna så att de som förstått vad de gjort på labbarna har nytta av det under tentamen. Tentamen är tvådelat, där den första delen består av teorifrågor och mindre typuppgifter medan den andra delen omfattar fyra problemlösningsuppgifter "Skriv ett program som...". De flesta ordinarie eleverna (d.v.s. F-96'orna) hade tillräckligt mycket bonuspoäng för att i praktiken slippa att skriva den första delen av tentamen. Uppgifterna på del 1 är dock förhållandevis enkla för den som kan kursinnehållet någorlunda.

Laborationerna examineras genom en muntlig redovisning framför datorn infor en labbassistent (handledare). Laborationerna (utom den sista) görs i tvåmannagrupper men båda eleverna måste närvara och visa att de förstått labben vid redovisningen.

Tidigare år har vi haft systemet med en pool av handledare som rycker in när eleverna behöver hjälp under laborationspassen. Detta år provade vi systemet att en och samma handledare alltid svarade på frågor från samma elevgrupper. Detta ställde extra krav på schemaläggningen av handledare som inte alltid fungerade, men på det hela taget är vi nöjda med det nya systemet. Framförallt minskade de tidigare så irriterande väntelistorna för att få redovisa när bonustidsgränsen närmade sig. Genom att handledarna följt "sina" elever gick det ofta mycket snabbare att genomföra själva redovisningarna.

Kurslitteratur

Kurslitteraturen är omfattande: boken "Structure and Interpretation of Computer Programs" (SICP), boken "C programming, a modern approach" (King) samt en kurspärm innehållande ett kurskompendium (130 sidor), laborationsanvisningar, exempelsamling med lösningar samt några mindre dokument.

SICP är en klassiker från MIT som försöker ge läsaren en djup kunskap om "datalogiskt tänkande" med Scheme som hjälpmedel. Tyvärr upplever många elever denna bok som alltför tungläst och många hävdar t.o.m. att de "aldrig öppnat den". I viss mån är kurskompendiet tänkt att kunna fungera som en ersättare.

King's bok är en modern bok om traditionell C-programmering. Boken centreras kring programspråket snarare än programmeringsmetodiken. Den upplevs därför som mer lättläst men täcker samtidigt inte de datalogiska aspekterna.

Kurskompendiet var mycket uppskattat och uppfattades (helt riktigt) som en översikt över vad som är speciellt viktigt i kursen. Tyvärr täcker kompendiet inte alla delar av kursen.

Elevenkät

Vid kursens slut (men före tentan) fick eleverna besvara en enkät. Här finns resultatet från denna enkät.

Överlag tycks eleverna vara nöjda med kursen både vad gäller dess innehåll och dess genomförande. Många elever lägger ner mycket tid på laborationerna men upplever samtidigt att de lär sig mycket av detta.

Kursens belastning för eleverna

INDA-kursen har sedan tidigare ett rykte om sig att vara mycket tidskrävande för eleverna, då speciellt vad gäller labbarna. Förra året gjordes en total omorganisation av kursen för F med bl.a. färre och helt nya laborationsuppgifter. Samtidigt minskades antalet föreläsningar och övningar.

Det praktiska arbetet under laborationerna är mycket viktigt för att få en grundläggande färdighet i programmering. När vi gjorde om labbpaketet ville vi därför inte minska på det egentliga innehållet. Vi koncentrerade oss istället på att minimera den "onyttiga tiden" som eleverna tvingas lägga ner: väntan på handledning, väntan på att få redovisa, missuppfattningar som leder arbetet iväg åt fel håll, m.m. Vi tycker att vi lyckats ganska bra med denna ambition och upplever att eleverna ägnade den mesta tiden till nyttigt (lärande) arbete.

Tiden som eleverna måst lägga ner på kursen har minskat jämfört med den tidigare kursen. Å andra sidan går kursen komprimerat under bara två perioder (mot tre för motsvarande kurs på D och E) vilket gör att den fortfarande känns tung. Att vi behållit samma namn som på den tidigare kursen (före 95) har säkert också bidragit till att ryktet om att kursen är svår och tar mycket tid hängt kvar.

Förkunskaper

Förkunskaperna är mycket varierande och detta gör det svårt att få kursen att passa alla. Det blir med nödvändighet en kompromiss. De första veckorna på kursen har varit speciellt anpassade för de som aldrig programmerat förut. De upplevs som väldigt intensiva för de totala nybörjarna medan många elever istället upplever det som att de inte lär sig någonting nytt.

Efter de första veckorna blir dock stoffet nytt för de flesta eftersom vi succesivt introducerar datalogiska begrepp som de flesta "självlärda" inte stött på tidigare. Det går dock inte att komma ifrån att de som har en gedigen datorvana när de börjar på KTH har lättare att ta till sig kursinnehållet eftersom de slipper brottas med alla detaljfrågeställningar kring själva programspråken och datorerna.

Kursinnehåll


Vecka 44-45

Tema: Grunderna i C-programmering.

Under den här delen av kursen ska vi arbeta med programspråket C. Du ska lära dig hur man använder variabler och styrstrukturer samt hur man kan dela upp större program i hanterbara delar med hjälp av procedurer.

Föreläsningar
Introduktion, kursuppläggning. Programspråk, datalogi, begrepp.
Datorns uppbyggnad. Variabler, satser, styrstrukturer.
Procedurer, strukturen hos ett program.
Modularisering, gränssnitt.
Övningar
Skriva enkla program i C
Laborationer
Vi börjar med att skriva några enkla C program för att "komma igång"
Ni ska också få skriva ett program uppdelat i flera moduler

Vecka 46-47

Tema: Programstrukturer

Nu går vi över till en mer abstrakt syn på datorberäkningar. Framför allt ska vi vänja oss vid den funktionella programmeringsstilen. Vi använder programspråket Scheme som verktyg och det är viktigt att du nu lär dig grunderna i Scheme ordentligt.

Föreläsningar
Abstraktion. Funktionell programmering. Scheme intro.
Procedurer som abstraktion. Generalisering. Rekursion.
Rekursion och iteration. Loopinvarianter.
Högre ordningens procedurer. Procedurer som parametrar.
Övningar
Vi jobbar med att skriva små Scheme-procedurer för att komma in i det rekursiva sättet att bryta ner problem.
Laborationer
Ni ska arbeta med Scheme-systemet och konstruera procedurer med hjälp av rekursiv problemnedbrytning.

Vecka 48-49

Tema: Datatyper och datastrukturer

I denna del av kursen ska vi studera olika klassiska tekniker för att representera data. Vi kommer att införa begreppet "abstrakt datatyp", en metod att hindra att hela programmet blir beroende av vilken representation vi har valt.

Föreläsningar
Data: lagring&operationer. ADT. Typer och typkontroll.
Klassiska strukturer: post, lista, association, tabell, stack, kö.
Pekare och minnesadministration (i C). malloc, free, GC.
Mer om poster och datastrukturer i C. Filer.
Övningar
Vi övar på användningen av olika datastrukturer.
Laborationer
Här kommer ni att arbeta med olika datastrukturer i C.

Vecka 3-4

Tema: Algoritmer

Föreläsningar
Sökning. Sorteringsproblemet.
Analys av komplexitet. Smartare sorteringsmetoderna.
Träd och sökträd.
Hashtekniker. Representation av data på fil. B-träd.
Övningar
Vi övar framförallt på sorteringsalgoritmerna.
Laborationer
Här ska vi skriva ett program som löser det klassiska problemet att mäta upp en viss mängd vatten med hjälp av ett antal olika stora hinkar. Med hjälp av de tekniker vi lärt oss kan man kontrollera om problemet går att lösa.

Vecka 5-6

Tema: Programorganisation

Föreläsningar
Problemlösning: backtracking, bredden/djupet-först. Optimeringsproblem.
Symbolbehandling. Mönstermatchning.
Generiska operationer, datadriven programmering.
Objektorienterad programmering.
Övningar
Laborationer
Här hade vi tänkt att ni skulle få försöka hitta på mer eller mindre smarta strategier för att styra en simulerad robot som ska hitta ut ur en labyrint. Meningen är att ni ska kunna utnyttja era kunskaper om problemlösning, datarepresentation, högre ordningens procedurer, etc. för att hitta en lösning som är bättre än granngruppens.

Vecka 7-8

Tema: Interaktion m.m.

För att ett program ska bli användbart krävs det ofta mycket mer än att det löser en viss uppgift. Bl.a. är det viktigt med en väl fungerande kommunikation med användaren. Vi ska prata lite om hur man bör och inte bör göra. Vi kommer också att prata om vad som menas med objektorienterad programmering och hur detta kan se ut i Scheme.

Föreläsningar
Simuleringsmetodik. Händelsestyrning. Numerisk simulering.
Människa-dator interaktion. Dialogdesign. Grafik.
Exempel från verkligheten.
Repetition + spill.
Övningar
Vi övar på händelsestyrd simulering m.m.
Laborationer
Dessa veckor ska ni arbeta med en händelsestyrd simulering där man själv finns med som deltagare. Programmet är uppbyggt i objektorienterad stil.

Planerade förändringar

Denna kurs kommer att ersättas av två 4-poängskurser fr.o.m. läsåret 97/98. Tanken är att den första kursen behandlar grundläggande programmeringsteknik (ges under första läsåret) medan de datalogiska begreppen och frågeställningarna sparas till den andra (som ges under hösten det tredje året).

Senast ändrad 4 december 1997