Kategoriarkiv: Utbildning

LiUtopia

Att plugga sker i alla möjliga former och en typisk uppdelning är att arbeta i grupp eller att arbeta ensam. Även om grupparbete är den form som gett mig mest glädje under min studietid, tack vare den sociala aspekten, har jag ofta behövt en stor dos ensamarbete för att förstå kursmaterialet bra nog för att klara tentorna. Att kunna fördjupa mig i det jag finner svårast genom att läsa och se på videoföreläsningar är aktiviteter som lämpar sig bäst att utföras på egen hand med så få störningsmoment som möjligt. Ensamarbete kräver andra typer av resurser jämfört med grupparbete och i det här inlägget tänkte jag framföra några av utmaningarna solopluggandet medför och även presentera vad jag tror är den ultimata lösningen på problemen.

Problemformulering

Att jobba hemifrån kan tyckas vara en bra miljö för att arbeta ostört på egen hand, åtminstone om man bor utan livliga sambos iller husdjur. Dessvärre är det en inte helt perfekt lösning för mig då bristen på disciplin och den goda tillgången på distraktioner som datorer, disk och dammsugare får mig att lätt smita undan från plugget för att göra roligare saker. Istället söker jag mig vidare utanför lägenheten och då oftast till campus som är min de facto arbetsplats. Hur bra är universitetet på att tillgodose mina behov? Helt okej, men jämfört med LiUs tillgång och kvalitet på grupprum finns det brister. Det finns förstås stora valmöjligheter för var man kan slå sig ner för att plugga på campus. Jag brukar ta plats i Café Java, Key-huset eller kanske A-huset om jag känner mig äventyrlig.

Ett oundvikligt problem med dessa platser är ljudvolymen. Det är surret från läskkylen, klinket på pianot och de omåttligt glada tjoandet från ekonomerna som gör att studieron blir lidande. Inte varje dag, men ofta. Någon kanske tror att jag glömt bort bibliotekets tysta läsesal. Till er vill jag säga att med tanke på att salen utrustats med decibel-mätare och inretts med bilder på sovande tigrar (som man inte vill väcka och därför bör vara tyst?) så kanske salen trots namnet inte är så tyst ändå. Det säger sig självt egentligen att ett rum för ca 30 studenter aldrig kan vara tyst. Dörrar och ryggsäckar öppnas och stängs, det knattras på tangentbord, hostas och rosslas och alltid är det någon som tycker det är okej att viska med sin kompis.

Ett helt annat problem jag erfarit är oron för stöld. När jag pluggar uppstår lätt behovet av fikapaus eller toabesök. Då uppstår dilemmat om huruvida man vågar lämna laptop och väska utom synhåll under de 5-10 minuter som man är borta. Sannolikheten att någon skulle stjäla mina saker medan jag är borta bedömer jag vara väldigt liten, men inte obefintlig. Den risken är jag oftast inte villig att ta och därför blir det kanske något färre fikapauser än det hade kunnat bli, vilket både jag och caféerna förlorar på.

Ett par andra mindre irritationsmoment jag stött på är den låga temperaturen i vissa salar, vilket jag nämnt tidigare, och att starkt solljus tvingar mig till att maxa ljusstyrkan på min laptop vilket kraftigt begränsar batteritiden.

Nu har jag gnällt utförligt och länge och kanske är det uppenbart att det jag efterfrågar är mitt eget kontor. Men är det inte orimligt att ge tusentals studenter tillgång till personliga kontor? Ja det är det nog, men det är också det som gör det här till en spännande och rolig utmaning.

En gyllene chans

LiU har den här våren påbörjat rivningen av Origo, en av byggnaderna på Campus Valla. Detta för att ge plats åt en ny byggnad, Studenthus Valla/Origo II, som planeras bli en byggnad som täcker nästan alla behov en student kan ha; bibliotek, Studenthälsan, studentfik och förstås studieplatser.

En illustration av LiUs nya byggnad Studenthus Valla

Illustration: White arkitekter

I de preliminära ritningarna har jag inte sett några förslag som löser problemen jag tidigare listade men eftersom huset inte har byggts än finns det förstås tid för ändring. Därför går vi nu raskt vidare till mitt förslag om bättre studieplatser, vilket presenteras i form av en så kallad user story.

En dag på Campus Valla

Klockan är 8:08 och denna tisdags datum är den 14e april 2020. Tina har parkerat cykeln och går med raska steg mot universitetets modernaste byggnad som skimrar i vårsolen. Efter att ha tagit sig två trappor upp kommer hon fram till studentcellerna. Tina har bokat cell 7 och tar fram sitt LiU-kort som hon blippar mot cellens låsterminal. Dörren glider upp och hon möter sin arbetsplats för dagen. Rummet är två meter brett och tre meter långt. Längs bort i rummet finns en stol och skrivbord och en enkel men bekväm soffa står mot rummets vänstra sida. Tina stiger in i rummet och hänger av sig ytterkläderna. Dörren stängs och på dess insida finns en tryckkänslig skärm som hälsar henne välkommen och presenterar ett antal val. Tina anger önskad rumstemperatur till 21° C och justerar det elektrokromatiska fönstret så att precis lagom mycket solljus kommer in. På skärmen finns det alternativ av olika ljudslingor för rummets högtalare att spela, bland annat fågelsång och åskstorm, men Tina väljer till slut havsbrus. Hon aktiverar även pomodoro-läget vilket gör att en vänlig röst påminner henne om att ta en kort paus (som hon ägnar åt armhävningar) efter varje arbetspass à 25 minuter.

