Skolepolitik (FV 2011)

Skrevet - Sunday, August 21st, 2011 kl. 21:56 | Kategori - * Galde, * Politik, Danske indlæg.

Det varer ikke længe før vi skal bestemme hvilken skole vores datter skal gå på. Rent ideologisk har jeg mange gode grunde til at støtte folkeskolen. Ideen om et skolevæsen, som er fælles og favner alle er en nobel og respektabel tanke. Ideen om at folkeskolen skal danne grundlaget for demokratiske mennesker med en sund tilgang til samfundet. Problemet er så, når jeg slet ikke kan genkende disse målsætninger i vore dages folkeskole.

I mine øjne har vores politikere valgt at tage det dårligste fra den engelske og den amerikanske skole. Frit skolevalg kombineret med målinger på kryds og tværs, fokus på smalle faglige kundskaber og segregering af elever ud fra deres standpunkt. Alt sammen ting, som jeg mener aktivt modvirker tankerne i en folkeskole. Ved at benytte PISA-undersøgelser og nationale tests til at vurdere, hvordan vi ‘performer’, har vi startet en negativ spiral, som vil fremme udenadslære, mekanisk læring og fjerne kreativiteten samt mangfoldigheden fra vores skoleelever. Vi forvandler dannelsesprocessen til at være et simpelt spørgsmål om antal rigtige i multiple choice prøver. Det frie skolevalg har gjort ghetto-iseringen af skolerne endnu være end den havde behøvet at være. Børn af resourcestærke forældre rejser til skoler med andre resourcestærke forældre – som derved kan tiltrække de dygtigste lærere, hvilket bidrager til et tiltagende skævt Danmark, og gør det om muligt endnu sværere at bryde den sociale arv.

En klog mand (jeg kan desværre ikke huske hvem) sagde engang: “Grisen bliver ikke federe af at blive vejet ofte”. Problemet med multiple-choice PISA prøver og de nationale tests generelt er, at de naturligt nok kun kan teste udenadslære og stavning. De kan ikke give et billede af hvor god eleven er til at deltage i klassen, fremlægge ting verbalt, komme med kreative ideer, hjælpe sine klassekammerater. Og mindst ligeså vigtigt kan der kun testes i de ‘hårde’ fag såsom sprog, matematik og de naturvidenskabelige fag. Der kan ikke laves en meningsfyldt opgave i de kreative og musiske fag – ej heller idræt og religion giver mening at stille op på formler og udregne gennemsnit af.

Alt sammen for at vi kan sammenligne os med de andre lande i, hvem der er bedst til at dræbe kreativiteten i undervisningen. Tror politikerne virkelig, at Danmark skal overleve på at være gode til den lille tabel og retstavning (i dansk… (sic!))? Alle virksomheder skriger efter arbejdskraft, der kan ‘tænke ud af boksen’, ‘være kreative’, ‘er gode holdspillere’, ‘er gode til at holde mange bolde i luften’, ‘er gode til at skabe sociale relationer’, ‘er gode til at kombinere fagområder’ osv. Når nu vi har skabt et ensidigt fokus på hvem der kan få flest procent rigtige i statiske, en-fags-fokuserede og lineære tests – tror vi så virkelig på at vi får skabt de nye Janus Friis’er, H.C. Ørsted’er og H.C. Andersen’er? Alle sammen personer, der formåede at gøre det som ingen regnede med.

Jeg vil gerne anholde den fremherskende tanke om, at “bare vi er dygtige til matematik og stavning, så kommer resten af sig selv”. Jeg tror det er diametralt modsat. Jeg tror på, at hvis vi istedet satser på de kreative fag til at give eleverne lysten til at lære – så kommer resten af sig selv. Folkeskoleelver skal ikke være dygtige til faglige ting – de skal være dygtige til at lære. I mine øjne er det først efter folkeskolen, de skal begynde at specialisere sig og fordybe sig for alvor. Om de lærer at læse i 1. klasse eller 5. er fuldstændig ligegyldigt – det, der er vigtigt, er at de får lysten til at lære at læse. Vi burde kende det fra os selv. De ting vi er motiverede for, falder os altid nemmere end de ting, vi skal have en overhængende fare for at få høvl for ikke at have lavet før vi kaster os modstræbende over dem. Jeg synes det er uanstændigt, at folkeskoleelever bliver afkrævet et svar på en ‘karriereplan’ på vej ud af folkeskolen. Hvor hulen skulle de vide det fra? Er du blevet det samme, som du regnede med i 9. klasse?

Og lad det være sagt med det samme – jeg var i folkeskolen særdeles god til den slags tests, som jeg angriber her. Jeg ville have befundet mig som en fisk i vandet med den måde at blive bedømt på. Hvilket jeg lige siden folkeskolen har kæmpet med at gøre op med… Jeg ville ønske, at min skole havde satset mere på at lære os at sameksistere med andre mennesker med andre færdigheder end os selv – og udnytte gruppens styrke i stedet for ensidigt at satse på at løse alting selv. Jeg ville ønske, jeg var blevet tvunget til at dygtiggøre mig inden for musik, smalle sprog og det sociale liv. Det bliver kun sværere at gøre, når man når op i årene (hold da op, det lød gammelklogt…).

Reformer eller revolution? (FV 2011)

Skrevet - Saturday, August 20th, 2011 kl. 0:45 | Kategori - * Galde, * Politik, Danske indlæg.

