Det lilla steget från verklighet till programmeringLektion tre

I förlängningen kan ju de färdigheter vi sorterar in under datalogiskt tänkande leda till faktisk programmering.  Detta steg – att gå från något som för många är högst naturliga och logiska färdigheter, till faktisk programmering – är en abstraktion många tycker är svår. Därför kommer här den enklast tänkbara övningen – fortsatt med biblioteksomflyttning som tunt påklistrat tema.

Bibliotekets layout

Nedan finns en bild på Vänneryds bibliotek som har en grundläggande kvadratisk huvudsal med en central fyrkantig trapphall som leder ner till entréplan. Plattor på golvet gör att salen lämpar sig utmärkt för diverse tankeexperiment.

Abstraktion av ett biblioteksrum. Ett rutnät med 10x10 rutor. I centrum, på rutorna 5:5, 5:6, 6:5, 6:6 finns en pelare som inte kan passeras.

Flyttbara hyllor

Med jämna mellanrum gör man omorganiseringar av samlingarna. Lyckligtvis är bokhyllorna praktiskt flyttbara på hjul men hjulens beskaffenhet gör att hyllorna bara kan flyttas lodrätt eller vågrätt – inte diagonalt.

Att uttrycka flytt av hyllor med representerad och modellerad information

Om vi på enklaste sättet vill visa på förflyttning av hyllor kan vi bryta ner det i ett antal enkla symboler, visat här nedan.

Ett uppsättning av tillgängliga symboler att "programmera" med: I ordning: pil ner, pil höger, pil upppil vänster, hakparantes vänster, hakparanters höger, gångertecken, 1, 2, 3, 4, ,5

Att uttrycka flytt av hyllor med så lite symboler som möjligt

Låt oss nu tänka oss att vi ska representera flytt av hyllor på ett så kort och symboleffektivt sätt som möjligt. Bilden nedan visar startpunkten för en hylla (=A) och den tänkta slutpunkten för denna hylla (=O).

Abstraktion av ett biblioteksrum. Ett rutnät med 10x10 rutor. I centrum, på rutorna 5:5, 5:6, 6:5, 6:6 finns en pelare som inte kan passeras. A=startpunkt på 9:9, O=slutpunkt på 7:6

Fundera på hur du med så få symboler som möjligt skulle kunna uttrycka denna förflyttning.

  • Du skulle kunna uttrycka den så här:  ← ← ↑
  • Du skulle också kunna uttrycka den så här: [← ] x2 ↑

I detta första läge är det sista sättet att representera förflyttningen faktiskt längre men det ändras snabbt när du ska försöka uttrycka något mer komplext.

Titta nu på ett nytt förflyttningsexempel. Återigen visar bilden startpunkten för en hylla (=A) och den tänkta slutpunkten för denna hylla (=O) . Fundera på hur du skulle kunna presentera förflyttingen med så få symboler som möjligt.

Abstraktion av ett biblioteksrum. Ett rutnät med 10x10 rutor. I centrum, på rutorna 5:5, 5:6, 6:5, 6:6 finns en pelare som inte kan passeras. A=startpunkt på 7:7, O=slutpunkt på 2:5

Du skulle kunna skriva:  ↑ ↑ ↑ ↑ ↑ ↑← ← ←

Men du skulle också kunna skriva på andra sätt som är kortare. Till exempel: [↑ ↑ ←]x3

Lite enkelt kan man säga att ju mer komplexa omflyttningar som krävs ju större nytta har du av att bryta ner saker i mönster och hanterbara sekvenser.

Vad visar detta tankeexperiment?

Genom att tänka på detta sätt har du övat att bryta ner problem, att se mönster och att representera denna information med hjälp av symboler. När du formulerar förflyttningen med hjälp av symboler på det mest effektiva sättet är det i praktiken en form av kod, och som med all form av kod vill du att den ska vara så precis och så effektivt formulerad som möjligt.

Steget till programmering

Det som sedan fullbordar det datalogiska i termen datalogiskt tänkande är just när du tar steget fullt ut och använder de färdigheter du redan har och med hjälp av detta skapar en algoritm. En steg-för-steg-instruktion som logiskt ger datorn all information den behöver för att beräkna ett problem.

I ovanstående exempel skulle det inte vara svårt för en programmerare att använda något av de programmeringsspråk som datorer använder och mata in de faktorer vi beskrivit (bibliotekets yta, hur bokhyllorna kan röra sig) och med hjälp av detta program ta en dators hjälp att räkna ut det mest effektiva sättet att förflytta saker. I just detta tankexempel beskrev vi något lätt och det kanske skulle vara slöseri med tid att engagera en dator för att göra uträkningar kring något som en människa själv kan göra utan problem. Men datalogiskt tänkande och programmering blir användbart och lönsamt när komplexiteten ökar.

Att schemalägga personalstyrkan på ett stort bibliotek på effektivaste sätt – utifrån mängder av faktorer som halvtider, sjukskrivningar och dylikt – kan med fördel göras med hjälp av ett program som fått alla faktorer representerade och strukturerade och som getts instruktioner om prioriteringar. Med miljontals beräkningar i sekunden kan dubbelbeläggningar eller avvikelser i schema, som kanske skulle tagit en människa lång tid att upptäcka, istället hittas omedelbart.

 

Övning

Titta på det avslutande förflyttningsexemplet. Även denna gång visar exemplet hyllor som ska flyttas. Hyllorna på position A och O ska byta plats (av någon outgrundlig anledning).

  • Visa båda förflyttningarna med så få symboler som möjligt. Det finns flera lösningar på problemet så klart, men hur få symboler kan du använda?
  • Visa sedan exemplet för en kollega och be denna att också göra samma övning. Jämför era resultat och era idéer.
Abstraktion av ett biblioteksrum. Ett rutnät med 10x10 rutor. I centrum, på rutorna 5:5, 5:6, 6:5, 6:6 finns en pelare som inte kan passeras. A=startpunkt på 8:7, O=slutpunkt på 5:1
Om du loggar in kan du spara dina framsteg och få personligt rekommenderade kurser.

Författare: Christoffer Krämer

Publicerad: 28 februari, 2020