Efter två timmars plugg av flervariabelanalys är det hög tid för fika. Eftersom cellen endast kan låsas upp av Tina under de timmar hon bokat den lämnar hon helt sonika sina tillhörigheter i cellen för att springa ner till studentfiket några trappor ner. Fiket myllrar av kaffesugna studenter och efter en kort pratstund med Johan och Lina tassar de tillbaks till sina respektive celler. Väl tillbaka stänger hon av havsbruset och njuter kort av tystnaden innan hon sätter sig till rätta i soffhörnet med sin mekanik-bok.

Tina har pluggat effektivt hela förmiddagen och väljer att ta lunch redan 11:45 och hinner mikra sin matlåda innan den värsta lunchrushen. Hon checkar ut ur cellen vilket gör den tillgänglig för andra även fast hennes bokning gällde fram till 12:30. Efter en hel förmiddag i lugn och ro har hon gott om energi för eftermiddagens projektmöte och föreläsning. Tina finner det en smula ironiskt; Celler som historiskt sett använts för att minska en persons frihet har nu istället gett henne större frihet än hon kunnat önska.

Reflektion

Jag gillar förstås idén om det högteknologiska och mysiga enkelrummet för LiUs framtida studenter men med ett sådant här förslag känns det viktigt att tänka på dess risker och begränsningar. Den här typen av rum är självklart mer kostsamma att konstruera jämfört med att bara slänga upp ett antal bord och stolar på en öppen yta. Å andra sidan tror jag de kommer ha mycket högre användningsgrad jämfört med universitetets traditionella grupprum och om de dessutom kan höja studiekvaliteten och därmed också studieresultaten (=> färre omtentor) tror jag att ROI:n inte blir så dålig ändå.

Det kan eventuellt bli problematiskt om rummen används för annat än att studera i. Ett avskilt rum på 6m² i kombination med studenternas gränslösa fantasi vore sannerligen ett spännande socialt experiment. Men med tanke på LiUs marknadsföring ”Hooka är LiU” tror jag inte vi ska vara alltför oroliga för att universitetet får sitt eget red light district utan snarare se det som en positiv bieffekt. ;)

Kanske har du som läsare också några tankar om huruvida den här idén är bra eller dålig. Löser den mina problem på bästa sätt? Eller är mina problem ens giltiga till att börja med? Jag tar tacksamt emot alla förslag på förbättringar. Tycker du idén är fantastisk förslår jag att du vidarebefordrar den till vänner och universitetsstyrelse. Om du dessutom är LiU-student finns det ju världens möjlighet att framföra dina önskningar genom den stora studentundersökningen som pågår fram till 20e april. Undersökningen har ett väldigt blygsamt deltagarantal så det finns goda möjligheter att vara med och påverka!

Glad påsk!

Force Feedback

Första gången jag stötte på programmering var i gymnasiet då min klasskamrat visade mig hur man kunde programmera i BASIC på min TI-84 Plus. Sedan dess har över tio år passerat och genom åren har jag fortsatt fördjupat mig inom programmering. Jag har insett vad som främjar min inlärning på bästa sätt och kommer i det här inlägget beskriva den inlärningsprocessen och dra paralleller till arbets- och studielivet.

Learn, Code, Get Feedback (LCGF)

För att bli världens bästa programmerare behöver man bara följa tre enkla steg. Processen  kanske påminner om LEAN Startup-metodiken men en större skillnad är att ”Measure” är utbytt mot ”Get Feedback”.

Learn, Code, Get Feedback. Process för att lära sig programmering.

Trestegsprocess för att lära sig programmering.

Det första steget i processen är Learn. Detta innefattar alla olika sätt som finns för att införskaffa sig kunskapen som behövs för att programmera. Det kan till exempel handla om att läsa en tutorial eller lyssna på en föreläsning.

För att befästa kunskaperna man fått i Learn-steget behöver du aktivt tillämpa dem på egen hand. Detta sker i Code-steget och det är här du utför själva programmeringen.

Det avslutande steget i cykeln är ”Get Feedback”. Liksom Learn-steget kan detta ske på ett flertal sätt. Bland de enklaste sätten hör datorns eget sätt att ge feedback när du kör din kod, kanske fungerar ditt program som du tänkt eller så kraschar det och du får en felutskrift. Andra typer av feedback kan vara statisk kodanalys, exekveringstider och kanske det bästa av allt, ett omdöme från en mer erfaren programmerare om din kod.

