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?

0

Karriärtips för programmerare

Reddit är en grymt bra källa för alla typer av nyheter och diskussioner. Inte minst tycker jag att man som utvecklare ständigt hittar massor av matnyttigt där, samt håller sig uppdaterad om det senaste.

Ett av de senaste fynden är en föreläsning av Trisha Gee som arbetar på mongoDB. Hon tar upp en fråga som alltför sällan tas upp såväl på studienivå som väl ute i arbetslivet- nämligen hur man avancerar sin karriär som utvecklare, systemvetare och programmerare. Samt vad definitionen av att avancera som utvecklare är och kan vara (kolla så förstår ni).

Spana in det, bäddar in föreläsningen här nedan.

0

Att vara en Junior Developer

Jag läste häromdagen en intressant artikel på Medium om att vara en Junior Developer (junior utvecklare på svenska säkerligen men titeln brukar vara densamma även för svenska jobb). Jag tänker inte recitera den här, men däremot rekommendera er att läsa den: https://medium.com/i-m-h-o/what-it-really-means-to-be-a-junior-developer-266acb772b4b

Främst för att jag håller med skribenten i mångt och mycket, även för att just frågor som dessa är det OTROLIGT sällan man faktiskt får upp till diskussion och information omkring från olika lärosäten. Man hamnar väldigt ofta i en akademisk bubbla oavsett vad det är man pluggar, datavetenskap särskiljer sig inte på något sätt. Man har en bild av hur livet efter studierna ser ut, förhoppningsvis även mål och -tydliga- vägar för att nå dit.

Inte sällan är just dessa -tydliga- vägar ren och skär inbillning, där verkligheten sedan är en helt annan. Oftast dock skulle jag säga på gott snarare än ont.

För att återgå till ämnet om just Juniora Utvecklare så tar artikeln upp saker som att man absolut ska tro på sig själv och sina egna kunskaper, men samtidigt ha en ödmjukhet. Att många sätter sin kunskap i att t.ex. förstå sig på många ramverk och kunna många språk. Att in i absurdum optimera en metod, vars slutresultat blir såpass abstrakt att tiden det tar för att sätta sig in i den vid uppdateringar / buggfixar gör att den istället blir kontraproduktiv. Exemplen är många och som sagt är inte detta en post som ska recitera originalet, så spana in den!

Dessutom vill jag slå ett slag för podcasten Hanselminutes där just denne skribent Jonathan Barronville är gäst i ett av de nyare avsnitten. Lyssna på podcastavsnittet – det är minst lika bra som artikeln och dynamiken i samtalet mellan en riktigt erfaren utvecklare och junior utvecklare är intressant och givande.

0

Myten om programmeringsgeniet

Jag såg en väldigt intressant föreläsning häromdagen från Google I/O rörande mytologiseringen kring vissa programmerare. Hur en bild väldigt ofta målas upp kring hur någon bakom ett framgångsrikt projekt, ensam i ett mörkt rum satt samman mjukvaran. Givetvis utan några som helst buggar, minnesläckor, stabilitetsproblem etcetera.

Hur denna typ av ”lone wolf programming” de facto snarare hämmar utvecklingsprocessen, till följd av en rädsla för att visa sin kod och de eventuella fel eller ”fel” man gjort. Open Source projekt har väl en längre tid hyllats för just detta, då de bjuder in alla att kika på koden, ge feedback och även bidra själv till utvecklingen.

För många företag är det inte ett alternativ dock att köra Open Source, eller för privatpersoner för den delen. Vikten av att ändock ha en ständig dialog, feedback och ”code reviewing” lyfts fram starkt i föreläsningen, och visst känner man igen sig, speciellt inom den akademiska världen.

Men jag behöver inte recitera hela föreläsningen här utan rekommenderar er istället att se den själva, länkar in den nedan. Hoppas den får samma effekt på er som på mig, kommer definitivt ha fler öppna repositorium på Github efter detta.

0

Få mera gjort med Pomodoro

En sak som hjälpt mig en hel del i att få mera gjort på kortare tid är att tillämpa Pomodorotekniken i mitt pluggande och arbete. En oerhört enkel metod för att få en bättre överblick av hur mycket tid man de facto lägger ned på plugg och arbete och inte hur mycket man på en höft tror man lagt ned. Det sistnämnda som för prokrastineraren ofta blir 10 minuter aktivt arbete per timme, men känns som 50 minuter per timme.

