Nada

2D1358 OOPK period 3 98/99 för E
Kursanalys

Kursdata

Mål

De formella kursmålen är att för att studenterna ska kunna tillämpa objektorienterade metoder vid design och implementation av moderna programsystem.

Eftersom dessa mål är väldigt ambitiösa för en fyrapoängskurs och eftersom de flesta eleverna verkar välja denna kurs för att lära sig C++ är mina informella mål med kursen att studenterna ska

Resultatet av detta är att objektorienterad modellering (med bl.a. UML) då får mindre utrymme och att fönsterbaserade utvecklingsmiljöer nästan inte tas upp alls.

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

Jämfört med förra årets kursomgångar gjordes följande ändringar: Speciellt laborationskursen har förändrats väsentligt:

Sammanfattning

Studenterna är över lag mycket intresserade och motiverade, och de flesta är nöjda med kursinnehåll och undervisningen. Kursen uppfattas dock som svår och mycket arbetskrävande.

Undervisningen

Föreläsningarna till största delen varit baserade på stordia, och papperskopior av dessa har delats ut i förväg. Sådana föreläsningar riskerar att bli tråkiga, men gör det å andra sidan möjligt att visa många diagram och kodexempel utan att tappa tempo. Generellt verkar studenterna nöjda med förläsningarna och föreläsningsanteckningarnas kvalitet.

Övningarna är problematiska. Iden är att övningsassistenten i dialog med studenterna ska lösa ett antal enklare övningsuppgifter på tavlan. Det har dock visat sig vara svårt att aktivera studenterna. Det kan delvis beror på att övningsgrupperna var för stora, men också att design och programmering kräver eftertanke och att det helt enkelt är för svårt att snabbt föreslå lösningar på ett givet problem. Det har väckts förslag (från bl a Karl Meinke och några studenter) att man bör dela ut (lätta) hemuppgifter och använda övningarna till att gå igenom lösningar på dessa istället. Det kan höja studentaktiviteten, och i kursen 2D1359 har man betydligt mer seminarieaktivitet. Det ökar dock ytterligare arbetsbelastningen för eleverna och måste balanseras av att något annat moment tas bort. Ett annat alternativt är att helt ta bort övningarna och använda tiden till mer schemalagda handledningstid i labsal.

De schemalagda laborationerna är centrala i kursen. Där sker dels all examination, dels ges individuell hjälp och handledning. Det är tänkt att ungefär hälften av studenterna kommer på ett labpass, dvs 60 st. Vi hade betydligt fler handledare på varje pass än föregående år, i regel 6-8 st. Trots en del kritik i kursenkäten om väntetider för handledning är mitt intryck att väntetiderna har varit mycket korta. Det har heller inte varit brist på redovisningstider under kursen. Däremot har kunskaperna hos handledarna i genomsnitt legat lägre än jag hade önskat. Endast två doktorander (jag själv och Fredrik Zetterling) har deltagit i labhandledningen. Övriga handledare har varit teknologer. Samtliga dessa har tidigare tagit sig igenom kursen med toppbetyg, och de har gjort en mycket bra arbetsinsats i år. Problemet är dock att man som handledare ofta snabbt måste sätta sig in i komplicerade program och objektmodeller, hjälpa eleverna att hitta fel eller föreslå ändringar i programdesignen. För det krävs mer erfarenhet av egen programutveckling än vad de flesta teknologhandledare rimligen kan ha hunnit skaffa sig.

Examination

Examinationen består enbart av laborationsredovisningar. Laborationerna utförs i grupper om högst tre elever. Tidigare år har man tydligt kunnat se att vissa lösningar återkommer gång efter gång. I år har vi därför förtydligat reglerna för vad som anses vara tillåtet och otillåtet samarbete, och vi har uppmanat studenterna att inte göra sina lösningar allmänt tillgängliga. Dessutom har vi registrerat all programkod som redovisas. Redovisningarnas kvalitet har höjts dramatiskt. Så gott som alla labgrupper har varit väl insatta i den kod de redovisat och kunnat svara på alla frågor utan tvekan. Spridningen i lösningarna har också varit påtagligt större. Det beror troligen också på att laborationerna är mindre styrda i år.

Kraven för godkänt varierar en del från assistent till assistent. Kraven har visserligen diskuterats på assistentmöten, men det finns mer att göra. Det bör finnas någon sorts rättningsmall och lösningsexempel som representerar minimikraven. De elever som redovisat har dock i regel också blivit godkända och mycket få fall har överklagats till kursledaren.

För högre betyg än tre måste studenterna göra extra laborationer. Dessa ska ta upp nya moment och öka studenterna förståelse av ämnet, och inte bara ge mer arbete av samma typ. Årets extrauppgifter tar upp mer avancerad design av klasshierarkier och gränssnitt, samt undantagshantering. Min erfarenhet är att det är lättare att göra en rättvis betygssättning mha extrauppgifter än genom att betygsätta enskilda redovisningar.

Kurslitteratur

Kurslitteraturen borde täcka såväl grundläggande teori om objektorientering och programdesign som C++. Det är dock svårt att hitta en bok som täcker detta tillfredsställande. Erfarenheten visar att det behövs en komplett och tillförlitlig bok i C++ när man ska programmera i detta språk, annars kör man mycket lätt fast på enkla programmeringsfel. Eftersom C++ och dess bibliotek har förändrats rejält de senaste 2-3 åren valde jag den nya utgåvan av en välkänd och respekterad bok, "C++ Primer", som huvudbok. Som komplement hade jag helst sett en bok om mjukvaruarkitektur, med tyngdpunkt på objektorienterad design och designmönster. Eftersom två kursböcker är väl mycket för en 4p-kurs valde jag att istället inkludera ett utdrag ur "Design Patterns".

