0

Return Of The King

Hej på er!

Det har vart tämligen låg aktivitet här under det senaste året, mycket på grund av: http://www.robertroos.se/hostterminen/ men även annat jobb och följaktligen tidsbrist helt enkelt. Nu när sommaren börjar gå mot sitt slut, föregående läsår är slut och likaså sommarjobbet- finns äntligen både tiden och motivationen för att återgå till lite hobbyprojekt och programmering igen.

Först och främst så har jag arbetat lite på min applikation Podnow, som nu fått stöd för funktioner som verkligen kritiskt saknats- sök, databasoptimeringar och uppdateringar av spindeln som hämtar hem alla podcastavsnitt. Utan att nämna några namn så har jag scannat av ”konkurrensen” om man nu kan kalla den det eftersom min tjänst drivs helt ideellt och reklamfritt. Där Podnow såväl laddar in snabbast som har absolut störst utbud av svenska och engelska podcasts kombinerat. Finns oerhört mycket mera att göra och jag kommer ta tag i saker efter varv helt enkelt. Det som just nu sticker mest i ögonen på mig är att applikationen körs på Web Forms, om än i en hybrid-MVC struktur och i kombination med bland annat Entitiy Framework osv. Alltså moderna tekniker och arbetssätt- men med ett i stommen föråldrat sätt att arbeta på. Förhoppningen är att så snart som möjligt porta över allting till ett rent MVC-projekt- inte minst för att få lite renare källkod.

