Gamla hundar och ett nytt C++
Jag har det lite svårt med C++ just nu.
Mycket av det pågående arbetet på språkets library-scen (främst Boost, då) är baserat på vad man kallar template meta-programming. Jag har kämpat lite med att förstå det, eftersom många betraktar det som den starkast lysande stjärnan på framtidens himmel av C++-tekniker.
Jag har meckat med Boost, läst Josuttis/Vandevoordes C++ Templates, Alexandrescus Modern C++ Design och en hel del annat. Mycket av det är otroligt imponerande, åtminstone för mig som har en brokig bakgrund i relativt naiv traditionell objektorientering med arv och virtual dispatch.
Det som tilltalar mig med mer traditionell OO-design är att den fostrar någon sorts människotillvändhet i koden. Riktigt väldesignad kod kan nästan läsas av en lekman som känner till systemets terminologi.
Moderna C++-tekniker, i jämförelse, kan närmast beskrivas som omänskliga.
De tekniker som används för att uttrycka likheter och variationer tar inte stöd bara mot befintliga features i språket, utan uppfinner egna konstruktioner på nyskapande sätt. Detta ger naturligtvis en rad fördelar rent tekniskt: komplexa uttryck kan utvärderas compile-time och man får stenhård typsäkerhet och ofta oöverträffad runtime-prestanda.
Men för läsaren lämnas i mitt tycke en del övrigt att önska.
Jag väljer att tillskriva detta min egen okunskap, åtminstone ett tag till, så jag ska försöka se om jag kan hitta en genomgående taxonomi över likhets- och variations-tekniker med modern C++.
Det vill säga, om jag till exempel intuitivt skulle vilja använda arv för att modellera ett basfall och ett antal variationer, hur gör jag då detta med moderna tekniker? Template-specialisering? Tag dispatching?
Man hisnar vid tanken.
Velocity är inget produktivitetsmått
Extreme Programming och dess lättrörliga syskon uppmanar oss att titta på vad vi åstadkom föregående iteration för att kunna förutsäga vad vi kommer att klara i nästa.
Detta kallas för Yesterday’s Weather eller Velocity.
Man summerar kort sagt estimaten för vad som faktiskt hanns med, och planerar in arbete som är estimerat till samma insats.
Det här är kraftfullt, för det är väldigt enkelt.
Men velocity är inget produktivitetsmått. Snarare är det ett planeringsverktyg som teamet ska använda för att kunna styra sin framfart.
Om man uppmuntrar hög eller växande velocity, stimuleras en rad beteenden:
- Estimaten kan drabbas av inflation
- Man kan sänka ambitionsnivån för när något är färdigt
- Man kan förbättra sitt arbetssätt för att få mer gjort på kortare tid
- Teamet kan minska väntetider på externa parter, byggprocesser, etc.
Trean och fyran verkar godartade.
Alternativ 1 är uppenbart problematiskt, eftersom något som estimerades till 1 igår betraktas som 2 idag, utan någon annan förändring i situationen. Det ser alltså ut som att man får dubbelt så mycket gjort, men man har bara justerat sin skala. Mossigt.
Alternativ 2 gör att man levererar mer, men med lägre kvalitet. Initialt går det snabbare, men på sikt tar det längre tid att göra enskilda förändringar, eftersom man tampas med teknisk skuld från tidigare kompromisser.
Ett team som ser velocity som ett planeringsstöd snarare än en måttstock borde inse att det inte lönar sig att ensidigt höja velocity — det måste underbyggas av en faktisk förbättring för att ge något bestående värde.
Inspiration: Tom Poppendieck på XP-listan
Inspiration: Jason Yip säger det mer kärnfullt
TDD is about learning
”For me TDD is about learning from each step, while making the steps as small and quick as possible, so that the understanding gained from each step may be applied as soon as possible.”
Why it’s called development
Well, I for one am shocked, shocked to hear that someone didn’t get exactly
what they wanted the first time they tried something.Why do we call this work development? It isn’t just about writing programs;
it’s about developing projects, and developing people, and developing
skills, and developing models, and developing understanding. Development of
anything is rarely linear and often unpredictable. When you learn
something, you greatly increase the value of any failure that you might
encounter.
Some people even confuse development with typing, and I think that’s mostly why it’s so difficult to gain mutual respect between the business and development camps.
Maybe exchange programs would be interesting; I walk a mile in your shoes, you walk a mile in mine. We could call it development.
The old new thing
I’ve now copied my old content over (manually) from the blog formerly known as Sugar Rush. I used a pretty nice blog engine called Thingamablog, that saved posts in an offline database, and could generate a full static HTML web-site on demand.
I loved that concept from the get-go, because my web-site is Linux-hosted, and only serves static content. Plus, I used to think that offline editing was far superior to the online writing experience.
After we moved, I haven’t had access to my main machine much; it’s not connected to the Internet, so I’ve been unable to publish any content. That hasn’t exactly inspired me to write any content.
I took a step back, realized that GMail gives me a great online editing experience, and started to look at the various hosted blog engines. WordPress turned out to be the most forthcoming in its abilities to export my content should I ever want to, so that’s what I chose.
Welcome back!
Etymologi: Pjäs
[Swedish content ahead]
Julhelgen börjar närma sig sitt slut och jag är äten, uppvaktad och utvilad. Någonstans under den långa helgen drabbades vi av Sagan om konungens återkomst på TV.
Gandalf har en replik någonstans i mitten:
The board is set, the pieces are moving.
Då slog det mig plötsligt — piece och pjäs torde ha samma stam.
Jag har som vanligt inget att underbygga detta med, och nästa gång hoppas jag att det är något annat än en film som triggar etymologi-hjärnan.
OpenTarget 1.2
A couple of years ago, I built a shell extension to add an Open Target Folder menu item to shortcuts.
I haven’t looked at the code for ages, but my interest was sparked again by a feature request from Giorgio Beggiora where he wanted OpenTarget to select the target of the shortcut after having opened its containing folder.
After some battles with moving the code into Subversion and upgrading it to Visual Studio 2003 (mental note: install VS2005), I finally managed to add the behavior. OpenTarget 1.2 is available here.
On swamps and alligators
Kelly Anderson nails it again. Finally, a metaphor that doesn’t involve putting out fires.
Fighting stage fright
On Thursday, me and Jonas gave a presentation on Practical Continuous Integration at the local Øredev conference.
We went through hell rehearsing together, so we missed out on pretty much the rest of the conference. In retrospect, I think it was the right decision. We’re not experienced presenters, so we needed to massage our material and presentation techniques a lot before going on stage.
All in all, I think it went pretty well. I’m not sure I would have wanted to sit in for 53 minutes listening to it myself, but we had some positive response and good questions afterwards, so I guess we weren’t entirely unintelligible.
We presented some stuff I haven’t seen covered in detail before, most notably how to store your entire CruiseControl.NET configuration in source control, and maintaining it from there. You may want to check out the material and demos, showing this in practice.
Etymologi: Babbel
[Swedish content ahead]
Igår gick vi och såg Babel, som visade sig vara en utmärkt film. Den hade vissa drag av Short Cuts, en av mina favoriter.
Dagens hobby-etymologi är alltså babbel, som ju måste komma av Babel, språkförbistringens torn.