Kursanalys för 2D1387 Programsystemkonstruktion med C++, hösten 2000
Kursdata
Tid: period 2 läsåret 2000/2001, dvs oktober-december 2000
Poängantal: 4 (varav 3 på labb, 1 på tenta)
Tenta: ordinarietenta efter period 2 (20 december 2000)
Föreläsningar: 16 timmar.
Övningar: 6 timmar.
Labbtillfällen: 18 timmar.
Kursledare och föreläsare: Johnny Bigert
Övningsassistenter: Mårten Björkman och Mattias Lindström (båda doktorander på CVAP)
Antal aktiva elever: 96 varav 22 från SU
Kurslitteratur: Bjarne Stroustrup "The C++ programming language", Stanley Lippman "C++ primer"
Avklarade moment efter ordinarietentan 2000-12-20:
Tenta 81 av 88 (92% G av tentander, 84% av alla)
Labb 1 94
Labb 2 80
Labb 3 71
Alla labbar 67 (70%)
Prestationsgrad: 73%
Examinationsgrad: 62%
Mål
Kursens mål är att
- eleven efter genomförd kurs ska ha kunskaper om
programmeringspråket C++ och samtliga tekniker och nyckelord språket tillhandahåller.
- eleven ska ha använt de tekniker språket tillhandahåller och sett de fördelar och brister teknikerna medför
- eleven ska ha skrivit och kompilerat stora program
för att eleverna ska
- kunna konstruera effektiva datorprogram i C++
- kunna sätta sig in i befintlig C++-kod
- kunna välja mellan två ekvivalenta konstruktioner med olika effektivitet
Sammanfattning
Resultatet på ordinarietentan var mycket bra med endast 7 underkända
på 88 tentander (8%). Tentan speglade den ganska komplicerade teorin
bakom språket och behandlade endast det som tagits upp på
föreläsningarna. Min gissning är, och förfrågningar bekräftar
delvis, att de som inte deltagit på föreläsningarna upplevde tentamen
som mycket svår.
Labbarna har gett eleverna praktisk erfarenhet genom många timmars
laborerande (genomsnittstider för labb1 15h, labb2 35h, labb3
90h). Labbarna upplevdes av somliga som extremt tidskrävande och med
stundvis monotona och repetitiva moment (citat "cut-and-paste").
Andra elever som använt tekniker som språket tillhandahåller som
t.ex. mallar (templates) hade inte samma åsikter. Mitt förslag
till lösning är att viga lite tid till genomgång av labbarna med tips
om olika tekniker (detta gjordes inte denna omgång).
Ingen specifik kursbok har utsetts vilket har bidragit till en viss
förvirring, dock har två böcker rekommenderats (Stroustrup
resp. Lippman). Anledningen till detta var att eleverna har olika
förkunskaper och önskemål, vilket visar sig i de många motsägelsefulla
kommentarer jag fått om de föreslagna kursböckerna (Lippman: "för
många exempel", "för få exempel", "för pratig", "för kortfattad"
etc.). Vissa elever vill ha ett renodlat referensverk medan andra vill
ha en genomgång från grunden med många exempel. Till nästa år ska
eleverna få välja bland böcker i olika kategorier såsom referensverk,
nybörjarbok, mer avancerad etc.
Jag har dessutom fått många kommentarer på att det är svårt att hitta
information om de olika funktionerna och klasserna i standardbiblioteket
(och då speciellt STL). Eleverna kommer i nästa kursomgång rekommenderas
böcker även inom detta område.
Förutom ovan föreslagna förändringar ska kursens innehåll förändras på
följande punkter till nästa kursomgång:
- Fler och längre exempel på OH-bilderna
- Labb3 övergår till att bli en projektuppgift
- Skelett-filer för labb2 och projektuppgiften
- Minskad arbetsbörda på labb3 genom färre uppgifter och fler tips
Faktiskt innehåll i kursen
Kursen behandlade alla delar av språket med ett fåtal undantag.
Dessutom behandlades de vanligaste behållarna i STL, iteratorer,
strängar samt in- och utmatning.
Elevernas synpunkter
En enkät (49 svar, 51%) gjordes med Eval.
Här följer en sammanfattning av enkätsvaren.
Kursinnehåll
Kursen ansågs vara ganska svår (41%) av dom flesta, medan några tyckte den
var medelsvår (39%) eller mycket svår (4%).
Jag tror att kursen är en av de tyngsta av datalogikurserna (och då
inte endast på Nada) sett till arbetsbördan. Jag anser att detta är
befogat eftersom språket är så stort och komplext. Det krävs mycket
tid framför datorn för att få en känsla för teknikerna.
80% fick i början av kursen klart för sig vad kursens mål var;
18% var tveksamma.
En stor majoritet (90%) tyckte kursen var intressant och meningsfull.
90% tyckte deras förkunskaper på Java var tillräckliga.
Kurslitteratur
50% använde Stroustrups bok, 23% använde Lippmans och övriga använde
någon annan bok, såsom
- C++ From the ground up. Herbert Schildt.
- C++-programmering 3:e upplagan, Stephen Prata och Lippman
- Stephen Prats, C+ Primer Plus
- Thinking in C++ Bruce Eckel
Stroustrup: 21% tyckte att boken var bra, medan 33% tyckte den var hyfsad. Kommentarer:
- "Stroustrup är rörig och ostrukturerad."
- "Stroustrup: MYCKET dåligt skriven bok."
- "Väldigt teoretisk och usla exempel."
- "Den är en acceptabel referensbok, men annars lite för lite förklaringar och förståeliga exempel."
Lippman: 36% tyckte att boken var bra, medan 45% tyckte den var hyfsad. Kommentarer:
- "DÅLIGA exempel: otydliga fragment av kod, inga inga kompletta listningar."
- "Boken gick inte att använda till det som man ville ha den till, nämligen som referens."
- "Boken är uppbyggd så att man måste läsa kapitlen från början till slut, om man vill förstå programexemplen ."
- "Lite pratig... samt lite konstigt upplägg."
Efter kommentarerna att döma var både Lippman och Stroustrup svårlästa och innehöll dåliga exempel.
De flesta tyckte också att de var dåliga som referenslitteratur. Jag ska införa en ny bok till
nästa kursomgång om jag kan hitta en lämplig.
Föreläsningsanteckningarna (120 sidor), med kopior på alla stordiabilder
som visades, ansågs vara mycket bra eller bra av 61%. 31% tyckte de var hyfsade.
Veckans föreläsningsanteckningar delades ut i början av första föreläsningen
varje vecka. Kommentarer:
- "Ett mycket bra och sammanfattande material. Dessutom relativt korrekt vilket man inte är bortskämd med."
- "Fler konkreta exempel behövs, ej bara små fragment av kod"
- "Lite mer exempel, samt svårare exempel. Även här är exempelkoden lite för enkel i jämf med det man behöver koda."
- "Mycket tacksam hjälp med tydliga exempel, då Stroustrup som vanligt inte hade någonting att säga."
- "Kunde ha varit lite tjockare. Tycker det borde funnits betydligt fler exempel än bara de allra enklaste fallen."
Kommentarerna visade att eleverna tyckte exemplen var för få och därför inte alltid var tillräckliga
för att se iden bakom teknikerna. Jag ska införa fler och mer utförliga exempel till nästa kursomgång.
Undervisningen
Kursen är upplagd så att den som vill läsa in den själv ska kunna göra det.
Trots detta gick 47% på i stort sett alla föreläsningarna.
24% gick på mindre än 20% av föreläsningarna.
56% ansåg att föreläsningarna pedagogiskt sett var mycket bra eller bra.
En person ansåg att dom var dåliga.
Några kommentarer:
- "Saknar jämf med Java för att underlätta inlärning."
- "I början gicks det som var lätt igenom jättenoggrant. Resten, det som var svårt gicks igenom med rasande fart (i stort)"
- "Första förläsningen borde vara lite mer konkret upplagd om hur man skriver ett enkelt C++-program, så att man kunde ha kommit igång direkt."
- "Ibland svävade han ut på mer generella datalogiska saker som man redan bör kunna, för att sedan ta de (i min mening) svåra delarna lite väl snabbt"
- "Poängtera mer varför man gör något, inte hur."
- "Det märks att föreläsaren är påläst, vilket förstås är bra."
- "Lugn och pedagogisk föreläsare som vet vad han talar om."
Det framgår att eleverna upplevde att de svåra delarna fick för lite tid på föreläsningarna.
Jag ska omfördela tiden så att grunderna får mindre tid och mer avancerade ämnen får mer tid.
Dock tror jag inte att det lönar sig att lägga till flera föreläsningar med exempel. Det behövs
helt enkelt mycket datortid för att ta till sig teknikerna.
24% gick på en av övningarna, 14% gick på två medan 16% gick på samtliga övningar.
45% gick inte på övningarna alls.
68% av de som gick på övningarna tyckte att de var bra eller mycket bra pedagogiskt.
Kommentarerna visade att övningarna höll en något för låg nivå.
Examinationen
Labbarna upplevdes som nyttiga och givande men väldigt tidskrävande. Laboration 1 tog 15 h i genomsnitt,
laboration 2 tog 35h och laboration 3 tog 90 timmar i genomsnitt.
Kommentarer om labbarna:
- (labb1) "Faktiskt intressant. Bra början för kursen. Lagom svårt."
- (labb1) "Bra genomgång av grunderna och förståelse för konstruktorer."
- (labb2) "För mycket pill med datumberäkningar"
- (labb2) "Kalendern var svår att få att funka perfekt, man ägnade stor del av tiden till jobbigt småpill som inte direkt har något med kursen att göra"
- (labb2) "Alldeles för omfattande."
- (labb3) "Vansinnigt mycket "same-same-but different"-programmering. Känns onödigt att implementera så många klasser."
- (labb3) "Rolig men tung. Belyste viktiga saker. Kunde dock vara lite mindre krav."
- (labb3) "Mycket kod. Dock en jättekul uppgift!"
- (labb3) "Extrauppgifterna var de som helt klart erbjöd den roligaste utmaningen i denna labb. I övrigt enormt ensidigt mycket klipp och klistra"
- (labb3) "Helt oacceptabel labb! Tidsåtgången har varit helt orimlig!!!!!!!"
Den första laborationen verkar ha varit en lagom introduktion till C++.
Laboration 2 medförde vissa svårigheter beroende på vilket
angreppssätt man valde. Jag ska ge en skelettfil till nästa kursomgång
för att undvika att eleverna fastnar med de otaliga datumproblemen.
Kommentarer gällande laboration 3 visade att de flesta elever upplevde
labben som alldeles för tidskrävande. Jag tror att det finns flera orsaker
till detta: dels var labben helt ny och det var därför svårt att uppskatta
tidsåtgången, dels var kraven på antalet objekt orimligt höga utan att
tillföra några kunskaper.
Mina slutsatser gällande labbarna var att de medförde en orimlig
tidsåtgång på problem som inte är C++-relaterade. I vissa fall (och då
speciellt labb 3) kunde tidsåtgången delvis ha undvikits genom tips på
föreläsningen (t.ex. mallar). Jag anser dock att den tidsåtgång som
återstår efter irrelevanta problem inte är orimlig. C++ är ett stort
och komplicerat språk och det behövs många datortimmar för att få en
känsla för teknikerna. Jag ska under nästa kursomgång förbereda
eleverna på att labbarna tar lång tid samt ge skelettfiler att bygga
på. Dessutom ska labb 3 övergå till att bli projektuppgift.
Ytterligare kommentarer på kursen
- "Otroligt bra kurs egentligen, förutom att den tog sån ofattbar lång tid o energi"
- "Jag lärde mig enormt mycket, men tycker att det tog lite väl mycket tid, stundtals bara för att upprepa kod."
- "Nyttig och lärorik, men otroligt tidskrävande kurs."
- "Kursen är rätt tung, åtminstone om man ville göra alla extrauppgifter. Det är förvånande att se hur stor skillnad det är på kurser vad gäller arbetsbördan. T.ex. vissa kurser på DSV (Java-programmering) är väl ungefär en tredjedel så ansträngande."
- "S...n vilken jobbig kurs!! Jag har iofs lärt mig en jäkla massa C++, men aldrig nånsin har jag lagt ner så mycket tid på att programmera, och då är jag ändå D4:a."
- "Tidsmässigt borde kursen vara 5 poäng. Labbarna tar sådan himla tid att göra."
Planerade förändringar
Jag tycker att kursen har fungerat över förväntan och jag har fått
många positiva kommentarer från eleverna. De negativa kommentarerna
rörde mestadels tidsåtgången och monotona delar på labbarna. Jag ska
därför fundera på hur man ska få tiden att kännas mer meningsfull.
Planerade förändringar:
- Ny kursbok för grunderna i C++.
- Kursbok för standardbiblioteken (inkl. STL)
- Omstrukturera labbarna och labbinstruktionerna.
- Ge skelettfiler och tips inför labbarna.
- Omfördelning av materialet på föreläsningarna, samt fler och utförligare exempel. Eventuellt hela kodstycken.
Upp till kursens hemsida.
Sidansvarig: <johnny@nada.kth.se>
Senast ändrad 5 mars 2001
Tekniskt stöd: <webmaster@nada.kth.se>