Det har dock visat sig att få elever tar sig tid att läsa huvudkursboken. Istället verkar de flesta utgå från föreläsningsanteckningarna och försöker använda "C++ Primer" som uppslagsbok. Detta kan förklara de stora problem många studenter i kursen upplever. Det går helt enkelt inte att programmera i ett så komplext språk som C++ utan att behärska de grundläggande språkkonstruktionerna, objektmodellen och minnesmodellen. Föreläsningsanteckningarna är klart otillräckliga för det.

Att så få elever läser kursboken är ett stort problem. En tänkbar åtgärd är att byta ut en eller två laborationer mot ett antal små övningsuppgifter ur boken som ska lämnas in skriftligen eller presenteras på en övning.

Elevenkät

En elevenkät har besvarats av 20 elever. Arbetsbelastningen för eleverna diskuteras nedan. Här följer en sammanfattning av övriga synpunkter.

Kursens mål verkar vara klart och ingen direkt kritik har riktats mot innehållet i kursen. Eleverna tycker att deras förkunskaper är tillräckliga. Jag delar den uppfattningen (i denna kursomgång, inte generellt).

De flesta verkar nöjda eller mycket nöjda med föreläsningarna. Även övningarna verkar ha fungerat bra. Mot handledning på laborationstiderna finns viss kritik. Några elever anser att det har varit för få handledare. En ganska stor del av eleverna anser också att handledarnas kunskaper har varit för dåliga (se Undervisningen ovan).

Många är missnöjda med kursboken. Den vanligaste kritiken är att boken är för tjock och att den är svår att slå i. Att boken är tjock beror på att C++ är ett komplext språk och att boken är komplett och förklarar i detalj. Jag tycker inte Lippman är onödigt pratig, och de frågor jag har fått från eleverna tyder på att Lippman ligger på rätt nivå. Däremot är boken utan tvekan svår att slå i, vilket är en allvarlig brist. Förra årets kursbok, Stroustrup, var betydligt lättare att slå i, men ansågs allmänt vara för svår. Vi får försöka hitta en lämpligare bok till nästa år.

Utdraget i kursbunten som behandlade designmönster ansågs vara otillräckligt. Materialet uppfattades som alltför abstrakt av flera elever. Jag kan förstå det. Man bör fundera på om man ska låta design ta större plats i kursen, t ex på bekostnad av den dynamiska modellen i UML.

Förra året användes Leda för de laborationer som innehåller grafik. Många tyckte att det tog för långt tid att sätta sig in i Leda, att manualen var för tjock, och att det vara mycket svårt att avlusa Leda-programmen. I år bytte jag därför till en mycket enkelt grafikpaket, Grain. En del elever tyckte dock att även Grain var svåranvänt. Troligen beror det på att de är ovana vid s.k. inverterade program, dvs enkeltrådade program där kontrollen normal ligger hos fönstersystemet och exekveringen drivs framåt av callbacks. Nästa kursomgång ska jag därför ägna en föreläsning och en övning till att gå igenom detta ordentligt.

Kursens belastning för eleverna

Av de kommentarer jag fått, personligen och via enkäten, verkar flertalet elever uppfatta kursen som mycket arbetskrävande. Den uppskattning av tiden som eleverna gjort för de tre obligatoriska laborationerna hamnar dock ungefär på den beräknade laborationstiden på 120 timmar. Jag tror i alla fall att många elever ägnar denna kurs alldeles för mycket tid pga att de inte arbetar systematiskt. Typiskt Ofta har jag fått hjälpa elever som säger sig ha suttit med en bugg "i timmar". Med enkel, systematisk felsökning har vi hittat felet på tio minuter. Med trial-and-error klarar man inte laborationerna i denna kurs, C++ är helt enkelt för komplicerat. Bristen på rationellt utnyttjande av tiden vid programmering är någonting vi (NADA) delvis är ansvariga för. Tredje- och fjärdeårsstudenter borde ha lärt sig att arbeta effektivt i de grundläggande datalogikurserna.

Förkunskaper

Förutom brister när det gäller testning, avlusning etc. verkade förkunskaperna tillräckliga.

Verkligt kursinnehåll

Föreläsningsplanen hölls i stort sett. En föreläsning utgick pga sjukdom. Antalet föreläsningar räckte ändå till för att täcka stoffet, så någon ersättningstid lades inte in. Föreläsningsanteckningarna visar det som verkligen gicks igenom. Laborationerna finns också tillgängliga i PostScript.

Planerade förändringar

Till kursomgången i period 4 införs en föreläsning och en övning som ägnas enbart åt grafikpaketet Grain och dess klasser. Fler exempel som använder Grain görs tillgängliga via nätet.

Designmönster ges något större plats och de föreläsningarna läggs tidigare i kursen så att de ger mer stöd för laborationerna. Mallar och undantagshantering läggs istället sist i föreläsningsplanen.

^ Upp till Kursomgång period 3 98/99 för E.


Sidansvarig:
Senast ändrad 26 maj 1999
Tekniskt stöd: <webmaster@nada.kth.se>