Man lever så länge man lär

Inlägg taggade ‘java’

Socialstyrelsen rekommenderar: Java SE 6 → 8

Äntligen!

Från och med nästa vecka kommer jag att i tjänsten att kunna utveckla i/med/för en nyare version av Java, tack vare uppgradering av applikationsservern till en version med stöd för Java SE 8 (och Java EE 7). Det vill säga, vi kommer att göra en tidsresa från 2006 till 2014 om man tittar enbart på Java SE-versionen. Sedan i september finns ju även Java SE 9 att tillgå, men WLS-stödet saknas.

Så vad innebär det här för oss? Ja, WebLogic Server går från 11gR1 (10.3) till 12cR2 (12.2), vilket i sin tur medför att Java SE 6 → 8 och Java EE 5 → 7.

I min värld innebär själva WLS-uppgraderingen ingen större påverkan för mig – eller rättare sagt: jag vet inte vad den innebär. Uppgraderingen av Java SE, däremot, gör det lättare för oss att skriva bra kod. Programmera funktionellt!

Förändringarna i själva programmeringsspråket för både Java SE 7 och 8 listas på What’s New in JDK 8, men de jag främst ser fram emot är följande:

Java SE 7

  • Binary Literals
  • Strings in switch Statements
  • The try-with-resources Statement
  • Catching Multiple Exception Types
  • Underscores in Numeric Literals
  • Type Inference for Generic Instance Creation

Java SE 8

  • Lambda Expressions
  • Method references
  • Default methods
  • Collections: Stream API

Vad Java EE från 5 till 7 innebär är jag lite osäker på, men Wikipedia anger: ”Java EE 7 added Java API for WebSocket, Java API for JSON Processing”.

Jag ser verkligen fram emot att börja använda det nya som nu blir tillgängligt. Delvis för att jag tror att innebär att vi kan skriva säkrare och mer lättläst kod, och delvis för att det är roligt med nya möjligheter. Det kan nog bli lite som att lära sig programmera på nytt, om man vill. Jag ska definitivt försöka tänka mer funktionellt. Jag tror att det är väldigt nyttigt för oss gamla, lätt skabbiga rävar.

Givetvis har jag [sedan länge] förberett mig genom att läsa Functional Programming in Java och tittat på videos som Refactoring to Java 8 by Trisha Gee (Devoxx 2016) och en bunt andra från Devoxx, JavaOne och liknande.

Let there be Monday!

Behåller jobbet med Jfokus i sikte

I år var första gången jag ansökte hos företaget om att få gå på Jfokus, vilket alltså innebär att de betalar avgiften och accepterar att jag deltar, med full lön och utan debitering av min tid till kund. Många sköna tusenlappar blir det nog.

Förra året, minns jag, var jag så övertygad om att jag skulle få nobben, att jag inte ens gjorde mig besväret att försöka. Ni vet hur det kan vara – det finns ett elektroniskt formulär att fylla i, som dock är utformat för externa utbildningar, d.v.s. kurser. Jag upplever de allra flesta formulär som svåra och jobbiga att fylla i och det här blir som att försöka knöla in en val i ett 20-litersakvarium. Det går inte att fylla i rätt, för jag saknar uppgifter till obligatoriska fält och det saknas fält för uppgifter som jag anser viktiga. Vilket gör att jag får fabulera och fantisera ihop något och … tja, det passar inte alls min person. Det blir mentalt jobbigt.

I år såg jag det mer som att det i alla fall var värt att prova, och att om jag skulle få nobben kanske det kunde få vara ett tydligt tecken på att det är dags att byta arbetsgivare. Allt jag gör är nämligen att dra in pengar – under mina dryga 13 år som anställd har jag varken gått på kurs eller konferens av eget val, och heller aldrig suttit på bänken (varit utan uppdrag). Sedan 2009 har jag dessutom suttit permanent ute hos kund och har inte ens en postlåda hos min arbetsgivare. De tillhandahåller dator och telefonabonnemang, samt vpn och applikationer för att registrera debiterbara resp. arbetade timmar. Ungefär så krävande är jag som anställd. De enda utgifter jag orsakat företaget på eget bevåg de senaste åren är 2 tentaresor och 2 inköp av kurslitteratur. Mina 50+ nya högskolepoäng inom datavetenskapen har jag annars skaffat helt och hållet på min fritid, under 2 års tid och vid sidan av det vanliga arbetet på heltid. Shit, vad jag måste vara bra!

Ja, i och för sig var vi några som gick på Gradle Groovy-seminarium för några år sedan, under en arbetsdag på promenadavstånd från kontoret, men jag tror faktiskt att det var kostnadsfritt vilket innebär att det företaget bidrog med var en dags utebliven debitering för var och en. Som ren kuriosa kan jag för övrigt berätta att den enda av oss som deltog och fortfarande jobbar kvar är… jag.

För dem av er som hört om varslet hos min arbetsgivare: jag är inte uppsagd och har heller inte fått något erbjudande om att sluta frivilligt mot ersättning. Jag ser det som att jag inte behöver fatta några omedelbara beslut kring min framtid och därför kan köra på som vanligt tills jag själv känner att det är dags. Gott så.

Och för att göra en lång historia något kortare: jag anmälde mig till Jfokus 2017 (med en tanke om att eventuellt betala själv om företaget satte sig på tvären), diskuterade saken med min chef (som ställde sig positiv), fyllde i formuläret efter bästa förmåga och skickade in ansökan. Därefter väntade jag några veckor och så plötsligt, en dag i slutet av november, var ansökan godkänd – jag kommer att vara med på Jfokus, i Stockholm den 7-8 februari 2017. Whee! See you there?

Introducerad till datavetenskapen

Igår såg jag att inte bara poängen utan också betyget för den datavetenskapliga introduktionskursen hade registrerats och blivit synligt på Antagning.se. Jag har också skapat och skickat ett verifierbart intyg till chefen (arbetsgivaren betalade kursboken och ville då veta att/om/när kursen slutar och hur det gick för mig), så nu är också denna kurs lagd till handlingarna. Betyget blev C, vilket alltså är det högsta möjliga för den som (liksom jag) inte skriver tentan. Det är jag nöjd med.

Och i övriga studienyheter:

Jag har ännu inte sett eller hört något om omregistrering på Java-kursen, och ej heller petat på programmeringskursen som varit i princip klar sedan i höstas…

Framsteg på studiefronten

Rättning – check!

Jag noterade idag att min datavetenskapliga magister har rättat (och godkänt!) alla återstående inlämningsuppgifter, trots att han förvarnade om att han nog inte skulle hinna med det i närtid, så där väntar jag bara på registrerade poäng. Om han nu inte skulle råka tro att jag är intresserad av att skriva någon tenta? Nog för att det vore kul att kunna få ännu ett A, men det känns inte riktigt värt den stora ansträngningen. För det är förbaskat jobbigt att tenta (säger jag som bara gjort det två gånger), men allt som kräver fokus kostar också energi.

Kursregistrering – check!

Och som om det inte räckte med goda nyheter så har jag idag blivit registrerad på BTH-kursen jag ska läsa under hösten som den fjärde och sista kursen i kurspaketet. Kursen visades inte som ett alternativ på min registreringssida, varför jag inte kunde göra det själv som det är meningen att man ska göra. Precis samma sak hände förra terminen, så jag undrar vad de gör för fel?

Nåväl, jag har nu tillgång till kursen på lärplattformen och har skrivit efterfrågat introduktionsinlägg på kursens forum, så nu är det bara att köra så det ryker.

Omregistrering – …?

Jag tror att det enda utestående just nu är min omregistrering på Java-kursen.

Och så programmeringskursen som varit i princip klar sedan i höstas…

Studierapport hösten 2015

Ja, det har gått ovanligt länge sedan senaste inlägget. Främst beror det på min oförmåga att ta mig an studierna, lämna in uppgifterna i tid och få tid till annat. Min främsta sysselsättning under hösten (förutom onödigt mycket arbete) var prokrastinering, oftast i form av tv-serietittande. Pretty Little Liars, tror jag. Som jag upplever det var det helt enkelt sommarens ambitioner som tog knäcken på min studiekraft. Jag försökte läsa två halvtidskurser under sommarterminen, och kände mig därefter rejält sliten när det blev dags att ta sig an höstens kurser.

Under den långa ledigheten över jul och nyår, som för min del sträckte sig från 23 december till 10 januari, hade jag planerat att ta igen det jag under hösten skjutit framför mig. Det gick så där. Jag blev klar med JavaScript-kursen, med en hel veckas marginal, men det var också allt. Övriga kurser förblev ofärdiga.

Låt oss ta en liten genomgång av de kurser som på olika sätt är aktuella.

ST 2015: Förberedande kurs i matematik

Den här kursen kallas även Sommarmatte och jag blev faktiskt nästan klar med den, men så blev de sista två uppgifterna liggande och nu är kursen helt stängd. Jag tror att det finns chans att ta upp den igen vid en annan tidpunkt och det vill jag nog också göra. Matte är roligt, men den här kursen får vara tills vidare.

Att göra: inget just nu.

ST 2015: Programmeringsteknik

Den här kursen körde jag enligt plan större delen av sommaren, fick tag på en granskningspartner och sedan drog höstterminen igång – varken han eller jag ville prioritera denna kurs framför alla de nya kurserna. Det dröjde ända tills mitten av november innan vi båda lyckats hitta tid att utföra våra uppgifter, och efter det har jag varit alltför stressad för att ens kolla upp om/när/hur jag kan göra färdigt det sista – har alltså inte gjort ett skit mer på den kursen sedan i november. Nu i veckan har jag dock tagit tag i frågan och tack vare detta blivit omregistrerad på kursen för vårterminen, så det är bara för mig att köra på.

Att göra: justera (och lämna in) koden samt boka tid för redovisning öga mot öga (hu!). Det borde jag kunna fixa utan alltför mycket besvär, tycker jag.

HT 2015: Programmering med JavaScript, HTML och CSS

Denna kurs har jag som sagt lyckats avsluta, nästan helt enligt rekommenderad studieplan. Anledningen är förstås att det var den av kurserna jag prioriterade, för klarar jag inte det så får jag nog inte gå vidare med nästa kurs i paketet.

De två första uppgifterna blev klara och inlämnade i tid, men de två följande blev några dagar sena. Sedan gav jag mig den på att få ordning på disciplinen, vilket resulterade i en inlämning av den femte uppgiften kl. 04:20, några timmar sent. På den sjätte hade jag 4 minuters marginal och på den sista… flera dagar.

