När man skapar ett datorprogram är det ju inte bara att sätta sig ner och "programmera". En viktig aspekt av arbetet är modelleringen -- att bestämma vilka regler i källdomänen (den verkliga världen) som ska med till måldomänen (datorprogrammet). Det handlar om att rensa bort allt det som inte behövs för datorberäkningarna, men att inte rensa bort för mycket!
Modellering är ett förbisett kapitel, även på de flesta IT-utbildningar, och på utvecklingsföretag är det ofta väldigt specialiserade personer som håller på med det -- det är arbetsuppgifter som är mycket krävande. Det som gör det så krävande är att när man tar företeelser ur den verkliga världen och ska skriva dem som exekverbar kod för en dator, så måste man också koda allt det som den verkliga världen på ett naturligt sätt hindrar oss från att göra, plus allt det som är så självklart i vår värld att vi aldrig talar om det, eller ens tänker på det.
I ett tidigare inlägg talade vi om tvätt-temperaturer. Hur gör man för att modellera fördelningen av tvätt baserat på tvättmärkningen? En säker metod är förstås att lägga 40°-tvätt för sig och 60°-tvätt för sig, men det blir inte så effektivt, och det är mycket mer att ta hänsyn till. Ett underförstått samband är att "det som kan tvättas i 60° far inte illa av att tvättas i 40° men blir kanske inte tillräckligt rent". Så vi fyller först med 40°-tvätt och sen fyller vi på med sån 60°-tvätt som inte är så smutsig att den måste tvättas i 60°.
Nästa regel gäller färgerna. Ett svagt färgat plagg får tvättas med vad som helst, men ett starkt färgat plagg måste tvättas med mörka plagg. Det blir som med blodgrupperna -- den som har 0-blod kan ge blod till vem som helst men inte få från någon -- eller var det tvärtom?
Det jag vill komma fram till är förstås inte de exakta reglerna för att tvätta tvätt, utan att även helt triviala vardagsgöromål ger så komplexa regler att man verkligen måste tänka efter för att förstå om de är välformulerade trots att de inte är skrivna med programkod utan på vanlig svenska. Och detsamma gäller ju för programmerare också, trots att de är mycket mer vana att tänka i den sortens logik. Men tro fan att det blir mycket buggar när det blir så komplext även med riktigt enkla samband att modellera.
/Simon
...eller så kör man allt i 60° kulör och sorterar efterhand bort dom plagg som inte överlever. När man väl upnått ett lager av enbart tåliga plagg så har man ett problem mindre att bekymra sig för.
Posted by: Janne | 02 november 2004 at 16:48
Och alla i en gämngrå färg med rosa inslag ;-)
Posted by: Micke | 02 november 2004 at 18:12
Jag sa inte att metoden är _helt_ utan problem :)
Fast mer allvarligt, det finns ibland en tendens att sikta på på en 100%-ig lösning som blir fantastiskt komplicerad, tar lång tid att bygga, och mycket svår att få felfri, när man kanske egentligen hade haft bättre nytta av nåt som löser 80% enkelt, snabbt och tillförlitligt. Problemen med den partiella, bristfälliga, lösningen kan helt enkelt ibland vara så mycket mindre än problemen med att få det "riktiga" lösningen att faktiskt fungera som avsett.
Posted by: Janne | 03 november 2004 at 05:37
Men om vi nu tänker oss att det inte är tvätt det är frågan om, utan något lite viktigare -- ett administrativt system för att sköta barnomsorg, posthantering eller vad som helst. Visst är det enklare att göra ett system som passar för 80 % av barnen/breven etc, men är det acceptabelt??
Posted by: Simon | 15 november 2004 at 11:23