Op i mod folketingsvalget gør jeg mig naturligt nogle tanker om, hvilket parti, der har gjort sig fortjent til min stemme. Lad det være sagt med det samme – det er nemmere at finde nogle, der har diskvalificeret sig. Siden 2001 er der blevet gennemført en række reformer – bl.a. politireform, retsreform, kommunalreform, arbejdsmarkedsreform, skolereformer, universitetsreformer – for ikke at nævne diverse sammenlægninger, pakker og digitaliseringer. Alt i alt en opbrudstid uden sidestykke (og glem ikke at vi stadigvæk er i krig). Nu er et godt tidspunkt at gøre status.

Lad os skyde lidt med spredehagl og se på, om jeg kan finde nogen succeshistorier i mellem alle disse projekter. Selvom jeg har gennemgået dem alle – er der ikke nogen af dem, der har været en ubetinget succes – eller blot levet op til de argumenter, der var for dem. For at tage den jeg har været mest direkte i karambolage med – indførelsen af eIndkomst/LetLøn. Det gamle Told&Skats knap 100 kontorer blev fusioneret (nu blot kendt som Skat) og samlet i 13 ‘super’-kontorer, som senere blev samlet i 5. Stort set samtidig med det blev eIndkomst/LetLøn indført (i hvert fald foregik alt analysearbejdet sammenfaldende med sammenlægningen). Firmaer blev pålagt at indberette elektronisk til systemet – endnu inden API’et (grænsefladen mellem det offentlige system og de enkelte virksomheder) var helt færdigt endsige gennemtestet. Det ledte til en række problemer – bl.a. kunne det ikke håndtere personer, som skulle bruge deres hovedkort på mere end et arbejdssted indenfor samme måned for at tage den mest grelle. Derudover var der ingen sammenhæng mellem betalinger og opkrævninger, indberetninger gik tabt, og det var ofte tilfældigt hvorvidt pengene blev hævet på firmaets konto på afviste/fejlbehæftede indberetninger.

Generelt kan man sige om mange af digitaliseringerne foregik som ‘big-bang’ implementationer. Fra den ene dag til den anden skiftede alt. Den Digitale Tinglysning skiftede medarbejderstab samme dag, som den gik i luften (i øvrigt en rammende metafor) med alenlange sagsbehandlingstider, tabte penge osv. til følge. Generelt har politikernes holdning været, at det var borgernes eget problem. De enorme tab har indtil nu ikke resulteret i noget som helst. Min oplevelse (f.eks. i forbindelse med de ulovligt opkrævede ejendomsskatter) er at retssikkerheden har veget for det offentliges konstante krav om effektiviseringer på borgernes bekostning. Arbejdsbyrder er blevet væltet over på borgere/virksomheder uden kompensation. Hvor det før var det offentliges, der havde pligten til at informere om hvordan sagsgang skulle foregå, kontakte og instrurere den enkelte borger – er det nu alene borgerens pligt at finde ud af hvordan den nye digitale løsning fungerer og skal anvendes. Fejl vil aldrig komme borgeren til gode – ydelser kan tabes, hvis blanketter blev fejlagtigt udfyldt.

Et andet godt eksempel er den såkaldte ‘Lømmelpakke’, knivlove og diverse ‘Terrorpakker’, hvor borgernes retssikkerhed og demokratiske rettigheder er tilsidesat for politiets arbejdsro(!). I øvrigt er betegnelserne utrolig mærkelige – de rammer jo ikke kun lømler, terrorister og andre slyngler. Mængden af mennesker der er kommet i klemme synes jeg slet ikke står mål med hverken deres ‘forbrydelse’ eller det generelle trusselsbillede i Danmark. Til gengæld går kriminelle fri, fordi domstolene (som også er ved at rejse sig fra asken af retsreformen) er overbebyrdet med straksdomme for knivbelæssede håndværkere, mens hårde kriminelle bliver frikendt pga. for lang sagsbehandlingstid. 14-årige børn bliver arresteret, sat i fængsel – mens de forebyggende tiltag bliver syltet (igen i direkte modstrid med løfterne før vedtagelsen).

Nej, jeg synes ikke der er meget at juble over (min overfladiske gennemgang giver slet ikke retfærdighed til alle de mennesker, der er blevet ufrivillige forsøgspersoner i diverse eksperimenter). Jeg synes i den grad, politikerne burde være bedre til at ændre tingene i et langsommere tempo, så alt ikke bliver gjort forhastede, i blinde og stort set altid med enorme budgetoverskridelser til følge. Inden den ene reform/pakke er implementeret bliver den næste vedtaget så det er umuligt at finde ud af, hvad der virker – og hvad der så absolut ikke gør.

Om at komme med ideer – eller være Rasmus modsat

Skrevet - Sunday, August 14th, 2011 kl. 21:15 | Kategori - * Politik, Danske indlæg.

Det er forstemmende, når Venstre (tilsyneladende) starter valgkampen med at nedgøre S-SF’s Fair Løsning. Her har de muligheden for efter det første gruppemøde, friske tilbage efter sommerferien, med de politiske batterier ladet helt op… og så kommer de med det!? Hvad fanden sker der lige for det? Er det virkelig hvad I har af visioner for det danske samfund?

I de gamle grækeres tid (som i øvrigt er forløberen for det demokrati vi har nu) brugte man mange kræfter på at nå den bedste løsning. Her blev retorik opfundet. Den der havde de bedste argumenter, ‘vandt’ diskussionen, og hans ideer blev følgelig til lov. (Det var ikke helt så enkelt, men det var grundtanken). Det specielle ved det arrangement var, at det typisk ikke var den, der havde de bedste argumenter med hjemmefra der vandt, men den der under debatten var bedst til at samle sammen på de andres gode argumenter og så finde det bedste kompromis. Det var således en stor styrke at komme med åbent sind ind på scenen og blive klogere undervejs.

