Kurser på Mjukvaruteknik

Inspirerad av Mayukos video i vilken hon går igenom hennes Computer Science-examen på UCSD kurs för kurs tänkte jag göra detsamma för Mjukvaruteknik (U) på LiU. Eftersom jag gick ut 2018 har det hunnit ske vissa förändringar i programmet, men de övergripande dragen är sig lika.

Termin 1

TDDE23 – Funktionell och imperativ programmering, del 1
Första kontakten med programmering på U sker i den här kursen med hjälp av programmeringsspråket Python. Jag hade redan programmerat i Python i ett par år innan jag tog den här kursen så jag tyckte den var jätterolig, men det tyckte de flesta av mina kursare också. Utöver att programmera i Python får man även lära sig om LiUs dator-miljö, och lära sig lite bash, scriptspråk och kommandoprompt i Linux, och Emacs, en texteditor som är bra men lite annorlunda.

TATA65 – Diskret matematik
En av de roligare matematik-kurserna med bra synergier till första programmeringskursen och datavetenskap i allmänhet. Fick lära sig ett och annat om permutationer och kombinationer m.m.

TDDD70 – Ingenjörsprofessionalism, del 1
Kursen Ingenjörsprofessionalism går i långsam takt över de första tre åren. I kursen tas olika ämnen upp som berör ingenjörsrollen, bland annat social kompetens, ledarskap och etik. Till varje ämne skriver man en reflekterande text om sin inställning till att vara ingenjör. En ”flumkurs” enligt vissa men de individerna brukar inte klara sig så bra med studierna i helhet så det är mer av en mognadsfråga om man gillar den här kursen eller inte.

TDDE25 – Perspektiv på data- och mjukvaruteknik
En kurs med lite av varje inom datavetenskap med roliga projekt. När jag gick kursen gjorde vi en AI till spelet XPilot, men numera kan man även programmera AIs till Starcraft II.

TDDD72 – Logik
Många nya begrepp och ett annorlunda sätt att tänka på. Logik-kursen lägger grunden för några kommande kurser som t.ex. Formella språk och automatateori och kompilatorkonstruktion så det är lika bra att lära sig den här kursen bra för det får man igen senare. Till tentan får man ta med sig ett kompendium med massa logik-regler så det krävs inte så mycket memorering, bara ett logiskt tänkande 😉

TDDE24 – Funktionell och imperativ programmering, del 2
Fortsättning på TDDE23, med ännu mera Python! Bjuder på en datortentamen på slutet där man får sitta och programmera. Jag fick ett halvt fel på den tentan, och grämer mig fortfarande över det. Vet man inte hur rekursion fungerar sen tidigare får man lära sig det i den här kursen.

Termin 2

TDDD78 – Objektorienterad programmering och Java
Bra kurs med många viktiga OOP-koncept och massa programmering i Java. Föreläsningarna var ett bra sömnpiller men laborationerna och projektet var utmanande och stimulerande, man får till exempel programmera Tetris. Mitt personliga projekt hette ”Seven Letters” och var en sorts hänga gubbe-spel. Jag hade problem med att använda designmönster i mitt projekt så jag fick bland annat ta till Singleton-mönstret. Spelet fungerade tillsammans med ordlistor från Wiktionary och kunde använda reguljära uttryck för att filtrera ord.

Skärmbild av spelet Seven Letters, med dialogrutan för konfiguration av ordlistan

I kursen används IntelliJ IDEA, en av de bästa IDE:erna på marknaden.

TDDD80 – Projekt: Mobila och sociala applikationer
En ökänd kurs pga dess historiskt höga avhopp. Den här kursen har omarbetats i flera iterationer sen jag tog den, men grundstommen är densamma: Du ska lära dig mycket om lite allt möjligt. Webb- och applikationsprogrammering, UX och användbarhetstestning, enhetstestning, kodgranskning och versionshantering. Täcker in många av de områden som man ställs inför i arbetslivet, men är väldigt individuell. Jag gjorde en Android-app som hette Poetry Party, där användarna tillsammans skriver dikter. Dessvärre avslutades projektet innan appen nådde Play Store, för koden var full av buggar.