Att göra: njuta av mitt A (högsta möjliga betyg). Hurra, vad jag är bra!

HT 2015: Datavetenskaplig introduktionskurs

Här lyckades jag få ihop två inlämningsuppgifter (som gav positiva omdömen), men sedan kom jag liksom inte vidare – jag prioriterade ju JavaScript-kursen och orkade inte tillräckligt för att hinna fram till denna, som då alltså var andra prio på min lista. Dock har jag fått besked om att det bara är att fortsätta göra uppgifterna under vårterminen, så det här får bli min andra riktiga vårkurs.

Det finns också en möjlighet att begära omregistrering till nästa kurstillfälle, d.v.s. hösten, men då hamnar man sist i kön och det brukar visst inte bli några platser över, så det verkar rätt kört. Bara att köra på under våren, alltså. Jag vill/behöver ha den här kursen för behörighet till vidare studier inom området.

Att göra: tuffa på med kursen ungefär som om inget hade hänt.

HT 2015: Objektorienterad programmering i Java

Min ”no brainer”, som ska ge behörighet till mer utmanande kurser framöver. Här har jag inte lämnat in en enda uppgift, även om jag i alla fall skrivit ett helt program. Det fastnade på att jag inte kunde välja om jag skulle satsa på högt betyg (kräver en rapport om programmet) eller nöja mig med bara godkänt.

Min möjlighet att slutföra den kursen innebär att omregistrera mig och då får jag förmodligen nya uppgifter att utföra. Alternativen där är att göra det nu till våren eller vänta och omregistrera mig först till hösten. Det lutar åt hösten, för jag har ju visat rätt tydligt att jag inte orkar läsa tre kurser och samtidigt jobba full tid.

Att göra: avvakta tills vidare. Ta upp frågeställningen igen i höst.

Jag har tackat nej till alla kurser jag sökte och blev antagen till för vårterminen. Det jag ska läsa är tredje kursen i kurspaketet och utöver det vill jag bara bli klar med de kurser jag påbörjat. Summa summarum fokuserar jag på följande i vår:

En sak som roar mig lite är att JavaScript är något jag inte använt i tjänsten på ganska många år, men nu under hösten fick jag konkret användning för kursens kunskaper i mitt nuvarande kunduppdrag. Lite belöning för allt mitt slit, kanske.

Också roligt att Node.js (nästkommande lärdom) är så vanligt förekommande i den sortens cloud-tjänster jag fick bekanta mig med under torsdag och fredag.

Det känns som om mina studier faktiskt har en koppling till jobbet. Lyckträff?

To-fre: jag gick i sällskap av nästan 200 andra europeiska konsulter en av företaget arrangerad mingelutbildning i London. Eller rättare sagt: Stansted. Visste ni att det tar flera timmar att åka mellan Heathrow och Stansted?

Det blev långa, intensiva dagar med massor att göra på kort tid och inte ens fem minuter över någonstans. Jag blir vansinnigt trött och faktiskt i längden rätt tjurig av sådant. I need my precious downtime! Och sedan var folk så trevliga att jag fastnade i baren och drack Boddingtons i stället för att gå och lägga mig direkt efter middagen som jag hade planerat. Kom i säng först vid halv två och var igång igen klockan åtta. Kanske inte så konstigt att jag var seg i bollen.

Hem till hemmet i Stockholm kom jag inatt omkring halv ett och sov sedan i morse till halv elva – brukar annars alltid vakna vid sex eller sju. Det kommer nog att ta några dagar innan jag känner mig i fas igen. Sådant här borde jag egentligen inte utsätta mig för. I alla fall inte ofta. I’m too old for this shit.

Press och prokrastinering

Läget just nu: jag sitter och väntar på att adrenalinhalten i blodet ska gå ned, så att jag kan sätta igång och göra labben i maskinprogrammering. Den borde enligt studieplanen ha varit inlämnad redan förra helgen, men förseningen är inget man blir utslängd för – när man väl klarat kravet på uppvisad aktivitet efter 3 veckor, vilket jag ju gjorde förra helgen genom att lämna in första uppgiften. Ja, och fylla i min profil på studiewebbplatsen, vilket också var ett av kraven.

Den här kursen är den första där jag, motvilligt, lagt upp ett foto på mig själv. Det var krav på ett seriöst foto tillsammans med lite information om en själv. Jag gjorde en snabb sökning i Lightroom bland de senaste årens foton och hittade ett från förra sommaren som jag fixade till – gjorde bilden svartvit och kvadratisk och den innehåller inte en enda pixel mer än vad som är absolut nödvändigt.

Samma bild lade jag sedermera även upp på kurswebbplatsen för Javascript-kursen – so much för att visa upp en könsneutral identitet… vilket jag oftast vill göra för inte riskera att bemötas annorlunda bara för att jag är kvinna. Vilket, när jag tänker efter, kanske inte är så värst konstruktivt egentligen. Om vi inte syns så finns vi ju inte heller, så det kanske ändå är bättre att synas och ta plats.

För Javascript-kursen bör jag ha uppfyllt kraven för att få gå kvar: jag har gjort ett inlägg i uppropstråden och även lämnat in den första uppgiften, men det har gått 12 dagar utan respons. Jag börjar nästan undra om lärarna glömt bort mig.

Java-kursen var det nära att jag inte fick gå – jag hade nog inte varit kvar på kursen idag om inte läraren mailat en påminnelse om något jag inte alls var medveten om att jag måste göra. Jag lallade på och tog det lugnt då första inlämning är först nu i helgen och blev aningens förskräckt när mailet kom…

Hej, glöm nu inte att besvara formuläret ”Studieplaner” om du tänker dig läsa kursen denna termin. Vi gör ett administrativt avbrott på alla som inte besvarar formuläret. Du har fram till midnatt på dig att fylla i formuläret.

Sommarkursen i programmeringsteknik tog jag faktiskt tag i förra helgen. Jag har gjort en del av den granskning av kurskamratens kod som åligger mig att utföra, och trodde att jag skulle hinna göra färdigt uppgiften under veckan som gick men så blev det inte. Om jag lyckas vara effektiv i övriga kurser och lämnar in det som måste lämnas in i helgen hoppas jag kunna färdigställa även den uppgiften. Det vore skönt att kunna komma vidare med den kursen också.

Men åter till den kurs jag håller på med, d.v.s. datavetenskapen.

När jag förberedde maskinprogrammeringslabben (genom att läsa igenom lektionssidan och lägga till alla för labben nödvändiga punkter på att göra-listan) upptäckte jag att jag hade missat att göra något som kallades Quizz 1. Ni vet, ett skriftligt (datorbaserat) prov där man har en viss tid på sig att besvara en bunt frågor. Och svaren ska bli rätt, men man får göra provet flera gånger.

Jag hade en timme på mig för hela provet och ägnade nog nästan halva den tiden åt den första frågan: ”Beräkna accesstiden för en hårddisk som snurrar med varvtalet 7200 rpm och vars söktid är 7,9 millisekunder”. Uj, så jobbigt! Till stor del för att jag nästan glömt hur man gör när man räknar, men också för att jag blir stressad och uppjagad av att veta (och även se!) att det finns en klocka som räknar ned mot noll. Ja, och så den där otrevliga prestationsångesten…

Resultatet blev 24 rätt av 24, så jag känner mig inte missnöjd – h4x0r, typ!

Nu borde jag ägna mig åt maskinprogrammering, men har hunnit bli hungrig så jag måste äta något först. Kanske inte så konstigt att jag är hungrig med tanke på att jag bara druckit kaffe (med skummad gräddmjölk i) och ätit ett par kokta ägg (med en klick majonnäs) sedan jag vaknade för snart tolv timmar sedan…

Slutlig antagning hösten 2015 – jag kom in!

Så fel jag hade, när jag trodde att jag inte skulle komma in på de kurser jag ville!

Idag kom det slutliga antagningsbeskedet och si, reservplats 236 räckte alldeles utmärkt för att komma in på den datavetenskapliga introduktionskursen, som jag ville använda för att skrapa ihop en gedigen grundbehörighet för vidare studier inom detta och andra närliggande områden. En lustig sak med den här kursen, såg jag när jag läste kursplanen, är att man bara behöver skriva tentamen om man siktar på betyget A eller B. Och… tja, det finns väl risk för att jag gör just det eftersom jag fick en eller annan blodad tand efter förra terminens resultat.

Antagen till Datavetenskaplig introduktionskurs

Det ser alltså ut som att jag kommer att läsa tre kvartsfartskurser även i höst och då hoppas jag att det ska gå minst lika smidigt som med kurserna i våras.

Kurspaketet Webbutveckling och programmering, 30 hp fördelat på:

  • Klart: Programmering och Problemlösning i Python, 7,5 hp (VT15)
  • Programmering med JavaScript, HTML och CSS, 7,5 hp (HT15)
  • Operativsystemet Linux, 7,5 hp (VT16)
  • Webbapplikationer för mobila enheter, 7,5 hp (HT16)

Objektorienterad programmering i Java, 7,5 hp
Datavetenskaplig introduktionskurs, 7,5 hp

Såvitt jag kan förstå börjar alla tre kurserna vecka 36, som inleds 31 augusti. Innan dess bör jag vara klar med de nu pågående kurserna samt ha förberett lite. Vet ni, det är inte så länge kvar och jag känner mig nästan stressad redan. Hur sjutton ska jag hinna med så att kursstarten inte känns som en mardröm?

Men roligt kommer det att bli att få lära sig mer, både nytt och gammalt!

Antagningsbesked hösten 2015

Idag var det så dags att få besked om höstens kurskandidater.

Utfallet blev ungefär så som jag förväntat mig – jag blev ovillkorligt antagen till Java-kursen och hamnade som reserv (med typ ingen chans att komma in) på den datavetenskapliga introduktionskursen. 48 antagna, reservplats 236.

Reservplats 236 på Datavetenskaplig introduktionskurs

Här gäller för mig alltså bara att samla fler högskolepoäng och fortsätta söka. Förr eller senare borde jag väl ha fått ihop tillräckligt för att kunna ta en plats. Tanken med den kursen är att skaffa en gedigen behörighetsgrund att bygga vidare på. Delvis med sådant jag redan kan (dokumentera och/eller aktualisera kunskaperna), delvis med nya intressanta och något mer avancerade kurser.