Feedbacken som ges kan förhoppningsvis användas för att lära dig mer om programmering och ett nytt varv i cykeln påbörjas. Efter ett antal varv i loopen har du blivit världens bästa programmerare, nice!

LCGF tillämpad i arbetslivet

När jag arbetade på Westermo använde jag, inofficiellt och outtryckligen, LCGF i stor utsträckning. Eftersom jag var blott en nätverkstekniker bland kodproffs och gavs arbetsuppgifter som innefattade programmering var jag tvungen att lära mig programmering illa kvickt.

Jag minns särskilt två milstolpar som var viktiga i min utveckling som programmerare. Den första var när jag skulle skriva ett autotest med hjälp av Westermos testramverk som var objekt-orienterat och skrivet i Python. Jag hade begränsad erfarenhet av Python och objekt-orientering hade jag läst om men aldrig förstått vad det var bra till. Som tur var fanns min kollega Tobbe tillgänglig för att hjälpa mig komma igång och när han frågade nåt i stil med ”Har du jobbat med objekt-orienterad programmering?” kunde jag ärligt svara ”Nej” och fick sedan en kort introduktion av de viktigaste koncepten. Direkt därefter fick jag själv prova mina vingar och skriva lite kod på egen hand. Då jag stötte på problem kunde jag oftast ropa på hjälp och få feedback på min kod och tips på hur jag skulle komma vidare.

Den andra milstolpen var då jag arbetade med testsystemets hantering av ”test suiter”, där en test suite är en samling av tester som ska köras. En test suite definierades i form av en textfil som kunde innehålla antingen andra test suiter eller enskilda test. ”Test suiter som består av test suiter? Oh baby that’s recursion!” kanske några tänker men det gjorde inte jag eftersom jag aldrig hört talas om rekursion. Den gången fick jag ta hjälp av min kollega Fredrik som introducerade konceptet och gav lite exempel med Quicksort bland annat. Därefter kunde jag knacka ihop en rekursiv metod som gick igenom suite-filer och hämtade ut de enskilda testerna som fanns listade. Jag fick även feedback på min lösning efter att jag tillsammans med Fredrik gått igenom koden jag skrivit. Det var en givande arbetsdag!

Min poäng är att på Westermo arbetade jag oftast i korta cykler av LCGF där jag fick en uppgift, var tvungen att lära mig nya saker från kollegor eller genom Internet, tillämpade kunskaperna genom programmering av den specifika uppgiften och kunde därefter få feedback på mitt arbete genom att be någon kika på min commit. Det är utan tvekan det mest effektiva sättet för mig att lära mig programmering på som jag någonsin upplevt. Så vad fick mig att sluta? Ett flertal faktorer bidrog till att jag inte lärde mig nya saker i samma takt och möjligheten till feedback minskade, dvs ”Learn” och ”Get Feedback”-stegen blev lidande. Detta fick mig att leta efter alternativa sysselsättningar och där hade en utbildning på LiU länge funnits med i planerna. Inom kort var jag student på civilingenjörsprogrammet i mjukvaruteknik vid Linköpings Universitet. Låt oss kika på hur LCGF tillämpas där.

LCGF tillämpad i studielivet

Många kan nog föreställa sig hur LCGF kan kopplas till studierna. Under en kurs lär man sig typiskt nya koncept och tekniker som presenteras under föreläsningar eller genom kurslitteratur. Studenten får tillämpa dessa kunskaper genom laborationer där hen oftast skriver egen kod för att lösa någon uppgift. Koden redovisas och lämnas in för granskning vilket sedan resulterar i någon form av feedback, till exempel får vi studenter betyg (Godkänd eller 3, 4, 5).

Förutom betyget finns även möjligheten för labbassistenten att ge sitt omdöme på koden. Det kan till exempel se ut som på bilden nedan, som visar feedbacken jag fick på min inlämning av ett Tetris-spel jag gjorde i Java-kursen för ganska exakt tre år sedan.

Detaljerad feedback på mitt tetris-spel.

Ett exempel på bra och väldetaljerad feedback.

Förutom bristen på styckeindelning är jag supernöjd med den feedback jag fick och jag lärde mig nästan lika mycket från den som jag gjorde av att utföra själva uppgiften i sig. Under mina år på LiU har jag dessvärre insett att feedbacken ovan är ett undantag från hur det brukar se ut. Låt oss ta en titt på hur feedbacken såg ut från en kurs jag läste i höstas. Kursen var i princip en enda lång labbserie och jag arbetade ensam vilket bidrog till att det var extra svårt att veta om jag gjorde på rätt sätt eller inte.

Ett exempel på mindre bra och odetaljerad feedback.

Ett exempel på mindre bra och odetaljerad feedback.

Även om jag är glad över att koden bedömdes som snygg är jag ändå missnöjd över att inte få veta vad som var särskilt bra och vad som kunde gjorts bättre. Inget ont om labbassistenten i fråga, han är inte ensam om att ge sparsam feedback och är i övrigt väldigt kunnig och engagerande, men jag känner att bristen på feedback har fått min utveckling som programmerare att stagnera. Jag programmerar i princip på samma sätt som jag gjorde för tre år sen i Java-kursen och blir godkänd varje gång men jag får aldrig veta vad jag kunde gjort bättre.

