Ting som enter konkret har med jobben min å gjøre, eller det å jobbe som utvikler generelt.

Den sosiale hjernen

Monday, May 20th, 2013
1 kommentar

Emosjonell intelligens står sentralt i ledertreningen jeg holder på med for tiden. Noen av begrepene vi har jobbet mye med er sårbarhet og flyktmekanismer. Denne bloggposten handler om disse tingene. Jeg vil snakke om samspillet mellom emosjoner og det rasjonelle i hjernen vår, og forsøke å forklare hvordan hjernen vår reagerer i sosiale sammenhenger. Jeg vil også presentere en modell som snakker om fem ulike områder hvor emosjonene våre påvirker oss spesielt sterkt i samspill med andre.

avoidence

Mennesker, alle pattedyr, og de fleste andre dyr har et svært sentralt overlevelsesinnstinkt som går ut på å minimere trusler og maksimere belønning. Frykt er for eksempel følelsen du kjenner når kroppen reagerer på noe den mener du bør flykte fra. Pulsen øker og blodet pumpes ut i de store musklene, blant annet bena, noe som gjør at fargen forsvinner fra ansiktet. Hjernen trigger en strøm av hormoner (blant annet adrenalin) som setter kroppen i høy alarmberedskap. Du er klar til å fjerne deg fra trusselen, slik at du overlever og kan møte en ny dag.

Når kroppen oppdager noe som er bra for deg reagerer den anderledes. Emosjonen glede fører til en aktivitet i hjernen som undertrykker negative følelser og gir tilgang til mer energi. Du føler deg motivert og entusiastisk, og er mere villig til å ta rissiko.

attraction

Hjernen vår består av ulike systemer. Noen av dem er veldig, veldig gamle – i evolusjonær forstand. Den grå, skrukkete overflaten du ser når du betrakter en hjerne er i hovedsak neocortex, eller “ny-hjernen” om du vil. Den er felles for alle pattedyr, men er langt større hos mennesker, og gir oss blant annet vår rasjonelle intelligens.

Men gjemt under neocortex finner du noe mye eldre: Det limbiske system, også ofte kalt reptilhjernen. Det limbiske system er blant annet setet for alle de sentrale funksjonene knyttet til emosjoner. Og en av kjertlene i dette systemet heter amygdala. Det vil si: Det er to av dem, en i hver hjernehalvdel. Amygdala kalles også mandelhjernen, fordi den har form som en mandel.

hjernen

Det sansene dine registrerer når ikke først den delen av hjernen som lar deg tenke og reflektere. Amygdala er mye raskere, og vurderer alle sanseinntrykk. På ett femtedels sekund vurderer mandelhjernen informasjonen den får, og tar en avgjørelse om inntrykket representerer en trussel eller en belønning, og hvor stor denne trusselen eller belønningen er.

Når “den bevisste hjernen” setter igang og vurderer sanseinntrykkene har allerede amygdala tatt et valg, og har påvirket både resten av hjernen og kroppskjemien deretter. Og hvis amygdala vurderer det som kritisk nok vil den kunne ta fullstendig kontroll – den bevisste og rasjonelle deg har ingen ting å stille opp med. Når man må unngå klørne til en tiger har man ikke tid til å være fanzy, og følelsene tar overhånd.

Og ifølge Daniel Goleman, forfatter av bestselgeren Emotional Intelligence (1995), er amygdala og dens samspill med neocortex selve hjertet av emosjonell intelligens. Det viser seg nemlig at veldig mye av vår sosiale adferd styres av de samme mekanismene. Amygdala påvirker deg i enhver situasjon, og aktiverer trusselresponsen gang på gang hver eneste dag.

amygdala

Den prefrontale hjernebarken (PFC) er sentral i planlegging av kompleks adferd, i å ta avgjørelser, og i å moderere sosial adferd. Dens oppgave er å styre tanker og handlinger i samsvar med dine indre mål. Mange sier at det er her personligheten sitter. Når amygdala har vurdert at noe representerer belønning vil det stimulere PFC på en positiv måte; man blir mer villig til å gjøre vanskelige ting, å det blir lettere å tenke dypt og å skape løsninger. Hjernen produserer dopamin, som er viktig for interesse og for læring. Man blir rett og slett smartere!

Når amygdala derimot flagger en trussel reduserer dette PFC’s evne til problemløsning og stresshåndtering, og din evne til sammarbeid og til å motivere deg selv begrenses. Dette skyldes blant annet at PFC får tilgang til mindre ressurser – i form av oksygen og glukose – og din evne til bevisst prosessering forvitrer.

Det sier seg selv at i den moderne verden, og ikke minst i en arbeidshverdag hvor problemløsning og samarbeid står sentralt, så vil belønnings-aktivering være svært gunstig, mens trussel-aktivering vil være svært negativt. Derfor er emosjonell intelligens og kunnskap om disse prosessene så viktige for en bedriftsleder.

SCARF-modellen

SCARF er en modell for å forstå sosial motivasjon, publisert av David Rock i 2008. Den baserer seg på at også sosial interaksjon styres av prinsippet om å minimere trusler og å maksimere belønning, og at det er det samme hjernefunksjonene skapt for overlevelse som påvirker oss i det daglige.

SCARF er et akronym for de fem behovene Rock mener alle mennesker har, og som de til enhver tid ønsker å maksimere. Ulike mennesker legger kanskje ulik vekt på de ulike behovene, og betydningen av dem kan farges av kultur og erfaringer, men det hevdes at de likevel er ganske universelle.

SCARF

Jeg vil nå i tur og orden ta for meg hvert enkelt behov…

Status – å være “bedre enn”

Mennesker har i en hver situasjon – bevisst eller ubevisst – et forhold til sin status i forhold til de andre som er tilstede. Høy status vil si at man føler seg “bedre enn” noen andre, og dette trigger dopaminproduksjon i hjernen, med alle konsekvensene dette har.

Man kan si at man blir smartere av å føle seg smart.

I følge forskning har også en følelse av status en stor innvirkning på helse og livslengde. Status er lik overlevelse.

En følelse av status utvikles gjennom “å vinne”, for eksempel å komme seirende ut av konkurranser eller diskusjoner. Dette kan høres veldig fælt ut, det harmonerer veldig dårlig med janteloven som er så “popluær” her i landet, og man kan tenke at det er fælt at noen andre må tape for at én skal vinne. Heldigvis er det slik at de fleste mennesker går rundt og føler seg bedre enn de fleste andre på ett eller annet område. De fleste mennesker mener de er over gjennomsnittet :)

Men status-følelsen kan også bygges opp gjennom å konkurrere med seg selv. Det har seg slik at man bruker den samme delen av hjernen når man tenker på andre mennesker som når man tenker på seg selv i fortid. Og man oppnår den samme status-belønningen ved å slå seg selv. Personlig og faglig utviking og læring gir dette. Positiv feedback bygger også opp følelsen, uten at det går ut over noen andre.

Det er meget lett for at man oppfatter noe som en trussel mot ens status – det skjer hele tiden! Det skal ikke mer til enn at noen gir deg instruksjon eller råd, eller antyder på en eller annen måte at du kunne vært flinkere. Og vi gjør som regel automatisk det vi kan for å unnvike dette statustapet. Dette fører til mange tåpelige diskusjoner hvor man kanskje hardnakket står på sitt i stedet for å innrømme feil.

status

Hva skjer når en autoritær leder bruser seg opp og stiller krav til deg? Noe det kan føre til er at du blir redd for å ikke kunne innfri. Hvorfor hadde lederen trengt å være så streng om han ikke følte at jeg ikke var god nok. Sjangsen er da stor for at hjernen vil jobbe mot deg, den prefrontale hjernebarken får mindre oksygen og næring, og din evne til å løse problemet reduseres.