Kurserna i applikationsutveckling för Android respektive iOS renderade mig båda en reservplacering, med liten chans att bli antagen (plats 208 med 30 antagna respektive plats 66 med 80 antagna). Det är föga förvånande att jag hamnar långt ned på listorna när urvalet baseras på högskolepoäng och jag ju inte hade fått ihop fler än 5 hp vid den avgörande tidpunkten. Idag har jag fler, men det påverkar ju inte den saken. Kurserna Människa-datorinteraktion resp. E-tjänster – Introduktion, som jag sökte mest som backup, blev jag antagen till. Jag har tackat nej till de fyra sistnämnda, och ja till de två första (en reserv).

Med andra ord kommer jag förmodligen bara läsa Java och Javascript i höst. Två kurser på kvartsfart, varav den ena borde kunna ge ganska billiga poäng med tanke på mina kunskaper sedan tidigare. Men jag tar inget för givet ännu.

Kurspaketet Webbutveckling och programmering, 30 hp fördelat på:

  • Klart: Programmering och Problemlösning i Python, 7,5 hp (VT15)
  • Programmering med JavaScript, HTML och CSS, 7,5 hp (HT15)
  • Operativsystemet Linux, 7,5 hp (VT16)
  • Webbapplikationer för mobila enheter, 7,5 hp (HT16)

Objektorienterad programmering i Java, 7,5 hp

Jag tror att det blir alldeles utmärkt då studier på halvfart förmodligen är precis så mycket jag mäktar med, parallellt med heltidsjobb. Särskilt som nuvarande uppdrag från i höst blir betydligt mer krävande än vad det första halvåret var.

Sedan tänker jag också skriva högskoleprovet i höst – allt för att bättre kunna konkurrera om kursplats. Det grämer mig fortfarande att jag missade att anmäla mig till vårens provtillfälle eftersom jag inte förstod att ansökningsperioden var så kort. Nu har jag skrivit in det i kalendern, så det borde inte gå att missa.

Sommarens studier

I övrigt har jag glömt skriva om att jag sökte och har påbörjat sommarkursen Programmeringsteknik (6 hp) vid Stockholms universitet och det är den jag för närvarande ägnar mig åt. Jag har fått mina första 1,5 hp för att jag genomfört självtesterna med 100% korrekta svar och väntar nu på rättning av också den tredje inlämningsuppgiften, varefter jag tydligen får ytterligare 1,5 hp. Det som väntar härnäst är den avslutande projektuppgiften som ger resterande 3 hp.

Det lustiga med den här kursen är att jag förväntade mig något mer teoretiskt. Det här är en praktisk programmeringskurs, där man skriver program i Python. Eftersom jag precis har avslutat en 7,5-poängskurs i Python-programmering känns det skumt att gå denna. Halva kursen genomförde jag på mindre än två dagar. Nåja, billiga poäng är också poäng – varenda en av dem lär komma till nytta när jag ska konkurrera om plats på framtida kurser. Jag undrar dock vad den avslutande muntliga redovisningen innebär – kan bli hur läskigt som helst.

Och så ska jag påbörja mina båda mattekurser också, tämligen snart:

Förberedande kurs i matematik, 5 hp (KTH)
Förberedande kurs i matematik 2, 3 hp (KTH)

Går allting bra så har jag alltså efter sommaren ytterligare 14 hp (totalt 34 hp).

Högskolepoäng: 20,0 (vårterminen är klar)

Så där, ja! Då var slutligen alla vårens poäng inrapporterade såväl som synliga på antagning.se – summa summarum hela 20, alldeles färska, högskolepoäng. Jag måste tillstå att jag är rätt nöjd med dem. Och som om det inte räckte med poängen så fick jag ju dessutom högsta möjliga betyg på alla kurserna. Wohoo! Ni får vara så goda och ursäkta mitt skryt för jag är uppriktigt stolt över mig själv.

I morse fick jag mail om att de sista poängen blivit inrapporterade till Ladok och nu när jag kom hem (efter två dagar på Kolmårdens djurpark) och loggade in på antagning.se hittade jag dem även där. Vårens poängjakt är därmed avslutad.

Mina 20 högskolepoäng

Och så praktiskt att mina sommarkurser började precis idag! Ska ta och kolla upp vad jag behöver göra med dem, men det får bli senare i veckan. Nu är jag trött och tänker göra så få knop som möjligt innan det är dags att göra sig redo att inleda de sista dagarnas arbete innan semestern tar vid. Det vill säga: sova.

Frustrerande uppstartsperiod

Jag har säkert bara förträngt hur det brukar vara att börja nytt uppdrag, men jag känner mig frustrerad och undrar hur lång tid det ska behöva ta att finna sig till rätta i den miljö jag ska jobba i. Och då menar jag inte så mycket den fysiska miljön som den programmeringstekniska. Jag är hyfsat obekant med mycket, som t.ex. applikationen och upplägget såväl som de tekniker som används.

Visst, jag har allmän kunskap när det gäller liknande tekniker, men saknar (för min bekvämlighet) alldeles för mycket detaljerad kunskap och erfarenhet av just dessa specifika. Och i utvecklingsteamet är det lite för ofta främst konsulter och nyanställda på plats, d.v.s. vi saknar någon som kan guida oss rätt i djungeln. Det blir lätt så att en blind leder andra blinda – inget vet riktigt vad som är rätt.

Man kan lugnt säga att det krävs en rejäl dos av tålamod från min sida – jag vill ju som vanligt kunna och behärska allt på en gång. Jag trivs verkligen inte med att vara någon som är osäker och behöver fråga om (känns det som) allt, jämt. Jag får bita ihop och dra några extra djupa andetag och sen bara köra vidare.

Och samtidigt vet jag ju ändå att det bara är i början det känns så här jobbigt. Det går över. Jag kommer att med tiden lära mig allt jag behöver kunna och hitta lämpliga sätt att förhålla mig till arbetet och mina med- och motarbetare.

Så här långt har jag bl.a. bekantat mig lite mer med SLF4J, JPA och Mockito.

Högsta betyg i alla kurser

Det låter väl alldeles fantastiskt bra, eller hur? I alla fall om man läser många olika kurser under samma termin. Jag för min del läste ju bara tre kurser under vårterminen, på kvartsfart. Hm, när jag nu tänker efter är det inte så långt ifrån att studera i full fart – jag har ju faktiskt pluggat på 3/4-fart under våren. Eller på halvfart, om man låter bli att räkna Java-kursen jag såg som gratispoäng, som jag bara behövde för att få vidare meriterande högskolepoäng. Och sedan ska jag väl också, innan jag kan anse mig helt klar och det hela alldeles officiellt, invänta poängen i Ladok, men ändå… faktum kvarstår: toppbetyg bör det bli.

I går, under lunchen, fick jag en notifiering från BTH:s lärandeplattform, som började: ”Hej! Vi har nu rättat din tentamen DV1453 Inledande programmering i Java som du skrev 2015-06-04 och du är godkänd på denna.” – fantastiskt bra att de inleder med det viktigaste, dvs själva resultatet. Därefter följde bedömning av implementationen och så avslutades med ”Du har med god marginal klarat gränsen för godkänd. Bra jobbat!”. Eftersom man inte kan få högre betyg än G på den här kursen innebär det att sviten med högsta möjliga betyg är obruten. Lite roligt, det också, även om jag inte tänkt på betyg. Poängen var det viktiga.

När jag sedan kom tillbaka till skrivbordet efter lunch och möten och vad det nu var, loggade jag genast in på plattformen för att läsa det hela lite mer detaljerat på en större display och vad ser jag väl då? Jo, Python-projektets resultat hade också trillat in. Betyget blev A på slutprojektet såväl som på kursen som helhet. Det hade jag verkligen inte väntat mig eller räknat med, men blev mycket glad. Och även lite stolt. Förstå vad jag måste vara bra! Liksom. Enda haken är att jag nu kanske förväntar mig högsta betyg på alla kurser jag läser framöver…

Och så har jag nu fått ett fantastiskt lyxproblem: vad gör jag nu? Min nästa kurs börjar ju inte förrän den 29/6 och vad jag förstår kan man inte registrera sig och börja tidigare än så. Alltså har jag nu drygt två veckor ledigt. Sambon har börjat med sin sommarkurs, så jag tänker mig att han använder en stor del av sin fritid till att plugga de närmaste veckorna och jag kan/får roa mig helt på egen hand.

Men vad är det jag ska och vill göra då, som jag inte riktigt kunnat göra (läs: valt att skjuta på framtiden) sedan vårterminen drog igång framåt slutet av januari? Läsa skönlitteratur, är det jag första kommer att tänka på. Vara ute, det andra. Finns nog fler saker, så det blir till att ta sig en funderare. Men grunnar jag på det länge nog kommer problemet att försvinna av sig självt, vilket vore… synd.

Java-kursen är nu också avslutad

Idag skrev jag tentamen i Java-kursen. Det förvånade mig att jag var en av dem i min sal som satt kvar allra längst – kl. 14:45 (15 minuter innan sluttid) ansåg jag mig klar och lämnade in min lösning. Då hade jag suttit och kodat tämligen intensivt från klockan 10:00, vilket märktes sedan när jag skulle ställa mig upp på fötterna – höft- och andra leder knakade så att jag nästan blev lite orolig.

Himla fint här på BTH! Mycket glas, och vatten utanför knuten. Strålande väder också - ska ta mig en promenad in till stan och bara njuta. Nu är terminen helt slut! :-D

Det här var alltså i Karlskrona och BTH låg jättefint vid ett av alla stans vatten. Om jag någonsin skulle flytta hemifrån för att plugga skulle jag nog gärna hålla till där, känner jag. Solen sken som besatt från en klarblå himmel, men det funkade ändå att promenera både dit ut och tillbaka in till stan eftersom det blåste ganska ordentligt. Man undrar hur otäck vinden kan vara där på vintern.

Karlskrona blev nog idag ett obligatoriskt stopp på den tänkta semesterfärden. Nu hittar jag ju till Espresso House från alla möjliga ställen i stan. Den ligger alldeles vid Stortorget. Och Klaipedaplatsen, om jag tolkar Googles karta rätt. Rymligt, tar upp ett helt kvarter (hus), och personalen var trevlig och hjälpsam.

Och så besöker man så klart #EspressoHouse också. Hemma, fast borta. Stort ställe med rejäl uteservering. Fast jag sitter inomhus.

