Man lever så länge man lär

Inlägg taggade ‘utveckling’

Bara en uppgift kvar i kurspaketet

Puh! Nu har jag (med en halv minut till godo) lämnat in den näst sista uppgiften på kursen Webbapplikationer för mobila enheter som jag läser nu under hösten, och som också är den sista kursen i kurspaketet. Vad jag ska läsa sedan vet jag inte, men sökte i alla fall flera olika kurser för både första och andra läsperioden under våren. Haken med de flesta av de här kurserna är att de går på halvfart, vilket nog är på gränsen till för tufft att köra parallellt med jobbet, så vi får se.

Det är i alla fall kul att lära sig saker och om jag inte ska studera nästa termin kan jag med gott samvete ägna mig åt att läsa böcker (både inom it och rent skönlitterärt) och knåpa ihop min bokhållar-app som jag velat göra så länge. Förr trodde jag att jag skulle bli tvungen att lära mig Android-utveckling men nu vet jag att det förmodligen räcker gott med en enkel ensidig webapp. Och då syftar jag på en ”single page application”, som kommer att vara mångsidig.

Nästa uppgift ska vara klar och inlämnad nästa år. Ganska snart, trots allt.

Yrkesmässiga mål för 2015 spikade

Jag och chefen hade i förra veckan det sedvanliga samtalet kring mina mål och utvecklingsplaner för året. Det finns en del att prata om just nu, men framförallt inser jag att det finns saker jag kan skriva in som mål som jag i princip får gratis genom sådant som redan är påbörjat och som jag vet kommer att hända – det har sina fördelar att fastslå målen först i april! Chefen lät nästan orolig för att jag satte upp lite väl ambitiösa mål, men mot ovanstående bakgrund känns de realistiska och det tror jag att han också förstod när jag förklarade min tanke.

Och nej, jag vill inte berätta här vilka mina mål är. Sådant anses konfidentiellt.

Chefen hade tydligen helt missat att jag skickade med mina två ansökningar om utbildningsstöd tillsammans med intyget om reell kompetens, så jag fick skicka över de inscannade ansökningsblanketterna på nytt – himla tur att det inte var pappersoriginal det handlade om! Det ska bli intressant att se om jag får något ekonomiskt stöd för tentaresorna i maj/juni. Jag tror att blanketten egentligen är tänkt att användas för kursavgifter och kostnader för litteratur. Vi får välan se!

Veckans nya programspråk: Python

Jag har fuskat en gnutta i Python förut, i tjänsten, men då har det handlat om enkla modifieringar av kod som någon annan skrivit. Nu skrev jag programmet själv, från början till slut. Det tog ett par fredagstimmar och sedan hade jag mitt (samma gamla vanliga) program även i Python-skrud. Programmet (eller scriptet, om man så vill) är ganska precis lika långt som det i Ruby och hälften så långt som det i Objective-C. Skillnaden mellan Ruby och Python blev mindre än jag förväntat mig, men det beror nog mycket på att jag egentligen programmerar i något annat språk. Det vill säga, att jag inte utnyttjar språken som en riktig kännare av dem skulle ha gjort.

De delar mitt program främst består av är kommandoradstolkning, inläsning från fil, mönstermatchning och datum-/tidsaritmetik. Det är intressant att se skillnaderna i hur man gör saker i respektive språk, och hur variabler ser ut innan de fått värden. Jag är säker på att jag missar vissa saker, men kan ju gå tillbaka framöver. Faktum är att jag tänker mig att jag ska göra just det i något senare skede, försöka sätta mig in i språket på djupet och verkligen förstå dess själ. Ja, det låter kanske smått högtravande och kommer väl förmodligen aldrig att bli av, men då får det vara så.

Just nu verkar det som om nästa version av Programmet blir skriven i Rust.

Veckans nya programspråk: Ruby

Ja, det var väl egentligen förra veckans programspråk eftersom det var i söndags jag roade mig med att skriva ett litet program i Ruby. Och det programmet skrevs utifrån samma krav som det jag veckan innan skrev i Objective-C. Exakt likadant blev det dock inte då jag kom på nya saker att göra och färdigt blev det inte heller. Visst, programmet fungerar nu, men räcker ju inte för att jag ska känna mig nöjd.

Kod är mer än funktion

En viktig sak i min programmeringsfilosofi är nämligen att ett program inte är klart bara för att det bevisligen fungerar. Där ser jag stor skillnad mellan mig själv och nyare utvecklare, som ofta inte utvecklat känslan för skönhet och långsiktighet i koden – både det rent visuella i hur källkoden ser ut och det mer designmässiga.

Kod som kommunikation

Och det jag menar med långsiktighet här handlar mycket om kommunikation, d.v.s. att koden ska vara begriplig för mig själv och andra som kan behöva uppdatera den i framtiden, och om en robust design, d.v.s. det ska gå lätt att uppdatera koden när kraven förändras. För det gör de, om programmet/systemet hanteras på rätt sätt.

Implementera inget onödigt

Men tro nu för guds skull inte att jag förespråkar att man implementerar krav som ännu inte finns! Nej, vi ska implementera det som behövs, varken mer eller mindre. Vi kan visserligen hålla i bakhuvudet det som kommer sedan, i den mån vi vet om det, för att inte råka skära av vägen framåt, men vi implementerar inget onödigt.

We are not done yet!

I min värld kan det när koden fungerar ännu vara rätt mycket arbete kvar att göra. Och då räknar jag inte med sådana saker som att skriva unittestkod, för det har jag ju gjort medan jag utvecklade det funktionella. Nej, det handlar om att titta igenom koden ett par varv till, snygga till och refaktorera för både läs- och underhållsbarhet. Utöver detta kanske man också justerar designen, både på högre och lägre nivå. Fast det sista beror ju också av om man har mandat att göra designförändringar.

Refactoring

Refaktorering är en njutning när man känner sig trygg i att man täckt upp den viktiga funktionaliteten med hjälp av unittester – gör man fel i sin refaktorering märks det ju på att testerna inte längre går igenom utan signalerar fel. Baren blir röd, som vi säger i Eclipse-världen. Vi kör red/green/refactor!TDD-lingo.

Ruby är mer kortfattat?

Det fascinerar mig att programmet som landade runt 150 rader i Objective-C blev mindre än hälften så långt i Ruby. Fast då är ju som sagt inte funktionen densamma så man kan inte göra en direkt jämförelse. Sedan skriver jag olika bra i respektive språk och inget av programmen är heller färdigt, men ändå… rätt stor skillnad!

En del av skillnaden kommer dock säkert att försvinna när jag inför mina förenklade algoritmer i det längre programmet. Och kanske också med mer objektorienterade koncept i det kortare. Vem vet, de båda blir kanske i slutänden precis lika långa.

Namnsättning

En annan lustighet är att jag av någon anledning bytte namnsättningsprincip när jag växlade språk. I Objective-C använder jag samma namngivning som i Java, d.v.s. camelCase. I Ruby fann jag mig plötsligt skriva mer i ”C-stil”, d.v.s. snake_case.

Framtida ändringar

Saker jag vill göra med Ruby-programmet är t.ex. att göra det mer objektorienterat, för som det nu var skrev jag det mer som ett script med några hjälpfunktioner. Jag vill alltså bryta ut delar av koden till en separat klass, med ”riktiga” metoder. Och så vill jag förstås (som vanligt) skriva unit-tester för dessa – kod utan unit-tester är inte riktig riktig kod. Och på något sätt kopplar jag ihop objektmetoder och unittestkod.

Andra saker jag gjorde hade att göra med editering och versionshantering.

Editor

Första versionen av programmet skrev jag direkt i kommandorads-vi. Det var inte helt angenämt, så jag installerade TextMate. Programmet gav mig färgkodning och som bonus en fantastiskt fin ikon i form av en rosalila blomma, som fick mig att vilja älska det. Dessvärre var det inte jättekul att redigera kod i detta program heller. Och jag inser nu att jag förmodligen kunde ha fått färgkodning med hjälp av vim om jag bara kommit på tanken att installera den (men det gjorde jag förstås inte då).

Sedan blev jag påmind om Sublime Text, som Kodsnackarna nämnde i något av de avsnitt jag lyssnat på, och som GP enligt uppgift använder både hemma och på jobbdatorn. Jag installerade Sublime och blev lite kär på direkten. I Sublime fick jag bl.a. hjälp med att skriva variabelnamnen rätt och konstaterade att den verkar värd att utvärdera. Det är nog inte otänkbart att betala de 70 USD programmet kostar.

Versionshantering

Det här med versionshantering, då. Där var det ganska självklart att använda git, eftersom det är den versionshanterare jag vill lära mig – dels för att det är den som är ”den” och dels för att jag vill förstå hur den skiljer sig från mitt tjänsteverktyg som är Rational Team Concert. Nu innehåller RTC mer än versionshantering, men ändå.

Jag skapade mig ett git-repository för projektet, och checkade in min programfil. Fine, men nu vill jag lära mig mer om git-användning och skicka upp min kod till familjens NAS för safekeeping och möjlighet att kanske dela koden med andra.

Påskläsning

Till min hjälp i lärandet om git har jag skaffat ett par e-böcker. Kanske kan dessa få bli min påskläsning, måhända parallellt med H.P. Lovecrafts The Call of Cthulhu.

Med tanke på att vi reser bort tror jag inte det blir någon programmering denna helg, men annars låter det som en rolig idé att prova ett nytt programspråk varje vecka. Tänk så många språk man hinner med på bara ett år! Och jag undrar vad det gör med ens förmåga att programmera – blir man kanske mer förvirrad än upplyst?

Provprogrammerar i Objective-C

I fredags fick jag för mig att installera Xcode som utvecklingsmiljö på min MacBook Pro för att skriva ett enkelt program i (och därmed lära mig lite) Objective-C, som är det programmeringsspråk man använder i Apple-världen för Mac OS X och iOS.

Jag nöjde mig på kvällen med att göra Xcode-installationen, sätta upp mitt projekt och kolla upp Objective-C som hastigast. Programspråket såg lite skumt ut, men verkade möjligt att lära sig. Kombinationen C och objektorientering kan nog funka. Jag har ju programmerat i både C och Java, och en del andra mer obskyra språk.

Ändå pirrade det allt lite i magen – hur skulle det gå? Jag stod i begrepp att ge mig in på något nytt och främmande. Vet inte varför sådant gör mig nervös, men det gör det samtidigt som jag ändå någonstans vet att jag grejar det. Hur som helst tedde det sig som en utmärkt idé att där bryta för dagen och övergå till familjeliv, för att dagen efter läsa in mig på ämnet och börja koda. Och det var ungefär så det blev.

Det vill säga, jag läste mycket mindre än jag tänkt innan jag var igång med själva kodandet. Uppgiften jag ålagt mig handlade om att läsa data från en textfil, tolka innehållet genom att extrahera relevant information och göra några beräkningar.

Jag började med att läsa in hela filens innehåll och skriva mycket rudimentär kod för att identifera de rader som var av intresse och plocka ut det data jag behövde. Efter något femtiotal rader kod började jag sakna de konstruktioner jag obehindrat svänger mig med i Java-världen. Det är så frustrerande att inte veta hur man bäst gör saker i det aktuella programspråket, hela tiden tvingas googla efter exempel. Men visst, man lär sig. Jag lärde mig. Jag är nog inte en så gammal hund ändå.

Jag säger: Stack Overflow måste väl ändå vara världens bästa resurs!

I stort sett hela lördagen satt jag sedan och programmerade. Jag lärde mig skapa och hantera några enklare objekt. Jag lärde mig att börja med hakparentes för att kunna anropa metoder på ett objekt och hur man fick IDE:n att visa vilka metoder som finns. Jag lärde mig hur man skapar och använder reguljära uttryck (denna gudomliga skapelse!) för att hitta och extrahera datum och klockslag ur strängar. Jag lärde mig att jämföra tidpunkter och addera tidsintervall. Samt en del annat.

Mitt program består i nuläget av ungefär 150 rader kod, i en och samma källkodsfil, inklusive kommentarer och tomrader. Jag har en main-metod och 6 hjälpfunktioner. Det finns ytterligare någon sak jag vill testa, men programmet fungerar som det är.

Jag har bekantat mig mycket lite med själva utvecklingsmiljön än så länge, även om jag i alla fall lärt mig sådant som att kommentera block av kod och checka in koden i mitt lokala git-repository. Så här långt är Xcode rätt frustrerande och jag saknar Eclipse. Antar (hoppas!) att det främst beror på att Xcode är annorlunda, men det finns en möjlighet att Xcode faktiskt inte har de funktioner jag är van vid.

Det mest frustrerande är nog just det där att jag inte känner språket ännu – jag vet inte vilka metoder jag kan förvänta mig hitta på ett objekt och inte hur de namnges. Ibland tar det en evighet att begripa hur jag ska göra, ibland går det på ryggmärg – många gånger går saker faktiskt att göra på nästan exakt samma sätt som i Java.

Utöver att lära mig mer om själva programmeringen vill jag bli bättre kompis med utvecklingsmiljön (Xcode) och lära mig en massa om versionshanteringen (git). Och så vill jag givetvis också lära mig hur man kan unittesta kod i den här miljön.

En vacker dag tänker jag mig att prova på iOS-utveckling genom att skriva en app. Eller så blir det Android i stället – det är ju den plattform jag använder dagligdags. Oavsett vilket har jag en uppgift att lösa. Automatisera det jag idag gör manuellt.

Hur som helst var det riktigt roligt att utföra uppgiften – det kan nog bli mer sånt!

Tacka Ipred-lagen för det!

Så ja. Ipred-lagen har gett resultat, preciiis det Beatrice Ask sade skulle ske.

Och ja, det var udd i det ovan. Men det är ändå roligt att läsa om att Sony Music nu tydligen ska satsa på att hitta nya affärsmodeller – detta läser jag på Kulturbloggen. Det ska bli intressant att se vad herrarna Swartling och Breitholtz kommer med för smarta och innovativa lösningar.

Bättre sent än aldrig!

Men först trodde jag faktiskt, ärligt, att det var ett försenat aprilskämt.

Etikettmoln