Certainty – å kunne forutse

Hjernen er en mønstergjenkjenningsmaskin. Den forsøker hele tiden å forutse fremtiden basert på hva den opplever og på tidligere erfaringer. Dette har alltid vært viktig for overlevelse, men det er også viktig for helt grunnleggende ting som å klare å gå.

Når det oppstår usikkerhet må hjernen bruke mer ressurser på å forutse fremtiden. Forutsigbarhet er derfor viktig for alle mennesker.

Noe som raskt kan trigge trusselresponsen i denne forbindelse er såkalt inkonguent adferd – det vil si adferd hvor det ikke er samsvar mellom alle signalene man sender ut. Til eksempel kan man si noe med ord, mens kroppspråket eller tonefallet man bruker sier noe annet. Da er det lett å miste fokus fordi kroppen vurderer hvordan den skal håndtere denne faren.

Musikk er et klassisk eksempel på hvordan vi stimulerer dette behovet positivt. Å lytte til musikk er å lytte etter mønstre – melodi og rytme. Når vi gjenkjenner disse mønstrene får vi en god følelse. Vi trives også i vandte omgivelser, for eksempel i vårt eget hjem, på grunn av dette. Generelt kan vi si at det å nå forventninger gir et økt dopaminnivå, som igjen gir gode forhold for læring, motivasjon og problemløsning.

certainty

Som leder er det viktig å ta hensyn til dette behovet. Det kan være viktig å avklare forventninger med medarbeidere. Det kan være viktig å bryte ned oppgaver, slik at det blir enklere å klargjøre og deretter oppnå forventningene til hver del. Og det er viktig å ha og kommunisere en god plan. Selv om en plan aldri passer 100% til virkeligheten så er det likevel en trygghet i å ha planen.

Autonomy – mulighet til å påvirke

Det tredje behovet som SCARF sier at alle mennesker har er autonomi; friheten til å kunne påvirke ens eget liv. Følelsen av å ha kontroll over situasjoner føles bra, og det er også vist at dette er viktig for helsen. Hvis noe truer dette behovet – når noen tar avgjørelser for deg – blir flyktmekanismene aktivert.

autonomy

Når man er en del av et team, hvor man jobber mot et felles mål, så er det naturlig at man må gi slipp på noe autonomi. Men dette balanseres normalt av belønninger i form av økt status, økt sikkerhet, og det fjerde behovet i SCARF-modellen: Felleskapsfølelse.

Relatedness – å høre til

Felleskapsfølelsen – å føle at en hører til – er ekstremt viktig for mennesker. Den værste straffen vi kan påføre andre mennesker er å fryse dem ut. Avisene har snakket endel om såkalt jentemobbing i det siste: Baksnakking, skjulte blikk, hvisking, uthenging og utstøting. Å bli utsatt for dette er ekstremt smertefullt, kan ødelegge liv og i verste fall føre til at man tar sitt eget liv for å “slippe unna”.

relatedness

Når man forholder seg til andre mennesker vurderer hjernen hele tiden om den andre er venn eller fiende. Venner er dem man stoler på, fiender er alle andre. Når man behandler informasjon fra venner, fra mennesker som er som oss selv, så bruker vi de samme hjernekretsene som når vi tenker våre egne tanker. Men når vi tolker informasjon fra fiender bruker vi andre deler av hjernen, kretser som er mere skeptiske og har mindre evne til empati.

Og når vi møter noen vi ikke kjenner trigger amygdala automatisk en trusselrespons. Om vi ikke endrer denne responsen får vi et dårlig sammarbeidsklima. Alkohol hjelper, men vi kan jo ikke gå rundt og være beruset hele tiden.

Det finnes derimot et hormon som heter oxytocin som hjelper oss å omgå og akseptere andre mennesker. Når vi håndhilser på noen, får vite hva de heter og diskuterer trivialiteter som for eksempel (det dårlige) været, trigger det produksjon av oxytocin.

Sidebar: Tuckman

Sentralt i forståelsen av gruppers utvikling står Tuckmans Forming – Storming – Norming – Performing-modell. De to første fasene kan forstås i lys av behovene i SCARF-modellen; i Forming-fasen lærer medlemmene i gruppen hverandre å kjenne. Behovet for å være et felleskap er det dominerende, og medlemmene legger personlige behov til side.

Storming-fasen er en motreaksjon på dette, hvor autonomi er det dominerende behovet; alle hevder sine egne meninger, og det oppstår konflikter. For at teamet skal bevege seg videre til Norming-fasen må man skape en balanse mellom felleskapsbehovet og autonomi, slik at man oppnår et godt sammarbeidsklima hvor det også er rom for uenigheter.

Fairness – rettferdighet

Det siste behovet som styrer vår sosiale interaksjon er behovet for rettferdighet. Det er dette behovet som får mange til å jobbe i frivilligheten, og som får enkelte til å ofre sitt eget liv for politiske saker de tror på. Vi kan ha veldig ulik oppfatning av hva vi mener rettferdighet er, men når vi føler at rettferdigheten trues så reagerer vi raskt med irritasjon og sinne, som gjør oss mindre sammarbeidsvillige og løsningsorienterte.

fairness

For at team ikke skal bli negativt påvirket av behovet for rettferdighet kan det være viktig å i alle fall klargjøre hverandres forventninger. Bruker en tid til å høre på hverandre, og på å begrunne valg som blir gjort, så blir det enklere å forstå og akseptere. Det kan også være lurt at team får lage sine egne regler for hvordan de skal jobbe – da sørger teamet for å ta vare på rettferdigheten.

Konklusjon: Sårbarhet og fluktmekanismer

Emosjonell intelligens og kunnskap om behovene i SCARF-modellen gir først og fremst økt selvinnsikt og bevissthet om hvorfor man er som man er. Det er vist at man kan redusere den negative effekten emosjonene har ved å “sette merkelapper” på dem. Vi bruker da vår prefrontale hjernebark til å moderere amygdalas impulser, og kan ofte unngå at den mentale kapasiteten reduseres, og man reduserer stress.

Et av kriteriene for å bli sertifisert i motivernede ledelse er innsikt i ens egne sårbarheter. I lys av det jeg har presentert her betyr det å fortå og å kunne oppdage hvordan og når man selv får en negativ amygdala-reaksjon. Vi skal kunne gjenkjenne våre typiske fluktmekanismer, som vil si hva det er vi gjør når vi føler at våre grunnleggende behov blir truet. Ler vi det bort? Eller melder vi oss mentalt ut av gruppen? Dette må vi kunne fange opp og korrigere for å være gode ledere.

Denne ferdigheten og innsikten kan hjelpe deg på områder som lederskap, organisasjonsutvikling og teamarbeid. Du bruker den til å motivere både deg selv og andre, og du bruker den til å skape et bedre klima for læring og personlig utvikling.

Matematiker, informatiker, science fiction-forfatter og filosof Rudolf von Bitter Rucker har sagt at vi befinner oss midt i den tredje intellektuelle revolusjon. Den første hadde vi med Isaac Newton: Planetene følger fysiske lover. Den ande kom med Charles Darwin: Biologien følger genetiske lover. Og nå er vi i ferd med å innse at til og med bevisstheten og samfunnet følger sine lover. Vi har begynt å innse at sosiale interaksjoner også er en vitenskap, noe som kan forstås. Og sentralt i dette står samspillet mellom amygdala/reptilhjernen/emosjonene og neocortex/det rasjonelle.

Vi styres hele tiden av følelsene våre – i langt større grad enn hva vi gjerne liker å tro. Vi liker jo å se på oss selv som veldig rasjonelle. Men uten følelsene hadde livet vært meningsløst. I stedet for å undertrykke emosjonene må vi utnytte dem. Når vi har behov for å samarbeide om å løse problemer må vi utnytte denne kunnskapen til å skape de beste forutsetningene for å lykkes!