Någon kanske hävdar att om den enda kommentaren var ”Snyggt!” så fanns det inget att anmärka på och jag borde vara glad istället för att gnälla. Men är det något jag lärt mig under dessa år med programmering så är det att kod aldrig är perfekt skriven. Om någon vill bevisa motsatsen är jag idel öra.

En önskan om bättring

Varför är det viktigt att jag som student får feedback på min kod? Tja, förutom den uppenbara anledningen att jag lär mig bättre så är det också ganska vanligt att mjukvaruföretag i dagsläget använder kodgranskning som en del i utvecklingsprocessen där kollegor granskar varandras kod. Att som student förberedas på att ens kod ska läsas av andra och även få kritik på den kod man producerat är inget som bör underskattas eftersom det kan vara lite känsligt till en början. När jag pushar kod på min arbetsplats kommer inte kvaliteten enbart bero på om koden ger rätt resultat utan också om vägen dit sker på rätt sätt.

Det är möjligt att det skulle kräva ökade kostnader eller åtminstone ökade resurser för att ge studenterna bättre feedback men eftersom trenden verkar vara att föreläsningar ersätts med digitala motsvarigheter (videoinspelade föreläsningar osv) är mitt förslag att de pengar som sparas där istället läggs på rättning och granskning av kodinlämningar.

Jag tycker också att det borde vara i universitetets intresse att lägga lite krut på den här delen av utbildningskvalitet, om inte annat så för att höja konkurrenskraften. Jag har till exempel sett hur en av Udacitys kurser i machine learning lockar med ”1:1 feedback” i form av kodgranskning. Ett annat alternativ om man inte vill betala är förstås Stack Exchange’s Code Review som kanske inte håller den högsta kvaliteten men ändå bidrar med något mer än ett ”Snyggt”.

Om min poäng inte varit tydlig nog hittills så kan jag försöka förtydliga min åsikt: Universitet måste ge studenterna bättre feedback på deras inlämningar. Det gäller särskilt inlämnad kod men kan även sträcka sig rapportskrivning. Examinatorerna bör uppmuntra detaljerad feedback, följa upp vilken typ av feedback som labbassistenterna ger studenterna och sätta tydliga riktlinjer för vilken feedback som förväntas ges. Jag tycker det är motsägelsefullt att jag längtar från universitetet ut i arbetslivet för att jag ska lära mig programmering bättre. Jag pluggar mjukvaruteknik på LiU för att komma närmare målet som världens bästa programmerare, men ibland känns det som jag endast kommer komma härifrån med en civilingenjörsexamen. Vore inte det tråkigt?

Jag har inte hört så många andra dela min uppfattning i den här frågan, men jag har å andra sidan inte öppnat upp för diskussion förrän nu. Om du som student/labbassistent/examinator inte håller med mig vill jag jättegärna diskutera vidare, så det är bara till att gå loss i kommentarsfältet eller kontakta mig på annat valfritt sätt! :)

math-quiz

Den här julen har jag för första gången under min studietid på LiU haft jullov på riktigt. Med det menas att jag inte behövt plugga inför några januaritentor alls, vilken lyx!

Denna möjlighet att spendera julen med att göra precis vad jag velat har resulterat i en app jag kallar math-quiz. Framtagandet av math-quiz har inkluderat både programmering och matematik, så lustigt nog blev det inte alltför stor skillnad mot tentaplugget. Många kanske undrar varför jag valde att skapa math-quiz och hur det gick till på vägen. Därför tänkte jag försöka besvara dessa frågor med just det här inlägget.

Syfte

Något som ofta nämns i samband med civilingenjörsutbildningar är hur matematikintensiva de är. I examenskraven för civ.ing. i mjukvaruteknik står att minst 45hp kurser inom matematik eller tillämpning inom matematik ska ingå i utbildningen. I min utbildning sprids dessa 45hp ut i början på utbildningen och därmed är det examenskravet uppfyllt redan efter de första tre åren.

När jag nu gick första terminen på det fjärde året märkte jag en ganska stor förändring i det att jag inte längre läste någon mattekurs med föreläsningar, lektioner, frustration och allt det roliga som det innebär. Det var inte helt utan obehag som jag insåg att kurserna jag valt (designmönster, mjukvarutekniskt entreprenörskap, interaktionsprogrammering, etc) inte krävde några matematikkunskaper över huvud taget. Jag blev fundersam över om jag läst all matematik helt i onödan. Än värre, jag slogs av tanken att mina hårt förvärvade matematikkunskaper sakta skulle förvittra utan underhåll. ”Not on my watch” tänkte jag och började klura på hur jag kunde hålla igång mattekunskaperna på bästa sätt. Jag gillar quizar och tipspromenader så om jag kunde kombinera detta med en webb-applikation skulle det bli perfekt uppvärmning inför kurserna i webbprogrammering som jag ska läsa nu till vårterminen.

