Nyligen använde jag för första gången den programeringstesttjänst som Codility erbjuder vid en rekrytering. Som jag skrev för ett drygt år sedan såg jag en del fördelar med att använda denna möjlighet vid rekrytering av programmerare och nu fick jag möjlighet att använda den i praktiken. Min slutsats var då, efter att själv ha gjort testet, att man kunde använda det som någon form av gallring. Klarar man inte testet så är risken stor att man inte heller klarar av att programmera stora system.
Jag valde att välja ut tre olika tester med de tre olika svårighetsgraderna som Codility erbjuder. Hur svåra dessa är var svårt att i förväg avgöra och jag hade inte tid att förbereda mig genom att själv köra testerna eller läsa på i någon större utsträckning på Codilities hemsidan. Valet blev då att välja från de olika svårighetsgraderna som verkade vara ett för mina behov bra val, framtiden får utvisa detta. Nu är personerna rekryterade och vi väntar med spänning på hur de skall klara sig.
För att få en referens valde jag att låta några på företaget också göra testerna parallellt med de som kom på intervju. Alla hann inte med jag fick i alla fall en referens att använda. Här visade det sig att valet av de tre nivåerna var relativt bra. Den lättast uppgift var lätt, kanske för lätt, den näst svåraste som var en uppgift där ett fel i koden skulle hittas var däremot ganska precis vad en erfaren programmerare hinner på den begränsade tiden de hade till förfogande. Om ni hittar någon som klarar den svåraste uppgiften till 100% så får man nog vara lite observant eftersom det känns lite omänskligt att klara den men det återkommer jag till.
Några saker värda att notera när ni planerar testerna är att den tid som testerna tillsammans får lov att ta disponerar utvecklaren själv. Om ni vill att varje test skall ha sin specifika tid och att utvecklaren skall ta en uppgift i tagen så skall ni definiera tre olika tester och låta dem köra dem ett och ett. Jag ser dock fördelar med att köra alla på en gång. Dels måste personen köra dem i ett sträck eftersom man inte kan ta paus och dels så ser man hur utvecklaren disponerar sin tid mellan de olika uppgifterna.
Vidare så har testaren inte tillgång till alla de tester som sedan körs för att verifiera resultatet vilket gör det synnerligen svårt att hitta vissa fel i koden.
Till samtliga som skulle göra testet var jag tydlig med att de skulle göra ett annat ”provtest” som Codility erbjuder innan de började för att de skulle förstå upplägget och jag sa också att de skulle förbereda sig genom att ha material framme som hjälp för att få rätt på syntaxen eftersom det inte fanns någon bra editor på plats. Alla hjälpmedel, utom parprogrammering, var tillåtna och testerna gjordes på egen hand hemma.
En sak som jag inte uppfattade när jag själv gjorde testet för ett år sedan var att alla aktiviteter som utvecklaren gör under testet spelas in och kan sedan spelas upp i efterhand. I början använde vi inte den möjligheten i någon större omfattning utan vi tittade framförallt på resultatet. Det som sedan intresserade oss alltmer när vi analyserade de olika lösningarna var hur de hade gått tillväga och hur de tänkt i olika situationer. Här fick vi stor nytta av att följa i vilken ordning saker gjordes. Som exempel kan nämnas att vi noterade hur de planerade arbetet. Vissa tog en sak i sänder, vissa hoppade desperat mellan de olika uppgifterna och andra skaffade sig först en överblick över alla uppgifterna och satte sedan igång arbetet.
Vi noterade också att några kom på i slutet att det kanske var bäst att skriva kommentarer och de olika utvecklarna arbetade olika avseende hur strukturerade de var i att ta fram koden. Vissa provade sig fram, eller kanske gissade(?), och andra visste vad de ville och skrev tester för att successivt ta små steg framåt under kontrollerade former.
Alla de som erbjöds att göra testet var personer vi trodde på. Testerna användes för att välja ut de bästa av dessa men det visade sig vara viktigare än så. Maxpoängen var 300 och vi fick resultat mellan 0 och ca 250 poäng. Det som fällde avgörande var två saker, dels sållningen som jag nämnde som en hypotes i förr blogginlägget om programmeringstester då en person inte lyckades ens med att få rätt på syntaxen även om kompilatorn pekade ut exakt var felet var och dels hur strukturerat man jobbade och förmågan att leverera. Det sistnämnda är väl så viktigt att man kan avsluta när något fungerar och inte har en massa halvfärdiga saker på gång.
Eftersom det svåra testet av de tre visade sig vara för svårt för alla som gjorde det och även efteråt var man inte ense om hur det skulle lösas så undersökte jag vilken information det fanns om testet hos Codility. Det visade sig att mindre än 3 % av de dryga 5000 som gjort det testet hade fått rätt. Jag misstänker dessutom att det i flertalet av de som fått rätt på testet inte gjorde det för första gången. Flera av de som gjorde testet för mig var intresserade av att prova om de kommit på lösningen efter att ha funderat på det några dagar.
Så tittat gärna på denna statistiken innan ni väljer testfallen. För mig kändes det dock som relevant eftersom det gick att se hur personerna tagit sig an problemet och hur långt de hann i sina funderingar.