Den disciplin burde man få et grundkursus i inden man fik lov til at komme igennem dørene på Christiansborg. Jeg har til gode at opleve en debat i folketingssalen, hvor der er en politisk modstander, der udbrød: “Hold da kæft – det havde jeg ikke tænkt på… hvad om vi kombinerede de to ting, så kunne vi…” Næh, alle holder stædigt på deres og vil ikke – om det så koster en rigtig god løsning – give de politiske modstandere indrømmelser. Folketinget kan trække på de klogeste hoveder i landet – de har data, som virksomhedsejere kun kan drømme sødt om – og så kaster de alt det bort alene for billige politiske point? De skulle skamme sig!

Jeg er ikke ubetinget enig i S-SF’s Fair Løsning – jeg kan se gode ideer blandet med dårlige. Men hvis nu regeringen var større mænd end de er, ville de tage handsken op og komme med deres _konstruktive_ forslag. I stedet sidder de med korslagte arme og siger: “Vores plan er bedre… for … for … den er blå!” Velkommen tilbage til Grøn Stue. De estimater der er i de to forskellige løsninger lider under samme problem. Det er svært at spå – især om fremtiden. Så jeg kan afsløre at begge planer vil være forkerte, hvis vi læser dem om 10-15 år. I virksomhedsøkonomi arbejder man typisk med 1, 3 og 5 års planer. Alt andet kalder man visioner. For det er det, det er! Det er: “Hvordan kunne vi godt tænke os Danmark i 2020 – og hvad kunne vi tænke os at gøre for at nå derhen?” At angribe sådanne planer med nærlæsning af forudsætninger giver ikke mening!

Så, min opfordring? Kom op af hullerne og fortæl os, hvad _I_ har tænkt jer at gøre! (Iøvrigt har jeg respekt for håndteringen indtil nu fra ‘den røde blok’ med et træk på smilebåndet).

Meningsmålinger – videnskab eller galskab?

Skrevet - Saturday, August 13th, 2011 kl. 23:41 | Kategori - * Politik, Danske indlæg.

DR offentliggjorde den 11. august inden for 1 time to forskellige meningsmålinger. Den ene med titlen “Øretæve til VKO i ny meningsmåling” og den anden “Venstre stormer frem i ny måling”. Den første viste en 55.5%/44.3% fordeling mens den anden viste en 50.6%/49.2%. Forklaringen er der for mig ikke noget overraskende i. Det er statistik – eller med min statistik-lærers ord – politisk vinklet ønsketænkning. Usikkerhederne i en måling af politiske vinde er enorm.

Lad os tage nogle stykker: Udvælgelsen af respondenter. De fleste meningsmålinger tager udgangspunkt i ca. 1000 personers meningstilkendegivelser. Men vent – det er ikke helt korrekt – de tager udgangspunkt i 1000 tilbagemeldinger. Det man med et fint ord kalder respondenter. Det jeg fisker efter her er at for at en meningsmåling skal give mening (haha) skal udvælgelsen være repræsentativ. Dvs. at alle samfundslag, uddannelser, økonomisk stillinger osv. skal være repræsenteret i et omfang der svarer til deres repræsentation i befolkningen. Igen ikke helt teknisk korrekt – de skal indgå med deres vægtede repræsentation. Der er nemlig nogen, der ikke må stemme – alle under 18 og andre umyndiggjorte skal altså sorteres fra.

Hvem må institutterne så ringe til? De må ringe til myndige personer i Danmark… med fastnetnummer. Okay – det er ikke helt korrekt – de må ringe til alle fastnetnumre som ikke har hemmeligt nummer. Mobilnumre må de ikke som udgangspunkt ringe til – fordi de ikke kan vide, om det er en mindreårig, der har telefonen. (De må gerne, hvis personerne selv har givet tilladelse til det). Nå! Næste problem – der er ingen offentligt tilgængelige data på indkomstforhold koblet med telefonnumre. Ej heller uddannelser… Ej heller køn… Nu kommer det spændende så… Hvad hulen gør institutterne for at sikre repræsentativitet. De har dybest set to muligheder: De kan lave noget der tilnærmelsesvist er repræsentativt eller de kan snyde.

Det de kan gøre er, at når de får en person i røret, kan personen fortælle, hvilke kategorier han/hun hører hjemme i. Og når de så har fået fat i ca. 1000 tager de den store tabel frem – og sammenholder deres respondenter med Danmarks Statistik for, hvordan de forskellige grupper skal vægtes.

Okay – det var det første problem. Der er temmelig store muligheder for at respondenterne er uhm… lad os sige, upræcise i deres demografi. Næste problem – en respondent er kun respondent, hvis vedkommende svarer. Bare det tidspunkt man vælger at ringe på er kritisk for hvilke dele af befolkningen man rammer. Folk med 8-4 jobs… nok bedst at ringe efter 4. Børnefamilier… nok ikke så godt omkring puttetid… folk med nattevagt bliver sure når man vækker dem om eftermiddagen… Jeg er nok ved at have lavet min pointe. Okay – 3dje problem: Folk lyver. Ikke nødvendigvis bevidst. Ikke nødvendigvis i nogen ond mening. Eller sagt på en pænere måde – de er upræcise i deres svar. Alt efter om du spørger dem om morgenen med den første kop kaffe i hånden med avisen opslået på dagens varme politiske kartoffel – eller du rammer dem i aftensmaden med tre skrigende unger der alle hellere ville have pomfritter end blomkålssuppe – mit bud er at du ikke får lige uddybede svar. Og indplaceringen i forhold til indkomst mv. vil være… spændende.