Själva tentan? Den gick nog alldeles utmärkt, tackar som frågar. Jag hittade en bugg precis innan jag skulle lämna in och drabbades av lite nervdaller, men fick strax ordning på det hela. Kan inte komma på något jag kan tänkas ha missat (borde inte vara så kaxig, för det vet man ju vad som händer då!). Finns dock tyvärr ingen chans till VG då man bara kan få något av betygen U, UX eller G.

Nu är skolan slut för denna termin! Bara att vänta in resultat och poäng. Skönt.

Studieställningen just nu: 24-21

Det börjar närma sig slutet på den här terminens studerande. Det är inte mycket kvar alls, även om det som återstår innefattar två resor för något som i alla fall känns lite läskigt. Tentamen. Det blir spännande att se om jag hittar rätt lokal och även hur jag klarar pressen. Prestationsångest, ni vet. Och självfallet utgår jag från att jag kommer att fixa båda, men säker kan man ju inte vara förrän efteråt och lite nervös kanske man ändå måste vara för att inte tappa stinget. Äsch, det ordnar sig! Eller jag behöver i alla fall inte oroa mig nu, för det hinner jag göra senare. Det finns en massa andra saker att oroa sig för innan dess.

I datasäkerhetskursen har jag precis lämnat in min sista veckouppgift och det som återstår där är bara det allra sista, det som är helt avgörande. Tentamen. Jag får läsa, läsa och läsa kursmaterialet fram tills dess. Hela vägen igenom, från början till slut, så många gånger jag hinner och orkar. Och kanske göra självtesterna några gånger till. Antar att surfplattan kan få följa med till och från jobbet. Så går det nog bra till slut, tänker jag. Det är bara några få veckor kvar och sedan är det över. Förhoppningsvis resulterande i ytterligare 5 hp på kontot.

I Java-kursen har jag en inlämningsuppgift kvar, men väntar på att det ska dyka upp någon form av lektion att ta del av så att jag vet vad jag förväntas lära mig. Tidigare har det varit online-möten som jag kunnat titta på i efterhand (eftersom de alltid hållits på dagtid, vilket ju för mig är detsamma som arbetstid), men i det förra kursmomentet blev det bara en inspelning och för det här sista har jag inte sett något alls annat än att resterande live-sessioner ersätts med inspelningar.

Än så länge finns bara inlämningsuppgiften som sådan att tillgå. Normalt brukar inspelningen läggas ut bara någon dag efter deadline för föregående uppgift, men så har inte skett denna gång så jag undrar vad som händer. Nåja, det är gott om tid ännu. Den sista uppgiften, som är nummer 6 i ordningen, ska lämnas in senast den 24/5 (eller 31/5 – det står olika uppgifter på olika ställen) och därefter, i juni, ska det tentas. I nuläget väntar jag mest på att föregående uppgift ska bli granskad och godkänd, så att jag kan pricka av den i min lista.

I Python-kursen lämnade jag in uppgift nummer 6 förra helgen, under andra nåja-veckan, så nu återstår bara att få godkänt på den uppgiften och göra den sista, stora, som är ett projekt och motsvarar en tentamen – det är detta projekt som (dock i kombination med tidigare uppgifter) avgör betyget på kursen som helhet. Inlämning kan göras när som helst från förra veckan och fram till första veckan i juni, men det lär ju vara en del jobb så förmodligen bra att börja med den så snart som möjligt. Det blir dock inte denna helg, för det orkar jag inte.

Läget mer i korthet:

  • Datasäkerhet: Tentamen återstår.
  • Java: En inlämningsuppgift + tentamen återstår.
  • Python: En (stor) inlämningsuppgift återstår.
  • Antagningsbesked för sommaren kommer 4/5. Whee!

Som synes är det inte så mycket kvar nu. Det har gått förvånansvärt fort, men jag längtar efter att få njuta av fritid där jag inte behöver känna att jag kanske borde ägna mig åt skolarbetet i stället. Då kan man måhända fråga sig varför jag sökt nya kurser både till sommaren och till hösten, men jag vill ju lära mig nya saker också! Och samla poäng. Och jag kan alltid tacka nej även om jag skulle bli antagen. Jag menar, hellre det än att behöva ångra att jag inte sökte.

Lära ut med korrekt kod

Jag blir faktiskt en smula irriterad här, inte bara å nybörjarnas vägnar utan även p.g.a. något jag uppfattar som bristande respekt för programmeringen/språket. Ska du lära folk att programmera Java bör du nog inte skriva kodexempel i ett program som med automatik gör om första bokstaven på varje rad till versal. Åtminstone inte utan att gå tillbaka och korrigera i efterhand. Koden blir trasig.

Public static void double(double x) { Double result = x*x; return result; }

Ovanstående kod kompilerar inte. Det heter public, med inledande gemen.

Nu är i och för sig Double result korrekt, rent formellt, men troligen inte riktigt det man egentligen vill visa. Att i sin kod inte göra skillnad på double och Double är fel, då de faktiskt är olika saker. Det ena är ett s.k. primitivt värde, medan det andra är ett objekt (som iofs innehåller ett primitivt värde, av typen double, men det är ändå ett objekt). Eftersom metoden är specificerad så att den returnerar en double kommer programmet att returnera just en double, d.v.s. den primitiva typen, vilket innebär att resultatet som är en Double kommer att omvandlas per automatik, i onödan. Det man menade här var säkert att skriva double result.

Nybörjaren, som ännu inte fått lära sig vad klasser är, borde inte luras att tro att Double och double är samma sak genom att man på det här sättet slarvar med representationen. Dessutom är det ju heller inte riktigt så enkelt att man alltid kan byta ut den inledande bokstaven för att växla typ från den primitiva typen till motsvarande klass – ett typiskt exempel där är int som mappar mot Integer.

Det är inte okej, i min bok, att visa slarvigt skriven kod för dem som ska lära sig.

Sedan är det visserligen strikt formellt korrekt, så tillvida att det kompilerar, att ange metod- och variabelnamn som börjar med en versal, men det bryter mot sedvanlig praxis och följer heller inte allmänt vedertagen kodstil för Java. Namn på variabler och metoder bör inledas med en gemen (bör, därför att det alltid finns undantag). Allt annat ser ut som Visual Basic i mina ögon. Fult, fult, fult!

Jag är bestämt övertygad om att man som lärare ska föregå med gott exempel.

Jag hoppas att jag hittar något vänligt sätt att påtala sådana här saker, sedan i slutet, eller efter att kursen är slut. Kanske vänta tills efter att jag fått mitt betyg? Betyg: ”G Godkänd”, ”UX Otillräckligt, komplettering krävs” eller ”U Underkänd”.

Kursansökan för hösten 2015

Så där, då har jag skickat in ansökan avseende höstens högskolestudier. Sista ansökningsdag är på onsdag, 15/4, så jag gjorde det med flera dagars marginal.

Om vi bortser från att jag inte vet hur hösten kommer att se när det gäller jobbet, så är min tanke att gå vidare med det kurspaket jag påbörjat och utöver detta skaffa meriter för att möjliggöra fortsatta studier inom intressanta dataämnen. Idag är alldeles för många kurser besvärliga att söka p g a saknade poäng.

Detta innebär att jag nu dels sökt ännu en Java-kurs (fortsättning på den jag går), dels en datavetenskaplig introduktionskurs (som ger behörighet att söka andra datavetenskapliga kurser). Utöver detta har jag också, som något slags backup, sökt ett par kurser avseende apputveckling och ett par icke-tekniska men ändå it-relaterade kurser. Samtliga kurser går på distans och kvartsfart.

Om vi nu förutsätter att jag blir antagen till det jag önskar och därefter klarar av att avsluta de utbildningar jag påbörjat och planerar att genomföra kommer jag efter årets slut att ha fått ihop 50 högskolepoäng. Under ett år. Samtidigt som jag jobbar heltid. Går det vägen ska jag banne mig fira! Frågan är bara hur.

Jag måste dock erkänna att det börjar kännas tuffare nu, när jag nästan börjar ana slutet av terminen. Efter snart tre månaders studerande är det faktiskt bara ungefär en och en halv månad kvar, och jag ligger något senare än vad jag hade tänkt mig när gäller Python vilket är stressande. Det beror nog till ganska stor del på att min ambitionsnivå är högre än den måste vara för att bara få godkänt på uppgifterna. Jag passar på att förkovra och förlora mig ett tag i de olika delarna vi lär oss – det är kunskaperna snarare än betyget jag vill åt, även om jag självfallet också vill ha ett hyfsat betyg som kvittens på inhämtandet av kunskaperna. Det är väldigt roligt att programmera i Python, men det tar också mycket tid att få till det så som jag vill. På en rimlig nivå. Jag hinner inte göra alla extrauppgifter, men så här långt har jag alltid gjort några. Just för att det är roligt och lärorikt. Att göra samtliga extrauppgifter skulle dock kräva en orimlig arbetsinsats, då jag som sagt både jobbar och läser andra kurser också.

Datasäkerheten går faktiskt helt okej och är bitvis riktigt rolig, även om det nu med kapitlen om kryptering börjar bli mer krävande. Jag har faktiskt rätt mycket nytta av mina yrkesmässiga erfarenheter, inte minst från nuvarande uppdrag, och ser också att jag får direkt nytta av kunskaperna i tjänsten även framledes. Utöver detta inser jag att jag behöver läsa igenom kurskompendiet flera gånger till innan det blir dags att skriva tentan, men det borde kunna gå vägen.

Java-kursen då? Tja, den går ganska långsamt och särskilt det här senaste avsnittet (Metoder/Klassbibliotek) som, delvis pga påsken, spänner över hela fyra veckor. Jag tar det kallt och tänker klara av hela momentet nästa helg – det brukar inte ta så många timmar att lyssna på inspelningen och göra veckans uppgift. Det har sina fördelar att redan behärska ämnet, om vi säger så. Hade Java-kursen varit lika krävande som Python hade det aldrig funkat att läsa båda.

Studieställningen just nu: 4/4 i Java, 5/5 i Python, 9/11 i datasäkerhet – totalt alltså: 18 rättade (och godkända) av 20 inlämnade uppgifter. Det går framåt!

Att göra härnäst:

  • Python: inlämningsuppgift 6 – deadline: i morgon (+ 2 nåja-veckor).
  • Java: inlämningsuppgift 5 – deadline: nästa söndag.
  • Datasäkerhet: inlämningsuppgift 12 – deadline: nästa söndag.

