Medborgarprogrammering

I början av året skrev Copyriot om förslaget att man bör satsa på programmering i skolan (även kommentarerna är väldigt intressanta att läsa). Jag har sedan dess tänkt ganska mycket på just denna fråga eftersom jag har börjat använda programmeringsinslag i min egen forskning. Vad är programmering bra för, bortom instrumentella anvädningsområden?

Men här tänkte jag varken diskutera programmering som forskningsmetod eller programmering som något som man lär sig för att bli ”programmerare”. Istället tänker jag att det finns utrymme för att beskriva en (tänkbar) programmeringspraktik som ryms inom begreppet ”medborgarskap”. Alltså, frågan blir istället, kan vi tala om programmering som en slags bildning, en praktik vi kan kalla medborgarprogrammering?

Mina programmeringskunskaper är förvisso (än så länge) ganska ytliga. Jag tillbringade några lata veckor på olika caféer i Beirut med självstudieboken Learn Python the Hard Way och repeterade sedan på Codecademy. Därefter var det enkelt att börja tillämpa dessa grunder på mera specialiserade problem. Python är nämligen inte bara enkelt till sitt syntax, vilket gör inlärningen relativt snabb, utan innehåller framförallt ett gigantiskt bibliotek av mjukvarupaket som enkelt går att importera i den programkod man skriver. Man behöver alltså inte uppfinna hjulet flera gånger.

Trots att mina programmmeringskunskaper är ganska ytliga har de i någon mening har de ändå gett mig en slags indikation på att det finns ett viktigt ‘kritiskt-intellektuellt’ element i programmering bortom den tillämpade praktiken, ett element som är svårt att tänka utan att först ha redskapen för att kunna tänka dem. Om vi går med på att ett medborgarskap ökar i omfattning och agens genom utökade kunskaper har alltså programmeringskunskaperna en dimension som överskrider ”anställningsbarhet i IT-samhället”, dvs. bortom standardargumentet för varför programmering är viktigt.

Ur ett medborgerligt perspektiv är det kanske viktigaste med programmering att vi kan tänka bortom världen så som den är given till oss eftersom vi i allt större utsträckning begriper den. I dagens samhälle utgör den ökade digitaliseringen en central förändringsanordning. Att acceptera den så som den är ”förprogrammerad” – att bara ge upp och bli ställd av den – är inte rätt väg framåt.

När man diskuterar värdet av programmeringskunskaper stöter man ofta på två skeptiska invändningar. Den första är mediehistorisk och lyder ungefär ”men typsättarna, boktryckarna, telegrafisterna, bokbindarna, kameramännen hade enbart tekniska kunskaper som andra sedan omvandlade till idéer, handlingar och kunskaper”. Det är kanske sant att om man kan binda en bok eller telegrafera ett meddelande så har man i dessa fall väldigt begränsade kunskaper och får inte mera makt över ”innehållet”. Man kan till och med tänka sig en icke-läskunnig bokbindare. Men, denna jämförelse haltar på flera sätt. För det första lämnar denna typ av (funktionalistisk) mediematerialistisk teori väldigt lite utrymme för att inkorporera ett tänkande i anordningarna som analyseras. För det andra inbegriper programmering bara i begränsad utsträckning något som har med ”medier” eller ”innehåll” att göra. Programmering omfattar ju alla typer av problem som kan omvandlas till maskininstruktioner, inte bara tillverkandet av något som kan ”medieras” (typsättarens datormotsvarighet är kanske html-kodaren, fast redan här är den senare kvalitativt sett mera avancerad).

Inte bara medier är programmerade. Även infrastruktur och saker som vi sällan lägger märke till i vårt vardagliga liv är programmerade, direkt eller indirekt. Att slänga soporna, låna en bok på biblioteket, gå till tandläkaren, handla mat – alla dessa aktiviteter är datoriserade. Och även om de är ”teoretiskt” genomförbara utan att blanda in datorer (så gjordes det ju ”förr”) så är det praktiskt taget omöjligt. Kostnaderna och prishöjningarna (alternativt lönesänkningarna) skulle vara alltför stora.

Moderniteten går inte att begripa i sin nuvarande form utan att begripa dess maskininstruktioner.

