Välkommen in!

mars 07, 2012

Vi på Valtech fick ett mail från en ung tjej som läste en yrkesutbildning för att bli systemutvecklare. Vi skulle hjälpa henne genom att svara på tio frågor till en skoluppgift hon skulle lämna in. Uppgiften var att ”ta reda på vårt framtida yrke som programmerare/systemvetare”.

Min kollega Mikael Lundin svarade så underbart på de tio frågorna att vi bara måste lägga ut detta. Mina personliga favoriter är svaren på 2, 7 och 9… Håller ni med?

1. Hur ser en typisk dag ut för dig, vad har du för arbetsuppgifter?

Jag arbetar som systemutvecklare och sitter som konsult ute hos en kund på ett långtidsuppdrag och arbetar med deras IT-system, drift/underhåll och nyutveckling.

En typisk dag kommer jag in till kontoret vid 07.30 och går hem 16.15. Under den tiden arbetar jag mest med ändringar och nyutveckling av deras befintliga system. Det är en blandning av att skriva kod, författa specifikationer, sitta i möten och diskutera hur något skall fungera och ibland driva projekt.

Det blir aldrig enformigt och du blir aldrig fullärd.

En del av mitt uppdrag är också förvaltning, vilket innebär att rätta fel som upptäcks i kundens system, eller utföra ändringar. Det kan vara allt från att färgen på hemsidan har fel nyans av grått, till att beställningar som läggs i ordersystemet inte sparas och min kund förlorar tiotusentals kronor varje minut som felet består.

Jag har ganska bred kompetens och jobbar därför med allt från att placera ut knappar och texter på webbsidor, till att flytta runt data i databaser. Mina dagar är inte särskilt typiska. Jag kan sitta i möte en hel dag och prata om statistik. Nästa dag kan jag sitta och flytta runt knappar och texter på webbsidan. En annan dag skriver jag inte en rad kod, utan sitter bredvid mina kolleger och lämnar över kompetens.

2. Vad är det roligaste med ditt arbete?

Det blir aldrig enformigt och du blir aldrig fullärd. Systemvetenskap, datavetenskap, programmering är ämnen som växer för varje sak man lär sig. Ju mer man studerar detta upptäcker man hur lite man vet. Detta kan kännas skrämmande eller utmanande, för mig det senare.

Om man tycker om att lösa pussel, då gillar man programmering. Om man tycker om att sätta sig in i och lösa andras problem, då gillar man systemutveckling.

Det roligaste med att vara konsult är att man får träffa många olika människor, i olika branscher som har olika problem som behöver lösas. Det betyder att man måste vara duktig på att snabbt kunna sätta sig in i en ny verksamhet och hur den fungerar, men också att man får chansen att lära sig otroligt mycket om hur olika verksamheter tänker och fungerar.

3. Respektive tråkigaste?

Det tråkigaste med systemutveckling är när man behöver göra saker som inte kräver kreativitet eller problemlösning. Installera serverprogramvara, uppgradera versioner av programvara.

Det händer ofta i systemutveckling att du inte har chansen att göra allting tillräckligt bra på grund av tid och budget. Du ombeds ofta att göra en snabb och enkel lösning, istället för att ta ett helhetsgrepp och lösa hela problemet. Det känns inte bra alls när man tvingas att sy ett lapptäcke av ett helt system för att få det att hänga ihop när man har gjort snabba och enkla lösningar i två år utan att få möjligheten att göra det så som man är utbildad till.

4. Vilket program tycker du är bäst att lära sig om man är nybörjare som programmerare?

Det viktigaste är att lära sig de grundläggande koncepten.

  • Imperativ programmering
  • Deklarativ programmering
  • Funktionell programmering
  • Objektorienterad programmering
  • Dynamiska språk
  • Statiska språk
  • Minneshantering, garbage collection, pekare och referenser
  • Hur man strukturerar kod
  • Låg koppling, hög sammansättning (low coupling, high cohesion)
  • Koncept som KISS, SOLID
  • TDD, BDD
  • Continuous integration