Python-uppgifterna jag ska göra härnäst verkar extra roliga – nu handlar det om att installera och lära sig använda externa moduler, programpaket och olika sorters nätbaserade tjänster. Instruktionerna för kursmomentet är publikt tillgängliga för den som är nyfiken: Kmom06: Externa moduler och webben.

När jag läste om det hela och följde läsanvisningarna (kapitel 12-14 och 16 i Python for Informatics: Exploring Information) blev jag smått lyrisk och mer än lite nostalgisk. Det här är i sanning en väg tillbaka in i sådant jag pysslade med för 15 år sedan eller så. Fast nu blir det förstås i en något modernare tappning. Det känns lite som att komma hem, och det var väl också en del av idén bakom att hoppa på kurspaketet som ju heter Webbutveckling och programmering – att återknyta kontakten med webbvärlden och utvecklingsarbete i och för den.

Jag funderade ett tag på att till hösten påbörja även det andra kurspaketet BTH tillhandahåller inom webbområdet, Databaser, HTML, CSS, JavaScript och PHP (de båda ska gå utmärkt att läsa parallellt), men eftersom den första kursen är Databaser, HTML, CSS och skriptbaserad PHP-programmering och jag under hösten kommer att läsa Programmering med JavaScript, HTML och CSS som nästa del av det första paketet föreställer jag mig att jag skulle bli för förvirrad.

Fast nu när jag läser mer om respektive kurs inser jag att ”min” kurs fokuserar på klientsidan, med Javascript-programmering, medan den andra håller sig på serversidan med PHP- och databasprogrammering. Det är egentligen bara HTML och CSS som i någon mån skulle kunna komma att överlappa, men eftersom de spelar andrafiol i båda kurserna borde det inte ställa till problem.

En framtida möjlighet kan vara det distansprogram i Webbprogrammering som BTH planerar att erbjuda från hösten 2016 – halva första året utgörs av precis de kurser jag läser i mitt kurspaket. En fjärdedel av första året och lika mycket av det andra består av de fyra kurserna från det andra kurspaketet. Tillkommer sex kurser, som ännu inte är helt spikade, samt ett examensjobb på 15 hp.

Möjlighet att ta ut kandidatexamen kommer att ges via ett tredje år, på campus. Det låter inte ointressant, även om jag reflekterar över det faktum att jag troligen inte skulle ha ett överflöd av yrkesverksamma år kvar efter en sådan examen. Varför, o varför, kom jag inte på sådana här roliga idéer för 10 eller 20 år sen!? Fast om jag jobbar tills jag är 75 blir det minst 20 år att använda kunskaperna.

Så där, nu har jag använt större delen av min pluggkväll till att blogga. Hurra! :)

Studieställningen just nu: 12-12

Oj, nu får jag sätta lite fart igen – rättningskommittéerna har hunnit ifatt mig! Så här långt har jag lämnat in, och fått godkänt på, 3 uppgifter vardera i Python respektive Java samt 6 uppgifter i grundläggande datasäkerhet. Det går framåt och det går nog ganska bra. Jag är nöjd och kanske till och med en aning stolt.

Mia, du är en klippa! (var det någon som sade till mig en gång, minns jag)

I övrigt vad gäller pluggande så har jag skickat en ansökan för sommarterminen och mailat en fråga till UMU om vad för slags underlag de vill ha för att kunna bedöma min reella kompetens – kursen ifråga vill att man ska ha ”minst 15hp objektorienterad programmering i Java på universitetsnivå”, och det har jag ju inte (ännu). Det jag däremot har är rätt många års praktisk yrkeserfarenhet av applikationsutveckling i Java. Det borde kunna räknas som gott nog, tycker jag, men vad UMU tycker får jag vänta på att få reda på. Det är de som bestämmer.

Jag har pratat med chefen och han skriver gärna intyg, bara vi vet vad de vill ha.

Sedan är det ju också så illa att även om jag bedöms behörig att söka kursen kan det mycket väl vara så att jag inte blir antagen p.g.a. att urvalet baseras på antalet högskolepoäng avklarade per sista anmälningsdag. Idag har jag ju bara 2,5 poäng och det hinner nog inte bli så värst många fler. Kanske, eventuellt, att jag hinner få 2,5 poäng till innan deadline, men that’s it. Erbarmligt få poäng är det i vilket fall som helst. Minsta lilla konkurrens så åker jag ut, med andra ord. Jag kan bara hoppas på att det är få som söker och sedan tackar ja till kursen. Undrar om det var så smart att föreslå att sambon skulle söka samma kurs…

Nåja, det är säkert roligt att läsa interaktionsdesign också. Urvalet baseras på betyg, högskoleprov, -poäng vilket kanske ger mig större chans att bli antagen.

Jag har även tagit några steg framåt i ”tenta på hemmaplan”-spåret genom att kontakta Campus Telge, som verkar vara det enda lärcenter nära Stockholms som är godkänt för tentamen på annan ort – utöver universitet och högskolor, vill säga. Tyvärr verkar de dock bara kunna eller vilja hjälpa studenter som bor eller arbetar i Södertälje, men jag har inte blivit slutgiltig avfärdad ännu så jag tillåter mig att hoppas lite till. Optimisten får vara glad en liten stund i alla fall.

Sedan har jag också skickat iväg ett mail till Stockholms universitet – hittade ingenting om min sorts tentamen på deras webbplats så jag provar med en mer allmän mailadress. Blir intressant att se om jag får ett bättre svar än från KTH.

Veckans skolrelaterade arbete:

  • Java: vektorer (klart innan måndag)
  • Python: listor (klart innan måndag)
  • Datasäkerhet: behörigheter (klart innan måndag)
  • Ansökan om prövning av reell kompetens (klart helst innan måndag)
  • Sista ansökning till sommarterminen: måndag 16/3 kl. 24:00
  • Fortsätta nysta kring tentamensmöjligheter i närområdet (klart april/maj)

Planerar studier för sommaren

För tillfället jonglerar jag funderingar kring studier under sommarterminen. Jag har nämligen ganska nyligen insett att det akademiska året omfattar mer än höst och vår – det finns även sommar. Veckorna 24-35 (cirka) ges av olika lärosäten data-relaterade kurser som kan läsas på distans. Dock inte särskilt många när jag eliminerat sådana där jag redan vet att jag kommer att läsa en motsvarande kurs senare. Kvar på listan över kandidater för sommaren 2015 finns därför endast 5 kurser (varav alla omfattar 7,5hp och körs på halvfart).

Två av kurserna handlar om databaser, två om Android-utveckling och en om interaktionsdesign. Särskild behörighet krävs för kurserna i Android-utveckling: allra minst en bunt högskolepoäng i Java eller i kombination med datateknik. Den ena av kurserna vore nog inte ens möjlig för mig att få tillträde till, men den andra kräver inte mer än 15 hp Java. Kunskapen tror jag mig ha, om än inte de formella poängen. Det vill säga: jag tror att jag kan [be]visa att jag har s.k. reell kompetens, alltså kunskaper goda nog för att bedömas som behörig sökande.

Så… en Android-kurs går bort på grund av för höga behörighetskrav, databaser-kurserna låter inte så roliga att läsa (men bra att ha som formell merit utöver rent praktisk erfarenhet), så då återstår kurserna i Interaktionsdesign respektive Utveckling av mobila applikationer (2xUMU). Det kan vara värt att söka båda, även om jag inte kan gå mer än en, och göra ett eventuellt val i senare skede.

Dock ska jag innan jag bestämmer något alls kika på kurser även utanför data-området – eventuellt kan t ex någon mattekurs vara både nyttig och intressant. Där verkar det vara lätt att välja: det finns ”Förberedande kurs i matematik” i några olika versioner. Det kan nog vara en vettig kurs för mig med tanke på att det var så länge sedan jag läste någon matte. Frågan är vart kursen kan leda, och om jag i så fall borde sikta på ytterligare mattekurser under höstterminen.

SF0001 Förberedande kurs i matematik – 5,0 hp (KTH, 42%)
SF0002 Förberedande kurs i matematik 2 – 3,0 hp (KTH, 25%)
MM1003 Förberedande kurs i matematik – 7,5 hp (SU, 50%)
MMG020 Förberedande kurs i matematik – 7,5 hp (GU, 50%)

Rent allmänt skulle jag vilja ha en långsiktig plan, vilket förutsätter kännedom om vad som kan leda vart och vad som behövs för att jag ska kunna lära mig sådant jag tycker är roligt och utvecklande. Främst tänker jag på att skaffa mig nödvändig behörighet för att kunna söka rätt sorts kurser. Och då behöver jag bättre koll på kursutbudet. Tyvärr verkar kurser komma och gå lite som de vill, så det är svårt att veta hur man ska resonera i sin strategiska planering.

Ett mål jag har är att samla på mig Java-poäng. Jag kan visserligen redan Java, men det blir enklare att söka roliga kurser med Java som förkunskapskrav än att varje gång behöva bedyra och bestyrka kunskaperna. En del roliga saker kräver allmän datakunskap eller matematik, så sådana poäng vore också roligt att få. Sedan finns det också annat än ren programmering och systemutveckling som verkar intressant. Datasäkerhet, IT-forensik, eller användbarhet. Till exempel.

Allt ovanstående baserar sig på idén om att studera parallellt med heltidsjobbet, men om jag i stället tänker mig tjänstledighet för heltidsstudier blir läget radikalt annorlunda. Tanken öppnar möjligheter, men behöver begrundas väl. Senare…

Åter till studierna

Åter i hemmets lugna vrå (efter en handfull dagar i Lissabon – kanske mer om det någon annan gång, eller när jag tagit mig an fotona från resan) och nu är det studier som gäller. Jag har skrivit och lämnat in veckans Java-program, som går ut på att två personer tävlar mot varandra i multiplikation. Programmet slumpar fram två tal (1-20) och de två personerna turas om att svara med resultatet av multiplikation dem emellan. Och så där håller det på tills användaren matar in en nolla på frågan om att fortsätta tävla. Programmet berättar då hur många korrekta svar respektive tävlande fick samt vilken av dem som vann tävlingen.

Meningen med uppgiften är främst att visa att man kan och förstår if-satser, for- och while-loopar samt switch-satser. Det svåra för mig är att hålla igen och låta bli att använda sådant som jag kan, men som vi inte lärt oss i kursen – har fått känslan av att det är önskvärt. Hade jag när jag ansökte vetat vad jag vet idag hade jag nog sett till att få registrerat motsvarande kunskaper i stället för att börja med en nybörjarkurs i programmering. Det känns rätt onödigt. Men det är väl jag i ett nötskal, det. Grundlig. Djupet först-sökare, för att låna från sambon.

