English Sök på Nada   Kontakt 
Numerisk analys och datalogi
Kungl Tekniska Högskolan
 

2D1458 Problemlösning och programmering under press

Kursanalys

HT 2003

Författare: Mikael Goldmann, NADA

Kursdata

Kurs 2D1458, Problemlösning och programmering under press, 6p
Examination programmeringsuppgifter och "tävlingar"
Genomförd HT 2003
Föreläsningar 24 timmar (12 st)
KurslitteraturSkiena: the Algorithm Design Manual
Antal studenter 17
Ansvarig/föreläsare Mikael Goldmann
Labbassistent Fredrik Niemelä
Gästföreläsare Stefan Nilsson

Sammanfattning

Studenterna är mycket nöjda med kursen som uppfattas som rolig, nyttig och (om man vill ha ett riktigt bra betyg) ganska jobbig. Vissa aspekter kan förbättras (se analysen). Ett mer grundläggande problem är att det är ganska få som går kursen. Det finns praktiska skäl som gör att det knappast går att vara fler än 30 deltagare, men hittills har det varit 15-20 deltagare bara. I år var det 17 från början, men tre hoppade av (varav två inte läst ADKn, och då är kursen antagligen väl svår).

Studenter

Studenterna går i huvudsak tredje eller fjärde året av sin utbildning. De 17 som följt kursen är fördelade enligt

13 från D
4 från MD-linjen(SU)

Av dessa har 3 ej fullföljt något moment på kursen. I två fall är det frågan om studenter på andra året av D-programmet. Åtminstone den ena har planer på att återkomma HT 2004. Dessa två avhopp är antagligen ett tecken att nuvarande förkunskapskrav är relevanta.

Ytterligare 3 har inte slutfört ett av kursens två moment. De planerar samtliga att komplettera detta under sommaren.

Nyckeltal

Prestationsgrad och Examinationsgrad (2004-02-09) är 74% respektive 65%.

Mål

Kursens mål är att ge
  • praktiska kunskaper i programmering och problemlösning under tidspress,
  • fördjupade kunskaper i konstruktion och analys av algoritmer,
  • metoder för effektivt lagarbete,
för att studenterna ska
  • kunna arbeta effektivt under tidspress,
  • bli duktigare på praktisk problemlösning och programmering,
  • kunna delta framgångsrikt i nationella och internationella programmeringstävlingar.
En förhoppning är också att deltagarna ska inspireras att delta i tävlingar utanför kursen, speciellt i SM/NM.

Nytt för i år

Vid två tillfällen ersattes programmeringsuppgifter av skriftliga uppgifter. I det ena fallet gällde det att konstruera problem (för att träna sig i att skriva specifikationer och i att konstruera lämpliga testsviter för att kunna testa föreslagna lösningar), och i det andra fallet gällde inlämningsuppgifter av mer traditionellt snitt (för att träna problemlösning på lite svårare exempel där det vore väl svårt eller väl tidskrävande att implementera lösningen).

Verkligt kursinnehåll

Vi har följt den planering som finns på kursomgångens hemsidor. Kursen tillför inte särskilt mycket teori till det som ingår i ADK-kursen, men förståelsen för specifika algoritmer och datastrukturer fördjupas och förmågan att använda dessa kunskaper praktiskt tränas grundligt. Tonvikten ligger på kombinatoriska problem men det förekommer enkla numeriska och geometriska problem också.

Undervisning

Undervisningen har dels bestått av teoretiska föreläsningar och dels av praktiska övningar/labbar. Dessutom har ett antal obligatoriska labbar/tävlingar varit en del av examinationen.

Examination

Kursen har två delmoment. Det ena momentet utgörs av ett antal tävlingar där problem lösts under tidspress i tre-personerslag. Det andra momentet består av ett stort antal uppgifter som löses individuellt under betydligt mindre tidspress -- en omgång uppgifter per vecka.

Kurslitteratur

Egentligen är kurslitetteraturen valfri, men ett par böcker som kan rekommenderas är Skienas The Algorithm Design Manual och Cormen, Leiserson, Rivest och Steins Introduction to Algorithms.

