Hoppa till huvudinnehållet
Till KTH:s startsida

DD1366 Programmeringsparadigm 6.0 hp

Kurs-PM VT 2024-60658

Version 5 – 2024-02-24 22:02:01

Kursomgång

progp24 (Startdatum 2024-01-16, Svenska)

Undervisningsspråk

Svenska

Kursen ges av

EECS/Datavetenskap

Kurs-PM VT 2024

Rubriker markerade med en asterisk ( * ) kommer från kursplan version VT 2024

Innehåll och lärandemål

Kursinnehåll

Funktionell programmering: funktionsbegreppet, högre ordningens funktioner, currying, evalueringsstrategier, strömmar, mönsterpassning, överlagring, polymorfism, interpretering, lat evaluering, typer och typklasser. Formella språk och syntaxanalys: automater, reguljära uttryck, grammatiker, lexikal analys, rekursiv medåkning, språkklasser. Webbprogrammering. Språköversättning: interpretering, kompilering och länkning. Programmeringsparadigm: kontrollflöde, subprogram, rekursion, klasser, typer, beräkningsmodeller och minnesmodeller.

Lärandemål

Efter godkänd kurs ska studenten kunna:

  • tillämpa och förklara allmänna begrepp inom programmering, särskilt kontrollflöde, rekursion, interpretering, paradigm och beräkningsmodeller 
  • tillämpa och förklara grundläggande begrepp inom funktionell programmering, särskilt rena funktioner, referenstransparens, högre ordningens funktioner, oföränderlighet, typer 
  • tillämpa och förklara grundläggande koncept inom formella språk och syntaxanalys, särskilt automater, reguljära uttryck, grammatiker, lexikal analys, och rekursiv medåkning
  • skriva egna klient-serverprogram och förklara grundläggande begrepp inom webbprogrammering

i syfte att

  • få ett bredare perspektiv på programmering 
  • kunna bedöma vilket paradigm och vilket programspråk som är lämpligt för att lösa en viss uppgift
  • kunna använda adekvat programmeringsstil i valt programmeringsparadigm
  • aktivt kunna delta i diskussioner om programmeringsparadigm, programspråkshistorik , språkdefinition, egenskaper hos typsystem, principer vid språkdesign, språköversättning, programmeringsprinciper och programmeringsbegrepp

Läraktiviteter

Föreläsningar är strukturerade presentationer av ämnesområden som är centrala för kursen, se lärandemål ovan. Föreläsningarna har akademisk kvart, vilket innebär att de börjar en kvart efter utsatt tid.

Varför förväntas ni gå på föreläsningarna?

  1. Strukturerad kunskapsöverföring: Föreläsningar ger en organiserad genomgång av kursmaterialet, vilket kan underlätta förståelsen för studenter.
  2. Tillfälle till interaktion: Även om föreläsningar ofta är ensidiga finns det ofta möjligheter att ställa frågor och få omedelbar återkoppling från föreläsaren. Det kommer också frågor till klassen där studenterna gissar genom att peka på väggar.
  3. Kontext och sammanhang: Föreläsare har möjlighet att ge exempel, dra paralleller till verkliga situationer och förklara varför vissa koncept är viktiga. Detta ger studenterna en djupare förståelse för materialet.
  4. Motivation: Att höra en passionerad föreläsare tala om ett ämne kan inspirera och motivera studenter att dyka djupare in i materialet på egen hand.

Vad får ni ut av föreläsningarna?

  1. Förståelse: Genom att lyssna, ta anteckningar och interagera under föreläsningarna får studenter möjlighet att processa och förstå ny information i en takt som är lämplig för lärande.
  2. Guidning: Föreläsare kan peka ut viktiga delar av kurslitteraturen, betona centrala koncept och varna för vanliga misstag.
  3. Exempel: Föreläsningar i programmering kan inkludera kodexempel som belyser koncepten som diskuteras. Att se dessa exempel i realtid kan hjälpa studenter att bättre förstå hur teorin appliceras i praktiken.
  4. Nätverk: Föreläsningarna ger en möjlighet för studenter att träffa andra studenter med liknande intressen, ställa frågor och diskutera ämnet utanför klassrummet.
  5. Förvänta er inte att föreläsningar ska kunna ersätta att läsa boken.

Vad förväntas av er inför föreläsningarna?

  1. Förberedelse: Följ kursen genom att läsa boken, lösa uppgifter i den och skriva på labbarna.
  2. Anteckna lagom: Ett väldigt bra sätt att följa med på en föreläsning är att anteckna stödord långsamt. Att försöka skriva ner allt som sägs och görs ger för lite utrymme för att hinna med på ett bra sätt.
  3. Passa på att ställa frågor: Under föreläsningar med kopiloter (assistenter i klassrummet) så finns det möjlighet att ställa frågor i en chat för de som har med sig en dator/surfplatta/mobiltelefon. Det finns också möjlighet att räcka upp handen för att ställa en fråga under själva föreläsningen och att komma fram med frågor till föreläsaren i pausen.
  4. Föreläsningar är ofta tysta: Under presentation av material så är föreläsningarna ofta tysta från åhörarnas sida medans pratet tilltar under övningar och pauser. Tänk på att hålla nere ljudnivån i en föreläsningssal. Många upplever det som svårt att koncentrera sig eller stå ut om det blir för mycket oväsen och inte alla har modet att berätta det för er.

