2007-03-06

Jimmy Nilsson hos Avega (eller Svenska som allestädes närvarande språk)

Härom veckan gästades Avega av Jimmy Nilsson som talade lite om Test-Driven Development (TDD), Domain-Driven Design (DDD) och O/R-mappers. Det var en ganska lättillgänglig introduktion, inte minst om man läst hans senaste bok, men frågor och diskussioner var (som alltid på Avega) riktigt intressanta. Eftersom många aveganer i publiken var Java-människor fanns det ganska mycket kunskap om DDD och O/R-mappers i rummet. En intressant fråga som dryftades och som jag själv funderat mycket på var om man i regel bör använda svenska för ett projekts "ubiquitous language".

En förklaring av "ubiquitous language" kanske kan vara på sin plats för den som inte är bekant med DDD. Ett "allestädes närvarande språk", för att prata svenska, är en central ingrediens i DDD. Eric Evans understryker i sin bok "Domain-Driven Desgin: Tackling Complexity in the Heart of Software" vikten av en för domänexperterna och utvecklingsteamet gemensam modell och ett gemensamt språk:

"A project faces serious problems when its language is fractured. Domain experts use their jargon while technical team members have their own language tuned for discussing the domain in terms of design. [...] Translation blunts communication and makes knowledge crunching anemic."

Lösningen är att tillsammans arbeta fram ett "ubiquitous language" som är mer fylligt och robust än den minsta gemensamma nämnaren för de olika språken och att verkligen konsekvent använda detta språk i allt som har med projektet att göra. Språket bör inbegripa allt från klassnamn och viktiga operationer, verksamhetens termer för att diskutera explicita affärsregler och till och med designmönster (och andra typer av mönster, t.ex. analysis patterns), som teamet tillämpar på domänmodellen. Det bör användas när utvecklare och domänexperter kommunicerar med varandra, men också i utvecklarnas egna grupp för att beskriva system, uppgifter och funktionalitet, liksom i domänexperternas egna kommunikation och arbete med krav, featurelistor m.m. Refactoring av koden kan leda till refactoring av språket och när språket ändras måste klassdiagrammen anpassas, klasser och metoder döpas om. På samma sätt som "continuous integration" är en bästa praxis bör man enligt Evans även tillämpa något han kallar "conceptual integration":

"Constant exercise of the UBIQUITOUS LANGUAGE in discussions of the model and application."

Åter till Jimmy Nilsson och diskussionen om svenska. Även om man inte känner till DDD eller har dragit samma långtgående och djuptänkta slutsatser som Evans och andra DDD-förespråkare, är det lätt att känna igen problematiken och behovet av ett gemensamt språk; jag har själv funderat mycket på detta och gillar därför verkligen hur en gemensam modell och "ett allestädes närvarande språk" ges en så pass central roll i domändriven design. Och utifrån denna roll är det åtminstone för mig uppenbart att modellen och språket, liksom i förlängningen därmed även koden, bör vara på svenska för svenska projekt i svenska verksamheter.

Alla åhörare var emellertid inte överens om detta och jag vet från andra diskussioner att många till och med föredrar engelska för sina kommentarer och för dokumentation, så länge det inte finns uttryckliga önskemål om något annat. Ofta används argumentet att koden kan komma att sättas i händerna på engelskspråkiga utvecklare, inte minst med den växande offshoremarknaden. Det kan dock knappast vara så pass vanligt förekommande att man alltid skulle vara tvungen ta höjd för det till priset av alla problem språkförbistringen innebär (YAGNI!).

Ett problem med svenska har varit att man inte kunnat använda svenska tecken (åäö) i koden och att det därför minskat tydligheten, men det är inte längre något problem i moderna utvecklingsmiljöer. Lite värre är kanske att det i mjukvaruvärlden finns en hel del begrepp som saknar bra eller i alla fall naturliga svenska översättningar, t.ex. namn på designmönster (Factory, Composite, State etc) eller något så grundläggande som Set- och Get-prefix. Programmeringsspråk, befintliga ramverk och klassbibliotek har sällan (aldrig?) översättningar vilket leder till att man antingen måste blanda språken (KnappEvent) eller använda olika språk för ramverk och applikation(OnClickEvent, KnappHändelse).

Dessa invändningar är tämligen bagatellartade enligt min mening och förtjänsterna med att använda svenska, snarare än att tvinga domänexperter och utvecklare att hitta på mer eller mindre krystade översättningar, överstiger vida nackdelarna. Nu undrar väl alla vad Jimmy Nilsson tyckte, men det här är ju trots allt min blogg... Okej då, han skämtade först om att problemet enklast löses genom att avskaffa svenska språket och att han skriver på engelska för att slippa ta itu med problemet, men menade sedan att så länge vi måste dras med svenska bör det förstås vara regel snarare än undantag att använda svenska för sitt ubiquit... förlåt, allestädes närvarande språk.

0 kommentar(er):