Sedan har jag läst lite datasäkerhet. Denna gång handlar det om fysiskt skydd av utrustning samt katastrofplanering och jag är inte alldeles säker på att jag förstår vad som åsyftas i veckans uppgift, med ”de tre huvudsakliga stegen du läst om i veckans kapitel”. Jag tycker att det finns lite för många att välja på. Nåväl, det kanske klarnar om jag tar och sover på saken. En eller två nätter. Noterade förresten också att nästa veckas uppgift fått samma deadline som denna veckas, vilket inte borde vara korrekt – har skrivit och frågat om det.

Jag berättade nog aldrig att jag på lärplattformen råkat lyckas registrera mig på en kurs som jag varken sökt eller är behörig till, så nu står jag på deltagarlistan och har tillgång till hela det kursrummet. Och ser på startsidan att en tidsgräns för inlämning är överskriden. Störigt! Hittade i alla fall hur jag kan slippa se den. Dock är kursmaterialet till ”Datastructures and algorithms” intressant att läsa. Jag har mailat den kursansvariga om saken, så får vi se vad som händer.

Och så har jag skickat in en fråga till Antagning.se, om hur man bär sig åt för att bedömas behörig till intressanta kurser när man har nödvändig erfarenhet, men saknar formella meriter. Det är ju slöseri att plugga sådant som man redan kan, så jag ska se om jag kan ordna så att jag får läsa på en för mig lämpligare nivå.

Förresten, när jag var inne på Antagning.se upptäckte jag att jag fått 2,5 poäng registerade. Mina första akademiska poäng, alltså! Dessa handlar om Python.

En inlämnad och en godkänd

Så där, nu har jag lämnat in Python-kursens andra uppgift. Äntligen. Det tog tid.

Jag började jobba med den först i lördags förmiddag och var borta hemifrån på kvällen och kunde snart konstatera att jag borde ha börjat tidigare eftersom jag enligt planen skulle lämna in den senast igår. Nu blev det idag i stället, vilket jag i och för sig tror går lika bra, men jag ska nog vara mer på hugget framöver.

Vid den sedvanliga rundan förbi de olika lärplattformarna upptäckte jag att ytterligare en inlämning i datasäkerhetskursen nu har blivit godkänd. Hurra!

Mina inlämningar

Veckans arbete ska vara klart senast fredag (eftersom vi åker på lördag):

  • Lämna in datasäkerhet nr 3 (Ekonomisk riskanalys)
  • Påbörja Java-uppgift nr 3 (Logik)
  • Påbörja Python-uppgift nr 3 (Strängar och filer)

Som spön i backen

Nej, så frekvent har det förstås inte droppat in godkänt på mina inlämningar (bland annat för att jag inte lämnat in mer än totalt fem stycken hittills), men spön i backen-uttrycket illustrerar kanske lite av min glädje över att precis nyss ha sett att jag fått godkänt på uppgift 1 även i Java och datasäkerhet. Wohoo!

Det finns med andra ord hopp om att jag ska kunna klara datasäkerhetskursen. Som jag skrev i föregående inlägg var jag ju lite nervös för den – inte minst för att tjänstlediga kollegan, som jag tänker mig är duktig på sådant här, fick rest.

Vad gällde intresseanmälan som kunde leda till roliga läskigheter fick jag idag ett ”tack, men nej tack – vi kanske återkommer i framtiden” och misslyckades därefter kapitalt med att fokusera på boklyssnandet under hemresan eftersom hjärnan då var upptagen med att vrida och vända på det material jag skickat in för att se om och hur jag hade kunnat skriva det annorlunda. Och bättre. Jaja.

Första godkända uppgiften

I slutet av förra veckan fick jag äntligen min första uppgift rättad och godkänd. Det var Python-kursens första uppgift, inlämnad 24 januari, som fick den äran. Feedback: ”Bra jobbat, allt fungerar som det ska!”. Det kändes bra och skönt. Nu hade jag visserligen inte förväntat mig annat än godkänt, men ändå. Nöjd.

Det är skönt att nu vara igång, på riktigt. Fatta alltså, jag högskolestuderar!

Riktigt lika smidigt gick det inte med Java-kursens första uppgift, som lämnats in runt månadsskiftet. Där visade det sig efter rättningen att jag och rättaren inte hade riktigt samma uppfattning om hur vårt strukturdiagram lämpligen ritas.

Jag sökte kontakt för att försöka reda ut det hela och fick svar, men har väl inte blivit så värst mycket klokare ännu. När jag sökte information på nätet hittade jag uppgifter som jag tyckte talar både för och emot min tolkning av hur man i diagram visar flerbent selektion. Jag har sedermera, på rättarens uppmaning, lämnat in riktig Java-kod som visar hur jag tänker min lösning och dessutom lagt till ett diagram som ser ut så som jag uppfattat att vi förväntades rita det.

Juryn är fortfarande ute, d.v.s jag har inte hört något mer sedan dess, men jag har svårt att se att jag inte skulle få godkänt i slutänden. Jag tycker att jag har visat att jag förstår, och dessutom tänkt självständigt. Det kan väl aldrig vara fel? Men, som vanligt, helt säker kan man aldrig vara så jag avvaktar vidare.

Andra Java-uppgiften, som är den första som ska bestå av faktisk programkod, är också inlämnad – den gjorde jag samma kväll som inspelningen lades upp, vilket dessvärre innebär att jag får vänta två veckor innan det dyker upp en ny uppgift att sätta tänderna i. Lite störande är det att man inte lägger ut samtliga uppgifter på en gång så att vi som vill det kan utföra och lämna in dem direkt. Jag förstår och accepterar dock att kursen är upplagd utifrån att deltagarna inte kan programmering, i Java eller alls, och att jag inte tillhör kursens målgrupp.

När det gäller kursen i datasäkerhet har jag lämnat in både första och andra uppgiften (varav endast den första är obligatorisk), men inte fått respons på någon av dem. Det känns trist, jag är allt lite nervös inför att få min dom.

Förutom att det är svårt med gränsdragningen lämnar också materialet, enligt min uppfattning, övrigt att önska då man inte är alldeles tydlig i definitionerna. Kanske är min programmerarhjärna för precis så jag behöver luckra upp i pallet.

Gällande att tenta Java i Stockholm känns det just nu smått oöverstigligt. Jag fick i och för sig (från KTH) ett svar med allmän information om tenterande.

Så här såg svaret ut:

Hej,

Du har kontaktat infocenter för att få information om hur man skriver tentor på KTH.

Här är länken.
http://www.kth.se/student/schema/tenta?programme=titeh

Mycket nära goddag yxskaft. Och här är informationen på den länkade sidan:

Externa tentander tas endast emot om KTH har platser över. Använd ovanstående söklänkar för att hitta en tenta som går på rätt tid och dag.

Kontakta sedan tentamensansvarig för kursen angående möjlighet att tentera, se lista över kontaktpersoner.

Behöver jag säga att listan i nuläget är väldigt lång och har ytterst få namn?

Jag hittar ingenting som tyder på att man kan eller vill beakta den lilla (men för mig ack så viktiga) detaljen om att det här handlar om en datorbaserad tenta med därtill hörande speciella krav. Och visst, det är fullt tillåtet att skriva tentan på papper, men hallå… det är programmering! Jag tänker använda en dator.

Så just nu ser det ut som om jag kommer att besöka Karlskrona i juni. Skoj!

Min ”att göra härnäst”-lista:

  • Python 2: Villkor, funktioner och loopar (måldatum: 2015-02-15)
  • Datasäkerhet 3: Administration och juridik (måldatum: 2015-02-15)

Sedan måste jag börja tänka lite på hur det blir under semesterveckan, då vi ju drar iväg till Lissabon. Som tur är är vi inte borta någon hel vecka, så studierna borde kunna hinnas med. Icke desto mindre är det något jag behöver fundera på, så att jag kan få till det så bra som möjligt. Utan stress och panikkänslor.

Annars… har jag idag gjort en intresseanmälan till något som kan bli roligt. Och läskigt. Återstår att se var det hela landar. Jag fortsätter röra i den här grytan.

Första riktiga officiella kursveckan

Jo, det visade sig att jag hade fel i mitt förra inlägg och att det faktiskt är den här veckan som är den första officiella kursveckan – på alla tre kurser jag ska gå.

Datasäkerhet

Så här långt är jag lite besviken på LiU, som uppdaterat dokumentet med den viktiga kursinformationen utan att tala om för oss att man gjort det och dessutom gjort det efter att kursen börjat – oavsett vilket av startdatumen man väljer.

Jag har självfallet utgått från att lagt kort ligger och blev sålunda idag väldigt förvirrad över att plötsligt se en helt annan information kring gällande datum.

Ursprungligt dokument (utskick via mail):

Kursen startar vecka 3, dvs. måndagen den 12 januari 2015. Efter att du lämnat in första veckouppgiften (senast två veckor senare, alltså den 26 januari kl. 16.00) kan du läsa kursen så fort eller långsamt du vill.

Uppdaterat dokument (senast uppdaterat 21 januari):

Kursen startar vecka 4, dvs. måndagen den 19 januari 2015. Efter att du lämnat in första veckouppgiften (senast två veckor senare, alltså den 2 februari kl. 16.00) kan du läsa kursen så fort eller långsamt du vill.

Kursens hemsida (antyder att inlämning är senast 26 januari):

Kursen börjar den 19 januari 2015, dvs. vecka 4. Den första veckan i kursen läser man in kapitel 1 i kompendiet och svarar på veckouppgift 1.”

Vad ska man tro? Antar att det kan vara säkrast att lämna in i morgon, trots att det där man lämnar in veckouppgifterna anges deadline 2 februari. Förvirrat.

Python

Jag har idag färdigställt och lämnat in min första uppgift för Python-kursen. Det satt långt inne, men klar blev den. Strax efteråt insåg jag att deadline är först nästa helg, men det är skönt att ha kommit igång ändå. Och det skulle inte göra något om jag råkade köra igenom kursen på halv- i stället för kvartsfart heller, men det är absolut inget jag tänker sikta på. Jag tar hellre gott om tid på mig för att leka och lära så mycket som möjligt, än att stressa igenom kursmomenten.

Java