Referanser: Emotional Intelligence – Why it can matter more than IQ (Goleman), SCARF: a brain-based model for collaborating with and influencing others.

Les også: Kommunikasjon er utfordrende, Hva er coaching?

Hva er coaching?

Saturday, May 11th, 2013
1 kommentar

Coaching er et begrep mange har hørt om, og de fleste har kanskje en idé om hva det er også. I software-bransjen er det for eksempel mange som kaller seg coach – eller gjerne Agile Coach. Jeg tror dette som regel er personer som mener de kan agile / smidig utvikling veldig godt, og som tilbyr seg å hjelpe utviklingsteam til å bli mere smidige gjennom å dele sin kunnskap og veilede teamet.

Nå har jeg faktisk studert coaching, og jeg har lært at dette er et eget fagfelt med lange tradisjoner og et sett med tilhørende ferdigheter. I denne blogposten vil jeg gå litt mer i dybden for å forklare hva coaching er, hvilke erfaringer jeg nå har gjort meg, og hvordan coaching kan benyttes i en organisasjon.

Hva betyr coach?

Coach er åpenbart et engelsk ord, og betyr vogn. Ordet ble først tatt i bruk på 1500-tallet, og beskrev noe som “fraktet verdsatte mennesker fra der de er, til dit de ønsker å komme”. Coach er med andre ord en metafor på noe eller noen som frakter mennesker til et ønsket sted.

carriage1

Ordet ble senere tatt i bruk i idretten, der coachen hadde i oppdrag å “frakte” idrettsutøvere fra et lavere til et høyere prestasjonsnivå. Det er denne prestasjonscoachingen som i løpet av de siste 30 årene har blitt mer og mer vanlig å bruke også til å trene personer i andre roller – for eksempel bedriftsledere.

Hvorfor coache?

Så hva er hensikten med å utøve coaching? Teknikkene som brukes under det vi kaller coaching er ment å være en god måte å fremme læring og utvikling hos den som blir coachet (i 1-til-1 coaching kalt coachee eller fokusperson). Coaching fokuserer på handling, og søker å oppnå høyere prestasjoner.

Det som gjenkjenner en leder med en coachende tilnærming, i forhold til en mere tradisjonell leder, er at han jobber med å skape en indre motivasjon hos sine ansatte. Lederen tror at alle mennesker har iboende potensialer, og hjelper dem med å finne frem til og dyrke disse potensialene.

Jeg har lenge gått rundt og trodd at jeg visste hva som skulle til for å lede et team med utviklere. Da jeg skrev min blogpost kalt en smidig teamleder hadde jeg alle svarene. Men jeg forstår nå at det var mye jeg ikke visste. Jeg trodde at alt som skulle til var å demonstrere gode metoder og teknikker, og å fortelle hva en dyktig softwareutvikler gjør, så ville alle lære, bli motivert og engasjert, og jobben min var gjort.

En coachende lederstil fokuserer derimot på indre motivasjon, på det menneskelige, og på coacheens egen kunnskap og erfaring. Dette vil i lengden være langt mere effektivt enn det å være en typisk mentor som “leder gjennom eksempel”.

hva-er-coaching

OBS: Det finnes ulike typer team med ulike oppgaver, og team kan også ha ulik grad av modenhet. Coaching egner seg ikke nødvendigvis for alle situasjoner. Et umodent team med lav grad av erfaring eller evne og vilje til å ta ansvar kan for eksempel kreve en mere styrende leder. Et svært erfarent team behøver derimot nesten ikke en synlig leder i det hele tatt, kanskje kun en som kommuniserer eller delegerer prioriterte oppgaver til teamet. Men mellom disse to ytterpunktene kan man ha stor effekt av en coachende lederstil.

Hvordan coacher man?

Man kan coache enkeltpersoner eller team – det er stort sett de samme egenskapene og teknikkene som trengs. Veldig kort fortalt går coaching ut på å få fokuspersonen(e) til å reflektere og tenke selv. Gjennom å stille åpne og effektive spørsmål og gjennom lytting på flere nivåer (vokal, verbal og visuell) hjelper man til å avdekke ting som ofte er skjulte for dem det gjelder. Coachen lar i liten grad samtalen bli styrt av egen intensjon eller egne meninger, men må i stedet være oppriktig nysgjerrig og hele tiden bygge på det fokuspersonen eller teamet kommuniserer.

Coachen passer også på strukturen i samtalen/diskusjonen; at den har et klart mål, at nåsituasjonen blir grundig utforsket, at man utforsker muligheter, og at man ender opp med et resultat man kan jobbe videre med. I teamcoaching passer han på at alle blir hørt, og han fanger opp konflikter og hjelper til å løse opp i dem.

Coachen vil også fokusere på å ansvarliggjøre coachee (eller teamet), og passe på at man er tydelig på hvilke mål man setter seg – hvem som skal gjøre hva, og når! Men i stedet for å diktere vil han få coachee (eller teammedlemmene) til å aktivt ta dette ansvaret selv.

Min erfaring sålangt

Det høres kanskje ikke så vanskelig ut når jeg oppsummerer det på denne måten, men coaching er i høyeste grad en ferdighet som krever kunnskap og ikke minst mye trening. Man må fortså hvordan ulike mennesker kommuniserer, og man må kunne lese kroppspråk. I teamcoaching må man forstå og kunne fange opp hva som skjer i grupper. Man må ha utviklet høy emosjonell intelligens, og man må ikke minst kjenne seg selv, sine egne følelser og emosjonelle handlingsmønstre.

Noe av det vanskeligste for meg er å distansere meg fra det som diskuteres – å holde tilbake mine egne meninger. Jeg har så lyst til å hjelpe og å foreslå løsninger på problemene fokuspersonen(e) jobber med. Men gjør jeg det tar jeg over noe av både ansvaret og motivasjonen, og jeg undergraver bevisstgjøringen og læringen jeg ønsker å stimulere.

En annen ting som er overraskende vanskelig er å være oppriktig nysgjerrig. Når vi kommuniserer gjør vi en mengde antagelser om hva den andre part mener. Men for å komme til bunns i saker og skape større bevissthet må man legge antagelsene til side og grave dypere.

Det som er veldig kjekt å erfare er effekten coachingteknikkene har på kommunikasjonen i teamet. Jeg opplever at den har blitt mye bedre på kort tid, og jeg har fått en rekke positive tilbakemeldinger etter å ha brukt ferdighetene i ulike sammenhenger.

Når bruker man coaching?

Man kan som sagt coache en person eller en gruppe for å fremme læring og personlig og faglig utvikling. Dette gjør man med en rekke coachingsamtaler over tid. Coaching er også velegnet for å komme videre med et eller annet vanskelig problem som noen sliter med.

De aller fleste møter kan egentlig gjøres som coachingsesjoner – sålenge coachen klarer å dissosiere seg og la teamet bringe innholdet. Jeg forsøker for eksempel å kjøre våre faste retrospective-møter som coachingsamtaler (retrospective er et møte hvor teamet vurderer sin egen innsats, og kommer opp med ideer til forbedring).

retrospective

Men foruten de rendyrkede coachingsamtalene har jeg oppdaget at det egner seg svært godt å bruke ulike coachingteknikker i mange andre sammenhenger. Jeg har til eksempel gjennomført medarbeidersamtaler som nesten var ren coaching, og jeg har brukt mange av ferdighetene i jobbintervju av nye utviklere. Jeg kan også gjøre en minicoaching på bare et par minutter om noen kommer til meg med en problemstilling.

En coachende leder