Nogle analyseinstitutter er nu begyndt at lave statistik over noget de kalder vægtede meningsmålinger. Dvs. at de tager alle de gennemførte meningsmålinger og putter dem ind i deres egen matematiske vridemaskine. De ‘tager højde’ for hvor tæt det enkelte analyseinstitut var på det ‘rigtige’ resultat ved sidste valg, hvordan de normalt ligger i forhold til hinanden… Med andre ord, de tager nu et nyt gæt baseret på sandsynligheden af at de andres gæt ud fra hvor heldige de tidligere har været (!?). For alle ved jo, at hvis bare man gætter mange gange nok, så rammer man sandheden flest gange… Min gamle chef ville på nuværende tidspunkt have sagt: “Der findes løgn, forbandet løgn… og så statistik”. Han ville højst sandsynligt også have nævnt SPT værdier (Slag-På-Tasken) et par gange.

Så – der er altså masser af problemer med meningsmålinger – og jeg har ikke engang berørt det værste af dem. Ikke alle mennesker stemmer (Valgdeltagelsen var 86,53 % ved folketingsvalget i 2007). Og sofavælgerne er ikke lige godt repræsenteret i alle partier, indkomstgrupper osv. Meningsmålinger er altså udtryk for nogle delvist tilfældigt udvalgte’s sindelag på et givent tidspunkt ganget med sandsynligheden for at de vil stemme… Eller sagt på en anden måde: Svarene analyseinstitutterne får kan tolkes vidt forskelligt efter analysemetode, algoritmer til vægtning osv.

Er dette en hemmelighed? Næh. Er journalister ikke klar over det? Joh. Er de politiske kommentatorer ikke klar over det? Joh. Hvorfor stiller de så op (for kommentatorerne)/bringer de historierne(journalisterne)? Fordi de får penge for det. Det er godt stof. Fuldstændig ligesom vejrudsigter. Alle ved vejrudsigten stemmer lige så godt som en børneguitar efter halvandet år i en vuggestue. Alligevel sluger vi det råt. Vi kigger på alle deres data – siger nååårh…. jaaehh… til deres fortolkninger. Og tager paraplyen med alligevel (Så ved man da at det ikke kommer til at regne).

Så mit valgforsæt? Jeg har tænkt mig at ignorere meningsmålinger – og lytte til politiske budskaber i stedet.

PS: Jeg er fuldstændig klar over at analyseinstitutterne har vendt sig mod internettet for at finde nye respondenter (de er ved at rende tør for tilfældige folk med fastnet telefoner) – men lad os bare sige, at jeg ikke tror det forbedrer datagrundlaget…

Folketingsvalg 2011

Skrevet - Saturday, August 13th, 2011 kl. 22:40 | Kategori - * Diverse, * Politik, Danske indlæg.

Det er ved at være tid for et folketingsvalg – og man kan via de politiske udmeldinger, se hvad de forskellige partier vil vælge som emner. Mit bud er at det bliver en valgkamp, som vi ikke har set før. Der vil blive ført to parallelle valgkampe – den ene vil ligne den valgkamp vi har haft de seneste 2-3 gange med tv-debatter, hvor de to blokke vil kaste med sten efter hinanden og se, hvem der først kan ramme en sprække i ‘de andres’ glittede brochurer. Den anden del af valgkampen?

Den anden del af valgkampen vil være meget mere spændende og uforudsigelig. De nye kamppladser er blogs, facebook og diverse online fora. Der vil være oprustning af politiske argumenter, der vil blive troll’et på hinandens favorit podier. Og hvem vil tabe her? Det vil de store etablerede partier – Venstre? SocDem? Konservative? Don’t make me laugh. De vil stå tilbage med følelsen af at være ramt af en bus. Og de vil ikke ane, hvad de gjorde forkert. For at begå sig på internettet er der to ting, der er uhyre vigtige – forståelsen af flygtigheden af information – og at nettet er to-vejs. Det nytter ikke noget at tage de glittede brochurer og blot klaske dem op på dit partis hjemmeside eller få ens spindoktor til at lave generiske opdateringer på Twitter med kampagneslogans. Næh – det der skal til er: 1. Aktivitet. Konstante opdateringer på deres Facebook/Twitter/gæt-et-netværk profil (af dem selv – alt andet er ligeså gennemsigtigt som højpoleret glas), svar på vælgernes kommentarer til samme opdateringer. For det er den anden ting – 2. nærhed. En følelse af at der er en person i den anden ende.

Og det fede ved det hele? Du kan ikke spin’e dig ud af en diskussion i dit Twitter-feed. Her gælder ingen “Ingen kommentarer” – eller “Nu må man se på den store helhed – vi har planer om en 80% reduktion af spildtid”. For der er altid mindst en der vil spørge: “Hvordan?” – “Prøv at være mere specifik”. Og så falder spin-retorikken totalt til jorden. Spin-retorik virker bedst i 5 sekunders indslag på TV, hvor du har haft tid til at forberede dig – og tilhørerne ikke har. På internettet vil dine argumenter blive dissekeret, kørt gennem den samlede ‘intelligens’ (Wikipedia, Google mfl.) og generelt undersøgt for inkonsistens.