En annan sak jag arbetat på under våren är hemautomatiseringshanteraren HomeSharp (se http://www.robertroos.eu). Detta tillsammans med fyra andra studenter från Linnéuniversitetet. Ett för mig väldigt annorlunda projekt mot vad jag i vanliga fall arbetat med, då mycket fokus låg på att arbeta med hårdvara (avläsning, styrning, manipulation osv.). Riktigt roligt var det i alla fall och vi fick innan projektets slut fram en fungerande prototyp som framgångsrikt integrerades med tillverkares API-er och en struktur som gör det möjligt att till vår applikation lägga till plugins för diverse olika tillverkare. En till grej med projektet som var nytt för mig, var att arbeta med Node.js, MongoDB, Express och en massa annat- då jag i huvudsak föredrar samt mestadels arbetar med .NET i vanliga fall- var det väldigt kul att testa på något helt nytt. Som dessutom ligger väldigt rätt i tiden när det kommer till bland annat realtidskommunikation och hantering av stora mängder samtidiga uppkopplingar och big data.

Ännu en sak som lett mig från .NET ett tag var projektet ”Mixtapeify”. Det är en liten applikation för att skapa så kallade blandband med hjälp av Spotify- där man helt enkelt skapar spellistor i Spotify, importerar dem till Mixtapeify och publicerar. Med hjälp av Spotifys API sedan hämtas all information om låtar, artister osv hem och presenteras i gränssnittet- där man givetvis även direkt kan lyssna på blandbanden. Syftet med projektet dock var kanske inte främst själva applikationen i sig, utan snarare att sätta sig in i PHP med MVC-struktur djupare- vilket jag tycker jag lyckades riktigt bra med. Även om PHP inte är något jag ser mig själv arbeta med primärt framöver, skadar det aldrig att ha kunskap om det- speciellt med tanke på hur många CMS-system osv som faktiskt använder sig av PHP. För att inte tala om megatjänster såsom Facebook.

Under hösten nu kommer jag återgå till en mera normal studietakt vilket känns enormt skönt och motiverande. Många av höstens kurser ser väldigt intressanta ut, speciellt de som fördjupar sig i databaser och databashantering- något man aldrig kan ha för mycket insikt i. En hel del kurser kommer även fokusera djupare på agila utvecklingsmetoder, projektledning och sist men inte minst data warehousing.

0

Planera för korta perioder

Ett vanligt misstag vid planeringen av ett projekt eller vägen fram mot ett mål tycker jag är för detaljerad planering direkt. Vi som arbetar med systemutveckling tillämpar för det mesta nuförtiden en agil utvecklingsmetod, som kortfattat går ut på att bryta ned ett omfattande projekt/problem i mindre delar, bygga och leverera hela tiden.

På samma sätt tycker jag man kan och bör arbeta även med andra saker i livet. Som student exempelvis så har jag börjat se långtidsplanering som något väldigt kontraproduktivt, jag tänkte förklara lite hur jag tänker.

Först och främst vill jag vara tydlig med att långsiktiga mål och visioner är bra men detaljerade planeringar för varje dag fram till det målet, planerat vid dag 1, fram till dag 200 är dåligt.

Man sätter sig själv i en situation där man får ett oerhört inrutat och starkt planerat vardagsliv, att det klyver bort möjligheten till andra val på vägen. Det ökar också stressen genom att man i ett tidigt skede planerat fel, exempelvis tidsuppskattat fel och vissa dagar får en enorm arbetsbörda. Andra dagar knappt något alls att göra.

Det ger också en väldigt falsk trygghet om att man hela tiden har koll på läget. Återigen om man sätter detta i relation till mjukvaruutveckling- finns det något projekt där tidsuppskattningen från dag 1 vart korrekt? Nej. Helt enkelt för att på vägen springer man på nya möjligheter, men oftast motgångar i form av saker som inte fungerar som tänkt, buggar, tredjepartsstrul eller vad det nu kan tänkas vara.

Genom att istället fokusera planeringen på korta perioder får man större fokus på vad som faktiskt ska göras, även ökad flexibilitet och minskad stress. Låt mig ta planeringen av en månads arbete som ett exempel.

Månadsplanering: Oerhört översiktlig, vilka stora mål ska nås? Hårda deadlines som måste mötas? Speciella händelser för denna månad?

Veckoplanering: Översiktlig, vilka mål ska nås innan veckans slut? Viktiga datum/händelser denna vecka?

Dagsplanering: Fokuserad och konkret. Planering i slutet av varje dag för nästkommande dag. Vilka mål ska nås imorgon? Vilka uppgifter måste jag arbeta med? Hur lång tid kommer det på ett ungefär att ta? Vilka tider ska jag arbeta? Vart ska jag vara? Hur ligger jag till sett till veckans övergripande stora mål?

Alltså att som ovan presenterar, ha ett litet internt möte i sitt eget huvud i slutet av varje dag på ~5 minuter. Det kanske låter basalt, men med ett par få tankar och ”mikroplanering” som denna så får du:

  • En tydlig bild av vad som skall göras imorgon (du kan direkt köra igång)
  • En tydligt bild av hur du ligger till
  • Flexibilitet, något som drar ut på tiden/går fel- planera morgondagen därefter
  • Minskad stress av att inte veta vad som gjorts/ska göras
  • Minskad risk för att skjuta upp saker, du vet vad du måste göra imorgon för att nå veckans mål, GET IT DONE
  • En efter arbetsdagen ledig period och ledigt sinne, dagen är klar, morgondagen planerad!

Den kanske viktigaste punkten utöver minskad stress och press är minskad risk för att skjuta upp saker. Tro mig, jag har själv tidigare haft stora problem med att skjuta upp saker, prokrastinering helt enkelt. Såhär i backspegeln, oerhört onödigt och en enormt källa till negativ stress.

Man får också en större ro i sinnet. Om jag vet vid slutet av arbetsdagen vad som ska göras imorgon- slipper jag ta med mig arbetet hem och där ha en gnagande känsla av att inte veta riktigt vart jag ska börja imorgon.

Genom att planera bättre och faktiskt ha en översikt över vad som måste göras för att hålla tidsplaneringen (kanske finns en hård deadline t.ex. under veckan i form av leverans/tenta/etc.), minskar man den negativa stressen och i slutänden levererar bättre.

0

Bli bättre på programmering – bygg skit!

Hittade en riktigt bra artikel jag vill ta upp till diskussion här i kommande inlägg: (http://blog.programmersmotivation.com/2014/06/19/beginner-programmer-want-learn-programming-start-build-crap/). Den behandlar en fråga som man kan tycka har ett givet svar- vilket inte är verkligheten dock.

Frågan är enkel: hur blir jag bra eller bättre på programmering / ett visst språk / ett visst ramverk?
Svaret är: genom att arbeta med det.

Givet eller hur?

Fast ändock inte helt och hållet. Skulle säga av personlig erfarenhet och erfarenhet från studielivet att många angriper programmering, t.ex. ett nytt språk, på så sätt att -> Läsa bok -> Kunna språket. Vilket oftast är rätt långt ifrån sanningen.

Exemplet skribenten till artikeln ovan ger är enkelt. Hur lär du dig att cykla? Läser du en manual som cykeln, alla dess delar, hur den är tänkt att fungera, vad som händer när du trampar på pedalerna, hur bromsarna fungerar? Svaret är nej, du hoppar upp på cykeln och börjar trampa. Förmodligen ramlar, förmodligen vinglar, men blir med tid och övning successivt bättre ju mera tid du lägger på att träna och utvecklas.

Han utvecklar sedan sitt resonemang att på samma sätt måste man se på programmering. Oavsett om man förstår syntaxen och hur man rent teoretiskt skulle kunna använda språket, måste man dra igång sin editor / IDE och börja hacka för att få praktisk erfarenhet, ”bakslag” i form av kod som inte fungerar som tänkt, göra sig bekant med sin debugger osv.

Nästa fråga är: vad ska jag bygga?

Här liknar skribenten sina tidigare program med sina första teckningar. När man som liten stolt visade upp sina konstverk, skulle man snarare idag inse att de ser ut som skit. På samma sätt fungerar den tidiga kod man producerar, vilket är en del i inlärningskurvan. Det viktiga är att man faktiskt gjort något. Man har tagit tag i programmeringen, aktivt sökt svar på problem, producerat och samtidigt lärt sig.

Gör fåniga saker, onödiga, saker som redan gjorts (så länge det inte gör någon form av copyright-överträdelse), miniräknare, anteckningsapp.

Vad detta gör är även att höja din motivation som utvecklare. För även om dina tidigare kreationer är skitdåliga, har du slutfört något. Du har byggt en applikation, webbplats etc. som faktiskt kan köras och fungerar.

Vad bygger jag för skit?

För att avrunda det här inlägget så tänkte jag ge ett litet exempel på vad jag ofta bygger när jag nosar på ett nytt språk, eller ramverk/backend som skiljer sig en bit från det jag gjort tidigare. Exempel, att gå från Web Forms till MVC, eller Web Forms till att köra Node.JS

Jag bygger en gästbok ofta följt av en anteckningsapplikation. Gästboken ger en bra grund att stå på då man får implementera full CRUD-funktionalitet, arbetar man med språk/ramverk där JavaScript är inblandat också, får man även ett ypperligt tillfälle till att arbeta med asynkrona anrop mot det nya språk/ramverk man arbetar med. Det är en stabil startpunkt helt enkelt.

Anteckningsapplikationen sedan bygger egentligen vidare på de kunskaper man anskaffat sig genom att implementera CRUD-funktionalitet för sin gästbok. Bland annat vill man lägga till medlemshantering, administrationsvyer osv.

Med båda dessa i bagaget har man sedan fått känna på språket/ramverket en hel del och är redo att bege sig in på mera avancerade projekt och fördjupa sig. Eller varför inte gå tillbaka och börja refaktorera sin kod? Säkerligen dyker massor av saker upp som kan förbättras.

Nu är mina exempel rätt kopplade mot webben, men samma typ av applikationer kan faktiskt utan problem byggas även i konsolmiljö, eller varför inte i något GUI. App för Android och iOS?