Studenternas arbetsbelastning

Examinationen har varit utspridd över hela kursen. Tävlingarna har varit vissa bestämda datum, men man har inte varit tvungen att delta vid alla tillfällen. De uppgifter som ska lösas varje vecka kan ta ganska lång tid i anspråk totalt över hela kursen om man siktar på ett bra betyg.

Förkunskaper

Problemen kan ofta lösas genom att tillämpa algoritmer och metoder från kursen Algoritmer, datastrukturer och komplexitet (eller liknande kurs), så kursdeltagarna behöver förkunskaper motsvarande stora delar av den kursen.

Förändringar från föregående omgång

Förra året framkom en rad ideer, speciellt vad gäller att innehållet i de praktiska övningarna, och även i den del av examinationen som inte utgörs av tävlingar. Här följer en lista av förslag på sådana moment:
  • Konstruera tävlingsproblem
  • Teoriuppgifter (problemlösning med papper och penna)
  • Individuella tävlingar
  • Bygga och dokumentera ett (mindre) kodbibliotek
Kursnämnden var positiv till de två första punkterna. I år har vi provat detta, och slutsatsen är att flera deltagare tycker att båda momenten tillför bra saker, men att uppföljningen var dålig, vilket är sant.

Både problemkonstruktion och teoriuppgifter får antagligen vara kvar, men hanteringen behöver förbättras. Målen med problemkonstruktion måste bli tydliga. Båda momenten måste läggas vid tidpunkter som medger en någorlunda snabb hantering och återkoppling.

Förutom de fyra tävlingstillfällena så har det förekommit ett antal tre-timmarslabbar som varit frivilliga. Vi har inte riktigt lyckats utnyttja dessa tillfällen på ett bra sätt och det är också relativt få studenter som utnyttjat dem. Man bör fundera igenom vad dessa tillfällen ska navändas till och man eventuellt bör skära ner antalet tillfällen.

Tävlingsmomentet i kursen är mindre viktigt och kommer att tonas ner en del. Dock har samtliga som besvarat enkäten varit positiva till momentet så det bör absolut vara kvar. Det är delvis en fråga om att anpassa kursbeskrivning och kursens mål.

Enkät

Enkäten har fyllts i av 10 personer, av de 17 som deltagit kursen. Eftersom kursen är liten har inte flervalsfrågor använts (med ett undantag). Nedan följer frågorna och en sammanfattning av svaren.

  1. Vad var bra -- och varför?

    Sammanfattning: Det är bra att få mycket träning i att implementera algoritmer som man lärt sig (ofta i andra kurser). Detta är något man saknar inom andra kurser. Man blir bättre och självsäkrare som programmerare. En person har en avvikande uppfattning och tycker det är svårt att se kursens relevans utom i samband med programmeringstävlingar.

  2. Vad borde tas bort?

    Sammanfattning: Några av programmeringsproblemen bör bytas ut (pga avrundningsproblem t.ex.). Tretimmarslaborationerna var inte så väl utnyttjade. Eventuellt minska antalet problemomgångar och/eller ta bort momentet med egenkonstruerade problem.

  3. Vad borde läggas till?

    Spridda förslag: individuella tävlingar, gästföreläsare som själva tävlat framgångsrikt, mer handledning i början, genomgångar av problemen i läxorna efter deadline.

  4. Vad borde förbättras (och hur)?

    Använd inte Valladolid under långlabbarna eftersom det inte är helt pålitligt. Utnyttja 3-timmarslabbarna bättre. Någon form av föreläsningsanteckningar och eller för föreläsningarna relevanta länkar på hemsidan. Javastödet på Valladolid är svagt.

  5. Vad anser du om momentet med Valladolidproblem?

    Alla är positiva till detta moment. Systemet praktiskt och bra, men ibland frustrerande om det går ner eller för att feedback på felaktiga lösningar är minimalt. Å andra sidan leder detta till att man lägger ner jobb på att skriva korrekta program från början. Betygssystemet kan behöva justeras. Ett ganska arbetskrävande moment, speciellt om man vill ha bra betyg. Dåligt Javastöd.

  6. Vad anser du om tävlingsmomentet?

    Roligt. Bra övning för de som vill vara med i riktiga tävlingar. Inte lika lärorikt som Valladolidmomentet.

  7. Vad anser du om momentet att konstruera egna problem?

    För dålig feedback. Många tycker det var roligt och nyttigt, men inte alla.

  8. Vad anser du om momentet med inlämningsuppgifter?

    Svårare än programmeringsuppgifterna. De flesta tycker att det var ett bra moment. Även här kan feedback förbättras.

  9. Angående Valladolidproblemen (ca fem i veckan): minns du några av problemen som särskilt bra eller särskilt dåliga (och i så fall -- vad var bra eller dåligt)? Var arbetsbördan lagom?

    (Några specifika problem får kritik.) Arbetsbelastningen ganska hög (mycket hög om man siktar på att lösa nästan alla problem, vilket inte alls krävs), men samtidigt mycket givande. Varje vecka finns några lätta problem och de första omgångarna anses lättare än de sista.

  10. Kursen är på 6p (3p för tävlingarna och 3p för uppgifterna). Vad tycker du om det jämfört med andra kursers poängantal?

    1. 0% (1 st) 6p är för lite.
    2. 100% (8 st) 6p är lagom.
    3. 0% (0 st) 6p är för mycket.
    (Någon har inte kryssat i något alternativ.)

  11. Skulle du rekommendera andra att läsa kursen? Varför?:

    Alla rekommenderar kursen. Den är rolig. Man blir bättre på att programmera, även om man redan är ganska van, och man får träning i att lösa algoritmiska problem och sedan implementera lösningarna i en omfattning som inte finns i någon annan Nadakurs. "Man måste dock ha ett genuint intresse för att klara kursen."

  12. Ytterligare kommentarer om kursen:

    Ingenting som inte redan framkommit som svar på tidigare frågor.