Metod

Jag började med att googla på ”JavaScript quiz library” och fick en träff på en React-baserad lösning kallad JavaScript Quiz som utgjorde en perfekt grund att bygga vidare på. React är ju dessutom väldigt poppis och jag såg fram emot att lära mig mer om det. Jag var till och med så optimistisk att jag trodde det skulle gå snabbt och enkelt att skapa min matte-quiz. I själva verket skulle det gå långsamt och svårt, men det är ju förväntat när man ger sig ut på okänd mark.

Grafer <3

Tidigt i processen fick jag en idé om att jag ville presentera resultatet från quizen som en spindelgraf. Alltså, användaren besvarar frågor inom olika matematiska områden och får därefter en tydlig bild över dennes kunskap inom de olika områdena.

I min grupps kandidatprojekt Knekt använde vi oss av Highcharts med stor framgång. Jag körde vidare på det vinnande konceptet och efter några npm-installationer (react-highcharts för grundfunktionalitet och highcharts-more för spindeln) och en del bök lyckades jag smälla upp en fet graf som ni ser på bilden nedan.

Spindelgraf över resultatet från en omgång av math-quiz.

Jag gillar verkligen grafer.

Inställningar

Jag ville utöka funktionaliteten från den mycket enkla JavaScript Quiz och gjorde en Settings-sida där användaren bland annat kan välja vilka matematiska områden och hur många frågor quizen ska innehålla. Detta var ganska straight-forward med undantag för att jag valde att använda mig av react-numeric-input för lite enklare hantering av antal-frågor-väljaren. Jag skriver ”ganska straight-forward”, men med mina obefintliga kunskaper inom React ger bilden nedan en rättvisare beskrivning. Det är dock förvånansvärt hur lång man kan komma med Google och Stack Overflow. ;)

I have no idea what I'm doing dog

All I want for Quiz-mas is a nice little matrix

Efter allt strul med Settings-funktionaliteten var det dags att få till lite schyssta matte-frågor. För detta krävdes ett snyggt sätt att representera matematiska formler, integraltecken och matriser. Självklart ville jag använda mig av Latex, men det skulle visa sig vara en mycket hård nöt att knäcka. Jag började med att prova react-latex och react-matrix, men det var inte alls vad jag behövde. När jag snubblade över react-katex trodde jag att jag hittat den heliga graalen. K:et i katex står för Khan som i Khan Academy som jag tidigare haft stor användning av. Deras latex-lösning skulle definitivt duga för mig, dessutom ritas formlerna snabbt utan lång väntetid. Tyvärr lyckades jag aldrig få katex att fungera på rätt sätt utan mina formler ritades ut både TeX-ifierade och som vanlig text, mycket likt detta issue på GitHub. Jag slet i en dag med det men lämnade till slut Katex för en motsvarande lösning, MathJax.

MathJax fungerade! Tyvärr sker en liten fördröjning vid utritningen och av en outgrundlig anledning minskas dess font-storlek efter första frågan så texten blir lite för liten. Men ingen mjukvara utan buggar tänkte jag och valde att släppa math-quiz lös på internet.

Framtida arbete

För dig som tycker att math-quiz verkar intressant och vill bygga vidare på det finns projektet på GitHub. Förutom att fixa visuella buggar och snygga till GUI:t vore det även nice med fler frågor och utökad funktionalitet. Har du feedback eller vill bidra till math-quiz är jag idel öra!

Slutsats

Jag är tacksam över att kunna stå på de giganters axlar som skapat React, npm och alla små fina paket för formler, grafer, etc. WebStorm är en bra IDE, webbprogrammering är svårt och solo-programmering kan vara ganska jobbigt om än lärorikt.

För övrigt tänkte jag nu försöka ha jullov på riktigt. God fortsättning!

Mjukvaruteknik vs Datateknik

En av de vanligaste frågorna jag får när jag berättar att jag pluggar Mjukvaruteknik är ”Vad är skillnaden mellan mjukvaruteknik och datateknik?” Är personen som frågar något mer insatt kanske hen frågar ”Så det är som datateknik utan hårdvara?”. Båda frågorna är rimliga och relevanta, men då det finns markanta skillnader mellan programmen är det inte alltid helt lätt att ge ett korrekt och uttömmande svar. För de blivande studenter som undrar vilket program de ska söka vill jag med detta inlägg peka på de viktigaste skillnaderna, och slå ett slag för att Mjukvaruteknik är BÄST!

Bakgrund

Det finns en del diskussioner av varierande kvalitet om programmen på diverse forum. De bästa jag har stött på är dessa:

Flashback: #1 och #2.
Reddit: #1 och #2.
LiUs egna hemsida: #1.

I mitt inlägg kommer jag använda vissa begrepp som kan vara okända för de som inte läser till civilingenjör på LiU, här kommer därför en kort ordlista med förklaringar:

  • D – Programbeteckning för Datateknik
  • U – Programbeteckning för Mjukvaruteknik
  • Envarre – Envariabelanalys, en matematikkurs
  • Flervarre – Flervariabelanalys, också en matematikkurs