TSEA28 – Datorteknik Y
Assembly- och lågnivåprogrammering. Har aldrig använt kunskapen jag fick under den här kursen, men den är väl allmänbildande och viktig på det sättet att man ska veta hur en dator fungerar.

TDDD85 – Formella språk och automatateori
En mysig kurs om automater och reguljära uttryck. Bra uppladdning inför kompilatorkonstruktionen om man väljer att läsa den. Likt logiken är det ett nytt sätt att tänka på.

Termin 3

TATA24 – Linjär algebra
En kurs jag la ner mycket tid på, men klarade godkänt med minsta möjliga marginal. Har inte haft mycket användning av linjär algebra i arbetslivet, men det förekommer. Dessutom ger det mycket street cred att vara bra på linalg, mest för att det är så svårt.

TDDC93 – Programutvecklingsmetodik, teori
Mjukvaruteknik är ju mer än bara programmering och i den här kursen får man lära sig lite om kravhantering, design, utvecklingsprocesser (t.ex. Scrum), testning och kvalitet. Inte den roligaste kursen, men inte heller den svåraste. Har man jobbat på ett mjukvaruföretag tidigare, till exempel på ett sommarjobb mellan år 1 och 2 så är den här kursen en bit kaka.

TDDD86 – Datastrukturer, algoritmer och programmeringsparadigm
DALPen täcker in många olika moment, men det var den absolut roligaste kursen under mina första tre år på programmet. I kursen lär man sig att man inte kan vara naiv om man vill lösa svåra problem, då får man istället vara smart och använda rätt algoritm för jobbet. Man skriver en del C++ och inser att det är språk som har det mesta men som man hoppas slippa i arbetslivet. Jag låg sömnlös några nätter över att jag inte kunde lösa Rotate to root, en kluring om hur binära sökträd ska balanseras, men med lite tips och idéer från min medkursare löste det sig till slut och jag rekommenderar alla att lösa lite Kattis-problem eller liknande för att stimulera intellektet.

TATB04 – Inledande matematisk analys
I den här kursen får man lära sig att skriva matematik på ett korrekt sätt enligt MAI, matematiska institutionen på LiU. Det finns oftast bara ett rätt sätt och det är lika bra att lära sig det här från början så slipper man det fruktlösa käbblet under tentavisningen senare, som annars kommer låta såhär:

Student: Men det är ju uppenbart vad jag menar här!
Examinator: Fast vi är ju inte tankeläsare, därför får du 0 poäng på uppgiften.

Termin 4

TATA41 – Envariabelanalys 1
En rolig men utmanande matematikkurs. Här får du derivera och integrera (glöm inte +C) och enda sättet att lyckas, om man inte är ett matematiskt geni, är mängdträning.

TDDB68 – Processprogrammering och operativsystem
En rolig och allmänbildande kurs med en svår laborationsserie (dubbelpekare är inte intuitivt). Trådar och processer, minneshantering och filsystem och mycket mer. Viktig kurs för att bli en bra programmerare. Minns att jag tyckte om kurslitteraturen Operating system concepts, AKA dinosaurieboken. Mycket memorering till tentan!

TDDE35 – Storskaliga distribuerade system och nätverk
Eftersom jag läst två år nätverksteknik på MDH innan jag började på LiU tyckte jag den här kursen var ganska lätt och rolig, men generellt är den ganska utmanande med mycket att lära sig och göra. Att lyckas väl i den här kursen är nyckeln till framgång, det var så för mig iaf då jag fick möjlighet att vara labbassistent för labbserien under ett par år framöver och sedan skrev exjobb med Niklas som examinator vilket ledde till två publicerade artiklar. Det finns ju dock andra vägar till framgång, men god kunskap om nätverk behövs i princip alltid, så plugga hårt under den här kursen!

TATA91 – En- och flervariabelanalys
På min tid läste vi TATA90 istället för TATA91, och en skillnad är att Taylor- och Maclaurin-utvecklingar är med i TATA91 men var inte med i TATA90. Hursomhelst tyckte jag att den här kursen var rolig och var den enda kursen på MAI som jag fick 5:a i, ett av mina stoltaste ögonblick som student. Jag minns dock att jag spenderade påskledigheten med att plugga den här kursen, och jag minns inget av det jag lärde mig och har inte behövt använda det i arbetslivet heller. Men att lösa matematiska problem ger en inre tillfredsställelse och att applicera det i verkligheten är sekundärt.