Slutsatser och kommande förändringar

Fredrik och jag har kommit till i stort sett samma slutsatser som studenterna. Den träning man får i kursen gör att även den som är duktig blir en skickligare programmerare, och för de flesta ger kursen också ökad förståelse för algoritmer och datastrukturer som förekommit i andra kurser. Att blir duktigare på att använda "sina verktyg" ger ett ökat självförtroende.
Tävlingsaspekten är av underordnad betydelse även om deltagarna tycker det är roligt. Begreppet "tävling" ska nedtonas. Detta leder förhoppningsvis i förlängningen till att fler går kursen.

Javastödet på Valladilid är primitivt, men det är svårt att rå på. Däremot är det sant att långlabbarna inte bör göras med hjälp av Valladolid eftersom det systemet inte är tillräckligt pålitligt (förutom bristerna i Javastödet).
Problem till långlabbarna får fixas på annat sätt.

Per Austrin kommer att vara assistemnt på kursen nästa år och antagligen även hålla flera av föreläsningarna.

Urvalet av problem från Valladolid ska ses över. Här är Per en ovärderlig hjälp eftersom han löst fler än 1100 av de problem som finns där.

Det nya momentet med problemkonstruktion ska tas bort eller motiveras bättre. Det är också viktigt att återkopplingen blir bra på detta moment och på momentet med inlämningsuppgifter. Jag tror dock båda momenten fyller en funktion. De skriftliga uppgifterna innebär att man kan ge problem som är intressanta men alltför omfattande att implementera. Problemkonstruktionsmomentet är bra för att det ger träning i att skriva en specifikation samt i att konstruera relevanta testsviter för att kontrollera om en implementation uppfyller specifikationen.
Dessa två moment omarbetas eller tas bort

Det saknas tillfällen att gå igenom lösningar och ideer för programmeringsproblemen som ska lösas varje vecka. En sådan genomgång skulle passa bra efter deadline. Dessutom behöver vi hitta ett bättre sätt att utnyttja tretimmars-labbarna.
Vi bör prova att använda några av tretimmarspassen till genomgång av lösningar på "förra veckans läxa".

migo@kth.se

Denna sammanställning har genererats med ACE.




Sidansvarig: Kursledaren <kursledaren@nada.kth.se>
Uppdaterad: 2004-06-02