Å bruke coaching i møter og workshops er nå en no-brainer. Det eneste jeg må passe på er å legge bort det meste av min egen agenda, og la teamet komme med problemstillingene og med løsningene. Man må som leder gi slipp på noe av kontrollen – noe som kan være skummelt for mange – men får igjen for det gjennom mere engasjerte og selvgående teammedlemmer.

Å bruke 1-til-1 coaching er derimot en større utfordring. Vi har ikke for vane å ha mange slike samtaler mellom leder og medarbeider. De fleste jeg vet om har for eksempel ganske dårlige erfaringer med medarbeidersamtaler – de kommer sjelden, og gir ganske liten verdi. Vi synes kanskje det blir kunstig og ubehagelig…

Men hva om du faktisk hadde en fast, personlig samtale med din nærmeste leder én time annenhver uke? En samtale hvor lederen hadde de beste intensjoner, hvor fokuset var å gjøre deg god, å bygge opp under dine sterke sider, å utfordre deg til å prestere bedre? Hva om lederen gjorde dette med alle medlemmene i teamet? Hvilken effekt ville det ha på sikt?

Ville ikke det være ganske motiverende? Å ha noen som helhjertet forsøkte å forløse ditt potensiale! Det er ganske populært for tiden å betale dyrt for timer med en personlig trener på treningsstudio. Hadde det ikke vært fantastisk å ha det samme på jobb?

Det er vanskelig å tro at dette ikke ville gitt veldig gode resultater på prestasjonen i teamet. Nå når jeg har lært dette, og har trent på disse ferdighetene, så ser jeg faktisk på det som min plikt som leder å bruke det til teamets beste. Jeg tror alle mennesker har potensialer, at ansatte alltid kan bli bedre, og det er min jobb å utnytte dette potensialet – til fordel for både bedriften og den ansatte selv!

Oppsummering

Coaching er en kommunikasjonsprosess – bruken av et bestemt sett med teknikker og ferdigheter – som fremmer personlig og faglig læring og utvikling, og dermed også gir økt prestasjonsnivå. Coachende ledelse er bedre enn andre lederstiler for å oppnår økt bevissthet, økt motivasjon og økt ansvarsfølelse hos enkeltpersoner og team. Teknikkene kan brukes mer eller mindre spontant – for eksempel i møter – men kan også settes i systen over tid.

Personlig har jeg funnet min nye lederstil. Den er langt fra ferdig utviklet, og jeg vil selv ha godt av å bli coachet for å utvikle meg og bli en bedre coach og leder. Men jeg vet nå hvor jeg vil hen med teamet mitt, og jeg håper de vil være med meg på reisen!

Les også: Motiverende ledelse | Et lite team | En smidig teamleder | Er du lykkelig på jobb? | Jakten på enhjørningen

Motiverende ledelse

Saturday, May 4th, 2013
3 kommentarer

Jeg har nevnt et par ganger at jeg siden i høst har gått på et ledertreningskurs. Da jeg startet på kurset het det Prestasjonscoaching, men underveis skiftet det navn til Motiverende Ledelse, som nok er et mere dekkende navn.

Nå nærmer det seg sertifisering og eksamen, og det er på tide å reflektere litt.

min_lederutvikling

Dette lederkurset har vært en opplevelse for livet! Jeg har lært utrolig mye – ikke bare om hvordan jeg kan lede mennesker og få frem det beste i dem, men også mye om meg selv. Illustrasjonen over viser at jeg føler jeg har tatt et solid byks oppover i forhold til mitt potensiale som leder. Men jeg har også fått en dypere innsikt i hvordan jeg kommuniserer med mennesker, og hvordan vi mennesker påvirker hverandre.

Om kurset

Kurset er et sammarbeid mellom Storform og Universitetet i Agder. Storform er et konsulentfirma som leverer tjenester innen leder- og organisasjonsutvikling.

Kurset er på 30 studiepoeng, og inkluderer en rekke samlinger, praktiske oppgaver og et teoretisk pensum på et par tusen sider. Det har også vært krevd at vi har brukt og trent på ferdighetene vi har lært mellom samlingene og i vår daglige jobb.

Å delta på dette kurset har vært krevende og svært utfordrende. På samlingene har jeg vært utenfor flytsonen min nesten hele tiden, og innimellom har jeg faktisk tenkt at “dette klarer jeg ikke, jeg vil hjem”. For enkelte viste det seg faktisk å bli for mye. Men nå står jeg altså tilbake med en helt fantastisk opplevelse som har endret meg for alltid!

Om menneskene

Vi har tre instruktører fra Storform på kurset. De er alle dyktige, og er spesielt flinke til å utfordre oss. Men enda viktigere enn instruktørene er deltagerne…

De jeg går på kurs med er en gjeng fantastikse mennesker, alle med et oppriktig ønske om å lære å bli bedre og mere motiverende ledere. Alle er i en eller annen lederrolle i jobben sin, enten som daglig leder og/eller bedriftseier, mellomleder, HR-ansvarlig, prosjekt- eller teamleder.  Og sammen med disse menneskene har jeg fått levd ut teoriene og teknikkene i praksis, og fått kjent på hvordan det er å bygge et høytpresterende team.

Sjelden eller aldri har jeg fått være sammen med mennesker som gir så mye av seg selv!

Om innholdet

Kurset representerer en helhetlig leder- og utviklingsfilosofi som omhandler den menneskelige delen av ledelsesfaget. Det vi lærer er i bunn og grunn hvordan man henter ut potensialet hos sine medarbeidere. Vi arbeider ut fra et grunnleggende menneskesyn om at alle mennesker har kvaliteter og muligheter, og at det er vår oppgave som ledere å omforme disse potensialene til vilje og handling.

kurs_tema_tankekart

I tankekartet over mener jeg å ha fått med alle de viktigste områdene vi har jobbet med i kurset. Sentralt står coaching, som er en teknikk som kan brukes både 1-til-1 og i team. Formålet med å bruke coaching kan typisk være å skape indre motivasjon og læring, eller å hjelpe til med å skaffe oversikt og klarhet i vanskelige situasjoner. Vi har øvd mye på de ulike ferdighetene som inngår i coaching.

Videre har vi lært mye om emosjonell intelligens (EI). Gjennom kurset har jeg fått bedre innsikt i meg selv som leder, og også utviklet meg selv som menneske. Jeg har bli besvisst på mine sårbarheter og hva som skjer i meg når jeg blir stresset, utfordret eller på annen måte blir “satt ut”. Og gjennom mye ærlig og konstruktiv feedback har jeg blitt mer bevisst på hvordan jeg fremstår for andre.

Denne selvinnsikten danner grunnlaget for også å forstå andre mennesker bedre. Gjennom dette kan jeg sørge for bedre kommunikasjon og bedre sammarbeid mellom mennesker, og jeg lærer hva som skal til for å gjøre andre gode.

Til sist har fakuset gått mer og mer over på team, og hvordan man skaper høy prestasjon og velfungerende team. Det skjer mye når mennesker skal sammarbeide, ting man som regel ikke er bevisst. Disse gruppedynamiske og psykologiske aspektene kan påvirkes, og team kan ledes på en sånn måte, at sammarbeidet går lettere, kreativiteten får blomstre, og motivasjonen er høy.

Konklusjon

Jeg er takknemlig for at jeg har fått muligheten til å delta på dette kurset gjennom jobben. Det har vært tøft, og det er ikke over enda, men det har gitt meg overraskende mye positivt. Kurset har vært teori og praksis hånd i hånd, og jeg har nå en helt ny innsikt og et sett med ferdigheter som jeg mener allerede gjør meg til en bedre leder og et bedre menneske.

