T-106.1212 Grundkurs i programmering

Kursens målsättningar

På kursen bekantar vi oss med objektorienterad programmering med programmeringsspråket Python. Efter att du gått kursen hoppas vi att:

  1. Du tycker att programmering inte är fånigt/onödigt.
  2. Du kan grunderna i programmering.

Meningen är att då kursen är slut kan alla deltagare skriva egna små program och kan förstå och ändra program skrivna av andra. Du torde ha en tillräcklig kunskap om programmeringens grunder för att kunna utvidga dina färdigheter på fortsättningskurser eller med egenhändig läsning. Om du har fått minst en trea i kursvitsord har du tillräckliga kunskaper för att delta i programmeringens fortsättningskurser (t.ex. T-106.1215).

Egna målsättningar

Kursen brukar ha många olika slags elever. Vissa vill lära sig så mycket som möjligt, andra vill bara komma igenom med en etta. Varje studerande ställer sina egna målsättningar enligt sin motivation och sina resurser. På kursen kan man själv välja vilka övningsuppgifter man gör, enligt sina egna målsättningar (se uppgiftssidan). Indelningen nedan kan hjälpa dig definiera dina egna mål. Fråga dig själv: Vill du komma igenom kursen med minimalt arbete? Eller vill du lära dig allting? Kanske någonting däremellan? Tänker du ta fortsättningskurser i programmering? Målen kan såklart förändras under kursens gång.

De egna målsättningarna har naturligtvis en påverkan på vitsordet. Bedömningen är organiserad så, att vitsordet 1 berättar att man har uppfyllt minimikraven, vitsordet 3 visar att man är redo att gå fortsättningskurser, och vitsordet 5 vittnar om utmärkta färdigheter.

Hur använder jag den här sidan?

Alla kursens mål kan man inte förstå i kursens början, eftersom många av programmeringskoncepten ännu är okända. Det är såklart bra att ögna igenom den här sidan i kursens början, men det är bäst att ta en titt på den när man har börjat lära sig lite mera.

Minimikraven

De här grundsakerna måste varje studerande som gått kursen kunna. Kan man dessa är man igenom kursen.

Jag förstår de centrala koncepten inom programmering och objektorienteringsparadigmen (t.ex. programkod, variabler, klasser, objekt, metoder, uttryck). Jag kan diskutera dessa saker med branschens terminologi. Om jag får läromedel eller annat material som är programmeringsrelaterat, kan jag läsa den och lära mig mera utgående från det. Jag kan självständigt söka mera information om programmering från t.ex. Internet.

Jag är bekant med arbetsfaserna då man producerar programkod (läsning av specifikationen, skrivning av koden, testning). Jag kan också använda hjälpverktyg (t.ex. utvecklingsmiljöer) för att utföra dessa uppgifter.

Jag kan läsa program skrivna i Python och dra slutsatser om hur programmet fungerar (då programmen är hundratals kodrader, består av många olika klasser och innehåller primitivare algoritmer).

Jag kan testa en Python-klass genom att skapa instanser av den och provköra metoderna.

Jag kan implementera klasser i Python, då en specifikation definierar det allmänna gränssnittet som ska förverkligas. Med andra ord: jag kan implementera instansvariabler och metodernas algoritmer. Jag kan skriva klasser från början eller redigera ett färdiggivet program så att det uppfyller specifikationen.

Jag förstår följande grundkoncept och -tekniker och kan använda mig av dem: klasser, objekt, metoder, uttryck, operatorer, datatyper, if-satser, slingor, parametrar och returvärden, elementsamlingar (åtminstone listor), o.s.v.

Jag vet vad klassbibliotek är (t.ex. Python Standard Library). Jag kan läsa klassbibliotekens dokumentation och utgående från det använda mig av biblioteksklasserna i mina egna program.

Jag förstår att en god programmeringsstil är viktig. Jag kan formulera koden så att den är tydlig och lätt att förstå för en människa som läser den (t.ex. indentering, variabelnamn).

"Målsättning för fortsättningskurser"

Bara minimikraven räcker knappast för de som är mera intresserade av programmering eller för sådana studeranden som tänker fortsätta studera programmering. Till exempel förutsätter kurserna Tietorakenteet ja algoritmit och Ohjelmoinnin Peruskurssi, osa 2 (endast på finska) att man kan mera än minimikraven i denna kurs. För dessa personer är åtminstone följande koncept viktiga.

Kan man de här sakerna motsvarar det ungefär vitsordet tre.

Jag förstår åtminstone någorlunda hur en dator gör när den exekverar ett program. Jag känner till koncept som kompilator, bytekod, stack, heap, virtualmaskin o.s.v. Jag vet hur anropsstacken används för att hålla reda på programmets tillstånd i datorns minne.

Jag kan gestalta, läsa och redigera också lite större programhelheter (storleksordningen tusen kodrader eller tio klasser) och mer komplicerade algoritmer.

Jag förstår vad arv är. Jag kan använda arv för att generalisera olika klasser enligt en viss specifikation.

Jag kan använda filer i mina program (båda att läsa och skriva i filer).

Jag har åtminstone en uppfattning om hur programkodens kvalitet påverkas av andra saker än bara att den fungerar. Jag vet till exempel att de lösningar programmeraren gör påverkar programmets effektivitet och hur svårt det är att redigera senare, och har sett exempel på detta. Jag vet vad refaktorering är. (Jag behöver inte nödvändigtvis veta hur man får en hög kvalitet på koden.)

Jag kan använda debuggern för att hitta fel.

Jag förstår vad rekursion är och har sett exempel på rekursiva metoder.

Jag vet vad ett grafiskt gränssnitt är. Jag har åtminstone en uppfattning om hur grafiska gränssnitt fungerar tillsammans med resten av programmet. (Jag kan inte nödvändigtvis skapa ett grafiskt gränssnitt.)

Jag vet flera olika sätt att förvara stora antal data-element (listor, tabeller, hashtabeller). Jag kan välja vilket sätt som är bäst, i enkla fall.

"Allting som kursen erbjuder"

På kursen behandlas också sådana ämnen och färdigheter som inte är obligatoriska för att komma igenom kursen eller att klara av fortsättningskurser, men som ändå är viktiga komponenter i programmeringens grunder. Det är starkt rekommenderat att också lära sig dessa saker (och framförallt nyttigt), men det är inte obligatoriskt.

Jag har provat på att planera egna små program eller programdelar enbart på basis av funktionella krav. Med andra ord har jag planerat program utan att en specifikation har sagt exakt hur programmets struktur (klasser och metoder) ska se ut. Jag har också implementerat programmen jag planerat.

Jag förstår grundkoncepten och principerna av Python-tolken.

Jag kan skriva ett simpelt användargränssnitt med hjälp av ett bibliotek.

Jag kan planera och skriva en simpel rekursiv metod.

Jag har en allmän uppfattning om hurdana programmeringsparadigmer det finns och hur programmeringsspråken har utvecklats.

Låt oss ännu nämna de ämnen som inte behandlas på denna kurs, utan först på den första fortsättningskursen i programmering: