lørdag 15. juni 2019

Sosialgeometri

Av og til finner jeg at er det nyttig å introdusere noen begreper som ikke har noen rot i verken etablert teori eller praksis. Jeg gjør det for å etablere et holdepunkt for kommuniksajon og et en utfordring for min egen skriving og for argumentasjon. Sosialgeometri er et slikt begrep.

Begrepet har sin rot i et eksempel som er beskrevet nedenfor. Det er koplet til sammenhengen mellom programmering og matematikk. Hensikten er å se nærmere på hvordan samarbeid og deling av erfaringer kan realiseres og testes. Eksempelet bruker MicroBit og Processing.

Basiseksperimentet

Utgangspunktet er følgende scenario:

En PC med Processing installert, 5 MicroBits og 4 personer. Hver person har tilgang til en av microbitene 1..4. Når en person trykker på en av microbitens to knapper sendes et signal over radio til microbit 5. Denne sender meldingen videre til Proseccing-koden (sketchen) som identifiserer brukeren(1..4) og signalet(+/-), og tegner på skjermen.

I utgangspunktet er figuren på skjermen en rett linje. Oppgaven er, uten noen forklaring, helt enkelt slik: "Tegn et rektangel".

Dette eksperimentet er gjort med litt forskjellige brukergrupper i forskjellig alder. Deltagerne finner fort ut at streken brekker opp og at de har kontroll over vinkelen som endrer seg, pluss eller minus, når de trykker på en knapp. De har litt problemer med å finne ut hvem som kontrollerer vilken vinkel, og det kommer forslag av typen "vent litt vi må finne ut hvem som styrer hva". Hvis ikke alle fanger opp dette, og er enige, kan det bli misforståelser. Så begynner diskusjonen om rekkefølge og argumenter av typen "du må øke vinkelen for at..." og "vi må ta den vinkelen først".

Dette er en interessant sosial prosess som reiser spørsmål om innsikt, planlegging, ledelse og matematikkforståelse.

Når problemet er løst får gruppa en tilleggsoppgave: "Endre figuren til en trekant". Det er interessant å se hvordan erfaringene fra rektangelbyggingen påvirker strategien.

Et bredere perspektiv

Vi kan sette eksperimentet ovenfor inn i et større perspektiv for å kunne se litt mer på løsningsstratgier og læring. Et par skisser:

  1. Vi kan tenke oss følgende oppsett: 1 eller flere grupper observerer hvordan en gruppe løser problemet. De kan observere arbeidet på storskjerm, men de får ikke lov til å påvirke prosessen med kommentarer eller forslag. Når gruppe 1 er ferdig skal den andre gruppa prøve å gjøre det samme. Det er da interessant å se om, og eventuelt hva, de har lært av å se den første gruppa. Dels er det interessant om diskusjonen raskt kan føre til enighet om en strategi (lik eller forskjellig) fra hva de første gjorde, og om noen får gjennomslag for en strategi. Det er nærliggende å bruke tidtaking som et mål på og som et incitament til rask problemløsning.
  2. Et altenativt oppsett kan være slik: En gruppe løser problemet utan at de blir observert. Når de er ferdig skal de enten muntlig eller skriftlig overføre sine erfaringer til en ny gruppe. Dette gir en mulighet for å fomulere erfaringer, altså beskrive det de oppfatter som en effektiv problemløsningsstrategi. Hvis tidsforbruk trekkes inn bør det være slik at de to gruppene får en samlet tid, og at de konkurerer med andre slike "1 etter 1" gruppepar.

Begge strategiene ovenfor lar seg lett skalere opp med flere grupper og modifiserte strategier. Det er for eksempel enkeltt å kjøre flere grupper paralellt i samme rom. Radioverføringen av signaler mellom microbit kan knyttes til ulike frekvenser.

Oppsummering

Jeg mangler skolering i pedagogikk og didaktikk på et tilstrekkelig høyt nivå til å kunne framstille disse ideene i en velbegrunnet vitenskaplig setting. Det er min bakgrunn som lærer i programmering og problemløsning som inspirerer meg til å lete etter strategier som kan bidra til å forstå en del problemer som vi lett overser, eller muligheter vi ignorerer. Hvordan er det egentlig vi deler og organiserer erfaringer? Hva er snubletrådene og hva mulighetene?

Jeg begynte med å begrunne begrepet "sosial geometri". Begrepet er da i utgangspunktet knyttet til en sosial process for å i fellesskap(sosial) å lage et kvadrat(geometri). Kanskje det like godt kunne tolkes som strukturen (geometrien) i et gruppesamarbeid? Eller kanskje ikke.

Teknologien

Rent teknisk er eksempelet som er brukt svært enkelt. Det kan lett utvides programmessig og pedagogisk. Det er også slik at microbitene kan fange opp langt flere data enn knappetrykk, f.eks. aksellerasjon temperatur og orientering. Det dessuten mulig kjøpe tilleggsutstyr som øker repetoiret av sensorer betraktelig.

I eksempelet ovenfor er de 4 microbitene som gruppa har tilgang programmert slik (Javascript). "MB1" identifiserer microbit 1.

input.onButtonPressed(Button.A, function () {
    led.unplot(1, 2)
    led.plot(1, 1)
    radio.sendString("MB1:A")
})
input.onButtonPressed(Button.B, function () {
    led.unplot(1, 1)
    led.plot(1, 2)
    radio.sendString("MB1:B")
})
radio.setGroup(6)

Microbiten som tar i mot signalene og kommuniserer med Processing på PC er programmert slik:

radio.onReceivedString(function (receivedString) {
    led.toggle(1, 1)
    serial.redirectToUSB()
    serial.writeLine(receivedString)
})
input.onButtonPressed(Button.A, function () {
    led.toggle(1, 1)
    serial.redirectToUSB()
    serial.writeLine("Hallo")
})
radio.setGroup(6)

Oppsettet og programmeringen av PC'en i Processingog er detaljert beskrevet på websiden MicroBit og Processing

En enkel løsning kan være programmert slik (Java i Processing):

import processing.serial.*;
Serial port;
//Tegn et kvadrat
float side=100;
float[] vinkel;
float dv=5;// vinkel endring

void setup(){
  size(600,800);
  printArray(Serial.list());  
  port = new Serial(this,Serial.list()[0],115200);
  port.bufferUntil(10);
  
  vinkel=new float[4];
  vinkel[0]=vinkel[1]=vinkel[2]=vinkel[3]=0;
}
void draw(){
  background(255,255,255);
  translate(120,400);//origo
  scale(1,-1);// y oppover
  stroke(204, 102, 0);
  strokeWeight(3);
  for(int ix=0; ix < vinkel.length; ix++){
    rotate(radians(vinkel[ix]));
    line(0,0,side,0);
    translate(side,0);
  }  
}

void serialEvent(Serial port) {
 String inData = port.readString();
 // print(inData);
 decodeAndSet(inData.trim());
}

void decodeAndSet(String S){
  S=S.trim();
  String hva=S.substring(0,2);
  if(!hva.equals("MB")){
    println("error: "+hva);
    return;
  }
  //MB-indeks
  int ix=Integer.parseInt(S.substring(2,3));
  // button A or B
  String button=S.substring(4,5);
  println(ix+" : "+button);
  if(button.equals("A"))
    vinkel[ix-1]+=dv;
  else
    vinkel[ix-1]-=dv;
   
}
// mens vi tester:
void keyPressed(){
  if(key=='a') vinkel[0]+=dv;
  if(key=='A') vinkel[0]-=dv;
  if(key=='b') vinkel[1]+=dv;
  if(key=='B') vinkel[1]-=dv;
  if(key=='c') vinkel[2]+=dv;
  if(key=='C') vinkel[2]-=dv;
  if(key=='d') vinkel[3]+=dv;
  if(key=='D') vinkel[3]-=dv;
}

Linker

MicroBit
Processing
MicroBit og processing