Kursöversikt

Faser och sprintar

Kursen är uppdelad i tre faser, fas 1, 2 och 3. Fas 1 och 2 behandlar imperativ programmering exemplifierad med C respektive objekt-orienterad programmering exemplifierad med Java. I dessa faser arbetar du i ett kodpar med en annan person. Mellan varje inlämningsuppgift kommer du att rotera partner. Fas 3 är ett projektarbete med 4-6 personer.

  • Fas 1 och 2 är indelade i sprintar. Varje sprint är 2 veckor lång.
  • Fas 1 har två sprintar.
  • Fas 2 har två sprintar.
  • Indelningen av fas 3 i sprintar samt sprintarnas längd bestäms av projektgruppen.

Varje sprint har ett antal uppgifter knutna till sig. För varje sprint inom samma fas växer kraven på uppgifterna som också blir mer komplicerade, och du får fler uppgifter att välja mellan. För att bli godkänd på kursen måste du göra minst en uppgift per sprint.

Inlämningsuppgifter, mål och redovisning

För att bli godkänd på kursen kommer du att behöva demonstrera att du uppnått alla kursmål (detta gäller på alla kurser). För att göra det tydligare arbetar vi med att separera inlämningsuppgifter från de kursmål de (är tänkta att) examinerar. Det betyder att syftet med att göra en inlämningsuppgift inte är att "skriva ett program som..." utan att koppla programmet mot kursens mål och använda programmen som du skriver för att visa att du uppnått målen.

Du utgår alltså från (helst färdiga, men även ofärdiga) uppgifter när du redovisar mål, och det skall finnas en tydlig koppling till uppgiften eller någon föreslagen utökning till uppgiften. Det ingår i uppgiften (eller egentligen i hela kursupplägget) att förstå mappningen från uppgift (eller del av uppgift) till lämpliga mål. Vi ger dock förslag, men färre och färre ju längre in i kursen vi kommer. Det räcker inte med att bara följa förslagen för att bli godkänd, utan du måste själv ta reda på/förstå vilka mål du bör redovisa när.

Målen redovisar du i stort sett uteslutande på labbarna (ca 8 timmar varje vecka). Till labbarna kan du också gå för att få hjälp. Försök att alltid redovisa mål i sammanhängande klumpar.

Om kursmålen

För varje mål anges vilken nivå målet ligger på och hur det kan redovisas. Totalt finns 36 mål på nivå 3, 18 mål på nivå 4 och 8 mål på nivå 5. Utöver dessa finns 4 mål som avser inluppar och 6 mål för projektet. Du förväntas bocka av mål löpande under kursens gång. För att bli godkänd på kursen måste alla inluppsmål och projektmål vara godkända. För att få betyget 3 på kursen måste samtliga mål på nivå 3 vara uppfyllda, för betygen 4 måste samtliga mål på nivå 3 och 4 vara uppfyllda och för betyget 5 måste samtliga mål vara uppfyllda. Observera att det inte finns en linjär relation mellan antalet mål och tidsåtgång -- och många mål kan bockas av samtidigt och inom ramarna för samma uppgift.

Notera att du förväntas att själv söka efter information, både i de länkar och bokreferenser som finns i kursmaterialet, men också fritt med hjälp av t.ex. Google och Wikipedia. Föreläsningarnas syfte är att måla en övergripande bild och introducera viktiga koncept och ibland även göra praktiska övningar. Screencasts används för mer detaljerade utvikningar om mindre ämnen. Förslag på kursböcker finns på kursens webbsida, men det finns ingen specifik bok som vi följer under kursens gång.

Arbetsgrupper och programmeringspar

Under kursens gång kommer du att ingå i en framslumpad arbetsgrupp med ca 10-12 personer. Dessa grupper byggs successivt upp under kursens första vecka i takt med att vi får namnen på alla registrerade studenter från IT-kansliet. Ur arbetsgruppen får ni fritt skapa kodpar om två personer med kravet att man måste rotera mellan varje inlämningsuppgift och att man inte får ha samma partner mer än en gång under fas 1 och 2. Anledningen till att du själv skall välja par beror på att du i möjligaste mån vill arbeta med någon annan i samma grupp med liknande intressen och ambitioner. I projektet kommer vi att bilda projektgrupper av två programmeringspar. (Möjligen tre.)

Du kommer att göra i stort sett allt arbete på denna kurs tillsammans med någon annan i ett programmeringspar. Ni kommer också i regel att redovisa tillsammans, oavsett om dessa redovisningar sker i labbsal eller på annat sätt. Alla redovisningar ger dock individuella godkänt/underkänt och det är möjligt för studenterna A och B att redovisa för målen X, Y och Z varav endast B redovisar Z och endast A blir godkänd på X.

Parprogrammering på IOOPM

Den bakomliggande orsaken till att parprogrammering är obligatorisk är att parprogrammering (och andra tekniker för att uppnå liknande effekt med avseende på kunskapsspridning, granskning, etc.) inte bara tenderar att resultera i bättre kod än kod som produceras av en enskild, utan också förbättrar inlärningen. Genom att prata tvingas man sätta ord på vad man gör, och reflektera. Ibland försöka förklara något som man själv inte förstår fullt, etc. Det stimulerar framförallt djuplärningen -- du kommer alltså i mindre utsträckning att glömma bort allt efter att kursen är slut.