Kurser

Ett utmärkt sätt att jämföra programmen på är att se vilka kurser som ingår. Flera kurser samläses på D och U. Detta visualiseras i Venndiagrammet.

Venn-diagram över kurser på D och U.

Venndiagrammet visar att U läser något färre kurser än D. En mer detaljerad bild ges genom tabellerna nedan. Om någon kurs låter extra intressant är det bara att googla på kurskoden så dyker dess kurshemsida upp som första träff, förmodligen.

Kurser som D och U samläser

Kurskod Kursnamn
TDDD86 Datastrukturer, algoritmer och programmeringsparadigm
TDDC66 Datorsystem och programmering
TATA65 Diskret matematik
TATA41 Envariabelanalys 1
TDDD73 Funktionell och imperativ programmering i Python
TDDD99 Ingenjörsprofessionalism
TATA79 Inledande matematisk analys
TDDD96 Kandidatprojekt i programvaruutveckling
TATA24 Linjär algebra
TDDD78 Objektorienterad programmering och Java
TDDD63 Perspektiv på datateknik/datavetenskap
TDDB68 Processprogrammering och operativsystem
TDDC93 Programutvecklingsmetodik teori

Kurser som D läser

Kurskod Kursnamn
TSEA83 Datorkonstruktion
TSEA82 Datorteknik
TSEA22 Digitalteknik
TSEA24 Elektronik
TATA42 Envariabelanalys 2
TATA76 Flervariabelanalys
TFYA86 Fysik
TDDD60 Interaktiva system
TAOP33 Kombinatorisk optimering gk
TSEA29 Konstruktion med mikrodatorer, projektkurs
TDDD88 Logik
TAMS27 Matematisk statistik
TFYY68 Mekanik
TSRT12 Reglerteknik
TSKS10 Signaler, information och kommunikation
TSDT84 Signaler och system samt transformer

Kurser som U läser

Kurskod Kursnamn
TDDC17 Artificiell intelligens
TDDD92 Artificiell intelligens – projekt
TDDD37 Databasteknik
TSEA28 Datorteknik Y
TATA90 Flervariabelanalys och differentialekvationer
TDDD85 Formella språk och automatateori
TFYA87 Fysik och mekanik
TDDD72 Logik
TDDD80 Projekt: Mobila och sociala applikationer
TSRT19 Reglerteknik
TDAB01 Sannolikhetslära och statistik
TSKS21 Signaler, information och bilder
TDDD93 Storskaliga distribuerade system och nätverk

Analys

Tabellerna ovan avslöjar flera viktiga skillnader mellan programmen. Det som ursprungligen fick mig att välja mjukvaruteknik var att D läser Datorkonstruktion, Digitalteknik och Elektronik medan U läser AI, Databasteknik och projektkursen Mobila och sociala applikationer (Android-utveckling). Jag tycker det är jätteroligt att bygga datorer, men att förstå mig på tekniken bakom lockar inte. Att däremot kunna slänga upp en databas och knåpa ihop en Android-app är både roligt och användbart.

D har bredden, U har spetsen

U är inte en lika bred utbildning som D, men den är kärnfull. Till exempel läser D separata kurser i Fysik och Mekanik medan U endast läser en kurs som kombinerar de två ämnena. Samma sak gäller för matematiken där D läser både Envariabelanalys 2 och Flervariabelanalys medan U istället läser kursen TATA90: Flervariabelanalys och differentialekvationer. I TATA90 har man plockat in de viktigaste delarna ur envarre 2 för att förstå momenten i flervarren. När vi är inne på ämnet matematik och flervariabelanalys tänkte jag visa lite statistik från tentaresultaten från respektive programs flervariabelkurs:

Tentastatistik för kursen TATA76

Tentastatistik för kursen TATA90

Slutsatsen från bilderna ovan är alltså, om du inte vill ha betyg U i flervarre, gå U. Jag är inte säker på att det här är en rättvis jämförelse, man kan ju nästan aldrig lita på statistik men TATA90 var den bästa matematikkurs jag läst. Det är ett ganska ovanligt uttalande när det kommer till flervariabelanalys skulle jag tro.

Masterprofiler

Till det fjärde och femte året följer de flesta studenterna en masterprofil, dvs specialiserar sig mot något ämne de tycker är intressant. Eftersom att D har en bredare utbildning med all elektronik och signalteori är de också kvalificerade till fler masterprofiler. U kan endast välja mellan 6 mjukvaruinriktade masterprofiler, men jag tycker det räcker till gott och väl. Vill man ha lite mer information om vilka profiler som finns kan man kika på dessa här.

Slutplädering

Hittills har jag varit ganska objektiv i inlägget, men det är slut från och med nu. Här kommer de bästa argumenten för att välja U.

U är ett kreativt program

En stor del av studierna på U går ut på att skapa saker genom mjukvara. I utbildningen ingår App-utveckling, AI-programmering (typ programmera robotar som spelar fotboll) och annat kul. Jag skulle vilja påstå att U är LiUs mest kreativa program, med brasklappen att jag har rätt dålig koll på vad som händer på Design och Produktuveckling (DPU) och Mediateknik (MT).