Med detta vill jag dock inte säga att man måste lära sig programmering för att förstå moderniteten, det vore ju minst sagt begränsande. Vad jag vill mena är istället att programmeringskunskaper bidrar till att förstå den produktiva infrastruktur som hela tiden skjuts framåt i en slags moderniseringsfront som präglar vår samtid. På samma sätt som massproduktion, standardisering, löpande band, byråkratisering utgör konstitutiva element i nittonhundratalets industrikapitalism, har datoriseringen utlöst en serie kvalitativa skillnader i hur våra moderna liv ”formateras”, för att låna ett begrepp från filsystemens värld. Förvisso är vi människor inga disketter (minns ni dem!) som formateras, men när vi ska köpa en liter mjölk är det praktist omöjligt att inte involvera programmerade maskiner.

Den andra invändningen brukar klinga i en tonalitet av falskt medvetande och ”totaliseringstänkande”. Denna skeptiska idé brukar i första led bestå av en kritik av ‘programmeringsoptimismen’ (en optimism som ofta uttrycks av politiker, ”evangelister” och företag) och istället visa hur denna är en produkt av vad man slarvigt kan kalla för en ”kapitalistisk ideologi”. All överbyggnad som talar varmt om programmeringens medborgerliga, demokratiska eller bildningsmässiga kapaciteter är i grunden underblåst av och hämtar sin näring från ett ökande behov av programmerare som arbetare. Google sponsrar programmering och öppen källkod med ett givet egenintresse av framtida arbetskraft. Politiker som säger att vi ska lära barnen att programmera har i baktanken en framtida tillväxt och välfärd.

Båda invändningarna har en viss giltighet. Speciellt när programmering utförs i allt mera specialiserade företag och när programmeringsarbetsuppgifter flyter fritt på en globaliserad marknad. De miljoner rader kod som vi dagligen använder oss av bara genom att slå på våra datorer, telefoner eller busskort är abstraherade produkter som köps och säljs på en global marknad. Vi förblir i stor utsträckning konsumenter av dessa produkter.

Men invändningarna motsäger inte att det parallellt med en sådan mittfåra kan finnas utrymme för en annan form av programmering, en form som upptäcker och omformar de existentiella maskininstruktioner som omger oss.

Jag vill inte definiera vad en sådan form skulle kunna inbegripa. Det är troligtvis en dålig idé eftersom exakt vad som är programmerbart och vad som kommer att vara programmerbart i framtiden är en ganska öppen fråga. Dessutom har jag börjat tänka på dessa saker först och främst genom att mina väldigt vardagliga observationer förändrades i takt med att jag tänkte alltmer på programmering medan jag lärde mig Python. Att se hur världen är programmerad gränsar i sin överdrivna form till hallucination, en kognitiv patologi där allt blir kod. Jag ser elementet i lägenheten och funderar på hur termostaten är programmerad med olika if-satser för att kunna slå av och på värmen vid rätt tillfälle. Jag åker spårvagn och funderar på om det går att hämta informationen om trafiken i realtid från något API på internet.

Jag funderar på när Vetenskap och Folkbildning gör en opinionsundersökning och om hur man lättare kunde räkna ut felmarginaler.

Medborgarprogrammering handlar inte om att man kan mäta ”demokratiska effekter” av olika projekt och produkter. Snarare tänker jag att man borde ta utgångspunkt i hur det kritiska tänkandet förändras. Om det alls förändras? Vad tror ni?

