lördag, februari 01, 2014

Teknikmissbruket och den odemokratiska mjukvaran

Häromdagen skrev jag en lång rant på twitter om mjukvaruutveckling, vilken till min glädje och förvåning fick oväntat stor respons. Den korta versionen är att jag ser ett stort problem med att vi har ett starkt kapitalistiskt drivet samhälle i kombination med att det i princip sitter mjukvara i allt. Den längre versionen följer här.
Det är lätt att glömma att mjukvarukonstruktion är en relativt ny vetenskap. Vi, som i mänskligheten, har bara använd oss av mjukvara i industriell mening i några decennier. Ibland hör man folk säga att programmering egentligen bara handlar om ettor och nollor och på det sättet har vi såklart använt oss av binära logiksystem mycket längre än så. Att operera en vävstol efter ett mönster är att använda ett slags binärkod. Trampa – etta, trampa inte – nolla osv. Man lastar in sin långa rad ettor och nollor i programminnet på en dator och sen opererar processorn efter det mönstret. Etta – visa nåt på skärmen, nolla– visa inte. Kombinationen av ettor och nollor är oändlig varför alla program kan skrivas, och en oändlig mängd kombinationer av ettor och nollor kan resultera i samma program. Ungefär som när man lagar mat. Man kan ha i grädden eller vinet först, men såsen kommer till slut bestå av samma smaker.
Det finns en uppsjö olika typer av mjukvara. Grafik, inbyggda system, operativsystem, applikationer. I säkerhetskritiska system, som tex styr- och bromssystemet i tåg, används A- och B-kod. I enkelhet går det ut på att två olika grupper mjukvaruuvecklare får samma kravspecifikation som de kodmässigt löser på olika sätt (eftersom de inte får samarbeta), och både program A och B körs parallellt när tågen är i drift. Under färden utvärderar programmen hela tiden hur styrsystemet ska bete sig, och om program A och B kommer fram till olika slutsatser drar man typ i nödbromsen eller vidtar annan säkerhetsåtgärd. A- och B-kod existerar för att reducera det vi kallar den mänskliga faktorn. Att utveckla system på det här sättet kräver dubbel arbetsstyrka och är således dyrt.
För icke säkerhetskritiska system löser man helt enkelt ofta ett mjukvaruproblem med att, ni vet, starta om grunkan. Genom att kallstarta något (dvs bryta strömmen och slå på den igen) försätter man devicen i sitt startupläge och konfiguration och program får chansen att sättas upp igen, förhoppningsvis i rätt ordning. Det som får tex en telefon att hänga sig kan vara många saker, men säkert är att den hamnat i ett läge (ett state) som konstruktören* inte felhanterat. Bra mjukvara gör givetvis rätt, men den klarar också att hantera de lägen då det ändå blivit fel och ta sig ur dem. Kanske genom att tvångsavsluta ett program, men i alla fall inte hänga hela telefonen. För säkerhetskritiska system är det absolut vitalt med felhantering, för apparater som inte riskerar att döda någon är det såklart mindre viktigt och man kan lätt skära i utvecklingskostnaden utan att det gör något.
Eller? Jag återkommer till det.
Om man jämför mjukvarukonstruktion med vår samlade kunskap om hur man bygger hus, broar och mekanisk apparatur blir det tydligt att vi har mycket kvar att lära oss innan kunskapsnivån når samma verkshöjd, eller hur man nu ska uttrycka det. Vi vet hur man bygger en bro och har redan hunnit gå på nitarna, dvs vi vet vad vi ska undvika för att bron inte ska rasa. Att bli lika bra på mjukvara kanske kommer ta oss ännu längre tid eftersom mjukvara till sin natur, som jag skrev ovan, öppnar upp för oändliga kombinationer. Bra kod är kort och koncis och gör just bara det den ska, men den ska samtidigt vara lättläslig och enkel att underhålla när man upptäcker fel. Alltför kompakt kod blir ofta i efterhand obegriplig för någon annan än den som skrev den, och i industrin jobbar ofta många personer med samma kodbas, eller så tas en kod över när en konstruktör slutar och en annan börjar. Observera att jag säger när och inte om man upptäcker fel, för man upptäcker alltid fel. En bro eller ett hus byggs heller inte i en hast. Det är projekt som fortfarande får ta tid (även om det verkar som att uppförande av tex nya hus kan gå lite för snabbt och bli slarvigt ibland). 
     Mjukvara får väldigt sällan ta tid. Mjukvara som sitter i tåg, flygplan, medicinsk utrustning och maskiner som bokstavligen talat kan bli livsfarliga om de innehåller buggar går att certifiera. Man utsätter då sin mjukvara för massa tester som den ska kunna hantera, och testerna genomförs typiskt av tredje part enligt vissa standardiserade modeller. Inga tester i världen kan dock garantera buggfria system, men vi kan å andra sidan inte skydda oss mot allt i vardagslivet heller. Koden i en pacemaker är garanterat mer vältestad och robust än koden till en digitalbox, och så ska det kanske vara. Det vore en tragedi om en person dog av att hens pacemaker la av, men att digitalboxen krånglar orsakar på sin höjd en irritation vid fredagsmyset.