I tiden fremover vil jeg blogge mer om ledelse og temaene fra kurset – kanskje spesielt om team og gruppedynamikk. Jeg vil bruke bloggingen som et verktøy til å lære stoffet enda bedre, sette mine egne ord på det, og gjøre det til mitt eget. Jeg lærer alltid mye gjennom å forklare. Så håper jeg at når jeg skal sertifiseres om noen få uker, og eksamineres om en drøy måned, så har alt dette blitt en naturlig del av hvem jeg er.

Telle ord-forekomster med F#

Thursday, March 28th, 2013
11 kommentarer

I dagens blogpost går jeg gjennom litt F#-kode jeg skrev for en konkret oppgave på jobben. Oppgaven ble først løst i Ruby, men jeg trengte bedre ytelse, og kodet det derfor etterpå i F#. Er du en F#-nybegynner kan det godt tenkes du kan plukke med deg flere tips her. Jeg vil forsøke å trekke frem noen av de mer avanserte elementene i koden.

Oppgaven

Hin dagen lagde jeg et lite script for å telle opp antall forekomster av ord i en tekstfil – altså gruppere resultatet på hvert ord i filen (“bil” forekom 17 ganger, “båt” forekom 5 ganger osv.). Dette ville jeg gjøre for å kunne lage en ord-sky basert på tekstfilen. Her er for eksempel en ord-sky over de ti siste postene på bloggen min:

BLOG_RSS

Det kan se ut som om jeg er litt selvopptatt :)

Her er en beskrivelse av scriptet:

  1. Ta inn stien til en fil med tekst som første argument.
  2. Les linje for line, og splitt linjen opp i ord.
  3. Fjern punktum, komma, utropstegn eller kolon hvis det er siste tegn i ordet.
  4. Se bort fra ordet hvis det er ett av ordene i en svarteliste.
  5. Inkrementer en teller for antall forekomster av hvert ord.
  6. Etter at alle ordene er registrert med antall, fjern ord som ikke forekomer mer enn X ganger.
  7. Skriv ut resultatet til en fil, med ett ord og antallet pr linje.

Resultatfilen kan jeg så bruke som innput til Wordle og få generert en ord-sky. Ganske enkelt egentlig, og jeg laget raskt et script for dette i Ruby. Er du interessert finner du scriptet her.

Trengte bedre ytelse

Som jeg sa innledningsvis ønsket jeg bedre ytelse enn hva Ruby kunne gi meg. Filen jeg trengte å analysere var på over 50 MB og bestod av 500.000 linjer. Den inneholdt ca 518.000 unike ord, og over 6 millioner ord totalt. Jeg jobber jo med SMS, og dette var faktisk en halv million SMS-meldinger som skulle analyseres.

På min superduper-spekkede laptop brukte Ruby-scriptet mitt 88 sekunder på denne filen, og konsumerte 185 MB minne. Dette var med Ruby versjon 1.9.3. Til sammenligning bruker F#-programmet jeg nå skal lage under 16 sekunder på den samme filen (82% reduksjon i kjøretid), og trenger ikke mer enn 50 MB RAM (73% reduksjon).

88 sekunder er en evighet, mens jeg har tolmodighet nok til å vente i 16.

BONUSOPPGAVE TIL LESEREN: Klarer du å skrelle mer tid av algoritmen – enten i Ruby eller F#?

En løsning i F#

I F# må du definere en funksjon før du kan bruke den, så det er naturlig både å kode og å presentere koden bottom up.

Partial Application av infix operator

open System
open System.Collections.Generic

let blacklist = [""; "på"; "og"; "er"; "om"; "fra"; "med"; "i"; "to";
                 "det"; "å"; "ditt"; "til"; "ved"; "fra"; "for"; "av";
                 "en"; "din"; "du"; "at"; "vi"; "har"; "vil"; "nå";
                 "det"; "som"; "dere"; "kan"; "vår"; "så"]

