Månadsarkiv: mars 2014

Presentation om Guava

På jobbet har vi något som kallas ”utvecklarforum” där vi som utvecklare diskuterar saker som direkt eller indirekt berör vårt dagliga arbete. Nu i veckan har jag tagit initiativet och ska då prata lite som Guava i detta forum. Guava är en samling bibliotek som Google använder i sina egna Javaprojekt och som finns tillgängliga för allmänheten. Nu när jag ändå har en fancy blogg tänkte jag sprida mina slides här – enjoy!

Ranten som inte blev en rant

By popular demand hade jag i det här inlägget planerat att ranta över något som gör mig upprörd. Hela grejen kändes rejält utmanande eftersom jag sällan eldar upp mig så pass att jag börjar veva vilt omkring mig. Efter många om och men hittade jag till slut ett ämne som passade uppgiften. Jag satte mig vid datorn, kavlade upp ärmarna och började skriva. Och nu när jag i efterhand skummar igenom utfallet konstaterar jag att det inte blev någon rant alls. På sin höjd kan man kalla texten en nostalgisk och småsur reflektion, men rant, nej, det är nog fel benämning. Bedöm själva.

Mina första stapplande steg inom programmering togs under slutet av 90-talet. Mitt metalband skulle ta över världen och finns man inte på webben så finns man som bekant inte alls. Så jag skaffade en domän åt bandet och började hacka HTML och Javascript som en tok. Inte för att jag fattade hur eller vad jag gjorde, men visst fick jag till något bestående av blinkande texter och animerade giffar. Det var inte lätt att få saker och ting att funka lika i olika webbläsare – i synnerhet Javascriptbitarna – men jag hackade på och om något gick fel var det ju bara att rätta till.

Ganska snabbt kom jag underfund med att det var jobbigt att underhålla statisk HTML. Tänk om bandmedlemmarna kunde hjälpa till med att lägga in nyheter på sidan så att jag fick mer tid över till att pilla navelludd? Och tänk om vi kunde få till en gästbok – det vore väldigt modernt! Men för att nå dit behövdes ett server-side språk och som hos många andra webhotell at the time var det PHP som gällde. Jag läste på, lärde mig av mina misstag och lyckades till slut producera något som gjorde jobbet. Vi kunde nu fördela arbetet med att underhålla bandets hemsida. Och jag prisade PHP – vilket språk! Det gick snabbt att få saker på plats, syntaxen var förlåtande och om något gick fel var det ju bara att rätta till – precis som med Javascript.

Några år passerade och i samband med mina studier på Linnéuniversitetet blev jag medlem i forskningscentret CeLeKT. En av de första grejerna jag fick som uppgift på forskningscentret var att ta över förvaltningen av ett system byggt i Java. Jag hade aldrig testat på Java tidigare och mina första intryck av språket var inte särkilt bra. Minsta avsteg från syntaxen ledde till att programmet inte ens kompilerade och den starka typningen kändes väldigt omständig. I Javascript och PHP behövde man minsann inte krångla med att casta saker hit och dit – det bara funkade!

Men var det verkligen något bra?

Mina studier fortsatte in i doktorandskap, jag undervisade i C# och hade möjlighet att sätta mig bättre in i Java under mitt arbete på forskningscentret. Och gradvis började jag se det fina med det jag tidigare såg som omständigt och krångligt. Strukturen och ramarna som till exempel C# och Java sätter är något betryggande att luta sig emot när man utvecklar – och något ovärderligt när man refaktorerar. Strukturen kan även ge det IDE man använder sig av grymma slutledningsförmågor som gör att programmering blir lite som att lägga ett pussel. Med PHP och Javascript upplevde jag att man kunde lägga sina pussel lite som man själv ville, typ som Melander gör i slutet av den här videon.

Det är nu 2014. Sedan mina första stapplande steg som systemutvecklare har det lobbats in features i PHP såsom namespaces och lite vettigare objektorientering för att staga upp språket. På serversidan har vi alltså en mängd språk som i deras utformning ger oss struktur för att hålla ordning och reda. Men vad det gäller Javascript verkar det numera vara vedertaget att man bör förlita sig på olika ramverk och bibliotek för att uppnå detta (eller för att man ska ha något hopp om att koden funkar i olika webbläsare).

Samtidigt hör jag att det börjar bli modernt med MVC-strukturer även på klientsidan och att vi i och med HTML5s antågande gärna kan göra klientdelarna lite fetare. Borde vi då inte ha något även på klientsidan som ger oss ordning och reda ”out of the box” som till exempel Java och C# gör på serversidan? Ska man verkligen behöva förlita sig på ramverk och bibliotek för att kunna bygga robusta klienter i webbapplikationer?

Det tycker inte jag att man ska behöva år 2014.

Jag tänkte bygga en app..

..men sen rann det ut i sanden. Lite så har det varit varenda gång jag har påbörjat ett app-projekt därhemma. Det började redan för ett par år sedan när jag på mitt dåvarande jobb beklagade mig över att jag inte hade några bra uppslag till en app. Jag ville väldigt gärna testa på att bygga något, men vad? En kollega så då något i stil med ”men gör nåt bara, kanske en handlalista-app?”. Idén var väl varken särskilt originell (det fanns vid den tiden hur många sådana appar som helst på Android Market) eller något jag egentligen var så intresserad av att uveckla. Men nu hade jag i vilket fall något att sikta på och det var ju bra.