Labbar är schemalagda tider då ni förväntas arbeta med kursens formativa (lärande men inte examinerande) och summativa (examinerande) uppgifter. Under labbpassen är vissa av Kth:s datasalar bokade för er och assistenter är inbokade för att hjälpa er på plats. Det finns också viss möjlighet att få hjälp via Zoom av assistenter i kursen. För att få hjälp vid ett labbpass, köa på https://queue.csc.kth.se/Queue/Progp
På labbpass går det också att redovisa färdiga labbar och P-uppgifter. Idealiskt sett ska du då ha gjort ett issue på ditt githubrepo där det står "Redovisning" och fått en bokning via assistenter, men som backupstrategi så finns möjlighet till drop-in-redovisning på labbpass genom att ställa dig i kö för redovisning. Kom ihåg att stänga issues på Git efter redovisning för att undvika dubbel- och trippeljobb från assistenterna.

Observera att den hjälp ni kan få av assistenter i kursen mest handlar om att hitta information och förstå vad uppgifterna går ut på. Att faktiskt planera, hitta angreppssätt, skriva kod, felsöka kod och testa kod är er uppgift som kursdeltagare. För frågor om var gränsen går för lagom mycket hjälp, se hederskodexen.

Detaljplanering

Se Canvas för kursen. Detaljplanering syns i vänsterkanten.

Förberedelser inför kursstart

Kurslitteratur

Funktionell programmering: Graham Hutton, "Programming in Haskell". Tidigare upplagor än senaste är ok.
Paradigm: Robert W Sebesta, "Concepts of Programming Languages". Tidigare upplagor än senaste är ok.
Syntax: Ullman, "Introduction to Automata Theory, Languages, and Computation". Finns på biblioteket.
Internetprogrammering: W3schools tutorials om PHP.

För föräldrar

Vissa studenter på kursen är föräldrar och har ett extra ansvar för en liten människa. För att göra livet lite enklare för er så har jag satt följande regler på föreläsningar och laborationer.

1. Barn i amningsålder är utan undantag välkomna på föreläsningar och laborationer i kursen. Försök att sätta er nära en utgång så att det är lätt att gå ut om den lilla människan skulle få ett behov som skulle störa undervisningen.

2. Ibland kan barnvakter/dagis få problem och istället för att tänka "jag kan inte ta med ett barn till en föreläsning", packa med hörlurar och ta med den lilla människan. Sitt helst nära en dörr ifall det skulle bli svårt att hänga med på föreläsningen.

3. Jag uppmanar alla lärare, assistenter och kursdeltagare att göra sitt bästa för att se till att det blir så enkelt som möjligt för föräldrar att kombinera ansvaret med att ta kursen med ansvaret för en liten människa.

Tack till Dr Mikael Vejdemo-Johansson för originalet.

Examination och slutförande

Betygsskala

A, B, C, D, E, FX, F

Examination

  • LAB1 - Datorlaborationer, 3,5 hp, Betygsskala: A, B, C, D, E, FX, F
  • MAS1 - Mästarprov, 2,5 hp, Betygsskala: P, F

Examinator beslutar, baserat på rekommendation från KTH:s handläggare av stöd till studenter med funktionsnedsättning, om eventuell anpassad examination för studenter med dokumenterad, varaktig funktionsnedsättning.

Examinator får medge annan examinationsform vid omexamination av enstaka studenter.

Mästarprov är individuella uppgifter som redovisas både skriftligt och muntligt.

Avsnittet nedan kommer inte från kursplanen:

LAB1 - Datorlaborationer, 3,5 hp

Kursen består av 8 laborationer. De obligatoriska heter F2, S1, S2 och W1. Observera att F1 från och med i år varken är obligatorisk eller betygshöjande.
De betygshöjande heter X1, X2, F3 och S3. Varje betygshöjande labb höjer betyget med ett steg enligt skalan E->D->C->B->A. Ordningen som de betygshöjande står skrivna i är den rekommenderade prioriteringsordningen men betyget höjs även om ni väljer en annan ordning.

MAS1 - Mästarprov, 2,5 hp

Individuella uppgifter: mästarprov

