Tuesday, February 12, 2008

Code Review Part Two

Kodgranskning är en vacker tanke och utförd regelbundet och med relativt korta mellanrum så blir det säkert en produktiv övning.

Alla kodgranskningar jag nånsin gjort eller varit utsatt för har varit one-offs, när nån chef får för sig att bedriva kvalitets-arbete.

Det är ju sällan så att nån ensam sitter och kodar årsvis och inte visar sin kod för nån - det är ju i princip alltid shared code ownership, så de andra i projektet är inne och pillar och fixar och det pågår såklart en ständig diskussion när man ser nåt tokigt nån gjort (för själv gör jag ju aldrig nåt tokigt ;-).

Tricket med kodgranskning är ju dock ofta att det kommer nån extern (=utanför projektet) och kikar på koden. Problemet som uppstår då är att det inte är rimligt att vederbörande läser all kod. Alternativen är stickprov, be utvecklarna plocka ut exempelkod, eller ta hjälp av nåt kodanalysverktyg som hittar skumheter i koden.

Det finns såklart svagheter med alla dessa approacher.

Alla system har sina ugly spots. Nästa kandidater för refactoring. De funkar, men koden ser för jävlig ut. Man kanske, för att spara fyra dagars utvecklingstid nån gång inför en release förra våren, la business-logik i en jsp-sida eller nåt. Man vet om det, man ska fixa det nån gång när man får tid.

Om stickprovaren hittar den koden så har man en del explaining to do. Om man själv får välja koden som skall reviewas så lär inte ful-bitarna komma med - alltså inte heller en representativ bild av systemet. Analysverktyg är bra och hittar död kod, tomma catchar och ostängda streams osv.

Problemet är att det kan bli väldigt mycket brus i rapporteringen från såna verktyg. Varningar ges ofta för saker som kan ses som kodstil snarare än suspekt kod (exempel är t ex huruvida man returnerar immutable collections, nåt som definitivt oftast är overkill utom i fallet då man bygger komponenter som skall användas av tredje part).

Ett annat problem är att man kan luras att lita på verktyget för mycket - en clean slate från analysverktyget ger en illusion av att allt är hunky-dory. Men den kan mycket väl släppa igenom en dylik kodsnutt skriven av nån projektmedlem (som borde skjutas):


public void criticalBusinessFunction() {
try {
// do a lot of stuff that definitely
// needs to be exception handled with care
} catch(Throwable t) {
t.printStackTrace();
}
}


Det bästa är nog att göra kodgranskning till en del av ett projekt från första början - granska de tio första klasserna i projektet. Återkom sedan periodiskt för att sedan släppa projektet fritt när alla är överens om hur koden skall skrivas.

Ful-bitar i projekt finns alltid och är därför ok. Bör dock märkas upp med kommentarer som förklarar varför fulfixen finns och TODO:-markeras så att de snappas upp av din favorit-IDE.

Kodanalysverktyg skall användas från början och gärna köras som en del i continous builds (varför inte publicera resultatet på intranätet).

Friday, February 8, 2008

Kaos är kanske din granne?

Yrkesmässigt så har jag bara funnits till i data-branschen. Från början till slut (inte slut, men nu) i ett ständigt tillstånd av kaos.

Ibland mindre kaos, ibland mer kaos än du skulle önska din KTH-polare-som-snodde-din-flickvän-på-tenta-puben.

Man undrar ju om livet i andra ingenjörs-vetenskaper är likadant. Är det kaos när man ska bygga en ny bro över Svartån i Örebro? Eller är det bara att använda vedertagna standarder, räkna lite på det och sen producera en ritning som den lokala byggaren omsätter i en stilig och hållfast bro?

Skillnaden i ett systemutvecklingsprojekt, om man fortsätter på bro-liknelsen, skulle kunna vara att man tre veckor innan leverans får veta att det måste gå att taxa trafikplan från den lokala flygplatsen över bron (= scope creep). Eller att skyltarna på bron måste visas i 15 språk beroende på var bilen som kör över den är registrerad.

Jag föreställer mig att bron över Svartån är mer lättspecad. Tyngden av bron plus max antal samtidiga fordon gånger pi eller nåt for safety. Rota upp nån gammal ritning över en liknande bro i Arboga, fippla lite i ett schysst CAD-verktyg och sen är man hemma.

Är det så? Har jag fel? Är det bara vi som bor i kaos? Jag uppmanar alla som jobbar med att designa broar att berätta hur det funkar i deras värld.

Code Review Part One

En strip som träffar ganska rätt vad gäller kod-review: http://www.osnews.com/images/comics/wtfm.jpg

Tuesday, January 29, 2008

Société Degénérale

Min första rubrik på franska! (och jo, "Degénérale" är menat som en ordvits...).

