Att vara en bra utvecklare
Att vara en bra utvecklare kräver naturligtvis en hel del kunskaper i hur datorer fungerar, hur en applikation eller lösning ska designas samt hur ett eller flera programmeringsspråk kan användas för att bygga just dessa applikationer. Men är det tillräckligt?
När jag har förmånen att träffa ungdomar som antingen själva visat intresse för programmering, alternativt fått chansen via skolan, så försöker jag också att prata om de mjuka faktorerna och de mer sociala aspekterna av att vara en bra utvecklare. Det här är naturligtvis mina personliga reflektioner.
Lingvist - du behöver goda kunskaper i engelska
Det här är kanske inte helt förvånande men något som ändå bör understrykas eftersom det mesta av informationen som kommer att konsumeras och användas är skrivet på engelska. Sökresultat, bloggposter, frågor och svar på stackoverflow, som sagt nästan allt är på engelska. Det finns en del bra svenska resurser också men för att jobba proffessionellt som programmerare så är det engelska som gäller. I branchen som jag för närvarande jobbar, spelprogrammering, så är engelska också det språk som oftast talas på kontoret. Det är så många olika nationaliteter och kulturer representerade så engelskan har blivit det naturliga språket att samsas om.
Vi bör inte heller glömma bort att de flesta programmeringsspråk också använder engelska ord i sitt vokabulär. Jag har haft glädjen att ha jobbat med ett svenskt programmeringsspråk för flera år sedan, men det var nog mer lustigt är produktivt.
Matematiker - en grundläggande förståelse för matematik
Att förstå sig på vektorer, algebra, geometri och trigonometri är något som är mycket viktigt i programmering. Det finns till och med programmeringsspråk som är mer matematiska i sin struktur och då är matematik ännu viktigare. Jag vågar till och med påstå att de enda gångerna som jag får användning för några av de lite jobbigare matematik-kurserna från högskolan är när jag programmerar, och då nästan uteslutande vid spelprogrammering.
Nyfikenhet - att aldrig sitta still
Som programmerare får du aldrig sitta still i din utbildning. Det går så oerhört fort på internet och forskningen och utvecklingen av nya språk, ramverk och tekniker är lavinartad. Det kommer med största sannolikhet att kännas lite jobbigt ibland då du inte hinner med att ta in alla nyheter, men här gäller det att ständigt ha en öppen attityd och prova nya saker, lära sig nya sätt att lösa problem och träffa nya människor som du kan hjälpa eller få hjälp utav. För att vara anställningsbar (alltså vara attraktiv för företag) så gäller det också att ha en inblick i vad som händer på marknaden och kanske rent av ta egna initiativ till att utbilda sig i områden som är aktuella istället för att sitta still och hoppas på att dina kompetenser återigen ska bli aktuella.
En personlig reflektion för mig är att det är jobbigt för närvarande när jag tittar på hur mycket tid som jag investerat i att bli en fena på att bygga appar och lösningar för Windows Phone, en plattform som är nedlagd och inte vidareutvecklas. Det betyder att jag behöver höja blicken och se mig runt omkring på nya områden. Jag vet att jag har lätt för att lära så det handlar primärt om att hitta ett område där jag kan hitta min passion och känna mig bekväm med att jobba.
Problemlösare - hoppas du gillar att lösa problem, gåtor och är en fena på att se mönster
Om jag skulle ta och bryta ner konceptet programmering så tänker jag mig att det handlar om att ta ett stort problem och bryta ned det i mindre beståndsdelar. Den här processen fortsätter rekursivt tills dess att du har möjligheten att utrycka lösningen på den aktuella delen av ett problem som instruktioner som datorn i slutändan kan förstå. Att sedan känna igen mönster, saker som jag gjort förut eller grupper av instruktioner är också nyckeln till att inte behöva göra samma sak om och om igen, utan istället bryta ut lösningar till beståndsdelar som kan återanvändas.
Jag tycker också att det är både avkopplande och samtidigt utvecklande att spela datorspel, lösa gåtor och matematikproblem, korsord, sudoku och liknande utmaningar. Jag tycker nästan alltid att jag antingen har lärt mig något nytt, eller hittat ett nytt sätt att lösa problem på, något som jag ofta kan anamma när jag senare skriver kod.
Mod - var inte rädd att misslyckas
Det här är något som kanske inte så många tänker på, men jag trycker gärna lite extra på hur viktigt det är att vara modig som programmerare, speciellt när jag pratar med unga aspirerande utvecklare. Det finns ingen som helst chans i världen att du kommer att få allting rätt från första början, du kommer göra fel, ofta, och säkert med ibland allvarliga konsekvenser. Men nyckeln här är naturligtvis att lära sig av sina misstag och förslagsvis också försöka förhindra att andra hamnar i samma situation. Det är kanske inte helt bekvämt att för det första erkänna sina misstag utan att också berätta om dem igen, men det är naturligtvis en oerhört lärorik lektion för andra som lyssnar och kanske var på väg åt samma håll.
Det finns en hel del coola citat som berör detta:
Do or do not, there is no try! - Yoda
A black belt is a white belt that never gave up! - Okänd
You learn more from failure than from success. Don’t let it stop you! Failure builds character. - Okänd
Whether you think you can or think you can’t, you’re right! - Henry Ford
En annan aspekt av att var modig är att också exponera sårbarheter och inte bara misstag. Ingen förväntar sig att du ska kunna allt, men det finns en förväntan av framsteg, vilket innebär att du kan inte sitta hur länge som helst och inte fundera på en lösning, utan ibland kan den enklaste lösningen vara att be om hjälp. Det finns diskussionsgrupper, forum, sociala medier, sökmotorer och massvis med information tillgänglig, och när det skrivna ordet inte räcker till, räck upp en hand eller gå till någon annan utvecklare och be om hjälp.
Koden du skriver kommer också i nästan alla projekt läsas och analyseras av andra utvecklare (det kan faktiskt vara moget att skriva kod så att andra utvecklare förstår vad du menar och inte bara för dig själv och kompilatorn). De kommer att reagera på, relatera till och kommentera på din kod. De kanske till och med kommer att lägga till, ändra eller till och med ta bort kod, glöm inte att det här är naturlig del av processen och du förväntas göra detsamma, och det bör du! Att läsa andras kod är oerhört utvecklande!
Googlare - lär känna internet
Igen, du kan inte förväntas kunna allt, men du bör veta vart du ska vända dig för att få hjälp. Internet är oändligt stort i många avseenden och att kunna söka efter information är oerhört viktigt. Det här betyder också att du måste lära dig att söka först och fråga sen, det finns en stor chans att någon annan har haft liknande eller kanske till och med exakt samma problem som du just nu har, och redan har ställt och fått frågan besvarad tidigare. Ha respekt för att de som svarar på frågor i forum gärna vill slippa svara på samma sak om och om igen, då är det bättre att du sätter dig in i sökmotorn som används och försöker ett par gånger att hitta lösningen innan du själv formulera en ny fråga.
Samariten - hjälp andra som behöver det
Att be om hjälp är en sak, att vara tillgänglig för att hjälpa andra är en annan. Var medveten om att när du blir bättre och bättre, så kommer också intresset och förväntan på att du ska hjälpa andra att öka. Respektera andra, glöm inte att du själv var i deras position tidigare, i behov av hjälp, osäker och ny i ämnen som du nu har bemästrat. Utvecklar-communityn har växt till en ibland fientlig miljö där andra personer är arroganta och ibland rent av elaka mot varandra, var inte sån, var bättre och trevligare! Ett råd som jag har tagit till mig är att det som jag skriver på internet, i sociala medier eller var som helst, ska jag också kunna säga till någon som jag träffar fysiskt.
Disciplinerad - hur du får och behåller fokus
Är du en morgon eller kvällsperson, när tycker du att du presterar som bäst? Det är naturligtvis intressant, men om din arbetstid är mellan 09.00 och 17.00 så är det då du förväntas att leverera. Lär dig hur du stänger ute saker som stör, hur du prioriterar bland dina uppgifter och spenderar din tid på det som är viktigast för närvarande. Om du tycker att musik hjälper för att koncentrera dig, lyssa då, men förvänta dig inte att andra runt omkring uppskattar att lyssna på en skränande Marilyn Manson från din hörlurar. Det finns också metoder för att underlätta fokus, monotasking, pomodoro, listor med uppgifter eller kanske bara att ha en enda skärm på skrivbordet och en ren och fräsch arbetsmiljö. Det finns dessvärre ingen metod som fungerar för alla utan det gäller att själv identifiera vad som fungerar för dig och försöka anpassa sig till de runt omkring.
Jag anser exempelvis mig själv bra på att distansera mig från personliga utmaningar när jag behöver fokusera på jobb, men jag har däremot en hel del utmaningar från att distansera mig från jobbet när jag är hemma. Det är något som jag jobbar och ständigt försöker bli bättre på.
Insiktsfull - att hantera press och stress
Fokus är viktigt, men det kommer att komma flera tillfällen när din deadline närmar sig och du känner hur förväntningarna på dina resultat ökar. Det är då du behöver insikt i hur du väljer att prioritera och bibehålla fokus på det absolut viktigaste. Jag anser också att det är skillnad på press och stress där press för mig innebär att tidsfristen på det som jag förväntas göra börjar närma sig, medans stress istället handlar om att hålla flera bollar i luften eller ha flera störande moment runt omkring mig. En viktig egenskap i detta kan också vara att våga och veta när det är dags att säga nej, något som generellt utvecklare är väldigt dåliga på att göra.
Jag har fått någon sorts insikt i att jag fungerar som bäst under press men att jag ibland tappar fokus helt och hållet när stressen blir för påtaglig. Det är naturligtvis ingen rolig insikt men istället försöker jag jobba på att inte hamna i alltför stressade situationer, exempelvis genom att dokumentera det som ska göras, istället för att hålla allt i huvudet. Jag har också blivit mycket bättre på att säga nej och prioritera bland mina uppgifter, något som har tagit lång tid att lära mig.