Sedan ett halvår eller så tillbaka i tiden har jag följt Brad Abrams blogg, inte minst genom hans inblandning i Microsofts Atlas-projekt (faktum är att jag växlade några ord med honom om detta på Mix06 i våras). Brad Abrams är Lead Program Manager för Microsofts .NET Framework Team, en position han tidigare haft också i Common Language Runtime Team. Han har designat olika delar av .NET Framework sedan 1998, var Lead Editor för Common Language Specification (CLS) och ECMA/ISO CLI Standard. Med denna bakgrund är det inte konstigt att hans bok Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (en bok i Microsofts .NET Development Series) är så full av goda råd. Att hans medförfattare heter Krzysztof Cwalina och är Program Manager för Common Language Runtime Team med ansvar för namespaces som System.Collections, System.Diagnostics m.m., gör förstås också sitt till.
Under de år .NET Framework har funnits har Microsoft förstås fått enormt mycket återkoppling från mjukvaruindustrin och utvecklarcommunityn kring ramverket. Man har dessutom själva bedrivit omfattande användbarhetstester och ägnat mycket tid åt att internt utveckla designriktlinjer för såväl .NET Framework som andra produkter. Det är erfarenheterna från denna tid som författarna vill dela med sig av i Framework Design Guidelines.
Boken täcker allt från den grundläggande filosofin bakom ramverksdesign till designriktlinjer som när du bör välja en struct framför en class till specifika detaljer för hur du bör namnge dina parametrar ("endpoint" ska till exempel skrivas just så och inte "endPoint"). Det går alldeles utmärkt att läsa de ca 350 sidorna från pärm till pärm, men man kan också nöja sig med de första 30 sidorna om "Framework Design Fundamentals", skumma igenom intressanta riktlinjer och i övrigt använda boken som referens. Riktlinjerna är indelade efter ämnen som "Naming Guidelines", "Type Design Guidelines", "Usage Guidelines" och "Common Design Patterns", och finns av fyra olika slag: "Do", "Don't", "Consider" och "Avoid". Naturligtvis åtföljs riktlinjerna av resonemang och exempel. Dessutom, och det här är verkligen en av bokens stora behållningar, har man överallt sprängt in typografiskt distinkta kommentarer/anekdoter från ett 20-tal microsoftare och Microsoft-nära industriexperter som t.ex. Jeffrey Richter ("Applied Microsoft .NET Framework Programming") och Anders Hejlsberg (skaparen av C#). I kommentarerna kan man läsa många intressanta resonemang och motiveringar till varför .NET Framework ser ut som det gör och man kan även skönja en del av de trätoämnen som omgärdat utvecklingen av ramverket (prestanda- och C++-gänget mot lättanvänt- och VB-gänget, förenklat uttryckt).
Riktlinjerna i Framework Design Guidelines är i första hand utformade för att passa just ramverk och publika API:er, särskilt sådana som bokens författare kallar "progressive frameworks" och definierar sålunda:
"Framework that is easy to use in basic scenarios yet powerful enough to be used in advanced scenarios."
Och man kan lugnt säga att "easy to use" är den princip som väger tyngst i riktlinjerna; ofta får lösningar som kanske är mer finurliga eller skulle ge bättre prestanda vika på foten för de som är mer lättanvända, och av utvecklarna förväntade, enligt Microsofts erfarenheter och användbarhetstester. Det gör att alla råd kanske inte passar lika bra för just ditt ramverk, men enligt min mening är majoriteten av riktlinjerna tillämpliga även vid applikationsutveckling. Dessutom är det ju så som en av kommentatorerna skriver: "Performance gets better over time, ease of use doesn't."
Framework Design Guidelines är en mycket bra bok som egentligen alla .NET-utvecklare borde läsa, i synnerhet de med intresse/ansvar för design- och arkitekturfrågor.