Har följt rapporteringen (http://www.svd.se/nyheter/utrikes/artikel_815041.svd) om mannen som sumpat 46 miljarder för den franska banken. Fyrtiosex tusen miljoner. I runda slängar en Ferrari 430 Scuderia om dagen i 63 år.

Alla hackar på den stackarn, men rimligen är det nåt ruttet i staten Danmark vad gäller övervakningen av dessa unga män i 30 000-kronors-kostymer som mäter sin manlighet i mätenheterna Rolex, Porsche och storleken på aktieaffärerna.

I en artikel (http://www.svd.se/nyheter/utrikes/artikel_807159.svd) står det att han "lyckades ta sig förbi de säkerhetssystem som banken satt upp". Hmm. Det måste ju ändå vara så att transaktionerna går att härleda till en viss person.

Man kan ju tro att det gått till så att vår käre vän Jerome Kerviel blivit fartblind; han har nog successivt ökat sin omsättning utan att nån slagit larm. Efter en tid känns säkert inte affärer i storleksordningen en miljard Euro som en big deal.

Man hade ju hoppats att följande konversation vid något tillfälle ägt rum på veckans personalmöte på Société Degénérale:

- Eh, bien. Låt se, denna vecka har vi en omsättning på Pierre på 650 000 Euro, Louise har omsatt 760 000 Euro. Olivier har tyvärr bara kommit upp i 270 000 Euro, skärpning Olivier.

- Oui, Monsieur Directeure.

- Bon. Sen har vi Jerome. Han har denna vecka omsatt 1800 000 000 Euro. Merde!

Inget sånt har uppenbarligen förekommit. Förmodligen en simpel rapport från trading-systemet som ingen brytt sig om att beställa.

Det går inte att förstå att de inte sett till att ha ordentlig övervakning av sina anställdas aktiviteter - speciellt i en bonusdriven ersättningsmiljö.

I alla fall är ansvaret delat mellan vår vän Jerome och de som ansvarar för säkerhet och övervakning på banken ifråga.

I värsta fall, och det är nog inte helt otroligt, kände ledningen till det och lät honom hållas så länge det gick bra. När kraschen kommer, så låter man Jerome smaka giljotin...

Friday, January 25, 2008

Ta steget?

Satt idag och kodade ramverk för XML-ifiering av objekt som en del i ett projekt för en plattform vi ska använda inom organisationen.

Kul? Javars.
Gjort det förut? You bet. Inget nytt under solen. Visst finns det utmaningar, men det mesta har man sett förut och undviker därför tidigare pitfalls man trillat i (det är väl det som erfarenhet ger).

Blev jag gladare? Hmm. Det börjar snart bli dags att fundera på om jag ska fortsätta på utvecklarbanan och bli ett skägg eller ta steget till att bli nånslags chef (fast det känns inte riktigt rätt heller).

Talande är kanske att jag tycker det är roligare att rita streck och pilar och berätta för andra (=kodapor) hur saker och ting borde implementeras istället för att koda själv.

Kodar-mässigt är jag bättre än fler jag är sämre än - fast absolut ingen superkodare. Jag kommer inte att kläcka ur mig nästa 3D-motor för first-person-shooters eller nästa trådnings-stöd i Linux-kärnan. Det jag är vass på är att bygga på befintliga grejer och se helheten. Och det räcker för att tjäna ihop till blodpuddingen.

Det tråkiga med hela chefs-biten är att det finns ju få chefsjobb som inte innefattar personalansvar. Det brukar ju annars vara den karriärväg som erbjuds - från senior utvecklare till mellanchef med utvecklingssamtal, löneförhandlingar och snack med Nisse som har alkoholproblem.

Konstigt, det där. Ta en snubbe med vässad kompetens inom ett område och ge honom ett annat jobb (=mellanchef) för vilket han har nada utbildning, noll erfarenhet och tveksam entusiasm.

Det borde finnas fler jobb där man dompterar kodaporna (=ritar pilar och streck) men slipper MS Project, Gant-scheman, budgetar, personalplanering och utvecklingssamtal med folk man knappt känner.

Har du ett jobb som passar, så hör av dig...

Sunday, January 20, 2008

Could have told you so

Läste SvD om projektet GVD - Gemensam VårdDatabas (http://www.svd.se/opinion/brannpunkt/artikel_787511.svd)

En halv miljard bränd. 500 miljoner. 500 000 tusenlappar. Jag har sett det i ett liknande projekt jag själv var med i även om pengarna som brändes där kanske var en tiondel så mycket (fast 50 000 tusenlappar är ju också en slant).

Utan att veta ett skit om GVD förutom det jag läst i artikeln, så tror jag att jag har en bra idé om vad som gått snett:

Upphandling. Upphandling innebär såklart att den billigaste leverantören som uppfyller kriterierna skall göra jobbet. Det ställer dock enorma krav på de inblandade aktörerna. Att en leverantör kommer med en låg prislapp är knappast en garanti för att projektet skall lyckas (snarare tvärtom skulle jag vilja påstå).

Specning. Specningen måste vara immaculate för att det skall fungera. Upphandling innebär ju implicit en fastpris-approach och redan där har man byggt in en konflikt. I projektet jag var med i fanns det en diger spec. Diger i form av tjockleken på pärmen, kanske inte lika fyllig vad gäller innehållet. T ex specades rapportdelen sisåhär, och nu citerar jag: "Relevanta rapporter skall kunna genereras från systemet". Försök leverera till den specen i en fastpris-deal där beställaren försöker suga ut det yttersta och du som leverantör sätter klackarna i backen.

Integration. Från artikeln: "25 journalsystem av olika ålder och kvalitet". Hmm. Vi snackar säkert en härlig cocktail av system alltifrån nyutvecklat och stordatorsystem via OS/2 till Windows 3.1 med neandertal-version av Access. Helt säkert lösningar som evolverat patch-för-patch med features som styrs av semikolon-separerad data i fritextfält i databasen. En gränslös källa till problem.

Struts-mentalitet. Uppenbarligen har ledningen (som talande nog har slutat allihop enl artikeln) högaktningsfullt skitit i alla varningssignaler och istället snackat om hur bra det blir när visionen blir verklighet. As if.

Inkompetens. Jag tvivlar på att landets skarpaste hjärnor varit på plats när projektet planerades. Det finns såklart lagkrav (t ex att upphandling skall ske) som i viss mån bakbinder de inblandades möjligheter att styra projektets gång, men det är troligt att ingen från beställarsidan insåg att projektet, som det las fram, var i princip omöjligt att genomföra. Det är svårt att lägga skuld på leverantören i detta fall - det är ju inte deras sak att såga ett projekt för att det inte är genomförbart. Det enda resultatet är ju att det går till en annan leverantör.

Greed. Nu motsäger jag punkten ovan lite. Det finns självklart ett visst ansvar hos leverantören att backa ur om projektet inte är genomförbart. Här ser det ut som om de säkert insett att det här aldrig går att ro iland, men bedömt att de i alla fall kommer att få betalt för arbetet (=sno våra skattepengar). Så shame-on-you Oracle och WM-data.

Det som borde gjorts (och jag har såklart ingen aning om ifall det gjordes), är en förstudie som bedömde riskerna med projektet. Hade en bra sådan analys gjorts hade kanske vi kunde lagt 500 000 tusenlappar av våra skattepengar på äldrevård eller nåt annat nyttigt...

Saturday, January 19, 2008

Personalities del 2

Mera persönlichkeiten kommer här (läs den spännande första delen här: http://hellrefaraherde.blogspot.com/2008/01/personalities.html):

The Floater. En kille med teknisk kompetens, men inte tillräckligt för att kunna bidra effektivt till projektet. Börjar ofta som utvecklare, men får glida över till mer administrativa sysslor eftersom det han producerar i kodväg inte håller måttet. Plötsligt sitter The Floater som projektledare. Sen går det via mellanchef raka vägen upp i företagsledningen. Om fem år har han optioner, bonusprogram och tjänar dubbelt så mycket som du. Det är ju f-n att man är kompetent. Notera dock att det inte är en variant på 'skit flyter uppåt'-klyschan. Det är inget större fel på karln. Bara det att The Floater inte är tillräckligt vass för att faktiskt producera nåt produktionsmässigt.

The Bit Brain. Kan ibland överlappa med The Fresh Guy. Programmeringens motsvarighet till att ha gröna fingrar. Han gillar datorer och datorer gillar honom. The Bit Brain producerar reg expar lika fort som du skriver mail. Ovärderlig tillgång i projekt - det är alltid kvalitetskod producerad i rasande fart. The Bit Brain har sällan ambitioner att ta ledande roller och bestämma saker. Du måste mata honom med en spec.

Shit-for-brains. Ej att förväxla med The Slow Poke, som faktiskt ofta är kompetent. Shit-for-brains har helt enkelt inte begåvats tillräckligt förståndsmässigt för att kunna koda. Drar ner projektets produktivitet genom att ständigt behöva långrandiga förklaringar. De uppgifter som han får, efter ingående förklaringar komplett med pseudo-kod, blir alltmer triviala alltefter att han misslyckas med att leverera. Att få Shit-for-brains tilldelad till sitt projekt innebär dessutom att de som planerar resurser tycker att de har gett dig en ny resurs, vilket gör att du hamnar längst ner i prioritetslistan nästa gång resurser skall fördelas. Jag gillar svenska arbetsrättslagar, men det vore gött om man kunde få be security följa Shit-for-brains ut ur lokalerna bärandes på en papplåda med en krukväxt och fyra pärmar och personligen elda upp hans passerkort.

The Ego. Killen som har lite för hög uppfattning om sig själv och sina förmågor. Ofta kompetent, men inte i paritet med vad han låter påskina. En udda fågel i vårt svenska jante-landskap - lite typiskt amerikansk i sin framtoning. The Ego får en att gnissla tänder i tysthet när man hör honom gå på om hur saker och ting skall göras, gärna i möten med ledningen, när man själv läst hans mediokra kod och genomskådar the bullshit. The Ego har också ofta inga problem med att ta credit för andras idéer - något som får dig att vilja karva ut hans lever med en sked (ifall det är din idé han snor). The Ego går det såklart alltid bra för. De som bestämmer saker vet såklart inte att han är medioker utan sväljer hela grejen. De hör aldrig dina tänder som gnisslar...

Nu börjar jag få slut på karaktärer. Kanske återkommer i ämnet när jag funderat lite till på folk jag haft förmånen att jobba med.