Eller? Vänta, jag har inte glömt att jag ska återkomma till vad som är viktigt men jag ska bara skriva lite till om mjukvarukonstruktion i stort, nämligen utvecklingsprocessen.
Det finns ingen. I akademin finns kanske ett slags konsensus kring hur man bygger bra och robusta system men industrin står långt ifrån akademin. I industrin styr kapitalet och kapitalet vill växa. För att växa, sägs det, måste man vara konkurrenskraftig och snabb. Om ens konkurrent utkommer med en ny snajsig modell måste man själv prångla ut en likvärdig eller helst bättre snabbt som attan för att inte tappa de eftertraktansvärda marknadsandelarna. Företag existerar enbart för att någon eller några tror att de ska generera pengar, vilket är helt logiskt i en värld där alla är beroende av pengar. Att få ut den nya modellen x snabbt kommer därför trumfa att x ska fungera så nära felfritt som möjligt. Tempot för nya pacemakers på marknaden är lite krasst långsammare än för nya mobiltelefoner eftersom ett företag som säljer livsuppehållande apparatur som har ihjäl folk inte kommer att överleva. Den ekonomiska förlusten med en långsammare utvecklingscykel vinner över risken för själva företagets död. Utvecklingscykeln för ny hemelektronik däremot är rasande hetsig. Mjukvara är också förhållandevis billig jämfört med elektronik och mekanik eftersom den är modifierbar. Detta är i grunden helt fantastiskt eftersom det gör att vi kan använda samma typ av hårdvaruplattformar till olika applikationer genom att konfigurera dem med hjälp av olika mjukvara. Hårdvarans design kan förfinas och mjukvara skrivas ny. 
     Men här ligger också mjukvarans inneboende konflikt under ett kapitalistiskt system. Kapitalets syn på mjukvara är just denna: den kan alltid göras om. Mjukvara, i allt utom möjligtvis sådant som pacemakers, betraktas som slit- och släng. Utvecklingsprocessen är därefter. Jag har hittills aldrig under mina arbetsverksamma år fått tillräcklig tid på mig att systemera, dvs att i god tid innan produktion klura ut hur mjukvaran bäst kan struktureras upp och delas in i olika block så att den på sikt blir stabil, lättbegriplig och enkel att underhålla. "Nu är det bara mjukvara kvar" har jag hört många gånger. Man bortser alltså från att mjukvarukonstruktion 1) är en ny vetenskap, 2) är ett hantverke som alla utför lite på sitt eget sätt och 3) är det som produktifierar hårdvaran och ofta avgör hur produkten kan användas. En kamera kan vara hur bra som helst men med ett dåligt användargränssnitt tröttnar folk och köper en ny.

