Abstraktion i systemutveckling och i matematik
Ett brev från detta datum för tre år sedan, till en vän som är matematiker:
Jag tänker en hel del på “software architecture” nuförtiden och försöker dra paralleller till en massa andra discipliner och områden.
När det gäller ett mjukvarusystem som ska lösa ett problem så finns det ett antal koncept i problemområdet som man vill representera som element i systemet. Är det ett personalsystem är det naturligt att representera en anställd som ett “objekt”, liksom avdelningen där han jobbar, hans löneplan, osv.
Därutöver finns det verksamhetsregler som representeras av element och relationer mellan element. Tillsammans bildar elementen och relationerna dem emellan en struktur, där varje element är en abstraktion som döljer viss komplexitet. När man beaktar den delen av systemet som rör regler för beräkning av olika ersättningar så gör abstraktionen att man kan bortse från “det andra”. Även om objekten för de anställda behandlas så ses de i sammanhanget som abstraktioner. De är bara Anställda, medan i en annan del av systemet hanteras endast chefer på en viss nivå, och behandlas då som Mellanchefer.
Om man istället tänker sig en bil, så på finns det en mängd olika abstraktionsnivåer att titta på den. Utan abstraktion överväldigas man av antalet ingående element. Om man för stunden bekymrar sig för motorn så kan man bortse från askkoppar, luftkonditionering, transmission, etc.
För ett personalsystem är det ju rätt lätt att hitta abstrakta koncept, eller att “identifiera klasser”, medan det för andra saker är svårare. Ibland får man hitta på dem och försöka sträva efter att göra dem så tydliga och intuitiva som möjligt (eftersom de saknar motstycke i verkligheten). I andra fall kan man låna ett koncept från verkligheten och återanvända det. Då blir det mer “metaforisk abstraktion”. T ex kan man beskriva ett system som en bikupa med bin som skickas ut och återvänder med information om yttervärlden, eller som en “assembly line”.
Jag förstår att abstraktion säkert används inom matematiken, men jag är nyfiken på hur. Jag kan tänka mig att det finns enorm komplexa matematiska “system”, där man för att de ska vara så förståeliga och hanterbara som möjligt försöker representera det med hjälp av abstraktioner.
Jag antar också att det förekommer “matematikkonsulter” som kontrakteras för att lösa problem. Det borde ju likna systemutvecklingsuppdrag litegrann, tycker jag. Om problemen formuleras i en specifikation på något sätt, försöker man använda sig i första hand av koncept i den specifikationen då, t ex? Det gör man ju med mjukvaruutveckling. Helst vill man skapa en gemensam vokabulär som både beställaren och leverantören kan använda i diskussioner.
/P.
Vi möttes någon vecka senare och diskuterade det över en lunch. Skrev två anteckningar om det här.