Hvad er der så tilbage? Mit favoritemne – ideologi. Og det vil være de store vindere i den ‘anden halvleg’. De ideologiske politikkere – dem der faktisk har tænkt over, hvilket Danmark de kunne tænke sig. Dem, der har noget på hjerte. Som partier vil de Radikale og Enhedslisten have téten. Hvorfor? Fordi de ikke er top-styrede og/eller spin-helveder. Deres opstillede politikere skal ikke tilbage og spørge “Må vi godt mene det her?”. De har rent faktisk lov til at mene noget.

Så, hvilken del vil have størst betydning? Forhåbentlig vil del 2 – selvom jeg ikke tror det bliver udfaldet. Problemet er nemlig at du som vælger selv skal tilvælge disse debatter. I modsætning til tv-debatterne hvor ‘alle’ er repræsenteret – er de ‘nye’ medier afhængige af at de er synlige og at folk opsøger dem. Men der er ingen tvivl om hvor jeg befinder mig bedst… Jeg vil spilde min tid med at diskutere med politikere på Facebook…

Taking a break from coding posts

Skrevet - Saturday, August 13th, 2011 kl. 22:15 | Kategori - * Coding, English posts.

I’ve reached a conclusion over these past few weeks. I need a break from posting things relating to code. I’m currently at a point in time, where I have little to share. So, the next few posts will be in Danish and about politics. There is an upcoming election for parlament that I need to catch some thoughts about.

Later, I’ll return to coding, of course :). Happy coding!

DDD best practice my arse

Skrevet - Saturday, July 16th, 2011 kl. 23:47 | Kategori - * Coding, * Rants, English posts.

It’s been a while since I last wrote anything about DDD/BDD. Since MS decided to give some Spanish developers the chance to create a DDD manifesto (of sorts) with the N Layer App, I’ve been meaning to take it up again. First of all – I have not read their e-book cover-to-cover, and I have only seen small samples of the code contained. But to me it seems, these guys have made a plunge and tried to bite over more than they can chew.

I see several problems with their project – they decided to include just about every technology included in the .Net 3.5/4.0 framework, so everything looks like some kind of mutated hydra with code flailing all over the place. Somehow, it seems like more of a ‘look at all the shiny things, we got’ than – ‘here’s our take on how to approach DDD’. And the sample app is… well, to put it bluntly, terrible. In order to actually take on DDD, you need a domain with enough technical twists and uncommon behaviour to make it worthwhile. Because here is the catch – DDD is not a silverbullet – it adds complexity (actually a helluva lot of it). So, while in complex systems it is certainly a sound way to approach complex dilemmas, it will cost you in development time and transparency.

Now, there has been a lot of developers going ‘Yay, MS thinks it’s good, thus I think it’s good’ – and there have been some grizzly hardcore developers sighing, throwing up and throwing things at Spain. I’ll not go too much into details about all the problematic things they have found, nor will I throw another bucket of bile their way. Rather, I’d like to take a more constructive DDD discussion about just a little bit of code from their code-base. To make it simple, I’ll take one property on one class – and discuss why I think the implementation is flawed.

public class BankAccount
{


public virtual ICollection BankAccountActivity
{
get
{
if (_bankAccountActivity == null)

_bankAccountActivity = new HashSet();

return _bankAccountActivity;

}
set
{

_bankAccountActivity = new HashSet(value);

}

}

}

Looks innocent enough, right? Wrong. There are a ton of problems with these few lines of code.

A few notes on banking

I’m no domain expert on banking, but there are several things, that I do know from my ERP experience. Banking is all about consistency, atomicity and dependability. I have seen several banking systems and home banking systems being horribly constructed in terms of performance, discover-ability and usability – but they all have one thing in common: Transactions are everywhere. You cannot access one account and just do a withdrawal. You go through a service of some kind with heavy auditing, logging, balance-checking and security. And once that is done successfully – it is there to stay. These systems are simply incapable of deleting a transaction once it has occurred. There are several reasons for that – first of all, a bank’s credibility is tied to people believing that if something happens to their money, they will be able to see:

Even if the bank makes a mistake (e.g. debiting the same amount twice), they will make a correction by making a new transaction. And this is just the tip of the iceberg, of course – I haven’t touched all of the really hard stuff – currency-handling, date-handling (there are several dates involved here – which date will the amount be withdrawn, when will it effect interests and so on). If N Layer App had been an attempt at doing DDD, all these things would be the focus – and not whether EF should be used as the ORM. Now, let’s look at the problems with the above code:

Missing transaction support

There are no transactions! This is simply rule no. 1 in any banking world. You must have transactions. I’m not talking about database transactions – I’m talking about a transaction that will guarantee that a withdrawal or a deposit is recorded and is properly registered with everything else that should happen (some cash exchanged hands). There is nothing in this code guaranteeing that noob-developer #1 doesn’t do a:

var account = _repository.GetSomeAccount();
account.BankAccountActivity.Add(new BankAccountActivity{Amount = 12000000});
_repository.Save(account);

(Yes, yes there are additional steps – but the concept remains – this is horrible design). Or how about:

var account = _repository.GetSomeAccount();
account.BankAccountActivity.Clear();
_repository.Save(account);

A setter on a collection?!

Again – this goes against all the domain knowledge… And against most best practises when dealing with collections.

Performance

Bank accounts have several characteristics – one is that some of them live for very long. Consider the BankAccount of even a small company – imagine the amount of transactions taking place on any given account. We are talking many thousand BankActivity’s. Whenever we look at the collection, we will need to fetch all these BankActivity’s with no chance of selecting which. Not to mention if you accidently eagerload them for a collection of BankAccounts… the DB will be reduced to shreds in no time. (Ironically, they actually do that at some place in the code…)