Alltså. Som mjukvarudesigner har jag få regler att förhålla mig till eftersom ingen vet vilka reglerna bör vara, vilket i sin tur öppnar upp för att introducera buggar. Om jag inte kan fransk grammatik kan jag kanske skriva ett brev till en fransk vän, men sannolikheten att det innehåller fel är stort. Kontentan kanske går fram men detaljerna går förlorade. Väldigt ofta testar jag också min egen kod vilket är dåligt eftersom jag vet om dess brister och undermedvetet kan råka undvika att testa just det som kommer faila.  Sällan kontrollerar dessutom någon annan hur min kod ser ut. Kodgranskning är tidskrävande och tidsbrist är alltid ett problem i mjukvaruprocesser. Mjukvara är väldigt ofta det sista man gör innan produkten ska ut, och tid kommer därför att skäras av där och inte tidigare i processen. Dokumentation och kunskapsspridning tar också tid från själva utvecklingen och hinns nästan aldrig med. Det är viktigare att modell x har en feature y än att vi dokumenterar hur modell x fungerar. Om ett år när x buggar ihop blir det alltså svinjobbigt och dyrt att laga den och konsumenten köper därför hellre en ny. Kapitalet är inte långsiktigt och kan man tjäna pengar nu är det i princip alltid bättre än att tjäna pengar sen.
Nu ska jag återkomma till det som är viktigt. Kapitalismen skapar en sanslös mängd modeller för hemelektronik x, y och z, men kvaliteten får stryka på foten. Jag har skrivit att i viktiga system som har hand om liv är detta ett mindre problem, men även tåg, flyg och bilar har kraschat som en direkt följd av dålig mjukvara. Det kanske verkar oviktigt om våra mobiltelefoner och tv-apparater är kackiga, men here's the thing: jorden svämmar över av miljöfarligt eleketronikskrot och människor dör av det också. Många, fler än vad som ryms i ett flygplan. Och många fler kommer att dö. Det direkt farliga är utvinningen av metaller, som dels i sig är giftiga och påverkar miljön och människorna som jobbar med dem, och även det faktum att utvinningen sker i fattiga områden under undermåliga omständigheter där mänskliga rättigheter inte respekteras. Mer indirekt påverkar all vår överkonsumtion klimatet på jorden. Klimatförändringarna orsakar torka, översvämningar och missväxt och skapar fattigdom och fattigdom skapar krig. Krig dödar. Elektronikskrot är givetvis inte den enda boven i dramat** men vi ska vara medvetna om att det i dag sitter mjukvara i allt och att utvecklingen bara pekar uppåt. Det är kortsiktigt billigt med snabbhackad mjukvara, men med kortare livslängd som dold kostnad. Dålig mjukvara gör dyrbar och giftig hårdvara till skrot snabbare. Och som sagt, kapitalismens kortsiktighet är ett problem generellt i samband med miljö- och etikfrågor, men mjukvara är redan en storspelare inom industrin eftersom den är så lätt att stoppa in i allt. Mjukvaran i sig kan tyckas vara ytterst miljövänlig eftersom den inte tar någon fysisk plats, den "finns" inte, den kräver inga giftiga ämnen (mer än metangasen vi joltcolasörplare pruttar ut hehe) men den är navet i en storskalig produktion som spänner över alla områden. Att misshandla utvecklingscykeln och systematiskt skära ner på tiden som mjukvarukonstruktörer lägger på sin produkt skapar i det stora perspektivet enorma problem. Det som är mjukvarans fantastiska och revolutionerande egenskaper, lättheten! smidigheten! modifierbarheten! möjligheterna!, blir under kapitalismen oerhört lätta att missbruka.
Jag ser få vägar ut ur det här och jag är en själv en del av problematiken. Jag jobbar med mjukvara varje dag och vet att jag många gånger inte lämnar ifrån mig optimal kod***. Men jag gillar inte hemelektronik och jag finner ingen vidare glädje i att konsumera den, även om jag gör det ändå ibland eftersom jag vill ha en tv, en telefon och en micro. Men även om det är ett jättejobb tror jag att det finns ett sätt ut ur detta. För att omskapa synen på hur vi konstruerar våra konsumtionsprylar måste vi öppna upp fältet för en bredare massa och sätta teknik i relation till miljö och etik. Företag må prata om detta i dag men det är helt ärligt bara bullshit. Jag älskar teknik men dagens tekniksyn är inte och kommer inte att bli vår räddning på miljö- och fattigdomsproblem. Jag är övertygad om att teknik i sig kan göra underverk för att tjäna mänskligheten, om vi inte missbrukar den.
Våra teknikkunskaper måste därför spridas och de måste spridas till människor med värderingar som inte är kapitalets. Generaliserat underhålls kapitalet av vita män i västvärlden och dessa män är inte bärare av de värderingar som har potential att skapa ett samhälle där miljö, mänskliga rättigheter, hållbarhet och inkludering utgör hörnstenar. Kapitalets män skapar teknik för egen vinnings skull i en värld där vissa grupper kan utnyttjas för att samma kapital skapar enorma ekonomiska klyftor. Jag vet att det inte är så enkelt och utvecklingen av mobiltelefoner och -nät har tex medfört stora förenklingar i områden där fast infrastruktur saknas, men människor skadas fortfarande i processen. Vi skulle kunna göra bättre. Vi skulle kunna utveckla hållbar teknik utan att ställa grupper mot varandra och fokusera vår utveckling till teknik som direkt bidrar till en bättre miljö. Vi skulle också kunna avstanna utveckling av mycket brukselektronik. Lycka är ett komplext begrepp och jag tror verkligen att en ny blank pryl har förmågan att skapa lycka, men det är inte lycka som inte skulle kunna gå att ersätta med en annan typ. Jag menar alltså inte att fnysa åt och förringa de som älskar hemelektronik och jag själv har ett liknande beteende kring kläder, men vi måste lyfta frågan kring vad vi lär oss att associera med lycka. Det är inlärt och inte av naturen givet att ett nytt ljudsystem ger oss en kick.
Det finns så sjukt mycket mer att säga om hur ägandeskapet över teknik måste skiftas, och att tex kvinnor och grupper med annan levd erfarenhet än vita västmän, och därmed större förståelse för vad som behövs i världen, måste ges tillträde till tekniksfären för att demokratisera kunskapen, men jag lämnar det till ett senare tillfälle och hänvisar helt fräckt till mig själv och en grej jag skrev åt Framtidsstafetten 2012, som var en del av Framtidskommissionens arbete. http://cyborgmanifesto.blogspot.se/2012/03/mer-sjalvfortroende-for-alla.html.