Vad gäller Javakursen missade jag introduktionstillfället (som var ett online-möte) i onsdags eftersom jag helt enkelt sov. Kroppen behövde vila för att bekämpa virus och kompensera för en dålig, d.v.s. alltför kort, natts sömn.

Som tur är måste man inte vara med på dessa tillfällen live eftersom de spelas in och därefter kan beskådas i efterhand. Vilket jag gjorde senare samma dag.

Några saker jag lärde mig från introduktionstillfället:

  • Treveckorsupprop = lämna in övningsuppgift 1, senast söndag 1/2.
  • Inlämningsuppgifter skrivs på svenska eller engelska.
  • Deadline är alltid söndag – uppgiften klar innan nästa moment börjar.
  • Tentamen genomförs på BTH i Karlskrona (eller på annat lärosäte enligt överenskommelse) i juni. Exakt datum har dock inte blivit fastslaget ännu.

Så hoppsan, det verkar kunna bli en liten tentaresa här också.

Jag ska be att få återkomma längre fram med en beskrivning av mitt system, hur det nu kommer att se ut då. Någon sorts system måste man ju i alla fall ha att jobba efter om rätt kursmoment ska bli genomförda i rätt tid. Allra minst behövs koll på de deadlines som gäller – man får se till att påminna sig själv.

Min ”att göra härnäst”-lista:

  • Genomföra datasäkerhetskursens första inlämningsuppgift.
  • Genomföra Javakursens första moment tillika 3-veckorsupprop.
  • Påbörja det andra kursmomentet i Python-kursen.

Antagningsbesked och tillhörande val

Jag blev antagen till alla kurser jag sökte, kan man säga. Uppifrån och ned på den av mig prioriteringsordnade ansökningslistan stod det ”Antagen” överallt, ända tills antalet poäng nått det maximala man får tacka ja till. Summa summarum blev det sex kurser med ”Antagen” och sex kurser med ”Struken”.

En av de strukna kurserna ansågs jag obehörig till eftersom den krävde 7,5 hp grundläggande programmering eller motsvarande kunskaper. Visserligen har jag motsvarande kunskaper, men det verkade inte värt besväret att leta reda på någon som kan skriva ut ett intyg för att formellt få lära mig Perl (som jag jobbat med ett antal år) och Python (som jag nosat på i tjänsten och på egen hand).

Av de sex kurser jag blev antagen till har jag nu tackat ja till tre. På kvartsfart.

En av kurserna är ett paket som omfattar fyra kurser och sträcker sig över en längre period (detta bör enligt mina beräkningar handla om två år). De övriga två kurserna är tänkta att klaras av i sin helhet under vårterminen 2015.

Det här är kurserna jag tänkte ge mig på:

Webbutveckling och programmering, 30 hp fördelat på:

Inledande programmering i Java, 7,5 hp
Grundläggande datasäkerhet, 5 hp

Vi kan väl säga som så att jag inte räknar med att behöva jobba ihjäl mig med den grundläggande Java-kursen, och inte heller anstränga mig över hövan med Python-programmeringen. Så då borde det väl främst vara datasäkerheten jag skulle kunna behöva oroa mig lite för – med tillhörande tentamen i Linköping.

Jag tar dock inget för givet, utan ställer in mig på att allt kan hända i vår.

I väntan på att det ska bli dags att börja de ”riktiga” studierna roar jag mig med att studera på MIT (fast det lär inte institutet i fråga veta särskilt mycket om). MIT har nämligen något som kallas Open CourseWare, där de tillgängliggjort en mängd utbildningar som vem som helst kan ta del av via nätet. Från webbsiten når man enkelt inspelade videoföreläsningar och diverse annat kursmaterial.

Sedan förra lördagen har jag tagit mig exakt halvvägs igenom kursen som heter Introduction to Computer Science and Programming, vilket innebär att jag tittat på 13 föreläsningar på ca 50 minuter vardera. Somligt är nog så grundläggande, men det är ändå (tror jag) nyttigt för mig. Jag får en stabil grund och lär mig begrepp jag tidigare saknat, även om jag har viss kännedom sedan tidigare.

Programmeringsspråket som används är Python, vilket är kul för att jag fuskat lite i det förut och för att det verkar vara ett ganska roligt språk att använda sig av. Det här ger möjligen ett litet försprång vad gäller den kurs jag ska läsa i vår.

Jag väntar otåligt på mina nybeställda, rabatterade och fraktfria glada strumpor.

Utöver MIT-föreläsningar ägnar jag min fritid åt att läsa och lämna feedback på sambons exjobbstext, samt hänga med i den stora bunten tv-serier vi försöker följa. Vilket av detta det blir beror mycket på hur sent jag kommer hem och hur trött i huvudet och ögonen jag är. Orkar jag tänka mycket kan det bli exjobbet, bara lite: föreläsningar. Annars tv. Om ögonen fått nog för dagen lyssnar jag på James Marsters som läser Vampire Empire. Eller någon kodnära podcast.

Att det är nästan jul rör mig inte i ryggen, även om jag är förvånad över att det är så få dagar kvar nu. Antar att min brist på julinsikt har mycket att göra med att vädret inte alls är eller varit vintrigt här i stan. Det är milt och förbaskat mörkt. Jag ser fram emot att få vara ledig ett par veckor och ha makten över min tid.

Ungefär samtidigt som jobbet drar igång efter helgerna gör även kurserna det. Därefter blir det en semestervecka igen i februari, då vi är ett gäng som åker till Lissabon med väninnan som fyller jämnt och firar eller flyr detta genom att resa. Sedan… vet jag inte mycket om vad som händer. Den som lever får se. Då.

Allmänt ospecificerat

[Söndag, mitt på dagen]

Ännu en lång helg är snart till ända och jag njuter av ensamheten, medan sambon är ute och roar sig på sitt eget sätt och håll. Just nu pustar jag ut, framför datorn, efter att ha ägnat några timmar åt städande. Det sistnämnda kom sig av att jag ville känna att jag uträttat något och då fanns det ju (som alltid) lämpliga saker att göra.

Efter att jag avslutat en viktig uppgift från listan i UfYH-appen insåg jag att köket inte fanns med i familje-Trello:n, mer än som kommande renoveringsobjekt, så jag lade in det stora röjningsprojektet, med diverse punkter i att göra-listan. Den första av dem prickade jag omgående av, så klart – det är ju därför checklistor finns.

Jag tror det är så det får bli – Trello får hantera hela projektet och så kan jag lägga in enstaka unfucking-aktiviteter i UfYH-appen för utförande med hjälp av 20/10.

Solen skiner där ute. Om inte sol var så varmt hade jag förmodligen gjort en längre promenad för att lyssna vidare på Skin Game (bok 15 i Dresden Files-serien, av Jim Butcher). Av någon anledning somnar jag nämligen, och tvingas gång på gång spola tillbaka, om jag lyssnar stillasittande eller -liggande. Vilket är synd, för det är ju alldeles ljuvligt att ligga och blunda och njuta av James Marsters uppläsning. Vore det så att alla ljudböcker lästes av honom hade jag varit 100% boklyssnare.

Vilket påminner mig om att jag ser fram emot november, då Dragon Warriors (Kickstarter-backad film i vilken James Marsters har en framträdande roll) är tänkt att presenteras för allmänheten. Ja, jag är självfallet en av dess stolta sponsorer.

[Söndag, sent på kvällen]

Och där någonstans slog hungern till och jag gjorde ett långt avbrott i skrivandet. Jag tror att jag rentav helt glömde bort att jag hade påbörjat ett blogginlägg. I stället tittade jag på ett avsnitt vardera av Episodes och Supernatural, plus det första av Teen Wolf. Därefter ännu ett Teen Wolf – jag ville se hur det skulle utvecklas.

När sambon till slut återvände hem lagade vi mat och såg färdigt första säsongen av Arrow. Tänk att det tog så lång tid att verkligen ta sig an den serien! Jag gillar den, även om det känns smått absurt att se t.ex. ”Harry Dresden” och ”Captain Jack” och ”River Song” i helt andra sorters roller än dessa. Men det är kul också. Dessa skådisar är ju, lustigt nog, alla britter. Kanske just därför jag gillar dem?

Nu ser jag fram emot att snart börja kolla på Arrows andra säsong och så kommer en tredje säsong redan till hösten. Sedan finns det också gott om avsnitt av både House of Cards och Orange is the New Black att se – vi har ännu bara sett något enstaka avsnitt av deras respektive andrasäsonger. Även om det nu är slut på tablå-säsongen så att det inte längre ramlar in drösvis med nya avsnitt varje vecka har vi massor att titta på. Hela Star Trek (minus den allra första TOS-säsongen) och alla gamla säsonger (första till åttonde doktorn) av Doctor Who, till exempel.

Låt se, om jag går igenom listan uppifrån och ned (markerar dem som är mer än precis påbörjade): Angel, Arrow, Black Sails, Brooklyn Nine-Nine, Camelot, Defiance, Episodes, Fargo, Fringe, Grimm, The Guild, Helix, Heroes, House of Cards, Intelligence, Jonathan Creek, Justified, The Killing, Lost Girl, Numb3rs, Orange is the New Black, Orphan Black, Star Trek, Stargate, The Tomorrow People, The Tudors, The White Queen… och fler därtill. För egen del ser jag (om än med rätt låg frekvens) bl.a. Being Human (UK), Sons of Anarchy, Supernatural och Teen Wolf. Funderar även på kolla in From Dusk till Dawn, vid lämplig tillfälle.

[Måndag, efter jobbet]

Mäh! Tänk att det ska vara så svårt att få ut ett jädrans blogginlägg. Det är ju bara att skriva färdigt och trycka på knappen. Liksom. Fast som sagt, skriva färdigt. Jag är inte världsbäst på att släppa taget och lämna ifrån mig skriven text. Därtill är jag alltför noggrann, för att inte säga petig, och har rätt specifika krav på mina texter.

Första delen av det här inlägget skrev jag i söndags, mitt på dagen någon gång. Andra delen kom till närmare läggdags igår kväll, alltså fortfarande i söndags. Dessvärre fastnade jag därefter i en bit programkod som jag blivit ombedd att städa upp för att visa att jag vet något litet mer än ingenting om Java-programmering.

Det blev förstås alldeles för sent innan det var färdigt, så då hade jag verkligen inte tid och lust att färdigställa inlägget. Nu är det måndag kväll och den här gången ska jag banne mig publicera inlägget också! Fast jag skulle behöva leta reda på någon lämplig Java-kod där ute på nätet… Kod som jag kan säga något om – också det är för att visa att jag vet vad jag pysslar med. Det kan ju gå precis hur som helst, det.