Concurrency

Looking at the two classes in play here – it is bewildering to see them both inheriting from the Entity base-class. Which is now responsible for saving (ie. which one is the aggregate)? By the looks of it – BankAccount is responsible for saving BankActivity’s (Since there is no BankActivityRepository). The problem here is: What happens if two users open the same BankAccount – one locks the BankAccount due to the owner’s death – the other moves 1.6 billion USD to another account. Which one should win that concurrency race – and what happens to the 1.6 billion if the BankAccount is locked first? The point is – we don’t know! And that is the most horrible answer we can give.

Immutability

They have setters on the properties on the BankActivity! How would you feel if the statement of accounts you received on your pay-roll account changed between two printings – maybe your withdrawal of 200$ changed to a withdrawal of 300$? How about a payroll that simply vanished (change of BankAccountId)? I would run/sue… pending if it was for my benefit :-).

Summing up – what now?

My best advice when it comes to this ‘best-practice’ DDD ‘Guidance’ to ‘rule them all’ is to see how they manage to fit the different technologies together. See how they implement a given pattern but forget all about the context and all about DDD. DDD is all about modelling real world behaviour as close to 1:1 as possible. It’s all about domain knowledge. It’s all about making responsibilities explicit. The focus here is elsewhere. In my next post, I’ll describe, how I would do a better (albeit naive) implementation based on the above (simplified) domain knowledge.

Shifting focus… once again

Skrevet - Friday, July 8th, 2011 kl. 15:54 | Kategori - * Coding, English posts.

This time, the shift is almost as big as it can be. Going from a WPF app to a ASP.Net MVC is not a trivial shift. Luckily, we have done several things right to enable such a change. Our WPF app consumed a WCF service – so the first month or so has been mostly recreating UI using HTML5 and JavaScript and moving the query logic from the service down into a common layer for the service and the new MVC project.

So far it has been interesting to note the differences in approach between the two platforms. Since they both share the C# language in the domain layer, I have had no problems there. The problem is in switching to stateless UI. I have been reading up on CQRS (Command-Query Responsibility Segregation) and that actually makes a lot of sense when you are talking about MVC.

The great thing about MVC is that the resources are a plenty. I started out with the asp.net/mvc homepage and the pluralsight online video series which have been a great help. I can’t say that I agree with everything they have done with the framework – and JavaScript is still not really my thing but I’m confident that it will grow on me.

So, a month into the new project we are slowly coming around having implemented the main screens in the application, and I have finally been able to find time for the next new large piece of functionality – this time taking on handling subscriptions. I find the domain enjoyable as it lends itself well to my accounting background. Mostly, it is a matter of deciding how to go about it. Subscriptions are handled in various ways and it would be senseless to try and accomodate them all.

I guess that that interwebs technology is there to stay, so might as well get used to it.

3 – firmaet, der ikke vil have erhvervskunder

Skrevet - Friday, June 10th, 2011 kl. 0:21 | Kategori - * Galde, Danske indlæg.

Nogen gang kan jeg undres over, hvordan nogle firmaer gør sit yderste for ikke at få kunder. Jeg kan til nød forstå de firmaer, som har dårlig kundeservice, når man er blevet kunde (der kan være noget om, at det er svært at skifte leverandør – at ROI ikke rigtig er til det osv. osv.), men dem, der har dårlig salgsservice, forstår jeg slet ikke. Nu har jeg efterhånden en del oplevelser med 3 – og den mængde ting, der kan gå galt her, er simpelthen imponerende.

Historien startede, da jeg efter et kort eventyr med Telenor, skulle skifte tilbage til 3. Jeg havde allerede en telefon, og skulle egentlig bare have oprettet et abonnement og flyttet mit telefonnummer. Som en lille bonusdetalje er det min arbejdsgiver, der skal betale. Det lyder vel egentlig rimelig simpelt, ikke? Abonnementet hos Telenor var således oprettet i firmaets navn.

Belært af tidligere (dårlige) erfaringer sendte jeg min nærmeste chef forbi 3-butikken for at være sikker på, hvad de skulle bruge for at kunne oprette et firma-abonnement. Beskeden var, at de skulle bruge en fuldmagt fra en tegningsberettiget (!) i frimaet. Da min chef ikke er tegningsberettiget, måtte vi derfor have fat i vores adm. direktør, som er på vores kontor i Grindsted. Han udfærdigede en fuldmagt, underskrev den og sendte den til Aalborg. Fuldmagten bemyndigede mig til at oprette abonnement og flytte mit nummer – bredt formuleret, så der ikke var tvivl om at jeg dybest set havde frie hænder.

Bevæbnet med fuldmagten gik turen så til 3-butikken – ekspedienten scannede fuldmagten til deres back-office i København, hvilket lykkedes i 3dje forsøg. Efter lidt snak frem og tilbage med backoffice, kom ekspedienten tilbage og forklarede, at de ikke kunne bruge fuldmagten, fordi den ikke var snævert nok specificeret… Noget uforstående spurgte jeg ind til hvad han mente… Svaret var, at jeg med den her fuldmagt “kunne købe 50 guldbelagte telefoner”… stadig lidt uforstående spurgte jeg så ind til om han da havde 50 guldbelagte telefoner!? Nå, jeg prøvede at forklare, at min chef netop havde udfærdiget den bredt, så jeg kunne finde den bedste løsning – og at der jo ikke var tale om, at jeg var ved at investere i en armada af guldbelagte telefoner – der var jo blot tale om et abonnement og den telefon, som han selv havde lokket mig til at købe med i købet. Det mislykkedes totalt at få ekspedienten til at forstå, hvad en fuldmagt egentlig er… Der var ingen kære mor, og jeg måtte til sidst temmelig hovedrystende forlade butikken med uforrettet sag og med en liste over de detaljer, der skulle tilføjes fuldmagten (heriblandt modelnumre, abonnementstype og et firmastempel (!?)).