Termin 5

TDAB01 – Sannolikhetslära och statistik
En kurs som jag bedömer som ganska svår, jag fick skriva tentan tre gånger innan jag äntligen blev godkänd, men då var jag å andra sidan bara en poäng ifrån 5:a. Det kan helt enkelt vara så att när den här kursen klickar så är det ganska logiskt och trevligt med sannolikhetslära och statistik. Viktig kurs för de som går vidare med maskininlärning tror jag, själv har jag sällan behövt använda mina kunskaper i statistik, men grundläggande kunskaper är viktiga för att förstå omvärlden och inse att människor är typiskt dåliga på att tolka statistik.

TDDC17 – Artificiell intelligens
Bra balans mellan teori (inte så intressant) och praktik (lite mer intressant). Jag fastnade aldrig för AI, men det är ju ett hett ämne så man får väl vara nöjd att det ingick i utbildningen för allmänbildningens skull.

TDDD92 – Artificiell intelligens – projekt
Jag skrev en individuell rapport om Monte Carlo tree search (MCTS) och hade ingen aning om vad jag skrev om, men fick ändå 4:a i betyg på rapporten och 5:a i kursen tack vare ett bra projektarbete, min grupp gjorde en AI för generella spel med hjälp av GVG AI. Nuförtiden tror jag de flesta gör en AI till Starcraft II. Lärde mig att även om plugget ibland känns hopplöst så löser sig det oftast bra om man ringer en vän och ber om hjälp. Blev inte mer intresserad av AI efter kursen, snarare tvärtom.

TDDD37 – Databasteknik
Relativt enkel kurs om SQL och databaser, men lär ut viktiga koncept för att designa en databas på ett korrekt och effektivt sätt.

TFYA87 – Fysik och mekanik
Skrev 0 poäng första försöket på tentan, vilket fick mig att inse att det inte fungerar att bara skriva ner anteckningar från föreläsningar och lektioner och sen komma till tentan och hoppas att man kan få poäng under tentan genom att kolla upp formler i formelsamlingen. Tog revansch genom att spendera en sommar med att faktiskt lära mig lite om fysik, som trots allt är intressant när man väl ger det chansen. Bra kurs om man ska jobba med 3D och spel kanske, men för egen del har jag inte haft någon användning av den och minns mest små fragment av hur man räknar ut tröghetsmoment.

Termin 6

TDDD96 – Kandidatprojekt i programvaruutveckling
Äntligen någonting som är på riktigt! Jag fick göra kandidatprojektet som ensam U:are tillsammans med 8 andra D:are och insåg att de är lite annorlunda men mycket trevliga. Vi gjorde en gullig liten webbapp kallad Knekt och skrev en finfin rapport om det.

TSKS24 – Signaler och bilder
På min tid läste vi TSKS21 – Signaler, information och bilder istället för den här. Jag vet inte varför de tog bort informations-biten som var den roligaste, men kanske för att det är tillräckligt svårt med bara signaler och bilder som det är. Jag minns att jag pluggade relativt mycket inför den här kursen och det var mycket att komma ihåg till tentan och jag har glömt i princip allting. Men nog är det väl så att faltning i tidsdomänen motsvarar multiplikation i frekvensdomänen (se faltningsteoremet). Gillar man den här kursen kanske man skulle läst Y eller D istället för U.

TSRT19 – Reglerteknik
Roliga laborationer och svår teori, en väldigt ingenjörs-nördig kurs. Har inte behövt PID-reglering sedan jag läste klart den här kursen, men reglerteknik har en viss charm.

Master-kurser (Termin 7-10)

När du klarat av de tre första åren har du förmodligen fått en känsla för vad du tycker är roligt och du vill läsa mer om, så jag behöver inte beskriva kurserna i detalj här. Jag läste mest kurser som handlade om programmering och mjukvara och valde profilen ”Storskalig mjukvaruutveckling”. För mer information om U-programmets masterprofiler, se följande länk.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com-logga

Du kommenterar med ditt WordPress.com-konto. Logga ut /  Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut /  Ändra )

Ansluter till %s

Denna webbplats använder Akismet för att minska skräppost. Lär dig om hur din kommentarsdata bearbetas.