Det handlar alltså om att effektivisera sin tid och att göra detta genom att ha kortare men högintensiva pass. Pomodorotekniken går ut på att arbeta aktivt i 25 minuter, pausa i 5-10 minuter och sedan köra ett nytt pass på 25 minuter ca 4 gånger innan en längre rast på 15-20 minuter tas.

Givetvis behöver inte rasterna följas slaviskt, är man inne i ett flow kan man helt enkelt skippa en rast och köra på nästa pomodoro – men för prokrastineraren så blir den lilla rasten tid för att göra allt det som egentligen kanske inte måste göras för stunden. Att få släppa koncentrationen för en liten stund, andas, fylla på lite kaffe kanske eller bara sträcka på sig lite – för att sedan med nya krafter ta sig an nästa pass.

Det ger också illusionen av tycker jag, mindre arbete eller faktiskt tid man arbetar. Varför tekniken gör det är förmodligen för att man verkligen ser till att arbeta och inte göra annat under varje pomodoro (25 minuterspass) – istället för att arbeta 5 minuter, kolla tidningen, arbeta 5 minuter, kolla Facebook och Twitter osv. Pluggsessionen som egentligen kanske tar 4 timmars aktivt arbete, blir lätt en session på 8, 10, kanske 16 timmar eller inte av alls om man inte kommer igång och arbetar aktivt.

Min personliga setup för dessa pass är: 25*4 pomodoros med 5 minuters rast mellan varje, efter den sista en längre rast på hela 25 minuter. En hel del rast med andra ord med tanke på att effektivt arbetad tid blir totalt 100 minuter, skillnaden är att det blir 100 fullt fokuserade minuter och därmed oerhört mycket mera effektivare minuter än 100 vanliga minuter skulle vart.

För detta system använder jag appen: Clockwork Tomato
Denna finns att ta hem helt gratis på Google Play (som länken ovan pekar till) och är helt fenomenal för att hålla reda på aktivt arbetad tid. Man får scheman på exakt hur mycket man arbetat och när. Sitter man med iOS finns det säkerligen liknande appar där att ta hem, kolla App Store.

För er som är bekanta med SCRUM så blir det nästan som att arbeta med sprintar. Exempelvis har man ett par uppgifter för dagen som skall göras, man estimerar hur många pomodoros som kommer att krävas för varje uppgift samt hur många pomodoros per dag man hinner med, 16st kanske för en ca 8H lång arbetsdag. Betar av alla sina mål utefter prioritet och vid slutet av dagen kan sprinten avslutas och man har ”levererat”.

Utmärkt system för att plugga och utmärkt system när man arbetar med programmering – rekommenderar det varmt till er andra som likt mig har en prokrastinerare i blodet som måste strypas med finess!

Lite mera läsning för den intresserade finns bland annat på Wikipedia med tillhörande källor där: http://en.wikipedia.org/wiki/Pomodoro_Technique

0

Första veckan på terminen

Sådär, då har första veckan på nya terminen passerat!

Har vart en intensiv vecka, så som de första veckorna så ofta är. Således blir det för en tid färre uppdateringar här också som en konsekvens.

Trivs i alla fall toppenbra! Har saknat känslan av att rentutav längta till nästa föreläsning, hugga in på labbar och övningar och kasta sig in i kurslitteraturen. Det är så intressant, givande och roligt hittills att det inte kan vara ett symptom på annat än att man hittat rätt.

Första tiden nu fokuserar mycket på grunder inom datalogi och programmering – vissa delar har jag redan väldigt bra koll på i och med att jag knackat en del kod genom åren. Andra delar är redan efter första veckan nya, komplicerade och riktigt utmanande – vilket för min del är en ren motivationskatalysator.

Just nu ligger jag i princip en vecka före i planeringen vilket känns toppen – ska se till att följande veckor håller samma mönster. Har lärt mig sedan tidigare att prokrastinering hör lite till, men också är en onödig källa till sista-minuten-ångest. Tror att det här arbetssättet ger större chanser till att rentutav ge sig på lite fördjupning kurserna annars inte hinner ta upp i detta stadium.

Utöver kursstarterna så har det också vart en del praktikaliteter kring lägenheter och flytt. Befinner mig mitt i sistnämnda och det ska bli skönt när allt sådant stök är färdigt, då det tar en hel del extra energi och tid. Samt att det äntligen kan sätta punkt för det gamla.

Nu tar jag helg och laddar om inför nästa vecka!