8 reaktioner till “Medborgarprogrammering”

  1. Som du onekligen upplevt så förändras ens tankemönster av att lära sig programmering, men om det utvecklas kritiskt vettekulan. Det känns snarare som att alltför många programmerare landar i en teknokratisk/cybernetisk tankefälla, där människors upplevelser och känslor är problem att ta sig runt snarare än faktorer att ta i beaktande. Samhälls-input istället för output, så att säga, och dessutom en statisk bakgrund snarare än något dynamiskt.

    Allteftersom jag har dykt djupare in i akademins korridorer, specifikt i kontexten ”artificiell intelligens”, desto mer inser jag vilka enorma problem det är att koda något _flexibelt_, och än värre _självreglerande_.

    Likaså har jag mer och mer insett att det inte nödvändigtvis är rimligt med tanken på att ”code is law” och vice versa – lag innehåller alltid bedömningsmoment, något som saknas i kod (däremot vore versionshantering och spårbarhet en utmärkt pryl att implementera för lagstiftning).

    Det programmering huvudsakligen hjälper till att bygga upp är förmåga till abstraktion och systematik, tror jag, vilket är nog så viktigt och användbart, inte minst för att lösa återkommande problem. Dock behövs det nog ett Enkelt(tm) stöd i operativsystemen för egenskrivna program/appar/snippets som nån slags förutsättning för att hålla programmerandet igång. UNIX/Linux har ju det via skalet, men sådant lär ju se ”jobbigt” och ”farligt” ut. Apple hade ju en gång i tiden HyperCards som nog var ungefär vad man skulle vilja komma åt, men det gick i graven när OS X dök upp…

  2. Petter: Jo, programmering har ingen inneboende kritisk funktion. Man kan likaväl nöja sig med att bara får ett välbetalt IT-jobb.

    Programmeringen måste alltså kombineras med någon form av gemensamma problem, en kritisk diskussion om något eller en intervention. Framförallt hittar man denna spännande mix i ”hackerkulturen”. Men det är få som hittar dit, tyvärr. Därför tänker jag att det måste till någon form av breddning bortom ”hacktivismen”. Kanske bör man då gå via andra institutioner, exempelvis skolan.

    Men hur går vi från ”corporate” programmering till kritisk medborgarprogrammering? Jag vet inte riktigt.

    Men jag är inte helt säker på att det behövs enklare gränssnitt. Eller, kanske är det så. Jag kanske förlitar mig på egna erfarenheter för mycket. Men att lära sig syntaxet i ett av de mera lättlärda högnivåspråken (Python, Ruby, Javascript) och sedan börja lösa ganska avancerade problem, är inte supersvårt. Man måste komma över tröskeln att det ”gör ont i ögonen” av att läsa och skriva koden, men sedan förändras hjärnan så att den begriper vad den gör.

  3. Extremt trevligt inlägg! För att förstå den värld bortom det fysiska som IT placerar oss i och ”tänka bortom världen så som den är given till oss” behöver man ”redskapen för att kunna tänka” tankar om dem, som upplevelsen av att skapa egna program är bästa sättet att få. Att bidra till medborgarprogrammering är en mission jag har i livet.

    Petter har fövisso rätt i att programmeringskunskaper inte automatiskt ger kritiskt tänkande. Däremot är kunskaperna en förutsättning för kritiskt tänkande om det de ger oss förståelse för. Programmering är alltså inte hela lösningen, men en del av den man knappast kan undkomma. Den ger förutsättningar för det medborgartänkande du är ute efter, och även andra sorters nytänkande. Det du ser som ”en kognitiv patologi där allt blir kod” har t.ex. en koppling till vad några kallar ”den algoritmiska linsen” på naturvetenskap. Den ersätter inte tidigare synsätt, men kompletterar dem och ger nya insikter.

    På ett plan finns risken att programmeringskunskaper initialt ger en effekt som liknar försämring av kritiskt tänkande: När man har lärt sig grundläggande programmering och insett hur enkla mekanismer kan ge häpnadsväckande intressanta resultat, drar man kanske omedvetet den felaktiga slutsatsen att programmering kan åstadkomma vad som helst. Boten mot det är andra datalogiska begrepp: problems inneboende beräkningskomplexitet, och beräkningsbarhet. Man behöver förstå att även om man lätt kan skriva ett program som i princip är en korrekt lösning på ett visst väldefinierat problem, kan den kombinatoriska explosionen innebära att man i praktiken kommer att behöva vänta för alltid på lösningen. Även om man kunde bygga CPU av varenda atom man ser, och kunde låtit dem alla köra parallellt sedan Big Bang, kunde man vid det här laget bara ha kommit igenom en försumbar del av lösningen. Så är det för många intressanta och relevanta problem, och dessutom finns principiellt oberäkningsbara problem (haltproblemet är enklaste exemplet; att beräkna Kolmogorovkomplexitet är intressantare, och har koppling till Gödels ofullständighetsresultat). Med ordentlig förståelse för det kan man komma över övertron på programmens kraft, till en mer ödmjuk världsbild där allt visserligen är kod, men där de tillvarons mysterier vi är vana vid trots allt kvarstår. Notera att de som varnar för (eller gläds över) en tänkt kommande artificiell allsmäktig superintelligens som ska ”ta över”, ytterst sällan är framstående datavetare, utan snarare personer som fokuserar sin algoritmiska lins lite väl smalt.

    Angående ”code is law”: som jag ser det motsvarar koden och lagen visserligen varandra direkt, men maskinerna de kör på är olika. Lagen är skriven för att köras på maskiner som tar in andra aspekter än vad texten specificerar. Att köra lagkod på alltför mekaniska maskiner – vare sig de är datorer, eller människor som saknar utrymme för egna överväganden i tolkningen – ger obehagliga effekter. (Naturligtvis kan man tänka sig att emulera även den mänskliga processen med en dator, och alltså skriva in människans själ i koden/lagen, men då dyker man ner i det där beräkningskomplexitetshavet igen.)

  4. Tack för de långa och intressanta kommentarerna!

    När det kommer till ”code is law” tror jag att det är dags att pensionera denna jämförelse/metafor.

    Att göra saker med lag, juridik och ”legala medel” innebär en väsensskilt annorlunda tankeprocess och praktik, med helt andra sanningskriterier och ”lyckosamhetsvillkor”. Saker ska tolkas, vägas, ledas i bevis, osv. Lockelsen att det ska gå att få true eller false i slutändan tror jag skymmer själva processens kvalitéer.

    När man programmerar arbetar man i en helt annan tankevärld. Dels arbetar man med olika abstraktioner. Man funderar på hur man ska angripa ett visst problem, och vad man ska välja för lösning som man sedan skissar på och testar. När man sedan har en liten funktion så börjar man leta efter buggar tills den fungerar, sedan kanske man snyggar upp och reducerar mängden kod och kommenterar den så att man förstår vad man har gjort.

    Det som jag tycker är speciellt intressant är hur tänkandet ”expanderar” ju mer programmering man lär sig. Man börjar se en massa nya saker som man betraktar som programmeringsbara, men man ser också var gränserna för programmering går. Exempelvis, jag förstår hur jag kan göra en massa text sökbar eller en massa metadata beräkningsbar. Men jag förstår också var någonstans gränsen dras för när jag måste växla över och läsa texterna eller kontextualisera uträkningarna.

    När jag gjorde en Python-övning som gick ut på att programmera en kassaapparat (som lade till och drog ifrån ett ”lagersaldo”) så lär man sig flera saker. Man lär sig programmeringsspråkets syntax och dess sätt att bygga en kassaapparat. Man lär sig att skapa motorn i en webshop så man sedan kan bli entreprenör och sälja saker. Men man lär sig också hur det finns en massa kassaapparater i vårt samhälle som är datoriserade och har möjliggjort en massa logistiska lösningar som snabbar upp och rationaliserar det moderna samhället. Sedan kan man ta kassaapparatkoden som man har skrivit, en trettio rader kanske, och fundera på vilka andra saker man kan programmera med en liknande approach. På så sätt får man en abstrakt-kritisk förmåga (tror jag).

  5. Med risk för att fastna i sidospåret ”code is law”: jag tycker den analogin funkar för att beskriva vad som styr i programmens universum. Precis som ”naturlagar” är en användbar analogi mellan juridik och fysik. Naturligtvis funkar analogin bara mycket begränsade aspekter av respektive tankevärld, men så är det ju med analogier.

  6. Ja, om vi tillägger analogins begränsningar 😀

    Natur-”lagarna” är speciellt intressanta eftersom de kräver sådana oerhört avancerade apparater för att göras vetbara. Hubble-teleskop, svepelektronmikroskop, lackmuspapper … (men även de måste programmeras, kanske inte det sista dock).

  7. Tack för ett bra inlägg som stärker mig i min övertygelse om nyttan med att ”alla” lär sig programmera. Hittills har mina argument i första hand kretsat kring den intellektuella nyttan i att behärska algoritmiskt tänkande men jag tror också fullt och fast även på en medborgarnytta. Om människan förstår att det är programmerade interface de möter när de registrerar uppgifter på nätet för t.ex. Försäkringskassan tror jag att det ger dem en mer realistisk bild av vad det faktiskt är som händer, vilka problem de kan räkna med och hur systemet kommer att behandla uppgifterna.

  8. UddaBoktips: Ja, jag tror att det finns en demokratisk och folkbildande nytta med programmering. Så att man varken underskattar eller överskattar vad datorsystemen egentligen gör.

    Alla som fascineras över vårt ”algoritmiska samhälle” borde skriva några algoritmer för att se vad som händer. Annars fortsätter man bara att svepa med fingret över sin pekskärm i tron att något mystiskt och obegripligt händer inuti ”maskinen”.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Time limit is exhausted. Please reload CAPTCHA.