Tre obligatoriska individuella uppgifter, mästarprov, kommer att ges. Dessa ska lösas individuellt och redovisas både skriftligt och muntligt. Skriftliga lösningar till dessa uppgifter ska lämnas in i Canvas senast den tid som anges på uppgiftslydelsen. Den muntliga redovisningen, antingen i Zoom eller på campus, kommer att ske några dagar senare för någon av assistenterna på en tid som ska bokas i förväg i Canvas. Redovisningstiden är 10 minuter per student och mästarprov. Vid redovisningen ska du kunna svara på assistentens frågor utan att behöva läsa innantill, men du får ha din inlämning och programkoden som stöd.

Mästarproven är inte betygshöjande utan de ger endast godkänt/icke godkänt.

På de första två mästarproven (Funktionell programmering och Paradigm) gäller: För godkänt krävs att ni har gjort en signifikant insats på alla uppgifter.  Ett stort fel på en enda uppgift ger underkänt. Alla studenter har utrymme för ett mindre fel på mästarprovet. Om ni går kursen för första gången och har lämnat in dessa labbar innan deadline F2, S1 och S2 så kan dessa ge utrymme för ytterligare mindre fel, men endast om dessa mindre fel ligger på olika uppgifter. Att lösa F2 innan deadline kan hjälpa er på Funktionell Programmering och Paradigm men inte på mästarprovet i Syntax. Hjälpen, dvs utrymme för extra fel gäller inte ommästarprov eller omregistrerade studenter i kursen.

Mästarprovet i Syntax är indelat i 3 delar. Varje gång det ges så erbjuds alla 3 delarna, men om du klarar 2/3 delar så behöver du inte göra om dessa delar när du skriver det igen. I gengäld så gäller inga bonuspoäng här.

Det viktigaste att fokusera på när ni arbetar med mästarproven är kursens lärandemål. Det är olika lärandemål som examineras på de olika mästarproven. Att missa ett lärandemål innebär underkänt. Det är möjligt att få underkänt på få fel om de ligger på samma uppgift så i dina förberedelser inför mästarprovet är det extra viktigt att fokusera på det eller de lärandemål som du behärskar minst bra.

För funktionell programmering: tillämpa och förklara grundläggande begrepp inom funktionell programmering, särskilt rena funktioner, referenstransparens, högre ordningens funktioner, oföränderlighet (immutability), rekursion (fokus på basfall, rekursivt anrop, svansrekursion och icke-svansrekursion); och datatyper med fokus på stark typning.

För paradigm: tillämpa och förklara allmänna begrepp inom programmering, särskilt kontrollflöde (generellt, inklusive rekursion), interpretering, paradigm, beräkningsmodeller; och typsystem med fokus på hur de skiljer sig åt mellan programmeringsspråk.

För syntaxdelen: tillämpa och förklara grundläggande koncept inom formella språk och syntaxanalys, särskilt automater, reguljära uttryck, grammatiker, lexikal analys, och rekursiv medåkning.

Den som inte fått godkänt (eller inte hunnit lämna in) ordinarie mästarprov får möjlighet att göra ett nytt i slutet av kursen. Om ni inte klarar (eller inte lämnar in) ommästarprovet heller så ges nästa chans under nästa kursomgång. Det kan ske små förändringar i lärandemålen mellan kursomgångarna så håll koll på dessa.

Effektiva sätt att förbereda sig under kursens gång fram tills dess att mästarproven publiceras:

  • Läs kurslitteraturen (se kurs-PM). Om du hinner klart med Graham Huttons Haskellbok i funktionell programmering så kan du fortsätta med Structure and Interpretation of Computer Programming (SICP). Hela texten finns gratis online
  • Läs Sebestas bok i programmeringsparadigm.
  • Skriv labbarna. Det ger dels konkret erfarenhet av att arbeta med de olika paradigmen, dels ger F2, S1 och S2 bonuspoäng som kan användas för att kompensera för att vissa uppgifter bara är halvbra lösta. Ingenting kan dock kompensera för en lösning med grovt fel eller en utebliven lösning på en uppgift.
  • Skriv extralabbarna. Även om ni inte hinner klart så kommer träningen att vara bra inför mästarproven.
  • Delta i undervisningen med föreläsningar och laborationer.
  • Skaffa ett konto på open.kattis.com och välj lagom svåra uppgifter (easy och medium rekommenderas) att lösa i alla möjliga språk i kursen. Fokusera på Haskell för den delen av kursen.

Exempel på gamla mästarprov finns under uppgifter. Titta på dessa för att få en känsla för formatet på mästarprovet, men endast mönstermatchning räcker inte för de flesta studenter. Att läsa och laborera med språken enligt ovan är nödvändigt.

Möjlighet till plussning

Denna kurs erbjuder inte plusning. Om du är student från tidigare kursomgång så kan endast betygshöjande laborationer som gjordes inom deadline från första gången som du tog kursen bidra till ett högre betyg.

Resultatrapportering