Først importerer jeg et par navnerom (samme som using i C#), og så lager jeg en liste med de ordene jeg ikke ønsker å inkludere i analysen.

Jeg trenger også en liten funksjon for å sjekke om et ord er svartelistet:

let blacklisted (word : string) =
    List.exists ((=) (word.ToLower())) blacklist

Her bruker jeg exists-funksjonen i modulen List. Den tar to argumenter: En funksjon som returnerer true hvis elementet er funnet, og listen man skal lete i. Men funksjonsargumentet her er litt spesielt. Hva betyr ((=) (word.ToLower()))?

Dette er en såkalt partial application, som jeg har snakket om mange ganger før. = er en funksjon som sjekker om to verdier er like. Den brukes normalt infix, det vil si at den plasseres mellom sine to argumenter. Men om vi plasserer den mellom to paranteser blir den omgjort til en normal prefix-funksjon.

Det neste jeg har gjort er å sende ett – og bare ett – argument til funksjonen. Dette blir da omgjort til en ny funksjon som forventer ett argument til. ((=) (word.ToLower())) er dermed en funksjon som sjekker om noe er lik lowercase-versjonen av strengen word. De fre følgende uttrykkene er helt ekvivalente, og returnerer alle true:

((=) ("Foo".ToLower())) "foo"

(fun x -> ((=) ("Foo".ToLower())) x) "foo"

(fun x -> x = "Foo".ToLower()) "foo"

Å lage en egen infix operator

Vi går videre. Nå vil jeg lage en funksjon som stripper bort siste tegn fra en streng, men bare hvis det siste tegnet er en av et bestemt sett med tegn. I Ruby var dette gjort på én linje med gsub og et regulært uttrykk, men i F# benytter jeg anledningen til å eksperimentere litt.

(* Removes c from s if c is the last char *)
let (?<<) (s:string) (c:char) =
    let lastIndex = s.Length - 1
    if lastIndex >= 0 && s.LastIndexOf c = lastIndex
    then s.Substring (0, lastIndex)
    else s

Her har jeg laget en funksjon med det litt merkelige navnet ?<<. I tillegg har jeg lagt paranteser rundt, og slik blir det en operator på lik linje med pluss, minus, gange og deling.

Det ser rart ut, men den er elegant i bruk:

let stripPunctuation (word : string) =
    word ?<< '.'
         ?<< ','
         ?<< '!'
         ?<< ':'

La oss si at word inneholder strengern "foo!". Funksjonen ?<< kalles da først med argumentene "foo!" og '.', og resultatet er "foo!" (ingen endring altså). Dette resultatet blir nå første argument til den neste ?<<-funksjonen, som har ',' som andre argument. Og slik fortsetter det. Den tredje ?<< kalles med "foo!" og '!', og returnerer da bare "foo".

Denne teknikken kalles gjerne pipelining.

Å jobbe med en Dictionary

I dette programmet vil jeg bruke en generisk Dictionary<Key, Value>, slik som mange av oss er vandt til fra C#. Koden som følger er ikke spesielt funksjonell, fordi jeg baserer meg på å “mutere” (dvs. endre) dataene i dictionarien direkte. Jeg har likevel valgt å gjøre det fordi jeg jo “oversatte” et Ruby-script som gjorde det på denne måten, og fordi det vil være minst like raskt som en mere funksjonell løsning som ikke muterer data.

Først definerer jeg en ny type. Dette gjør jeg egentlig kun for å være litt eksplisit i koden, og slippe å måtte skrive Dictionary<string, int> fullt ut diverse steder.

type WordMap = Dictionary<string, int>

Jeg lager så en hjelpefunksjon som inkrementerer telleren for et bestemt ord, eller setter verdien 1 om ordet ikke finnes i dictionarien m fra før:

let increment (m : WordMap) word =
    if m.ContainsKey word
    then m.[word] <- m.[word] + 1
    else m.[word] <- 1

Når man muterer en variabel i F# bruker man ikke = slik man gjør i typiske imperative språk. I stedet bruker man <-.

let countWord acc word =
    if not (blacklisted word)
    then increment acc word

countWord er en funksjon som teller et ord fra filen jeg analyserer, men kun hvis ordet ikke er svartelistet. acc er en WordMap, men jeg behøver ikke fortelle F# det (det kan jo ikke være noe annet).

På tide å telle ordene

Nå har vi kommet til selve funksjonen som parser en fil og teller opp ordene i den – og her bruker vi alt vi har laget sålangt. Dette er den delen av programmet som konsumerer så og si all kjøretiden.

let parseWords fileName =
    let accumulator = new WordMap()
    let counter = countWord accumulator
    use file = IO.File.OpenText fileName
    while not file.EndOfStream do
        let words = file.ReadLine().Split [|' '|]
                    |> Array.map stripPunctuation
        Array.iter counter words
    accumulator

Når jeg oppretter variabelen counter så bruker jeg partial application igjen – du husker kanskje at countWord er en funksjon som tar to argumenter, men her gir jeg bare ett.

Legg også merke til nøkkelordet use som jeg bruker når jeg åpner filen. Dette er det sammen som using i C#, og file vil bli lukket/disposed før variabelen går ut av scope.

Filtrere bort skjeldne ord

Jeg ønsker også å fjerne ord som ikke gjentas mer enn X ganger i input-filen. Jeg har eksperimentert litt, og funnet at X = 1000 fungerer bra for de filene jeg jobber med, så jeg hardkoder likegreit denne verdien.

let trimRareWords pairsWithIntValue =
    Seq.filter (fun (KeyValue(_, count)) -> count > 1000)
               pairsWithIntValue

Argumentet til trimRareWords kommer til å være en WordMap, altså en Dictionary<string, int>. Og det kan man også se på som en sekvens med KeyValue<string, int>. Derfor kan jeg bruke Seq.filter til å luke bort ord. I den anonyme funksjonen jeg sender til filter bruker jeg pattern matching til å plukke ut antallet forekomster for et ord.

Skrive ut i Wordle-format

For å produsere filen på det formatet jeg ønsker trenger jeg to funksjoner til. Den første tar et ord med tilhørende antall og lager en tekststreng som Wordle vil forstå:

let wordleLine (KeyValue(word, count)) =
    sprintf "%s:%i" word count

Så trenger jeg også en funksjon som kan ta en sekvens av slike strenger og skrive dem til en fil:

let linesToFile fileName ls =
    IO.File.WriteAllLines(fileName, seq ls)

Main

Da gjenstår det bare å sy det hele sammen. Jeg må ta imot input-filnavnet (argument til programmet) og sette opp en sekvens med funksjoner som kan ta imot dette og produsere Wordle-filen.

For å måle og rapportere hvor lang tid dette tar har jeg brukt en funksjon jeg har kalt benchmark. Denne vil jeg presentere i en blogpost senere, men den tar i alle fall to argumenter: En streng som vil bli brukt som en label ved rapportering, og en parameterløs funksjon (også kalt en thunk). Den vil eksekvere thunken, måle og printe ut hvor lang tid den tok, og returnere resultatet av thunken – som i dette tilfellet er unit (altså ingen verdens ting).

[<EntryPoint>]
let main argv =
    benchmark "Elapsed"
              (fun () -> Seq.head argv
                      |> parseWords
                      |> trimRareWords
                      |> Seq.sortBy (fun (KeyValue(_, v)) -> v)
                      |> Seq.map wordleLine
                      |> linesToFile "out2.txt")
    0 // return an integer exit code

Og da var vi ferdige! Jeg håper du lærte noe. Og hvis du tror du kan lære meg noe, så vil jeg gjerne høre det – forslag til strukturelle forbedringer, eller ting som vil redusere kjøretiden mottas med takk!

Sende SMS med F#

Saturday, February 16th, 2013
Ingen kommentarer

Jeg fortsetter å leke meg med F# – for å trene og lære. I dag vil jeg vise hvor enkelt det er å sende en SMS-melding fra F# ved å bruke PSWinCom’s SMS API.

Alt jeg trenger å gjøre for å bruke API’et er å poste litt XML over http(s). XML’en skal se slik ut:

<?xml version="1.0"?>
<SESSION>
    <CLIENT>gatewaybruker</CLIENT>
    <PW>gatewaypassord</PW>
    <MSGLST>
        <MSG>
            <ID>1</ID>
            <SND>avsender</SND>
            <RCV>4799999999</RCV>
            <TEXT>meldingstekst</TEXT>
        </MSG>
    </MSGLST>
</SESSION>

Hjelpefunksjon for XML

Som sagt skal jeg bygge opp litt XML. Biblotekene i .NET-rammeverket har selvfølgelig klasser for å gjøre dette, men jeg holder det enkelt og lager i stedet en liten hjelpemetode jeg kaller tag:

let tag tag content =
    sprintf "<%s>%s</%s>" tag content tag

tag tar to argumenter (hvor dene ene faktisk også heter tag), og returnerer en XML-streng. Denne funksjonen blir nesten som en liten mini-DSL for å bygge XML-dokumenter.

Formatere SMS XML’en

Jeg splitter opp konstruksjonen av XML-dokumentet i to funksjoner: En som formaterer en enkelt melding, og en som tar en liste med meldinger og formaterer det komplette dokumentet.

Her er den første:

let makeSms id sender receiver message =
    tag "MSG" (
        (tag "ID" id) +
        (tag "SND" sender) +
        (tag "RCV" receiver) +
        (tag "TEXT" message))

Og her følger den andre:

let makeRequest user password messages =
    """<?xml version="1.0"?>""" +
    tag "SESSION" (
        (tag "CLIENT" user) +
        (tag "PW" password) +
        (tag "MSGLST" <| String.concat "" messages))

Hvis jeg nå vil lage et dokument for å se at det ser riktig ut kan jeg for eksempel gjøre følgende:

let test = makeRequest
            "tormar" "secretpassword"
            [makeSms "1" "TMAN" "4799999999"
                     "This is a test from FSharp"]

test inneholder nå XML’en.

Sende XML over HTTP

Å gjøre en HTTP POST fra .NET er også ganske enkelt. Til det bruker jeg en System.Net.WebClient. Da får jeg illustrert et par nyttige ting som hvordan man oppretter og bruker .NET-objekter i F#, og hvordan man sørger for at objekter som krever det blir disposet.

La meg først importere System.Net, og lage en variabel som holder på adressen til SMS gateway’en:

open System.Net

let gatewayUrl = "http://gw2-fro.pswin.com:81/"

Deretter lager jeg funksjonen postXml, som gjør det navnet sier at den gjør:

let postXml url xml =
    using (new WebClient()) ( fun client ->
        client.BaseAddress <- url
        client.Headers.Add("Content-Type", "application/xml")
        client.UploadString("/", xml) )

Legg merke til at using tar en anonym funksjon som siste argument. Denne får inn objektet (client) og gjør selve sendingen. using vil så sørge for at Dispose() blir kalt når den anonyme funksjonen har gjort sitt.

Send SMS’en

Jeg kan nå sende SMS’en og ta vare på XML-responsen ved å gjøre følgende kall:

let result = postXml gatewayUrl test

Og det var det hele! Så enkelt kan det være å sende SMS fra F#-kode.

PSWinCom-skuta fosser avgårde

Sunday, October 28th, 2012
Ingen kommentarer

Ifølge LinkedIn har jeg nå jobbet lengre i PSWinCom enn jeg har gjort noe annet sted tidligere. Det er rart å tenke på at det nå er over 3 år og 3 måneder siden jeg startet å jobbe i Verdens Beste Gjeng – tiden har gått utrolig fort! Det som ikke er rart er at jeg har et stort behov for å skryte av firmaet vårt.., eller “familien” som jeg liker å si.

image

Vi har det ikke akkurat kjedelig om dagen. Jeg vil påstå at det kjer mer i PSWinCom nå enn noen gang før. Vi har f.eks. kjøpt opp to andre selskaper i år: iCalls og SysMan. Begge representerer solide og spennende produkter som komplementerer våre eksisterende løsninger.

Vi har også blitt kåret til Gazelle-bedrift i år, noe som betyr at vi har hatt en solid vekst over tid. Faktisk er det andre gangen PSWinCom blir Gazelle. Det er visst egentlig ikke mulig, men skyldes at vi byttet org.nummer for noen år siden.

I disse dager ser vi også resultatene av det prosjektet jeg har vært mest opptatt av det siste året eller deromkring. Det har vært veldig spennende å jobbe tett på både Google og Telenor, og PSWinCom viser nå for alvor at vi kan mer enn bare SMS. Jeg håper å kunne si noe mer om prosjektet om ikke lenge, men inntil videre kan du jo lese en av omtalene.

Og vi blir stadig flere og flere. PSWinCom har utvidet staben med en rekke ansettelser i år, og fortsatt er det ingen som noen gang har sluttet. Over sommeren økte vi bl.a. utviklingsavdelingen med 50%, og Kjersti og Ruben har allerede bidratt på en solid måte i teamet. For bare noen dager siden fikk vi også vite at vi har gjort to viktige ansettelser på salg i Oslo. Og nå lyser vi jammen meg ut en supportkonsulent-stilling i Bergen også. Oppkjøpet av SysMan har gitt oss 1300 nye kunder, så det er kanskje ikke så rart at vi styrker supporten vår.

Så er du teknisk orientert, interessert i mobil, og i tillegg evner å kommunisere med kunder? Da kan det hende vi har en plass til deg i gjengen vår. Eller kanskje du kjenner noen andre som kunne passe? Gi oss en lyd da vel!

Resten av året og tiden frem til sommeren blir jeg forresten ganske opptatt med et ledertreningsprogram vi er med på på jobben. Jeg sa noe om at jeg hadde “startet på en spennende reise” for noen uker siden på Facebook og Twitter, og da var det dette jeg siktet til. Og jeg ser ikke bort fra at dette også vil generere endel innhold her på bloggen etterhvert. Jeg trodde jo jeg visste hva det ville si å være en smidig teamleder, men jeg innser nå at jeg har hatt noen store hull – hull som jeg nå får hjelp til å fylle, og som vil kunne ta oss til nye høyder.

Jepp, jeg liker jobben min ;)