Det finns många olika varianter av parprogrammering. Tanken på IOOPM är att det vid varje tillfälle skall vara en person som är “driver” i bemärkelsen att man sitter vid tangentbordet, och att man skall byta driver mycket ofta, minst en gång var 30:e minut, men helst mycket oftare. Det kan vara en god idé att byta vid logiska enheter, t.ex. man byter när en funktion blir klar. Det är också bra om inte samma person skriver funktionen f och dess tester. Senare i kursen kan man parallelisera arbetet med att skriva test och funktion, men man bör ändå stämma av regelbundet (säg var 10:e minut) och sitta brevid varandra.

Det är en väldigt dålig ide att dela upp en uppgift i två delar och göra hälften var eftersom båda medlemmarna i ett kodpar måste får individuellt godkänt på alla mål vid redovisning. När examinatorn frågar en enskild person om ett mål och pekar på en del av koden måste den kunna ge ett bra svar. Att säga "jag skrev inte just den biten" är inte ett acceptabelt svar.   Om man vill dela på arbete måste man synka löpande och arbeta mer aktivt med kunskapsöverföring.

Omaka par

Om en person i paret upplevs som expert och en som novis är det bra att vädra det tidigt (ibland upplever båda att den andre är experten...). Om så är fallet är det viktigt att man ändå byter regelbundet och att båda utför samma typ av arbete. Om novisen sitter i baksätet kommer hen nämligen inte att lära sig lika mycket vilket manifesterar sig på kursen genom att man inte klarar kodprovet och därmed inte kursen.

Som nämnt ovan går det utmärkt att ha ett par där en (A) siktar på ett högre betyg än en annan (B). Det kan t.ex. manifestera sig genom att A gör vissa utökningar på egen hand, eller vissa redovisningar på egen hand.

Parprogrammering på distans

Om man har svårt att sitta tillsammans och koda i fysisk bemärkelse kan man använda bra online-verktyg. Man kan t.ex. ha motsvarande Skype igång, en chatt uppe, använda GitHubs issue tracker, etc. för att minska avståndet och synka. Det är bra att använda klienten med en historik som man kan gå tillbaka i när man måste felsöka eller hitta bakomliggande orsaker till missförstånd, etc.

Uppföljningsmöten

En gång per sprint kommer du att kallas till ett kort uppföljningsmöte där du (och din labbpartner) får presentera hur det går för er i den pågående sprinten. Där kan ni visa vad ni har gjort hittills och vad ni planerar att göra resten av sprinten. Tanken med dessa möten är att ni ska kunna få hjälp att hålla en lämplig styrfart genom kursen och att komma loss om ni har kört fast. Om ni är osäkra på vilka mål som passar med er uppgift kan får ni diskutera saken med en assistent och ett annat programmeringspar. Du hittar mer information om hur uppföljningsmötet går till här.

Labbar

Notera!!! Labbar på denna kurs avser tid att redovisa och få hjälp med programmering. Observera att den mesta programmeringen sker utanför schemalagd tid!

Under kursens första två faser finns det ungefär 8 timmar schemalagd i datorsalar per vecka, s.k. labbtillfällen. Deltagande vid dessa tillfällen är inte obligatoriskt (förutom inledande 6 labbar). Vid dessa tillfällen finns det möjlighet att få handledning och också möjlighet att redovisa mål (förutom inledande 6 labbar).

För att få hjälp under en labb måste du skriva upp dig på en tavla i den största labbsalen där labben sker.

Att redovisa under en labb

För att redovisa under en labb använder du AU-portalen. Under "Dashboard" kan du välja vilka mål du vill redovisa (notera att du måste vara inloggad). När du skickat in din ansökan om att redovisa syns den i vårt system, och så fort det finns en ledig assistent kommer hen till dig för att ta din redovisning. Assistenterna kommer bara ta redovisningar som anmälts under schemalagd handledningstid.

Efter att du redovisat kommer assistenten att bocka av de mål du framgångsrikt redovisat och signera rapporten. Om du misslyckades med att redovisa ett mål kan du få rest eller bara inte bli godkänd. Rest betyder att du kan försöka redovisa igen så fort du fixat till de småfel assen pekat ut; annars måste du vänta till nästa labbtillfälle. I det senare fallet kommer systemet inte tillåta dig att försöka redovisa samma mål igen inom 24 timmar.

Senare i kursen kommer systemet automatiskt att lägga till ytterligare ett mål till redovisningen när du anmäler dig (ett s.k. repetitionsmål). Detta blir synligt för dig i samband med att systemet visar din plats i redovisningskön. Det extra målet väljs från mål som du tidigare har bockat av, och tanken är att du under redovisningen ska relatera det målet till de andra målen du presenterar. Om det mål som lades till inte är relevant duger det utmärkt om man kan sakligt redogöra för varför ("Java har inga pekare, alltså är det inte relevant att prata om pekararitmetik"). Syftet med att tvingas återbesöka ett redan avbockat mål är för att stimulera till att hålla goda vanor och kunskaper vid liv!