Resultatrapportering till Ladok sker innan midsommar, utom i specialfall. Om det blir få så mailar vi de studenter som vi pausat inrapporteringen för. Om det blir många så meddelar vi via anslag på Canvas.

Etiskt förhållningssätt

  • Vid grupparbete har alla i gruppen ansvar för gruppens arbete.
  • Vid examination ska varje student ärligt redovisa hjälp som erhållits och källor som använts.
  • Vid muntlig examination ska varje student kunna redogöra för hela uppgiften och hela lösningen.

Avsnittet nedan kommer inte från kursplanen:

Artificiell Intelligens, såsom ChatGPT eller Github Copilot är strängt förbjudet på samtliga laborationer i kursen, samt på mästarproven. Det enda giltiga undantaget är att slå upp LaTeX-kommandon i samband med mästarprov. Inga delar av uppgiftslydelser eller lösningsförslag får dock matas in i en AI under examinationens gång.

Ytterligare Information

Ändringar inför denna kursomgång

Labb F1 är numera varken obligatorisk eller betygshöjande. Den ger med andra ord varken högre betyg eller poäng för att utföras. Den är dock fortfarande obligatorisk för studenter från tidigare kursomgångar som inte har betygsunderlag för att ha redovisat den i Canvas.

Det har tillkommit en labb i Internetprogrammering som heter W1 som är obligatorisk.

Mästarprovet i Syntax är numera indelat i 3 delar och om du klarar en del så behöver du inte göra om den senare. Mästarprovet i Syntax är också tidigarelagt för att ligga innan labbarna i Syntax.

Arbetssituationer

Examinationsmomenten är tänkta att motsvara arbetssituationer. Funktionell programmering.

  • Facebook har använt Haskell för att skriva ett DSL för att filtrera spam.
  • Googles map-reduce använder funktionella principer för att snabbt parallellisera enorma beräkningar och sökningar.
  • C++, C#, Java, Javascript, Python och Rust har alla implementerat språkfunktioner som motsvarar de funktionella för att göra vissa problem enklare och effektivare att angripa.
  • På TCS-gruppen forskas det mycket på formell programverifikation vilket möjliggör program utan buggar och här används funktionella språk, exempelvis Coq, Hol och Agda. Dessa kan även användas som stöd för matematiska bevis
  • Kubernetes använder immutability på sina Docker-containers. När du vill ändra inställningarna så stänger du ner en och startar upp en ny.

Programmeringsparadigmer lär dig konsultens arbete.

  • Du får snabbt sätta dig in i ett nytt programmeringsspråk och lösa problem i det för att sedan kasta dig in i nästa språk.
  • Precis som funktionell programmering så har varje paradigm riktiga problem som de gör enklare. Prolog används till exempel för att dimensionera flygplan.

Inernetprogrammering lär dig en av de vanligaste programmeringsuppgifterna.

  • Att skriva servrar och klienter samt att dokumentera dessa är en mycket vanlig arbetsuppgift i näringslivet.

Syntaxanalys är vad programmeringsspråken gör hela tiden.

  • Vissa programmerare designar nya programspråk eller åtminstone domänspecifika språk. Dessa behöver parsers och kompilatorer och det behöver du.
  • Även om du inte gör egna programspråk så behöver du förhålla dig till begränsningarna som kontextfria grammatiker och liknande lägger på språk och det får du lära dig genom labbarna och tentan i kursen.
  • Verktygen (regexpar och liknande) är användbara till en hel del annat, till exempel att läsa olika former av indata som formulär, mätserier eller loggar.

Mästarprovet har en muntlig redovisning som påminner om en anställningsintervju.

Fakta om kursomgång

Startdatum

Obligatoriskt innehåll saknas

Kursomgång

  • progp24 VT 2024-60658

Undervisningsspråk

Svenska

Kursen ges av

EECS/Datavetenskap

Kontakter

Kommunikation i kursen

För hjälp, kom fysiskt eller digitalt till ett labbpass i kursen.

För frågor annat än mail: Kommunicera helst via mail. Canvas har en mailfunktion, men den har stor förbättringspotential. Bland annat så skalar den bort mailadressen så det blir svårt att kolla upp KTH-id och Githubkonton. Fråga i första hand föreläsaren för den aktuella delen.
Funktionell programmering och paradigm: Marcus Dicander, dicander@kth.se
Syntax: Karl Palmskog, palmskog@kth.se
Internetprogrammering: Vahid Mosavat, vahid@kth.se

Återkoppling om kursen kan skickas till Kursnämnden. Representanter är:
Avid Fayaz: avidf@kth.se
Christofer Gärtner: cgartner@kth.se

Återkoppling om programmet kan skickas till Studienämnden. Se ditt programs hemsida för kontaktinformation.

Kursansvarig

Lärare

Lärarassistenter

Examinator