Jeg foreleser på digitalkonferansen 2012

Monday, June 25th, 2012
Ingen kommentarer

Digitalkonferansen_logo2012Digitalkonferansen arrangeres 19. september 2012 i Kristiansand, og er et sammarbeid mellom IKT-næringsklyngen Digin, Den Norske Dataforeningen Sørlandet, Univeristetet i Agder, og de lokale kompetansemiljøene NNUG, JavaBin og Girl Geek.

Og i år har jeg, som ansatt i en av Sørlandets sentrale IKT-bedrifter, blitt spurt om å bidra til den tekniske delen av programmet. Jeg vil holde et lite foredrag jeg har kalt “Softwareutvikleren anno 2012″:

Dagens utviklere må ta inn over seg en aldri så liten revolusjon: Vi må utvikle løsninger for et utall ulike enheter som smarttelefoner og nettbrett. Vi har tilgang til et hav av tjenester og integrasjonsmuligheter i skyen. Det kreves at løsningene våre fungerer over alt, de må alltid være tilgjengelige, og fungere godt selv på enheter med lite strøm og ustabil internettoppkobling.

 

Hva må utviklere gjøre for å mestre denne situasjonen – i dag og i årene som kommer?

Dette blir en litt annen type foredrag enn hva jeg har holdt tidligere, så jeg er litt spent, men satser på at det blir bra. Holder du til på sørlandet håper jeg du tar turen innom og hører på.

Vil du jobbe med meg?

Friday, February 17th, 2012
Ingen kommentarer

Vi utviklerne i PSWinCom har mye spennende å jobbe med – faktisk så mye at vi nå trenger å utvide avdelingen vår. Er du en drivende dyktig utvikler? Eller har du lyst til å bli det gjennom å jobbe med dedikerte folk og spennende oppgaver? Da har vi i så fall en mulighet for deg i Bergen!

Vi lyser nå ut flere utviklerstillinger: En med fokus på mobilt internett og interaksjonsdesign, en hvor vi søker erfaring med mobile apps (iPhone, Android), og en til to generelle systemutviklere. Selve stillingsannonsen finner du her. I tillegg har vi laget en liten presentasjon ment for mobilen din, hvor du får møte et par av dem du vil komme til å jobbe med (scan QR-tag’en i annonsen!).

JobbHosPSWinCom

Vi jobber som sagt med mye forskjellig, men mobil er fellesnevneren. Vi lager diverse kommunikasjonsløsninger basert på SMS og MMS, med tilhørende webløsninger, og har lang erfaring i telekombransjen. Vi lager event-baserte systemer med høye krav til ytelse, og har mange integrasjoner mot eksterne systemer som vi drifter selv.

Utviklerne i PSWinCom er av den smidige sorten. Vi liker testdrevet utvikling, og parprogrammerer når vi føler for det. Vi lager først og fremst løsninger basert på .NET, C# og Microsoft-stacken, men er ikke redde for å inkludere andre teknologier når det gir en fordel. Som utvikler hos oss vil du komme borti ting som for eksempel MongoDB, CoffeeScript og Ruby, og bare fremtiden kan si hva du vil “måtte” gjøre etter det.

Jeg synes i alle fall det er helt fantastisk å jobbe her, og jeg vil gjerne være med å forsøke å finne ut om det kan være det rette stedet å jobbe for deg også. Så sleng inn en kortfattet søknad med CV til post@pswin.com da vel?!

Søknadsfristen er 6. mars.

KickOff 2012

Monday, January 9th, 2012
Ingen kommentarer

Nå er jeg hyper-motivert og ultra-inspirert etter en fantastisk KickOff med PSWinCom-gjengen. Vi har vært på besøk og bodd i den flotte hytta til Liv Grete og Raphael.

logo-skjelbreid-poiree

Vi har diskutert strategi, og badet i både snø og boblebad. Vi har snakket salg, og skutt på blink med Liv Grete og Rafael. Vi har utfordret oss selv i millitær hinderløype, og sust avgårde på wirebaner høyt opp i lufta. Vi har nytt usedvanlig god mat, og bygget enda tettere bånd gjennom sosialt samvær.

Personlig er jeg veldig stolt over å ha mottatt firmaets hederspris og generelt veldig mye skyt og god-ord fra mine medarbeidere i løpet av dagene i Hålandsdalen. Vi er virkelig en unik gjeng – det er det ingen tvil om – og jeg er sååå glad og stolt for å få være en del av den!

hederspris

Dette blir et legendarisk år, folkens. Tusen takk, alle sammen, for at dere hver og en gjør PSWinCom til et fantastisk sted å være!

Nyttårsforsetter for 2012

Sunday, January 1st, 2012
5 kommentarer

Da har vi feiret nyttår, og på denne tiden tenker jeg alltid mye på hvordan det nye året vil bli og hva jeg ønsker å gjøre anderledes. Jeg er vel ikke alene om det. Her skal jeg forsøke å samle tankene, og skrive ned noen forsetter – forhåpentligvis i form av konkrete mål. Ting som over tid skal gjøre meg til en bedre, sterkere og raskere utvikler. Fellesnevneren for mye av det er fokus.

skann0001

Mindre random, planløs surfing