Dagen efter var vores adm. direktør tilfældigt til møde i Aalborg, så jeg fik ham til at udfærdige en tilrettet fuldmagt, og vi fik gravet et gammelt firmastempel op af skuffen (5 år gammelt med vores gamle firmanavn). Igen fuld af forhåbning gik jeg tilbage til butikken og fik fat i samme ekspedient… Efter lidt problemer med at sende papirerne frem og tilbage, blev købet endeligt godkendt af back-office og jeg fik lov at sætte min signatur på abonnementet… så kom den sidste lille finte – flytningen af nummeret… her fik jeg udleveret en blanket, som jeg bare lige skulle udfylde og få udarbejdet en fuldmagt… lige deromkring knækkede filmen helt… for det første havde jeg nu to fuldmagter, hvori der stod at jeg havde lov til at flytte rundt med det nummer ligeså tosset jeg ville – og for det andet havde han ikke nævnt det med et ord tidligere, så jeg kunne have fået chefen til at lave en ekstra fuldmagt… Jeg er en meget tålmodig mand, men her blev jeg nødt til at insistere på at få lov at skrive sedlen under, tage en kopi af fuldmagten og lægge den ved i brevet, hvilket ekspedienten efter mange forsøg på at tale mig fra det, til sidst indvilgede i.

Nu har jeg netop erfaret, at flytningen af nummeret er kommet tilbage fra Telenor med besked om, at de skal bruge en fuldmagt…

Lad os prøve “Find fem fejl”. Først – fuldmagtsspørgsmålet – 3′s ekspedient (og åbenbart back-office) har slet ikke forstået konceptet med en fuldmagt, og alligevel beder de om en. Det skriger til himlene. Fra Wikipedia: “Fuldmagt er en tilladelse fra en person (fuldmagtsgiveren) om at lade en anden (fuldmægtigen) handle på sine vegne overfor andre (tredjepart).” I dette tilfælde er begge fuldmagter en fuldmagt med “særlig tilværelse”. Hvad så med retsvirkningerne? Igen fra Wikipedia: “Når en fuldmægtig indgår en lovlig handel/aftale med en tredjepart virker det ganske som hvis fuldmagtsgiveren og tredjeparten havde indgået aftalen direkte med hinanden; fuldmægtigen har på den måde ingen anden rolle end at formidle aftalen.” Så, det vil sige: Når jeg går ned til 3 med en fuldmagt, hvor der er min chef’s underskrift på, og firmaets adresse samt en beskrivelse af hvad jeg er bemyndiget til, er jeg alene formidler af aftalen – i alle andre forhold er det her en aftale mellem min arbejdsgiver og 3.

Så, fuldstændig ligegyldigt, hvad jeg måtte have bestilt, der kunne henføres under fuldmagten, ville binde mit firma til aftalen på fuldt lovlig vis. Vi snakker om et firma med afdelinger i Danmark og Norge med 15 ansatte, som er udnævnt som Gazelle virksomhed af Børsen. Det hedder tillid – og jeg tror det koncept lige skal genopfriskes indenfor 3′s medarbejder politik. Jamen, kunne 3 så ikke være bekymret for en forfalskning? Tjoh – men… sund fornuft må også gerne anvendes. Straffen for dokumentfalsk (som dette ville høre ind under) er bøde eller fængsel op til 2 år (§172 i straffeloven) – mere for grove tilfælde. Gad vide om jeg ville risikere det for et telefonabonnement efter, at jeg vel og mærke har afleveret en kopi af mit kørekort og sygesikringsbevis som legitimation… Der kan her ikke være tale om at jeg går uden for min bemyndigelse, da der er fuldstændig klart, hvilket område jeg har bemyndigelse til (og det er da heller ikke det ekspedienten brokker sig over).

Så kommer vi til de ting, hvor jeg undres i salgsarbejdet og salgspolitikken. At kræve en fuldmagt virker… en anelse overdrevet for et telefonabonnement. At kræve en fuldmagt underskrevet af en tegningsberettiget… er fuldstændig ude af proportioner. Lad os tage et firma på bare 50 medarbejdere – her vil der normalt kun være en der kan tegne firmaet alene – den administrerende direktør – og måske 2 andre som i fællesskab kan tegne firmaet – typisk salgschef, økonomichef og indkøbschef, men det er typisk kun i samarbejdsaftaler med et langt tidsspænd eller i forbindelse med fusioner, bankengagementer o.lign. at de overhovedet er i spil. Forestil dig ansigtskuløren, hvis Mærsk McKinney Møller skulle underskrive abonnementer fordi en sælger skulle have en ny telefon…

Jeg spurgte rent faktisk ekspedienten, om de virkelig mente det uanset firmastørrelsen. Svaret var… ja!? Da jeg meget undrende spurgte hvorfor – var forklaringen, at de havde haft problemer med at nogle svenskere havde købt dusinvis af telefoner på sygesikringskort… det billede lader vi lige stå lidt… hvis man sælger telefoner til en værdi af omtrentligt 100 tkr. på private folks glatte ansigt uden forudgående kendskab (læs: sygesikringsbevis), så er man i min verden tæt på kriminelt inkompetent som sælger. Og at bruge det som argumentation er udtryk for en så fuldstændig himmelråbende mangel på proportionssans, at det får 3 til at fremstå ekstremt uprofessionelt. Vi snakker B2B – vi snakker mao. om firmaers handel med andre firmaer. Det er supernemt at kreditvurdere firmaer med værktøjer som KOB, Experian mfl. I hvert fald nemt nok til at man kan vurdere om de er kreditværdige til et telefonabonnement på 319,80/md.

