Hoppa till huvudinnehållet

DD2489 Skalbar programutveckling med funktionell programmering 7,5 hp

Det största problemet med utveckling och förvaltning av stora system är komplexitet — stora system är svåra att förstå. [Out of the Tar Pit, av Moseley och Marks, 2006]. En stor del av denna komplexitet är oavsiktligt introducerad av vårt sätt att hantera programmens tillstånd. Den här kursen kommer att berika deltagarna i hur funktionell programmering drastiskt kan minska oavsiktlig komplexitet och skapa en kodbas som är enklare att förvalta och resonera kring. Funktionell programmering är ett paradigm som fokuserar på värden och matematiska funktioner istället för muterbara objekt och imperativa instruktioner. I ett funktionellt programspråk så är hantering av tillstånd typiskt förflyttat till randen av programmet. Eftersom god koddesign är ett intersubjektivt begrepp så måste vi ha en bra dialog tillsammans i kursen. Vi behöver vara öppna för varandras idéer, dela våra perspektiv och erfarenheter och kontinuerligt reflektera kring egna och andras erfarenheter i kursen. Ökade erfarenheter ger empirisk kunskap, intuition och sensorer som hjälper till att undvika oavsiktlig komplexitet, skapa lämpliga abstraktioner och utveckla en hållbar kodbas. Vi kommer att använda principen entydig källa för sanning (single source of truth) med atomära uppdateringar. På kurswebben kan du se hur biblioteket re-frame beskriver dessa begrepp.

Välj termin och kursomgång

Välj termin och kursomgång för att se aktuell information och mer om kursen, såsom kursplan, studieperiod och anmälningsinformation.

Kursval

Gäller för kursomgång

HT 2024 skalutv24 programstuderande

Anmälningskod

52257

Rubriker med innehåll från kursplan DD2489 (HT 2023–) är markerade med en asterisk ( )

Innehåll och lärandemål

Kursupplägg

Kursen består av föreläsningar (med krav på minst 80 % närvaro) och eget arbete i projektgrupper om tre personer. 

Kursinnehåll

Föreläsningarna består av mycket livekodning, praktisk vägledning, kodgranskning och dialog kring hur vi kan förbättra programkodens arkitektur och design. Detta kräver ett aktivt deltagande och en öppen positiv atmosfär på föreläsningarna. Tanken med föreläsningarna är att entusiasmera och bredda perspektiven kring storskalig programvaruutveckling.

Föreläsningarna är obligatoriska eftersom kursen baseras på vår gemensamma dialog och det aktiva deltagande som inkluderas i den.

Huvudsakligt innehåll: funktionell programmering, kodkvalitet, läsbarhet, förvaltningsbarhet, samarbete, versionshantering (git), globalt tillstånd, beroenden, matematiska funktioner, persistenta data strukturer, hantering av applikationers tillstånd, reaktiv programmering, webbutveckling, testbarhet, test som dokumentation, jämförelse med objektorienterad programmering, atomära uppdateringar av tillstånd, samtidiga förlopp (concurrency), DSL, Lisp och REPL.

Programspråken Clojure och ClojureScript används för att förverkliga kursens innehåll i ett projekt. Därmed kommer även kursen att ge gedigna kunskaper i Lisp, Clojure, Clojure Spec och REPL workflow.

Varje vecka kommer studenterna att få se en video med en konferenspresentation. Tanken är att den ska ge inspiration och öppna nya dörrar. Under föreläsningarna kommer vi att reflektera över innehållet.

Lärandemål

Efter godkänd kurs ska studenten kunna

  • designa, med hjälp av funktionell programmering, stora system så att de blir enkla att testa, förstå och förvalta
  • modellera information i ett program genom endast icke-muterbara data
  • reflektera över och diskutera hur arkitektur och design kan förbättras
  • reflektera över begreppen identitet, tillstånd och värde
  • skapa entiteter och komponenter så att de blir enkla att testa samt skriva test för dem
  • skydda intern design av ett program vid integration med andra system
  • utveckla ett program i samarbete med andra
  • granska och reflektera över given programkod
  • förvalta given programkod

i syfte att

  • förstå och behärska de parametrar inom programvaruutveckling som gör programkod hållbar, återanvändbar och flexibel inför förändrade krav.

Kurslitteratur och förberedelser

Särskild behörighet

Kunskaper i programutvecklingsteknik, 6 hp, motsvarande slutförd kurs DD2480/DD1367/DD1369/DD1392/DD1393/DD1346/DD1387/DD1388/DD2387/IV1303/H I1027/HI1201/DD1385/DD2385. Aktivt deltagande i kursomgång vars slutexamination ännu inte är Ladokrapporterad jämställs med slutförd kurs. Den som är registrerad anses vara aktivt deltagande. Med slutexamination avses både ordinarie examination och det första omexaminationstillfället.

Rekommenderade förkunskaper

Ingen information tillagd

Utrustning

Ingen information tillagd

Kurslitteratur

Ingen information tillagd

Examination och slutförande

När kurs inte längre ges har student möjlighet att examineras under ytterligare två läsår.

Betygsskala

P, F

Examination

  • PRO1 - Programvaruutvecklingsprojekt, 7,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öjlighet till komplettering

Ingen information tillagd

Möjlighet till plussning

Ingen information tillagd

Examinator

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.

Ytterligare information

Kursrum i Canvas

Registrerade studenter hittar information för genomförande av kursen i kursrummet i Canvas. En länk till kursrummet finns under fliken Studier i Personliga menyn vid kursstart.

Ges av

Huvudområde

Datalogi och datateknik

Utbildningsnivå

Avancerad nivå

Påbyggnad

Ingen information tillagd

Kontaktperson

Tomas Ekholm (tomase@kth.se)

Övrig information

Kursen ersätter DD2487 och kan inte kombineras med denna.

I denna kurs tillämpas EECS hederskodex, se:
http://www.kth.se/eecs/utbildning/hederskodex

Övriga föreskrifter

Denna kurs innehåller ett grupparbete. Kursregistrering efter den officiella registreringsperioden är därför inte möjligt, eftersom vi behöver skapa grupperna i början av kursen.