Alt for ofte flipper jeg opp laptopen uten å vite hva jeg skal. Jeg surfer på måfå, er innom diverse forum, sjekker infoq og andre relevante aggregator-sites, facebook, twitter, og mail – uten egentlig å oppnå så veldig mye. Dette er sløs med tid! Hvis jeg er opplagt bør jeg i stedet programmere, eller lese noe jeg allerede har planlagt å lese. Er jeg på jobb bør jeg jobbe. Er jeg ikke opplagt bør jeg ikke åpne laptopen i det hele tatt.

Jeg skal ikke slutte helt med sosiale medier eller å hjelpe folk på forumene, men jeg bør begrense det kraftig – det har tatt litt overhånd.

For å få til dette bør jeg nok lage meg en plan for hvor ofte og når jeg faktisk får lov til å sjekke disse tingene. Jeg har ikke kommer opp med noe konkret her enda, men det skal jeg!

Høyere fokus på jobb

Jeg lar meg lett distrahere. Oppdager jeg noe nytt og spennende, eller får en tanke om noe som hadde vært greit å teste ut, så er det ofte vanskelig å konsentere seg om det jeg burde gjøre. Møter og email-kommunikasjon er også forstyrrende, og totalt sett gjør dette at jeg i perioder ikke er særlig produktiv.

Jeg må lære meg å administrere min egen tid og mitt fokus bedre. Pomodoro var en teknikk som hjalp noe. Men jeg trenger mer. Jeg ser for meg at jeg må strukturere arbeidsdagen – sette av tidsbokser for epost, forberedelse til møter, oppfølging av teamet og lignende. Jeg må passe på at jeg ikke må context-switche for ofte, for det er krevende for dem som driver med programmering.

Lese

Jeg har alltid vært flink til å lese, men i høst har jeg lest for lite – og som jeg sa i denne blogposten skyldes det blant annet at jeg har sluttet å reise kollektivt. Planen nå er derfor å sette av én time hver kveld til lesing. Det gjør ikke noe om jeg ikke får lest hver eneste dag, men regelen skal være at jeg leser om det ikke er noe annet jeg skal gjøre.

Fysisk trening

Vi har et fantastisk treningstilbud på jobben som jeg ikke har vært flink nok til å benytte meg av. Trening er noe jeg gjør i perioder – ofte holder jeg på i tre, fire måneder, for så å “glemme det” i en minst like lange periode. God fysisk form er viktig for å kunne holde på konsentrasjonen og for å få utslipp for stress. Dette må jeg bli bedre på.

Mestre tastataturet

Jeg har en gjennomført (eller fastgrodd) tastaturteknikk som fungerer greit nok. Jeg skriver nå opp mot 46 WPM når jeg fokuserer maksimalt (målt på typingtest.com). Men jeg skriver med få fingre, og ser mye på tastaturet.

Skrivehastighet og teknikk er viktig for å komme i god flow. Jeg ønsker derfor å lære meg og øve inn touch. Hvis jeg fokuserer på dette en halvtime hver dag i noen uker bør jeg kunne komme langt. Dette vil kunne hjelpe meg å holde bedre fokus og la tankene flyte bedre mens jeg programmerer (eller mens jeg blogger for den saks skyld).

Øve, øve, øve

Jeg er ganske flink til å trene på mine programmeringsferdigheter, og det må jeg selvsagt fortsette med. I år vil jeg forsøke å fokusere litt mer på metaprogrammering, gjerne i Lisp.

Jeg vil også forsøke å øke størrelsen litt på oppgavene jeg gir meg selv, sånn at jeg får økt sjanse til å eksperimentere med ulike design-teknikker. Jeg implementerer mye algoritmer, ting som løses på 20 til 60 linjer kode, men trenger mer trening på større ting – kanskje spesielt innenfor funksjonell programmering.

En siste ting jeg gjerne vil eksperimentere mer med er arkitekturer for å gjøre systemer “scriptbare”. Embedding av Ruby, JavaScript eller lignende runtime i applikasjoner eller tjenester. Jeg har gjort litt av dette, men vil at det skal bli en helt naturlig del av verktøybeltet mitt, slik at jeg bare kan smyge det inn når behovet dukker opp.

Et større hobby-prosjekt?

Et par ganger i året bruker jeg å starte på et eller annet større prosjekt som jeg håper kan bli noe fornuftig, men som jeg likevel vet er en stør sjanse for at ikke blir noe av. Programmeringsspråket MIST er et bra eksempel fra 2011 – det var et par interessante måneder mens jeg holdt på, men jeg ser ikke for meg at jeg kommer til å fullføre planene mine nå.

Det skremmer meg likevel ikke fra å prøve igjen. Jeg har en idé til et større prosjekt nå også, noe som kan bli ganske så gøy for mange om jeg får det til. Jeg sier ikke mer enda.., vil holde kortene litt tett til brystet en stund til. Kanskje trenger jeg noen av dere som beta-testere utpå våren eller sommeren engang. Vi får se!

Konklusjon

Som vanlig har jeg mange planer og ideer om hvordan året skal bli. Jeg har noen konkrete ting jeg skal jobbe med, og spesielt skal jeg bli flinkere til å holde fokus.

Når det kommer til bloggingen så tenker jeg bare å fortsette som før – blogge når det dukker opp noe som jeg får lyst til å dele. Jeg vil gjerne lage flere videoer, for det har vært gøy. Men det er også tidskrevende, og jeg vil ikke prioritere det fremfor det andre tingene.

Nå gjelder det bare å huske på dette her. Da er det bra jeg har denne bloggposten å komme tilbake til :)

Godt Nytt År alle sammen!!!

Siste kommentarer

Torbjørn
PS: Takk til Børge Hansen, som delte SCARF-modellen med meg!...
Børge Hansen
Denne likte jeg veldig godt. Du skriver godt og har gode betraktninger  Keep it up – flere trenger å tørre å lære mer om ledelse – du l...
Tormod
Er egentlig ikke overrasket. F# sin fortè er programmererens produktivitet/kvalitet og anledning til parallell kjøring. Men kjøremotoren har ...
Stian
Ville også prøvd med et større problem (x100 eller x1000 f.eks). Når man snakker så små brøkdeler av et sekund som her så kan tiden for en ell...
Torbjørn
Har ikke sjekket - tar en titt i morgen hvis tid :)...
Einar W. Høst
Mhp tco: hva sier ILSpy?...
Torbjørn
Har ikke sett noe på PSeq før, men kjenner til den typen funksjoner fra blant annet Clojure. Og problemet med slike funksjoner i sammenhenger som de...
Håvard
Veldig bra sammenligning! Har du sett på ytelsen av PSeq.* fra powerpakken? Tipper den vil gi performancehit på små mengder, men kan kanskje resul...
Torbjørn
Jeg kom på en demonstrasjon-variant til jeg burde inkludere, nemlig bruk av list comprehension (en type computation expression (også kalt monads)). ...
Einar W. Høst
Interessant, det blir en trade-off mellom eleganse og fart på en måte. Den funksjonelle løsningen med vanlig filter er ren og pen, mens den imperat...
Creative Commons-lisens
Innholdet på denne bloggen er tilgjengelig under Creative Commons Navngivelse-Ikkekommersiell-DelPåSammeVilkår 3.0 Norge lisens.

Programmeringsbloggen
Kjempekjekt.com

© 2006-2013 Torbjørn Marø

Jeg har vært en profesjonell programmerer siden 1999, og dette er min blogg. Målet med bloggen er å stimulere meg selv og alle andre til kontinuerlig eksperimentering og læring.

Jeg forsøker å være allsidig, og programmerer blant annet i C#, Ruby, Erlang og Clojure.

Jeg praktiserer TDD og andre smidige utviklingspraksiser. Jeg er opptatt av kvalitet og ren kode.

Dette og ganske mye mer kan du lese om på denne bloggen!