Jag skred till verket och efter ett tag hade jag i mitt tycke fått till en ganska bra modell för att hantera varor, måttenheter och annat matnyttigt (!) som har med handlalistor att göra. Men hur appen skulle fungera eller vad man skulle kunna göra med den hade jag inte tänkt särskilt mycket på. Jag hade heller ingen vidare koll på hur man bör eller ska utveckla Android-appar vilket skiljer sig en hel del från traditionell Javautveckling (lite bakgrund till det här). Projektet kändes segt och trögt, jag tappade fokus och sedan rann det ut i sanden.

Jag funderade en del över varför projektet föll ut som det gjorde och kom fram till att jag förmodligen inte hade avgränsat mig tillräckligt. Medicinen mot det borde väl då vara att sätta upp ett enkelt och tydligt mål? Att utveckla något för första gången är knepigt och man ska vara snäll mot sig själv. I enlighet med det resonemanget bestämde jag mig för att bygga ett memoryspel. Plain and simple utan krusiduller. Det borde väl inte vara så knepigt? Nej det borde det inte vara, men om man heter Martin krånglar man till det för sig genom att bestämma sig för att lära sig OpenGL och göra skiten i 3D. Det var ju smart. Jag ägnade många kvällar åt att försöka få till renderingen och animeringen av korten. Det var segt och trögt, jag tappade fokus och sedan rann det ut i sanden.

Ett par månader passerade och jag snöade in på brädspel. I samband med det började tankarna på en dungeon crawler-app komma krypande. Visst vore det festligt att ha ett snabbt och tillgängligt spel som man kan spela på bussen, där man sparkar in lite dörrar a la Munchkin kombinerat med ett enkelt stridssystem? Det borde väl inte vara så svårt att fixa till? Well, jag drog igång och hackade loss kväll efter kväll och fick ihop ett fungerande turbaserat stridssystem. Mekaniken var rätt cool och hade stöd för olika skadetyper (eld, is, whatever) som kunde absorberas om man hade rätt utrustning. Jag minns även att jag byggde en mekanism som slumpade fram rum i en grid (läs: rutnät) som var sammanlänkade med dörrar.

Jag hade alltså ett fungerande stridssystem och en algoritm för att slumpa fram grottsystemet. Men mitt i hacket insåg jag att jag hade begått samma misstag som med handlalista-appen – jag visste inte hur skiten skulle fungera. Vad skulle målet med spelet vara? Nä, projektet hade växt till en amöba och kändes segt och trögt, jag tappade fokus och sedan rann det ut i sanden.

Efter alla dessa äventyr bestämde jag mig för att lägga ner app-fabriken och istället gå över till ”traditionell” utveckling i mina hemmaprojekt. Men sedan dess har det gnagt i huvudet på mig att jag aldrig kom i mål. För det är jobbigt att inte färdigställa saker, även om jag kanske inte är något föredöme när det kommer till att just färdigställa saker. Så nu jag har bestämt mig för att göra ett nytt försök.

Den här gången ska jag göra ett jävla memoryspel. Det ska vara i fucking 2D och animationerna ska inte vara något fancy. Spelet får gärna bli fult men det ska bli färdigt – annars äter jag upp min hatt.

Så ladda popcornmaskinen för snart kommer ni att få se Martin tuggandes på en gammal hatt. Vilken underhållning!

Agilt, eller?

Tidigare idag skickade Oskar över en riktigt intressant länk till mig som fastnade i mitt huvud (klicka här för att komma till den). Författaren till blogginlägget hävdar att dagens agila förhållningssätt till systemutveckling stämmer dåligt överrens med de ursprungliga tankarna om agilitet. Enligt författaren var tanken med agilitet anno 2001 att ”the programmer is the central actor in the creation of software, and that the best software grows and evolves organically in contact with its users”.

Jag vet inte om det författaren skriver stämmer – jag har inte läst boken som han lobbar för i sitt inlägg – men det ”agila” jag har upplevt under mitt arbetsliv hittills har mest handlat om möten, lappar och estimat. Jag har till exempel aldrig själv träffat de som använder systemet jag arbetar med vilket borde vara något fundamentalt om man ska tro citatet ovan.

Nu är ju bloggposten lite av en rant men om det är så att ursprungstanken med agilitet stämmer med vad författaren säger blir jag lite bekymrad. Och jag tänker att ursprungsidén – om den nu stämmer – sätter rätt fokus? Med det synsättet kan man se de agila metoderna (scrum et al.) som verktyg för oss ”techies” som hjälper oss att bryta ner och strukturera vårt arbete, och inte som monitoreringsverktyg för managementfolk som gärna vill likställa estimat med deadlines.

Har idéerna bakom agile kidnappats av mellancheferna? Har modern agile blivit för utvecklarfrånvänt generellt eller är det här bara ett symptom på en organisationsform där utvecklarna och mjukvaran inte sätts i första rummet? Finns det några exempel på organisationer där agile faktiskt fungerar som det beskrivs i bloggen?