Som nybörjare är detta alltför mycket att ta in. Jag tror att det är lättast att fokusera på en plattform och ett programmeringsspråk för att nå en sådan nivå att man kan bredda sin kunskap på alla dessa områden. Om man sedan har bredden och uppfattat de grundläggande koncepten är det detaljer som skiljer olika programmeringsspråk och plattformar åt.

  1. Välj plattform (ex. windows, mac, linux, webb, mobil)
  2. Välj språk för den plattformen (ex. för windows C#)
  3. Lär dig detta tills det inte finns mer att lära sig
  4. Bredda ut med fler språk och andra plattformar

Acceptera att du inte kan lära dig allt och fokusera på att bli expert på att snabbt lära dig nya saker när du behöver den kunskapen.

5. Har du studerat programmering eller är du självlärd?

Båda.

Jag började programmera Pascal när jag var 12 år. Övergick till PHP när jag var 16 år. Pluggade funktionell, imperativ och objektorienterad programmering på LiTH, 2001-2002.

Gick 3-årigt datateknikprogram på KTH 2005-2007 och har jobbat som konsult inom systemutveckling sedan dess.

6. Hur långt tid tar det innan man behärskar ett program någorlunda?

Jag tror det krävs att du avslutar ett par projekt innan du behärskar ett programmeringsspråk.

Man måste ibland skriva kod som man inte förstår för att komma vidare

För att behärska en teknik, eller ett koncept krävs det också att du har använt det i ett projekt. När projektet är över kommer du se fördelarna och bristerna och veta hur du skulle gjort om du började om från början. Därför är det en förfiningsmetod varje gång du skall lära dig behärska något.

Detta innebär också att varje gång som du skall använda en teknik, ett språk eller ett verktyg som du inte behärskar kommer det bli ganska dåligt första gången, men detta är nödvändigt för att kunna utvecklas.

Somliga bygger massvis med prototyper utanför sitt arbete för att testa tekniker och kunna bespara sina kunder från själva upplärningssteget.

7. Vad ska nybörjare tänka på när de börjar programmera? Finns det några nybörjaremisstag man bör undvika om man kan?

Alla tycker det är svårt till en början. Man måste ibland skriva kod som man inte förstår för att komma vidare. Detta är naturligt.

Ett vanligt fel är att kopiera kod från internet som man inte riktigt förstår. Det är många hobbyprogrammerare som lägger upp lösningar på problem som är mer än bristfälliga.

Det är många som tror att de kan lära sig programmera genom att läsa en bok. Detta är aldrig tillräckligt. Man måste sitta och skriva kod för att lära sig. Om det finns övningsuppgifter i boken man läser skall man försöka lösa samtliga för att få tillräckligt med övning. Programmeringserfarenhet ligger till 100% i hur många rader kod man har skrivit. Böckerna ger dig endast grunden och kunskapen för att kunna skriva koden.

En teknik som jag använder ofta i arbetet är att hugga tag i en annan utvecklare och förklara min kod och min lösning för honom. Genom att behöva sätta ord på min kod, får jag också större förståelse för hur den fungerar och hur jag skulle kunna göra den bättre.

8. Är agil utveckling och/eller beteendedriven utveckling något jag och mina klasskamrater kan använda oss av i våra grupparbeten?

När jag studerade på KTH fick vi prova på olika arbetsformer i projekt. Vattenfall, RUP, XP och Scrum. Jag tyckte att det var väldigt nyttigt att få känna på olika projektmetoder.

I mitt dagliga arbete använder vi mest Kanban och Scrum. Kanban fungerar bra när man inte har tydliga projektmål utan arbetar mer med förvaltning. Scrum är lysande när man känner till projektets mål och har avsatt tid och resurser för att uppnå detta mål.

9. Vilket språk tror du kommer användas mest i framtiden?

Svaret på den här frågan är närmast religiös. Alla programmerare har sina egna böjelser och passioner. Du kommer få olika svar oavsett vem du frågar.

Jag tror på polygot programming, vilket innebär att man använder det verktyg som passar bäst för det problem man har. Detta innebär att man också använder det språk som passar bäst för problemet man sitter med. Om jag skall formge en webbsida använder jag HTML för att beskriva semantiken, CSS för utseendet och JavaScript för gränssnittslogiken. Jag använder SQL när jag skall spara data i en databas och jag använder Regular Expressions när jag skall verifiera att den datan har rätt format. Jag har nu nämnt fem språk som ingår i en och samma lösning, men detta är bara en droppe i havet.

Nyckeln är att använda det språk som löser mitt problem på bästa sätt.

Idag är våra största ”general purpose languages” Java, PHP, C#, Ruby och Python. Jag tror att dessa jättestora språk kommer få mindre betydelse när vi kan dela upp programmeringsproblemen i isolerade bitar som går att lösa med ett specifikt språk för varje specifikt problem.

Mitt svar på frågan är att jag inte tror att något språk kommer användas uteslutande mer än andra i framtiden.

10. Hur ser framtidsutsikterna ut som programmerare?

Goda så länge inte någon uppfinner självmedveten AI som kan utveckla sig själv på kommando. Men det är väl bara science fiction, … eller?

Jag kan inte se att det skulle finnas ett mindre behov av programmerare i framtiden när systemen blir bara fler och fler. Det är redan brist på arbetskraft för att utveckla alla system som behövs och det är framför allt brist på kompetens. Det är många som kallar sig programmerare utan att riktigt veta vad de håller på med, vilket ger mer jobb åt oss andra som får städa upp.

Branschen har mognat sedan den stora IT-bubblan i slutet av 90-talet och tar det mycket mer försiktigt nu. Jag tror inte på någon ny bubbla som man pratade om för ett par år sedan och jag tror att programmering är ett ganska säkert yrkesval så länge man orkar hänga med i utvecklingen och ständigt hålla sig uppdaterad i en teknik som rör sig i ett vansinnigt tempo framåt.

Lycka till!

 

Kontakta oss

Let's reinvent the future