På U har nästan varje kurs anknytning till programmering. En viktig skillnad gentemot D är att U bakar in programmeringsmoment i kurser som annars hålls rent teoretiska, några exempel är statistikkursen där vi fick lära oss programmeringsspråket R och i fysiken fick vi använda våra kunskaper för att göra ett enkelt spel där vi programmerade fysiken. (Tyvärr ska de visst ta bort programmeringsprojektet i fysikkursen till kommande år och istället ha en större tentamen men så kan det vara när man inte vill att studenterna ska ha roligt.)

Även om allt jag skapat under mina år på LiU inte är mästerverk så är konceptet att under hela utbildningen alltid läsa minst en kurs som innehåller programmering väldigt viktigt. Programmering är ett hantverk som kräver tusentals timmar att bemästra. Som student på Mjukvaruteknik kommer du ständigt utöka och underhålla kunskaperna i programmering vilket gör U till den överlägset bästa civilingenjörsutbildningen för den som söker ett arbete som innefattar programmering.

Signaler^2

D har hela två kurser som har ”Signaler” i titeln. Min personliga åsikt är att man endast behöver genomleva en kurs i signalteori för allmänbildningens skull. Därefter kan man släppa det ämnet till förmån för roligare och mer relevanta ämnen. Som blivande student kan det vara svårt att greppa vad signalteori handlar om så låt mig ge en bild som exempel:

Spektrum av nedsamplade signaler.

Ser det här roligt ut? Isf kanske du borde läsa D eller Y. ;)

Signalteori är ett fascinerande ämne och jag är glad att det finns människor som tycker det är roligt, men det är bland det mest obegripliga jag stött på. Jag har varken gjort lumpen eller läst D, men det känns som båda ger erfarenheter av härdande karaktär. Det är inte kul när man gör det, men man kommer ur det starkare än någonsin. Jag ser på mina vänner som gjort lumpen iller läser D med stor beundran och respekt, ni är hjältar!

Mjukvaran är själen i svensk industri

Under mitt korta arbetsliv har jag haft kollegor som pluggat D, Y, TBI etc. Samtliga har arbetat med programmering och det är tveklöst en av de mest eftertraktade kompetenserna idag. Ett av mina favoritcitat från STEW 2016 kom från en av höjdarna på ett av Linköpings större företag:

It is all software. The electronics and mechanical engineers are lost!

Att läsa Mjukvaruteknik är inte bara roligt, det är också den utbildning som gör dig bäst lämpad för framtiden. THE FUTURE IS SOFTWARE!

Slutord

Att ge ett uttömmande och korrekt svar på frågan ”Vad är skillnaden mellan mjukvaruteknik och datateknik?” var svårare än jag trodde. Kanske är det här inlägget bara en ursäkt för mig att göra roliga grafer och diagram i R, men jag hoppas att det kan hjälpa någon. Om det är något du fortfarande undrar eller inte håller med om så gör din röst hörd i kommentarsfältet.

Skrytbrädan #1

Håll i hatten för nu blir det åka av! Jag tänkte skriva om mina fantastiska bedrifter och framgångar från den senaste tiden. Det är väl knappt att man får vara såhär mallig i dagens samhälle, men jag tänkte att på min egen blogg som nästan ingen läser borde det vara okej.

Statistik och sannolikhetslära – no problem!

Höstterminen 2015 läste jag kursen TDAB01, en grundkurs i statistik och sannolikhetslära. Efter en dålig start med lektionsuppgifterna lyckades jag aldrig fokusera på att lära mig och förstå materialet och då kursen var helt ny fanns inga gamla tentor att plugga in och därför var den första kuggningen i mitt studieliv ett faktum, det sved. Efter att ha pluggat ytterligare till omtentan i januari, och faktiskt lärt mig saker, var jag en ynka poäng ifrån godkänt. Close but no cigarr och jag fick vänta till augusti på nästa chans. Juli spenderades med att förstå materialet än en gång och utan att plugga jättemycket flöt nu intuitionen för statistiken i mina ådror. Nåja, tentan gick väldigt bra och jag dunkade in en stark 4:a i betyg!

Personlig tentastatistik för kursen TDAB01

Med mina nyvunna kunskaper kan jag nu till exempel skapa snygga diagram med R och ggplot2.

Fysik och mekanik – no problem!

Tillbaka till höstterminen 2015! Efter att ha misslyckandet från TDAB01 färskt i huvudet var det dags för fysik, ett ämne som legat i dvala hos mig sedan 2007. Med en kurs som tillät en att inte behöva förstå någonting à la ”slentrianskriva anteckningar hela föreläsningen/lektionen utan eftertanke” och en totalbrist på motivation bådade det inte gott inför tentan. Det blev ett bottenrekord, 0 poäng! Jag förstod mig varken på acceleration eller friktionskraft, så illa var det. Juli spenderade jag med att lära mig grunderna i fysik på högstadie-  och gymnasienivå och insåg att fysik är ganska coolt ändå. Ensam på omtentan lyckades jag klämma till med en stabil 3:a och jag är väldigt tacksam över att slippa släpa på en 1400 sidors fysikbok i fortsättningen.

