Hoppa till huvudinnehållet

DD2487 Storskalig programvaruutveckling 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 information från rätt kursplan och kursomgång.

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

Innehåll och lärandemål

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. 

Kursupplägg

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

Kurslitteratur och förberedelser

Särskild behörighet

Programutvecklingsteknik motsvarande någon av kurserna DD2480, DD1369/DD1392/DD1393, DD1346, DD1387/DD1388/DD2387, IV1303, HI1027/HI1201 eller DD1385/DD2385.

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 samordnare för 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.

Övriga krav för slutbetyg

Närvaro vid minst 80 procent av föreläsningarna är obligatoriskt.

Möjlighet till komplettering

Ingen information tillagd

Möjlighet till plussning

Ingen information tillagd

Examinator

Profile picture Stefan Nilsson

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

Kurswebb

Ytterligare information om kursen kan hittas på kurswebben via länken nedan. Information på kurswebben kommer framöver flyttas till denna sida.

Kurswebb DD2487

Ges av

EECS/Datavetenskap

Huvudområde

Datalogi och datateknik

Utbildningsnivå

Avancerad nivå

Påbyggnad

Ingen information tillagd

Kontaktperson

Tomas Ekholm (tomase@kth.se)

Övrig information

Kursen ersätter DD2386 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 registreringensperioden är därför inte möjligt, eftersom vi behöver skapa grupperna i början av kursen.