Jeg forstår ikke at man har en ekspedient, som første mand en ny kunde møder, som man ikke stoler nok på til at han kan vurdere om manden, der står overfor ham er ansat i et bestemt firma. Evt. slå på tråden til vores firma for at kontrollere at jeg rent faktisk arbejder i firmaet… At involvere back-office i en handel på 319,80 virker fuldstændig forrykt. Jeg kunne forstå det, hvis jeg havde bestilt 15 telefoner med abonnement til en hel afdeling…

Derudover forstår jeg ikke kombinationen af at kræve en fuldmagt fuldstændig udspecificeret samtidig med at ekspedienten under samtalen foreslår diverse bundles, slagtilbud osv. Der er et eller andet grundlæggende galt. Og til sidst forstår jeg slet ikke at man bruger så meget energi på at få kunder til at lægge deres penge et andet sted. Og som et lille afsluttende kuriosum kan det nævnes at da vi skiftede mit private abonnement hos 3 til Telenor, kunne min chef gøre det uden min tilladelse og/eller underskrift… Man undres…

Rules rule software… rule software rules?!

Skrevet - Saturday, April 16th, 2011 kl. 1:57 | Kategori - * Coding, * Rants, English posts.

This post is inspired by my comment on this article.

Basically, his (John Sommez) premise is that if we did not have rules, we’d be dead. Okay, that was the devil reading the bible there for a minute. Don’t get me wrong, I think rules are a good way of learning a craft – memorize these 10 rules and do everything you do according to them (sounds familiar, somehow). And John is adamant about revising rules and all should be well and good.

Basically, what I disagree on is the following sentence: “I always prefer rules over guidelines, [...]“. I have it the other way around. Software is such a difficult and ‘soft’ craft, that if you make black-and-white-rules, you are bound to end up with a conflicting set of rules. Setting up a rule that “We must have 80% test-coverage” – on the surface that seems a fair goal. 80% coverage sounds like a great compromise between a pedantic 100% and the lazy 60% (or even 20%). But wait a minute – 80% coverage means that 80% of your codelines are hit by a test, sure – but does that mean that 80% of your code-lines are without error? No, it means that 80% of your codelines are _executed_ by a test and that we have failed to find any of the remaining defects. Is having a 100% test-coverage of a class with 20 simple properties and no logic worth more than thoroughly testing that difficult-to-manage security algorithm (ending up at only 60% test-coverage of the entire class) where we have more chances of fu…’ing up? Of course not.

What I’m questioning here is not the unit-testing. Unit testing is a sound practise that can be used in a lot of different ways to help improve your coding quality. It is the rule that “All code must be covered with 80% test-coverage.” How would I go about it? I would tell my developers to spend as much time testing a specific class as they feel is justifiable and then concentrate my efforts on peer reviews. Why do I claim this? Because in my experience, the tests I used to write (trying to attain that fabled 90% coverage) caught no defects beyond correcting that someClass.Success that should have been !someClass.Success that I would have found the first time I would have fired up the app. The serious defects were caught when I had someone over to look at my code – because they were faults in logic. You can only test for what you know. If you failed to recognize the correct business-logic, you have no chance in a very warm place in unit-testing your way out of making a mistake.

What I’m opposing is the mechanical nature of rules. Yes, they are comfortable as I don’t have to think – the human mind doesn’t like to think (contrary to many’s belief). The human brain is lazy – it jumps to conclusions whenever the chance presents itself (because otherwise we would be unable to take any but the simplest of choices – Should I use my hands today in pulling up my socks or is there a better way? Hmmm… maybe the remote could… nah… maybe if I went without socks today… Why am I really wearing socks… might thicker shoes not be a better solution… what about that global warming…). So, if you create an intricate ruleset, you are forcing your brain to be lazy. Don’t think – just do – we already thought for you.

John gives an example of when you would figure out how to approach the situation of a bear attacking you. At your computer or at the point of time of the attack? There is a false assumption in there. Can you spot it? The assumption is that you can actually learn how to effectively deflect the attack from the comfort of your computer. Just thinking about variables – are we on soft ground or hard ground? Is the bear protecting it’s cubs? Do I have gun on me? Do I have my daughter with me? Is it an old bear or a young one? Just to name a few of the ones, I as a layman would think important variables – how would you go about setting up the ruleset for deflecting bear-attacks? I’m thinking a multi-volume monster of a manual with different sections for the visually impaired. My argument is “I have not a snowball’s in that warm place” preparing myself from a bear attack unless I spent a year in the wilderness with an experienced hunter teaching me all about bear psychology before I had even a 50/50 chance of surviving (leave aside blind luck), because the first thing I do not know is: How would I react to seeing a bear? I take it that bears react poorly to wetting of pants…

In my opinion the best way to create good software is to try out different methodologies and create a helluva lot of software. And most important of all – release it, so you get feedback as to what works – and what does not. And for the love of all that is holy to you – hire a professional tester to find your blind-spots. Take pride in what you do and strive to do better. You cannot create a ruleset that covers every eventuality.

« Forrige indlægNext Page »Next Page »