* Det kan givetvis vara hårdvara som krånglar men här handlar det om mjukvara, och väldigt ofta är det mjukvarans uppgift att hantera hårdvaran så gränsen för vad som är hårdvaru- och mjukvarudesignerns fel kan vara svår att avgöra.
** Väst överkonsumerar också ohyggliga mängder kläder, mat, heminredning osv osv, men tex metaller är en ändlig resurs på ett mer direkt sätt än bomull till kläder och mat som kan ordlas.
*** Inte optimal som i felfri eftersom det knappt existerar, utan optimal som i väl genomarbetad.

6 kommentarer:

Anonymous mjg sa...

En aspekt som jag inte ser att du tar upp är också att i konsumentelektronik kan mjukvara användas för att tvinga konsumenter att byta upp sig.

Mjukvara görs inte bakåtkompatibel just för att företag ska kunna kränga nya saker under sken att de "förbättrar" sin produkt.

Några som jag tycker är speciellt bra på det är Apple (och i viss mån Microsoft) var uppgraderingar kan göra en annars helt välfunktionerande produkt obrukbar.

Det är givetvis inte omedvetet, de är inte ett gäng nördar ideologiskt drivna av att ständigt förbättra sig, de driver affär. Men det adderar till skrotberget.

2/01/2014 4:48 em  
Anonymous Anonym sa...

Gud ja. Fick inte in allt i samma inlägg men det är ytterligare ett stort problem.
/Chris

2/01/2014 4:51 em  
Anonymous Anonym sa...

Hej,

tack för inlägget i debatten.

har du engagerat dig i http://geekgirlmeetup.com/ eller i techeq.se ? Tänkte tipsa om dem annars.

ha det gott

2/03/2014 8:34 em  
Anonymous Johannes sa...

Intressant inlägg, men jag tror ärligt talat inte att någon annan grupp än vita män i väst (har intersektionaliteten inte blivit väldigt reducerad på senare tid?) skulle bete sig så grundläggande annorlunda om de satt vid rodret.

Kapitalet underhålls inte av värderingar, utan av kapitalintresse. Värderingar och erfarenheter kan påverka arbetarnas agerande, självsyn, organisering etc. men kapitalägarna är mycket mer homogena eftersom deras intresse är så tydligt för dem själva. Så länge det är skadligt för tillväxten med hållbara prylar lär vi inte se större produktion av hållbara prylar. Det perspektivet tyckte jag att du tappade i slutdelen...

2/05/2014 4:50 em  
Blogger kai sa...

Aaah, det är alldeles för länge sen jag tittade in här sist!

Du har lyckats knyta ihop en massa företeelser jag inte ens tänkt på hänger ihop.

Det jag möjligen kan bidra med är en observation av konsumenternas beteende: Jag om någon borde ju känna till vikten av väl utformade gränssnitt och premiera dem som utför dem väl, men ändå när jag senast hade anledning att köpa en bergssprängare och kunde välja mellan en som hade ett rätt dåligt gränssnitt och ett som hade ett halvhyfsat men var dubbelt så dyr, så nog valde jag i min snålhet den billigare modellen.

Ris för egen rygg…

4/30/2014 11:34 em  
Anonymous Anonym sa...

Hej Kai!

Iiiih vad kul att du läser! :)))

Ja absolut, så gör jag också. Jag brukar inte heller välja något extremt mycket dyrare framför en viss kvalité, men jag tycker nog inte att (allt) det ansvaret ska hamna på konsumenten heller. Du och jag har iaf möjlighet att förstå kvalitetsskillnader i sw, men det kan nog vara väldigt svårt för folk med andra yrken. Plus, har man inte så mycket pengar kanske man måste välja det billigaste alternativet.

/Chris

5/02/2014 9:48 fm  

Skicka en kommentar

Prenumerera på Kommentarer till inlägget [Atom]

<< Startsida