Hur mycket får man redovisa vid ett givet tillfälle?

Man får redovisa max 4 godkända mål vid varje labbtillfälle (25 labbar under kursen initialt planerat, förutom 6 uppstartslabbar de första två veckorna). Det extra mål som systemet lägger till själv räknas inte in bland dessa.

Kodprovet kan inte användas för att redovisa mål.

Betyg

Målen har en betygsnivå kopplad till sig. Mål på högre nivå omfattar de på lägre nivå. Man kan inte byta ut ett mål på en högre nivå mot ett mål på en lägre nivå (det vore inte vettigt).

  1. För att få betyget tre måste man klara av alla mål på nivå 3.
  2. För att få betyget fyra måste man klara av alla mål på nivå 3 och 4.
  3. För att få betyget fyra måste man klara av alla mål på nivå 3, 4 och 5.

Högskolepoäng och kursfordringar

Kursen ger totalt 20 hp uppdelat på fem delar:

  1. 2.5 hp för kodprovets imperativa del (C)
  2. 2.5 hp för kodprovets objektorienterade del (Java)
  3. 5 hp för fas 1 avklarad
  4. 5 hp för fas 2 avklarad
  5. 5 hp för fas 3 avklarad (projektuppgiften)

Observera att om man klarar av alla mål på nivå 3 och uppfyller alla krav på projektuppgiften får man 15 HP (alla utom kodprovet).

Definitionen av fas 1 avklarad

  1. Z100 och Z101 avbockade.
  2. 14 avbockade kunskapsmål på nivå 3 (man kan inte använda samma mål i flera faser)
  3. Inga eftersläpande repetitionsmål

Definitionen av fas 2 avklarad:

  1. Z103 och Z104 avbockade.
  2. 14 avbockade kunskapsmål på nivå 3 (man kan inte använda samma mål i flera faser)
  3. Inga eftersläpande repetitionsmål

Definitionen av fas 3 avklarad:

  1. Målen Y64--Y69 uppfyllda, och därutöver
  2. 4 avbockade kunskapsmål på nivå 3 (man kan inte använda samma mål i flera faser)
  3. Inga eftersläpande repetitionsmål

När rapporteras poäng in?

(Planerat.)

Vecka 44 och 45 rapporterar vi in 5 poäng för alla som är klara med fas 1 och ytterligare 5 poäng för alla som är klara med kodprovet.

Vecka 49 och 50 rapporterar vi in 5 poäng för varje avklarad fas som ännu inte rapporterats.

Kodprovspoäng rapporteras in i samband med varje kodprov. Ibland slår vi ihop rapportering av kodprov 2 och 3 beroende på rättningstid och annat.

Vecka 3 och 4 rapporterar vi in 5 poäng för varje avklarad fas som ännu inte rapporterats.

Om du har problem med CSN eller måste ha poäng tidigare av någon annan anledning -- hör av dig!

Kursen i ett nötskal

  • Det finns många uppgifter och du har stor valfrihet med avseende på vilka du vill göra och i vilken ordning.
  • Det finns många mål som du måste redovisa för examinatorer för att få ett visst betyg på kursen, men du har stora friheter att välja vilka mål du vill redovisa inom ramarna för vilken uppgift, hur och i vilken ordning.
  • Det finns en föreslagen progression med lämpliga uppgifter (i början också tips på mål), men om du har tidigare erfarenhet kan det finnas andra vägar för dig som känns bättre. Vi hoppas att kursen skall passa dig som inte programmerat utanför utbildningen såväl som du som identifierar dig som programmerare.
  • Det står dig relativt fritt att utöka en uppgift för att kunna demonstrera ytterligare mål inom dess ramar.
  • Det enda kvarvarande obligatoriska ”tenta-moment” som finns på kursen är ett kodprov som görs i de vanliga datorsalarna med institutionens datorer. Du får uppgifter att lösa och får använda alla dina vanliga verktyg (dock ej Google och StackExchange etc.). Målet är att rättningen skall ske automatiskt och att du skall få svar så fort alla tentor är inne.
  • Projektet är också en arbetsuppgift, och huvudmålet är inte att göra en fullständig implementation av specifikationen. Istället skall du använda de situationer som uppkommer under projektet till att redovisa mål på kursen. Precis som på de mindre programmeringsuppgifterna finns det kvalitetskrav som inte motsvarar mål som också måste vara uppfyllda.
  • Kursen har en tydlig målsättning kring muntlig och skriftlig framställning – du kommer att behöva skriva och hålla korta framställningar löpande under kursens gång. Tanken är att den kunskap man har men inte kan förmedla är inte mycket värd.
  • Kursen har drag av problembaserat lärande där en inbyggd svårighet är att navigera rymden av kursmål och se vad som bäst låter sig redovisas när, vilket i sin tur kräver att man förstår kursmålen. Dessa självstudier understödjs bl.a. av ett länkbibliotek.
  • Användande av verktyg är centralt för all programmering; detta fångas av de mål på nivå tre som specifikt rör användande av verktyg.