Dock, jag tänker bevisa att jag faktiskt kan hålla igen och faktiskt behålla fokus i stället för att ständigt hoppa vidare till nästa blanka föremål som dyker upp i min hjärna. För det vet jag att jag kan. Bland annat gjorde jag just det på jobbet idag. Nästan så att jag blev lite stolt, faktiskt. Nu var det förstås inte mer än i en två timmar lång lucka mellan andra åtaganden, men ändå… det hade varit så lätt, så lätt, att fladdra iväg till annat. Jag undrar ibland vad det är som gör att det är så svårt att ta sig över tröskeln in i en sådan fokuserad värld, medan det när man väl är där är hur enkelt som helst att stanna kvar. Det är som flytet som kan uppstå vid programmering – ibland tar det lång tid att komma igång, men sedan rullar det på.

Den främsta anledningen till att jag kom hem så tidigt som sjutton (pun intended) idag var att ta hand om en leverans. Budfirman var på plats en halvtimme innan avtalad tid och jag gav min tillåtelse att lämna paketen utanför lägenhetsdörren för att snubben skulle slippa vänta tills någon i familjen kom hem, varför det kändes angeläget att skynda. Man vill ju inte låta dem stå där alltför länge för vem vet vilka av mina grannar som kan bli frestade av två stora, bruna, intetsägande kartonger.

Nåväl, kartongerna stod där och väntade när jag kom hem, precis på slaget, och jag lyfte in dem i lägenheten, bytte till hemmakläder, spillde upp ett stort glas kallt vatten – och satte mig vid datorn. Finn ett fel. Men ändå inte, egentligen, för jag ska ju skriva färdigt det här inlägget. Och först därefter får jag öppna mina bruna paket.

Vad det är i paketen? Nördigheter som Star Trek- och Soft Kitty-prylar. Whee!

Får jag gå nu?

Programmering: Tillstånd – från en stor maskin till flera mindre klasser

Jag har egentligen inte i mitt tidigare liv stött på konceptet tillståndsmaskin när det handlar om programmering, även om jag har ett svagt minne av att begreppet dök upp i något av de tekniska ämnen jag läste på gymnasiet. Det var inte alls särskilt länge sedan ämnet dök upp i en programmeringsteknisk diskussion med sambon. Han, som har både mer formell utbildning och bättre teoretiska kunskaper än jag, förklarade principen och jag blev entusiastisk och lanserade konceptet på jobbet och fick positiv respons och sedan har det rullat på. Jag gillar tillståndsmaskiner!

Jag tror inte att jag är världsbäst på att förklara det hela, men kan ju ändå försöka ge min bild. Konceptet innebär att saker hela tiden befinner sig i ett visst tillstånd, och går vidare till andra tillstånd enligt ett förbestämt mönster eller schema – inte nödvändigtvis likadant från gång till gång. Ett eller flera tillstånd kan t ex upprepas eller måste inte finnas alls. Alla sådana saker specificeras av mönstret/schemat.

Förresten, det är ju inte så att det alltid finns en formell beskrivning heller – ibland sitter det hela bara i huvudet, man förstår själva processen. Det kan vara så enkelt som att man köper en sak: går in i affären, väljer vara (eller varor), betalar, får ett kvitto, går ut ur affären. Eller så låter man bli att betala och får därför inget kvitto. Eller kanske man går runt i butiken varv efter varv innan man till slut känner sig redo att passera kassan. Och så vidare. Processen är flexibel och kan varieras.

En fördel med att använda tillståndsmaskiner i programmeringen är att man slipper hålla hela bilden i huvudet. Det räcker med att se på den närmaste omgivningen och förstå var man man kommer ifrån, och vad man därför ska göra eller förvänta sig härnäst. Typ så ser jag på det. En tillståndsmaskin gör jobbet mycket enklare. Och ja, för att det påståendet ska vara sant måste det självfallet handla om ett problem som är lämpligt att lösa med en tillståndsmaskin, men det säger sig självt.

Utan tillståndsmaskinen kommer man antagligen att skriva kod som är kladdig och svårläst och därmed blir knepig både att följa, underhålla och vidareutveckla. Och kladdig och svårbegriplig kod tycker jag är bland det värsta en programmerare kan skriva. Det är att göra alla, både sig själv och framtida förvaltare av koden, en mycket stor otjänst. Om koden är kladdig från början blir den inte bättre när man ändrar i den. Inte ens om man själv är den som skrivit den från början. Tro mig.

Här skulle jag lätt kunna dra ut på sidospår för att prata programmeringsmetodik i största allmänhet (Code Complete-läsandet sätter sina spår och väcker sovande björnar), men nu tror jag ändå att det var historien om tillståndsmaskinen jag hade tänkt berätta så jag låter bli det. Kanske någon annan gång. Till programmeringen!

Låt säga att vi ska jobba oss igenom någon form av datastruktur, som är/behöver vara ordnad efter ett visst schema, och behöver titta på eller hantera varje bit data på olika sätt beroende på var i det här schemat vi (d.v.s. vi som lever i koden) befinner oss. Då tuggar vi oss igenom strukturen bit för bit och gör det som behövs för var och en av dem. För att hålla reda på var i schemat vi befinner oss kan vi t ex använda states, eller tillstånd om man nu ska prata svenska. Fine. Det finns ju i Java (och även andra språk) en datatyp för uppräkning och den kan vi använda.

Vi har en variabel som representerar det aktuella tillståndet med hjälp av ett värde ur en enumeration (uppräkning, här: lista över möjliga tillstånd), och så gör vi saker och sätter om värdet på variabeln vartefter vi tar oss fram i schemat/mönstret. Och på slutet kollar vi om det slutliga tillståndet stämmer med vad vi förväntat oss. Allt är fint, men koden känns inte riktigt bra och framförallt när man hanterar många olika tillstånd blir det väldigt oöverskådligt. Man tycker att det borde kunna finnas bättre sätt att lösa problemet. Och det gör det förstås. Det gör det nästan alltid.

Jag och sambon pratade vidare om tillståndsmaskiner och han planterade för några dagar sedan en tanke om att i stället representera tillstånden med klasser, som då skulle ha en hanteringsmetod med den logik som annars ligger i case-satserna. Det lät roligt, om än lite svårt att föreställa sig först, så jag blev sugen på att åtminstone testa. Sent igår gjorde jag sålunda ett provskott och kunde då konstatera att det var snabbt och lätt att skapa tillståndsklasser och peta in hanteringsmetoderna i dem.

Därefter åkte jag hem och fortsatte där med att skapa fiktiv exempelkod, helt tagen ur luften, och visa för sambon hur hans lösning förvanskats och implementerats av min hjärna och nu tänkte jag att jag kunde visa lösningen även för mitt framtida jag. Och naturligtvis även för er som läser detta inlägg och eventuellt är intresserade.

Så här ser det ut när jag representerar mina tillstånd med hjälp av enumerationer:

/* metoden som gör det övergripande jobbet */ {
	State currentState = Begin;

	while (we.haveMoreThings()) {
		switch (currentState) {
		case Begin:
			currentState = we.handleBegin(thing);
			break;
		case StateA:
			currentState = we.handleStateA(thing);
			break;
		case StateB:
			currentState = we.handleStateB(thing);
			break;
		case StateC:
			currentState = we.handleStateC(thing);
			break;
		case End:
			currentState = we.handleEnd(thing);
			break;
		default:
			throw new IllegalStateException("Hey, what!?");
		}
	}

	if (!currentState.isTheEnd()) {
		throw new IllegalStateException("We are not done yet!");
	}
}

private State handleBegin(Object thing) {
	// Här gör vi massor av spännande hantering...
	// ... och sedan returnerar vi nytt tillstånd:
	return StateA;
}
// ... här blir det alltså en metod per hanterat tillstånd.

Och så här ser det ut när jag i stället representerar mina tillstånd med klasser:

/* metoden som gör det övergripande jobbet */ {
	State currentState = Begin;

	while (we.haveMoreThings()) {
		currentState = currentState.handle(thing);
	}

	if (!currentState.isTheEnd()) {
		throw new IllegalStateException("We are not done yet!");
	}
}

Det vill säga: tillståndet sköter hanteringen. Jag vet vilken version jag föredrar.

Så, kan man kanske undra, hur ser det då ut bakom kulisserna?

I det första fallet lade jag (av flera olika skäl) mina tillstånd i egen, separat fil:

	enum State {
		Begin, StateA, StateB, StateC, End;
	
		public boolean isTheEnd() {
			return this == End;
		}
	}

… och i det andra fallet hamnar handle-metoderna i stället i ett State-interface, där jag även lagt tillståndsklasserna (som varken behövs eller bör synas utifrån). Det är en bra idé att stoppa undan ovidkommande information för att undvika förvirring.


interface State {

	public State handle(Object thing);
	public boolean isTheEnd();

	public static final State Begin = new Begin();
	public static final State StateA = new StateA();
	public static final State StateB = new StateB();
	public static final State StateC = new StateC();
	public static final State End = new End();
	
	public class Begin implements State {

		@Override
		public State handle(Object thing) {
			// Här gör vi massor av spännande hantering...
			// ... och sedan returnerar vi nytt tillstånd:
			return StateA;
		}

		@Override
		public boolean isTheEnd() {
			return false;
		}

		private Begin() { /* no outside construction, please */ }
	}
	// ... här blir det alltså en klass per hanterat tillstånd.
}

Hade detta varit i den riktiga världen hade jag valt att lägga tillståndsklasserna i egna, separata filer och gjort dem ”package private”, men i exempelkoden ville jag hålla strukturen likadan utifrån sett för att göra jämförelsen dem emellan enklare.

Nåväl, så här ser det ut just nu. Exemplet ovan gör inga anspråk på att vara vare sig korrekt eller komplett eller ens i närheten av realistiskt, men jag tycker att det fyller en funktion och hoppas att någon av mina läsare får glädje eller nytta av det.

Själv kommer jag garanterat att fundera vidare och skruva och fixa och dona och fiffa och mojja och vad man nu gör med kod. Kod, och ens tänkande kring den, evolverar ständigt. Ibland går det snabbt och ibland går det långsamt, men jag finner det i praktiken omöjligt att stå stilla. Det går alltid att göra koden bättre!

Kommentarer, funderingar, förslag?

Etikettmoln