Kandidatexamen – no problem!

Min första akademiska publikation är gjord! Min kandidatgrupps rapport finns att läsa här och den handlar om hur vi utvecklat en interaktivt webbapp för kryptoanalys, Knekt, och vilka lärdomar vi kunnat dra från projektet. Jag vet att rapporter för de flesta inte är världens mest spännande läsning men låt mig säga detta: Varje gruppmedlem skrev en individuell del i rapporten och min del handlar om parprogrammering och kodgranskning. Om inte det väcker intresset vill jag tillägga att mina grafer är gjorda i ggplot2 och bakom dem ligger mycket slit. Så ge lite kärlek till figur D.3 ;)

Checkpoint reached!

Tack vare en lyckosam omtenta-period i augusti har jag alltså avklarat tre kompletta år på Linköpings universitet och därmed fått en kandidatexamen på meritlistan. Detta har förstås flera fördelar, men det bästa är att jag nu kan använda detta som SMS-signal:

Jag vill passa på att tacka mina gruppkamrater från kandidatprojektet som inte bara såg till att vi lyckades väl med projektet utan att vi också hade väldigt kul på vägen! Jag vill även skicka iväg en shoutout till Khan Academy som hjälpte mig mycket med både statistiken och fysiken och som gör ett dunderjobb i att lära ut grundpelarna för att man sedan ska kunna lära sig mer avancerade koncept.

Tack för mig!

 

 

STEW 2016

This week I had the pleasure to participate in Swedsoft‘s Software Technology Exchange Workshop (STEW) and it was a blast! Or at least it was very informative, the food was great and the people were friendly. I listened to almost 20 different talks on various topics on software engineering so now I’m filled up with knowledge. ;)

To be able to digest all this knowledge I thought I could write down the most memorable notes I took and give some comments where needed. Of course, these notes, paraphrases and comments will only be a drop in the gravy ocean from STEW. Text in italics are things I thought I heard while unformatted text are my own comments and explanations.

Miscellaneous

It is all software. The electronics and mechanical engineers are lost! – Words from a CTO of a big company. Said with tongue in cheek, but gives a somewhat accurate description of how  some hardware industries are becoming more dependent on software.

Featuritis – 70-80% of features in the product are never used!

Model based [testing/development/systems engineering] – A trend during STEW was to talk about making all things model based.

5G

Sensors everywhere!

25.2 Gbit/s throughput – From an Ericsson experiment performed in Barcelona.

100x higher rate, 1000x higher volume, 5x lower latency, 100x more devices! –
Compared to, I assume, 4G.

Eiffel

The Eiffel framework was originally developed by Ericsson. It is a framework that ”enables technology agnostic enterprise scale continuous integration and delivery.”

Every change in a software project is an event.

Events hold references to other, previous events. This creates a real time directed acyclic graph.

Eiffel is used to document what we did, who did it, why we did it and how we did it.

With Eiffel you may store, analyze and visualize the documentation.

Eiffel is available on GitHub!

Jan Bosch – The hurricane

Mr Bosch spoke about speed, data and ecosystem. Focus was on speed, and he spoke very fast.

Increasing speed trumps any other R&D improvement! Speed beats efficiency every time.

Speed: … the ability to quickly respond to events, such as requests from customers, changes in the priorities of the market or new competitors, is critical to continued success. As the rate at which companies need to be able to respond is accelerating constantly, speed is a key factor. [1]
 

Facebook started in 2004 and gained 50M users in 44 months, Angry birds was released in 2009 and gained 50M users in 1 month!

Continuous delivery is for fegisar! – Not sure what this was about, but it spurred a lot of laughs.

Candy crush analyzes player behavior to increase revenue. – Is the player stuck? Is he/she likely to make a purchase to get unstuck? Use user data to your advantage!

C.I. needs to improve. […] Booking.com can rollback in 8 seconds!

You can’t just ask customers what they want and then try to give that to them. By the time you get it built, they’ll want something new.  – Steve Jobs

Bosch will release a book by Christmas, probably about speed!

[1] Bosch, Jan. ”Tutorial summary for speed, data and ecosystems: The future of software
engineering.” Software Architecture (WICSA), 2016 13th Working IEEE/IFIP Conference on. IEEE, 2016.

Summary

To summarize STEW 2016, I will give a short list of pros and cons. Although I may not be able to put it to words, my overall impression with STEW is overwhelmingly positive.

Pros

  • Great way of bringing industry and academia together.
  • As a student I got to learn things that you simply won’t get to know in school.
  • Very good fika!

Cons

  • I would love to see more ”software companies” and not just the big dragons SAAB and Ericsson. Maybe DICE, Klarna, King, Mojang or Spotify can join in on the fun?
  • It was way too cold for comfort in the lecture hall, Vallfarten, at LiU.