I dagens kolumn frågar vi oss varför så många system som utger sig för att vara objekt-orienterade inte genomsyras av de fundamentala principerna, och ifall ett procedurellt tänkande är lämpligt för modern programvaruutveckling.
“He’s more machine now than man; twisted and evil”, säger Ben Kenobi i Return of the Jedi och uttrycker därmed i klartext sagans sensmoral. Denna uppfattning är ett vanligt återkommande tema i våra litterära verk, samhällen och livsåskådningar. Så även inom programmering, vilket David West gör en genomgående redogörelse för i boken Objekt Thinking som inspirerat detta blogginlägg.
Bokens röda tråd är att de tankemönster som utgör grunden för objekt-orienterad programmering (objekttänk) är vitt skilda från dem som återfinns i procedurell programmering (datortänk). Här är det viktigt att inse att ens egen programmering inte blir objekt-orienterad enbart för att man kodar i ett språk som marknadsför sig på det viset. Våra konventionella språk har av politiska och affärsmässiga anledningar valt att inte tvinga användaren till objekttänk. Därför är det fullt möjligt att, t.ex., skriva COBOL-kod i Java-syntax.
Varför bry sig? Det funkar ju!
Det är många decennier sedan vår profession kom till insikten att “det funkar” är en väldigt låg ribba. För låg, även i dess fulländade form: “Vi kan inte hitta några buggar”, för dagens system. Vår programvara är en lösning på ett problem som befinner sig i en ständigt föränderlig värld och behöver således kunna följa med och anpassa sig med låg extra kostnad.
Detta problem, maintainability, var den ursprungliga orsaken till att objekt-orienterade idéer föddes. Programvara skriven på traditionellt vis, mer fokuserad på lösningsdomänen (maskinen) än problemdomänen (människan), var helt enkelt för dyr eller riskfylld att uppdatera och gick därför tyst en obeveklig undergång till mötes. All den samhällsnytta som gick förlorad på grund av försämrad product-market fit eller för att få nya innovationer kunde implementeras, är dock kanske den mer tragiska historien.
Okej, så vad är huvudinnehållet?
Kort och gott handlar övergången från datortänk till objekttänk att sluta tänka i datorns termer och istället utgå från världen omkring oss. Ett objekt, t.ex., är inte en datastruktur med ett par mer eller mindre relevanta metoder påklistrade. Det är definitivt inte en anemisk datahållare som via getters och setters manipuleras av hjälpare och hanterare. Våra objekt är representationer av verkliga (potentiellt icke-levande) föremål som vi ger liv och autonomi i en virtuell miljö, i vilken de kan kommunicera, samarbeta och visa upp beteenden gentemot andra självständiga objekt.
När ens system börjar anamma den här typen av tankemönster är det många programmerare som blir förvånade över hur mycket närmare vi kommer de ideal vi alla känner till: Inkapsling, hög kohesion, låg koppling, SOLID och dussintals andra.
Vidare läsningar
Detta blogginlägg inspirerades av Object Thinking, som diskuterar programmering genom en antropologisk lins. Boken redogör för vår kontext – filosofisk, historisk och kulturell – med ett särskilt fokus på skillnaden mellan att försöka skapa bättre programvara genom bättre verktyg och processer i kontrast till genom att förbättra individerna.
Boken har inspirerat en rörelse som har visionen att utveckla programvara fri från procedurella tankemönster. De kallar detta paradigm för Elegant Objects och har, förutom att formulera konkreta principer, utvecklat ett ansenligt antal ramverk och bibliotek samt även ett nytt programmeringsspråk.
Avslutningsvis bör Peopleware nämnas. Vad som lagts ut i detta blogginlägg är, kanske föga förvånande, i sin natur mer sociologiskt än teknologiskt. Enligt boken stämmer detta för majoriteten av vårt fälts problem, vilket betyder att effektiva angreppssätt skiljer sig mot vad vi kanske är vana vid.
Comments