Das „Dining philosophers problem“ – yeah, Informatik!

Das „Dining-Phi­lo­phers-Pro­blem“ ist eine Par­al­le­li­sie­rungs­auf­ga­be aus der Infor­ma­tik. Fünf Phi­lo­so­phen sit­zen um einen Tisch mit für Tel­lern und fünf Gabeln dazwi­schen. Wenn einer von ihnen essen möch­te, benö­tigt er bei­de Gabeln neben sei­nem Teller.

By Ben­ja­min D. Esham / Wiki­me­dia Com­mons, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=56559

Damit kön­nen jeweils nur zwei Phi­lo­so­phen gleich­zei­tig essen und es muss jeweils ein Tel­ler zwi­schen ihnen sein, an dem nicht geges­sen wird. Eine his­to­ri­sche Lösung des Pro­blems kann man direkt in einer Publi­ka­ti­on von Dijks­tra nach­le­sen (S.29). Das hät­te man ein­fach for­ma­li­sie­ren kön­nen. Oder halt selbst nachdenken.

In der Infor­ma­tik­welt sind die Phi­lo­so­phen Pro­zes­se, die um die Betriebs­sys­tem­res­sour­cen auf dem Tisch kon­kur­rie­ren. Dabei muss man ver­mei­den, dass sich die Pro­zes­se gegen­sei­tig blo­ckie­ren: Wenn alle gleich­zei­tig wol­len, gibt es Streit und kei­ner kann die Res­sour­cen bele­gen, die er zum Essen braucht (infor­ma­tisch: Ver­klem­mung). Es darf aber auch kei­ne Situa­ti­on ein­tre­ten, in der alle so höf­lich sind, sich immer gegen­sei­tig den Vor­tritt zu las­sen (infor­ma­tisch: Aus­hun­ge­rung). Und natür­lich soll der Zugriff auf die Res­sour­cen fair und effi­zi­ent sein.

Die Her­aus­for­de­rung:

Man „denkt“ beim For­ma­li­sie­ren nicht nur für einen Pro­zess, son­dern für fünf, die mit­ein­an­der in einer defi­nier­ten Umge­bung interagieren.

Wer darf dann überhaupt miteinander essen?

Um das zu for­ma­li­sie­ren, neh­men wir mal eine simp­le mini­ma­le Daten­struk­tur – ein Feld mit einem boole­schen Ele­ment für jeden Pro­zess – d.h. jeder hat sein Flag, dass er auf „ich will essen“ set­zen kann. Dann gibt es fünf zuläs­si­ge Konstellationen:

10100
10010
01010
01001
00101

Das ist schon­mal hübsch, da es tat­säch­lich nur fünf zuläs­si­ge Fäl­le gibt. Boole­sche Wer­te zu scan­nen und zu mani­pu­lie­ren ist res­sour­cen­mä­ßig auch nicht so üppig aufwändig.

Eine Ent­schei­dung, ob man zwei Phi­lo­so­phen an den Tisch lässt, kann man ver­läss­lich fäl­len, wenn drei von ihnen ihr Inter­es­se bekun­det haben.

Damit nicht genug: Die Pro­zes­se müs­sen sich wei­ter­hin unter­ein­an­der steu­ern kön­nen, damit sie sich gegen­sei­tig an den Tisch las­sen können.

Ansatz

Man lässt immer drei Pro­zes­se in einen Emp­fangs­be­reich, die bei­den ande­ren blei­ben drau­ßen und stel­len sich an. Dann lässt man die mög­li­che Kon­stel­la­ti­on von zwei Phi­lo­so­phen an den Tisch. Der­je­ni­ge, der nicht zum Zuge kommt, bleibt in einem zwei­ten War­te­be­reich vor dem Tisch ste­hen (= sein Flag im Array bleibt gesetzt).

Wenn einer der am Tisch Essen­den auf­steht, kippt er sein Flag im Array, lässt einen aus der Schlan­ge im Emp­fangs­be­reich rein und stellt sich drau­ßen hin­ten wie­der an.

Ein beson­de­res Pro­blem ist die Konstellation:

10101

Bei sowas soll­te man die Rei­hen­fol­ge der Prü­fung mal vari­ie­ren, damit nicht immer die glei­chen zwei zum Zuge kom­men und der Drit­te „ver­hun­gert“ (das ist bei fünf Pro­zes­sen nicht sehr wahr­schein­lich, aber durch­aus mal möglich).

Wie macht man das mit dem Warten eigentlich?

Die ein­fachs­te Lösung besteht dar­in, die Pro­zes­se in End­los­schlei­fen mit einer Abbruch­be­din­gung (Prü­fung einer glo­ba­len Varia­ble) zu schi­cken, wenn sie im Emp­fangs­be­reich oder vor dem Tisch ste­hen. Dabei ver­bra­ten Sie bloß reich­lich Rechen­zeit – infor­ma­tisch heißt das „akti­ves War­ten“ (busy wait) – also dau­ernd her­um­quen­geln, ob man nicht end­lich dran ist. Moder­ne Betriebs­sys­te­me bekom­men das hin, mit sowas umzu­ge­hen, aber net­ter res­sour­cen­scho­nen­der Pro­gram­mier­stil ist das nicht.

Semaphoren als Lösung

Sema­pho­ren sind Daten­struk­tu­ren, die einen nega­ti­ven oder posi­ti­ven gan­zah­li­gen Wert anneh­men kön­nen und zusätz­lich einen Coun­ter besit­zen. Posi­ti­ve Wer­te geben die Anzahl der zur Ver­fü­gung ste­hen­den Res­sour­cen an, nega­ti­ve die Anzahl der Pro­zes­se, die bereits auf die Zutei­lung einer Res­sour­ce warten.

Der Coun­ter ist wie der Wert des Sema­phors für Anwen­dungs­pro­gram­me nicht ein­seh­bar. Inner­halb eines Pro­zes­ses kann ein Anwen­dungs­pro­gramm eine soge­nann­te P‑Operation auf einen Sema­phor aus­füh­ren. Wenn der Sema­phor einen posi­ti­ven Wert hat, wird die­ser um eins ernied­rigt (= eine Res­sour­ce ver­ge­ben) und der Pro­zess darf wei­ter­ma­chen. Wich­tig dabei: Das Betriebs­sys­tem ent­schei­det, wel­cher Pro­zess die Res­sour­ce erhält (meist FIFO, muss aber nicht).

Wenn der Wert nega­tiv oder null ist, wird auch um eins ernied­rigt und der Pro­zess muss war­ten (Auf Betriebs­sys­tem­ebe­ne wird dem Pro­zess der Pro­zes­sor ent­zo­gen, er bleibt im Spei­cher aktiv, ver­braucht aber außer Spei­cher kaum wei­te­re Res­sour­cen mehr).

Wenn der Pro­zess fer­tig ist, führt er eine V‑Operation auf den Sema­phor aus, der sich dadurch um Eins erhöht. Sema­pho­ren müs­sen, um die Inter­ak­ti­on von Pro­zes­sen steu­ern zu kön­nen, glo­ba­le Daten­struk­tu­ren sein.

Kritische Abschnitte

Da Pro­zes­se den Zustand bzw. Wert von Sema­pho­ren nicht abfra­gen, son­dern nur inkre­men­tie­ren oder dekre­men­tie­ren kön­nen, „erfah­ren“ sie von­ein­an­der nur über glo­ba­le Varia­blen oder sons­ti­ge Daten­struk­tu­ren, in unse­rem Fall z.B. das Array mit den boole­schen Elementen.

Wenn man auf glo­ba­len Daten­struk­tu­ren mit meh­re­ren Pro­zes­sen arbei­tet, muss man sicher­stel­len, dass das immer nur ein Pro­zess tun kann. Man sperrt sol­che Struk­tu­ren oder auch kri­ti­sche Abschnit­te durch einen extra Sema­phor (P‑Operation), macht sei­ne Arbeit und ent­sperrt die­sen Sema­phor wie­der (V‑Operation). Sol­che Sema­pho­ren haben nur 0 und 1 als Zustän­de und wer­den oft als „mutex“ bezeich­net. Damit wird ver­hin­dert, dass zwei Pro­zes­se sol­che Daten­struk­tu­ren gleich­zei­tig ver­än­dern (oder lesen) und damit Inkon­sis­ten­zen entstehen.

Meine Lösung (mittlerweile nach Rückmeldungen)

In der Vor­le­sung wird eine recht eigen­wil­li­ge Beschrei­bungs­spra­che ver­wen­det. Das hat damit zu tun, dass man nicht oft nur wenig über der Maschi­nen­spra­che bewegt, die dann deut­lich ein­ge­schränk­ter im Befehls­satz ist. Wenn man auf glo­ba­le Daten­struk­tu­ren lesend oder schrei­bend zugreift, muss man das „ato­mar“ machen (dafür sor­gen, dass man allei­ne ist).

TYPE philId = (0..4);
hungry_phils : SEMAPHORE == 3; // wir haben vorerst drei Plätze 
privsem : ARRAY (0...4) OF SEMAPHORE == [EACH == 0]; // persönlicher Warteplatz am Tisch
mutex_helper : SEMAPHORE == 1;
hungry_phils_array : ARRAY BOOLEAN OF slot == [EACH == FALSE];
swap_check : BOOLEAN == FALSE;

philosopher : PROCESS (id : IN philId)
BEGIN
  LOOP

    --denken

    P(hungry_phils);

    P(mutex_helper);
       hungry_phils_array[id] == true;

    IF swap_check
       IF hungry_phils_array[0] AND hungry_phils_array[2]
          let_eat[0,2];
       ELSEIF hungry_phils_array[0] AND hungry_phils_array[3]
          let_eat[0,3];
       ELSEIF hungry_phils_array[1] AND hungry_phils_array[3]
          let_eat[1,3];
       ELSEIF hungry_phils_array[1] AND hungry_phils_array[4]
          let_eat[1,4];
       ELSEIF hungry_phils_array[2] AND hungry_phils_array[4]
          let_eat[2,4];
       ENDIF
    ELSE
       IF hungry_phils_array[4] AND hungry_phils_array[2]
          let_eat[4,2];
       ELSEIF hungry_phils_array[4] AND hungry_phils_array[1]
          let_eat[4,1];
       ELSEIF hungry_phils_array[0] AND hungry_phils_array[3]
          let_eat[0,3];
       ELSEIF hungry_phils_array[1] AND hungry_phils_array[3]
          let_eat[1,3];
       ELSEIF hungry_phils_array[0] AND hungry_phils_array[2]
          let_eat[0,2];
       ENDIF
    ENDIF

    IF NOT swap_check
         swap_check == TRUE;
    ELSE
         swap_check == FALSE;
    ENDIF

    V(mutex_helper);

    P(privsem[id]);
      --essen
      P(mutex_helper);
          hungry_phils_array[id] == false; 
      P(mutex_helper);      
    V(hungry_phils); 

  REPEAT;

  let_eat : PROCEDURE (id1 : CARDINAL,id2 : CARDINAL)
     BEGIN
       V(privsem[id1]);
       V(privsem[id2]);
     END
 
END

Da steckt deut­lich mehr Gehirn­schmalz drin, als es den Anschein hat – z.B. war es gar nicht so ein­fach, immer dafür zu sor­gen, dass zwei Phi­lo­so­phen gleich­zei­tig essen. In alter­na­ti­ven Lösungs­vor­schlä­gen aus dem Tuto­ri­um wäre auch ein Ein­zel­es­sen mög­lich gewesen.

Wie geht in der Vorlesung weiter?

Sema­pho­ren sind bis­her Black­bo­xen. Jetzt wird geschaut, wie ein Betriebs­sys­tem Sema­pho­re rea­li­siert (das geht übri­gens manch­mal nicht ohne „busy wai­ting“). Letzt­lich geht es im Zutei­lung von Rechen­zeit an Pro­zes­se. Ich kann gedank­lich momen­tan nur leid­lich mit­hal­ten und brau­che letzt­lich zu viel Zeit für Lösun­gen. Das wird in der Klau­sur spä­ter spannend …

 

Pflichtfach Informatik? Ein Streitgespräch.

Informatikunterricht? Muss das sein..!?

Immer wie­der tobt eine Debat­te über ver­pflich­ten­den Infor­ma­tik­un­ter­richt – Rea­li­tät ist er aber nur in drei Bun­des­län­dern. Ver­passt Deutsch­land beim Com­pu­ter­un­ter­richt eine gro­ße Chan­ce? Was ist eigent­lich zeit­ge­mä­ßer Infor­ma­tik­un­ter­richt und… braucht man Pro­gram­mie­ren wirk­lich? Maik Riecken und Jan-Mar­tin Klin­ge streiten.

Klin­ge: Maik, du schreibst auf dei­nem Blog, dass du die Fächer Deutsch und Che­mie an einem Gym­na­si­um in Nie­der­sa­chen unter­rich­test. Was hast du mit Infor­ma­tik zu tun?

Riecken: Nichts For­ma­les, d.h. ich habe weder eine Fakul­tas dafür oder noch irgend­ei­nen „offi­zi­el­len“ Kurs auf der Uni dazu besucht. Mit 14 Jah­ren habe ich mei­nen ers­ten Com­pu­ter bekom­men – einen Amiga500. Dar­auf habe ich eigent­lich fast nur gedad­delt, aber auch ers­te Geh­ver­su­che mit Ami­ga­Ba­sic gemacht. Das war schon was, weil man sogar eine GUI mit Maus hat­te und mit Ami­ga­Ba­sic pro­gram­mie­ren konn­te. Spä­ter habe ich dann sogar Din­ge in Assem­bler ver­sucht – ange­regt durch die damals schon sehr akti­ve „Demo­sze­ne“ und die Begrenzt­heit der Hard­ware – aller­dings habe ich es nie geschafft, mei­nem Kum­pel das ver­spro­che­ne Intro zu pro­gram­mie­ren – das ist heu­te noch so ein geflü­gel­ter Spruch zwi­schen uns: „Maik, wo bleibt mein Intro?“ In Kiel gab es spä­ter zu PC-Zei­ten dann eine Keim­zel­le der deut­schen Linux­sze­ne mit einem monat­li­chen Stamm­tisch – von da an ging es ab mit Ser­ver­diens­ten, Shell­script, MyS­QL usw.

Klin­ge: Assem­bler? Shell­script..?! Ich ver­ste­he nur die Hälf­te. Aber der spie­le­ri­sche Aspekt ist mir geläu­fig: Mit mei­nen Freun­den haben wir in den 90ern Com­pu­ter­spie­le mit­tels HEX-Edi­tor zer­legt und ver­än­dert. Wir sahen den Matrix-Code schon lan­ge vor dem Film – aber das war alles Frei­zeit und Spiel. Ist Infor­ma­tik an dei­ner Schu­le ein Pflichtfach?

Riecken: Nein. Schü­le­rin­nen und Schü­ler kön­nen das Fach in der Klas­se 10 bele­gen, wenn sie in der 11. Klas­se eine Natur­wis­sen­schaft durch Infor­ma­tik erset­zen wol­len. Dann müs­sen sie dort min­des­tens ein hal­bes Jahr „durch­hal­ten“. In Nie­der­sach­sen kann jeder Leh­rer bis zur Jahr­gangs­stu­fe zehn qua Amt alles unter­rich­ten – ich z.B. Infor­ma­tik. Da schließt sich dann der Kreis.

Klin­ge: Nun, dann sehe ich mich in der Posi­ti­on vie­ler Eltern oder auch fach­frem­der Kol­le­gen: Wenn ich an mei­nen eige­nen Infor­ma­tik­un­ter­richt den­ke, erin­ne­re ich mich an dunk­le Com­pu­ter­räu­me und ers­te Pro­gram­mier­ver­su­che in qba­sic. Mal ehr­lich – nichts, was ich da gelernt habe, hat mir je gehol­fen. Das war Zeit tot­schla­gen. Für mich ist Infor­ma­tik­un­ter­richt überflüssig.

Riecken: Bei mir war es tech­no­lo­gisch noch stein­zeit­li­cher. Ich habe auf einem Apple II gelernt – mit Bern­stein­mo­ni­tor. Ich mei­ne, das war Pas­cal oder auch ein Basicdia­lekt. Es war aber eine unglaub­li­che Fas­zi­na­ti­on zu spü­ren – und ein Pio­nier­geist. Text­ad­ven­tures selbst gestal­ten, Nadel­dru­cker ansteu­ern, Flop­py­disks orga­ni­sie­ren (die Flop­py ist heu­te immer noch das Sym­bol zum Spei­chern in den meis­ten Anwendungen).

Klin­ge: Schaue ich mir mei­ne zwei­jäh­ri­ge Toch­ter an, dann kann sie auf dem Tablet die Dis­play­sper­re über­win­den, ver­schie­de­ne Apps star­ten und in ihrem Lieb­lings­spiel, Dora Explo­rer, Puz­zle lösen, malen und mit den Figu­ren inter­agie­ren. Ich habe in dem Alter Sand geges­sen. Oder Erde. An guten Tagen beides.
Ich will damit sagen, dass Kin­der heu­te von früh auf mit Tech­no­lo­gie umzu­ge­hen ler­nen – wozu braucht es da Informatikunterricht?

Riecken: Dann erschließt sich dei­ne Toch­ter ihre Welt in die­sem Bereich medi­al ver­mit­telt. Sie lernt Inter­faces zu bedie­nen, aber eigent­lich nichts über Tech­nik dabei. Da zudem auf Wisch­ge­rä­ten vie­les leicht ist – selbst krea­tiv sein kann man da „ganz ein­fach“ (im Rah­men des­sen, was der jewei­li­ge Pro­gram­mie­rer unter Krea­ti­vi­tät ver­steht), kann die hap­ti­sche Aus­ein­an­der­set­zung mit der Welt dage­gen ger­ne schon­mal als mühe­voll erlebt wer­den. Es hängt sehr stark vom Eltern­haus ab, ob die Wisch­ge­rä­te als „Shut-up-Toy“ ein­ge­setzt wer­den, oder ob ein Aus­gleich geschaf­fen wird und Kin­der auch erle­ben dür­fen, dass sie anders­wo schei­tern und immer neue Stra­te­gien ent­wi­ckeln müs­sen. Kin­der erfah­ren die Welt mit ihren Sin­nen. Gerä­te spre­chen immer nur einen Aus­schnitt der Sin­ne an.

Klin­ge: Nun, mei­ne Infor­ma­tik­erfah­run­gen sind offen­sicht­lich anti­quiert – was beinhal­tet das Fach heutzutage?

Riecken: Ich sage immer, dass Infor­ma­tik das ein­zi­ge Fach ist, bei denen ich Schü­le­rin­nen und Schü­ler beim Den­ken bzw. Ihren Denk­schrit­ten zuschau­en kann. Eigent­lich geht es im Kern oft dar­um, ein Pro­blem in hand­hab­ba­re Teil­pro­ble­me zu zer­le­gen. Ich habe in die­sem Jahr mit mei­nen Schü­lern (sor­ry, war ein rei­ner Jun­gen­kurs) viel zum The­ma Pass­wort­ver­schlüs­se­lung gemacht. Auf­hän­ger waren die unzäh­li­gen gestoh­le­nen Pass­wort­da­ten­ban­ken im letz­ten Jahr (Yahoo, Lin­ke­dIn etc.). Die Schü­ler wis­sen jetzt z.B. war­um ein Pass­wort eine gewis­se Län­ge und Kom­ple­xi­tät haben soll­te und dass eine siche­re Pass­wort­spei­che­rung unmög­lich ist, son­dern allen­falls eine, die Angrif­fen eine zeit­lang stand­hält. Dann kann man noch dar­über sin­nie­ren, war­um selbst gro­ße Inter­net­fir­men die Grund­re­geln bei der Pass­wort­spei­che­rung nicht befol­gen usw. – und schon ist man ganz schnell bei betriebs­wirt­schaft­li­chen oder gar ethi­schen Fra­gen. Rei­ne Medi­en­kom­pe­tenz­ver­mitt­lung ohne infor­ma­ti­schen Hin­ter­grund ist in die­sem Feld eine rei­ne Black­box: „Mach dein Pass­wort lang und kom­plex!“ „Häh? War­um? Unbe­quem. Gibt doch ’ne App!“

Klin­ge: Umge­kehrt begeg­nen mir in der Schu­le oft Jugend­li­che, die mit 13 Jah­ren noch den Ein- und Aus­schal­ter am Com­pu­ter suchen und über­haupt kei­ne Erfah­rung mit einem sta­tio­nä­ren Com­pu­ter haben. Die­sen Kin­dern fehlt jede Grund­la­ge – ihnen Pro­gram­mie­ren bei­zu­brin­gen scheint her­aus­for­dernd – die müs­sen doch eher ler­nen, mit Office Pro­gram­men umzu­ge­hen. Die bräuch­ten eher einen Schreib­ma­schi­nen-Kurs. Wie begeg­nest du die­sem Spagat?

Riecken: Da gibt es heu­te ganz tol­le Ansät­ze – das Pro­blem haben wir ja nicht nur in Deutsch­land. „Unplug­ged“ begin­nen, über Kli­ckibun­ti (z.B. auf code.org) Grund­kon­zep­te erler­nen und dann erst­mal qua­si per „Online-App“ ers­te For­ma­li­sie­run­gen machen. Dafür braucht es anfangs nur einen Brow­ser und die Datei­en fin­den sich auch immer wie­der an, da die App alles erle­digt. Dann Schritt für Schritt Rich­tung Datei­sys­tem und Selbst­or­ga­ni­sa­ti­on gehen, bevor man dann kom­ple­xe­re Din­ge anfasst – meist aber eher sowas wie die Steue­rung von Model­len oder Robo­tern – dann sieht man auch einen Effekt sei­ner Code­zei­len. Im Zusam­men­spiel von Mecha­nik und Soft­ware braucht man dann Feh­ler­such­stra­te­gien, die bei man­chen Pro­gram­mier­an­sät­zen bes­ser als bei ande­ren grei­fen. So ent­ste­hen nach und nach sehr viel­fäl­ti­ge Anfor­de­rungs- und Arbeitsszenarien.
Die Idee, dass Infor­ma­tik etwas mit Tech­no­lo­gie zu tun hat, hal­te ich für falsch. Es gibt genug Bei­spie­le dafür, dass Infor­ma­tik­un­ter­richt voll­kom­men ohne Tech­no­lo­gie („unplug­ged“) funk­tio­nie­ren kann, etwa wenn ich die Lern­grup­pe Ideen ent­wi­ckeln las­se, mit wel­chen Stra­te­gien Men­schen z.B. nach der Grö­ße sor­tiert wer­den kön­nen. „Pro­gram­mie­ren“ heißt dann schlicht „nur“, die­se Stra­te­gie zu for­ma­li­sie­ren – ein­fach in ganz nor­ma­ler Spra­che, spä­ter in for­ma­li­sier­ter – das hilft sogar spä­ter beim Deutsch­auf­satz. Aber im Kern geht es gar nicht dar­um, son­dern um die Kon­zep­te, die z.B. einen Taschen­rech­ner funk­tio­nie­ren lassen.

Klin­ge: Nun, das klingt sicher für den ein oder ande­ren span­nend – aber letzt­lich haben doch wenig Schü­ler ein Inter­es­se dar­an, eine wei­te­re Fremd­spra­che zu ler­nen: Ob das jetzt fran­zö­sisch ist oder Java oder die Grund­la­gen von Pro­gram­men. Als Leh­rer lei­de ich jetzt schon unter dem vol­len Plan und der weni­gen Zeit. Ein wei­te­res Fach… Die Kin­der haben doch kei­ne Zeit mehr Kin­der zu sein.

Riecken: Infor­ma­tik ist kei­ne Spra­che. Infor­ma­tik ist nicht Pro­gram­mie­ren! Wenn wir den Bogen da kon­se­quent wei­ter span­nen: Was ist denn mit Fächern wie Mathe, Che­mie, Latein? Las­sen wir uns als Gesell­schaft davon lei­ten, ob aus­rei­chend vie­le Schü­le­rin­nen und Schü­ler Inter­es­se dafür auf­brin­gen (wol­len) oder ob Lehr­kräf­te dar­un­ter lei­den? Gera­de Latein – die­ses tote Ding? Ich glau­be, dass sehr vie­le Schü­le­rin­nen und Schü­ler unter die­sen Fächern durch­aus lei­den. Trotz­dem dis­ku­tie­ren wir nicht über deren Abschaf­fung, oder ob die­se Fächer frei gewählt wer­den dür­fen. Wenn es damals nach mir gegan­gen wäre, hät­te ich Eng­lisch sofort abge­wählt. Heu­te ist die­se Spra­che für mich unglaub­lich wich­tig gewor­den. Latein hin­ge­gen hat für mich nur eine sehr gerin­ge Bedeu­tung. Ich weiß, dass man mir unter­stel­len wird, mich für einen Kanon ein­zu­set­zen, das neue Ler­nen nicht ver­stan­den zu haben. Wenn ich heu­te in die Welt schaue, sehe ich kaum Beru­fe, die ohne digi­ta­le Kom­pe­ten­zen sinn­voll län­ge­re Zeit aus­zu­üben sind. Ich sehe wei­ter­ge­hend digi­ta­li­sier­te Zah­lungs­vor­gän­ge, weit­ge­hend digi­ta­li­sier­te Ver­wal­tungs­pro­zes­se – auch in Deutsch­land – allen Unken­ru­fen zum Trotz. Ich lese Aus­sa­gen von schlau­en Leu­ten in schlau­en Feuil­le­tons und den­ke oft genug: „Was für ein Depp!“ – auf Anwen­der­ebe­ne mag man wohl auf einen recht ober­fläch­li­chen Niveau Din­ge kom­men­tie­ren und wer­ten kön­nen – eine Ahnung von den tech­ni­schen Mög­lich­kei­ten ist oft nicht ein­mal in Sicht ohne Grund­la­gen der Daten­ver­ar­bei­tung zu kennen.

Klin­ge: Hast du ein kon­kre­tes Beispiel?

Riecken: Das smar­te Haus ist ein Para­de­bei­spiel für mich. Ein Haus ist ja etwas, in dem man län­ger lebt. Es gibt zur­zeit unzäh­li­ge Gad­gets und Spiel­zeu­ge, um das Leben in Eigen­heim beque­mer zu machen: Elek­tro­ni­sche Schließ­sys­te­me, Hei­zungs­re­ge­lun­gen, Beleuch­tungs­ar­ti­kel, schalt­ba­re Steck­do­sen, Alarm­an­la­gen etc.. Das Wenigs­te ist zuein­an­der kom­pa­ti­bel (oder man benö­tigt spe­zi­el­le Zwi­schen­ge­rä­te, die doch wie­der eine Men­ge Wis­sen erfor­dern) und kaum eine Lösung ist so lang­le­big, dass Updates der Firm­ware auch über län­ge­re Zeit gewähr­leis­tet wären. Damit ist das Haus oft in kür­zes­ter Zeit ohne Zutun des Besit­zers mani­pu­lier­bar. Die Alter­na­ti­ve ist, sich immer wie­der neue Gad­gets mit den immer wie­der glei­chen Pro­ble­men zu kau­fen oder von Anfang an auf Sys­te­me zu set­zen, die auf dem ers­ten Blick viel mehr kos­ten, auf lan­ge Sicht jedoch sowohl soft­ware­tech­nisch als auch kon­zep­tio­nell und von Zusam­men­spiel der Kom­po­nen­ten her über­zeu­gen. Mit infor­ma­ti­scher Bil­dung wüss­te man in Grund­zü­gen, wie ein Pro­dukt, wel­ches mög­lichst lan­ge ein­ge­setzt wer­den soll, prin­zi­pi­ell desi­gned sein soll­te (bei Hand­werks­zeug und Mes­sern weiß man das ja im Prin­zip auch). Und man wüss­te, was „kos­ten­ef­fek­tiv“ ist und was inner­halb weni­ger Mona­te auf irgend­ei­ner Müll­hal­de in Afri­ka lan­den wird – weil z.B. die zuge­hö­ri­ge App für das neue Smart­phone nicht mehr ent­wi­ckelt wird.

Klin­ge: Ich muss geste­hen: Das kann ich kom­plett nachvollziehen.

Riecken: Und, klar kann ich die Welt ein­fach so benut­zen – auch ohne Bio­lo­gie, ohne Che­mie oder Phy­sik und Mathe. Aber irgend­was fehlt dann viel­leicht. Und ein recht neu­er Teil von Welt scheint mir dann doch der digi­ta­le Raum zu sein. Infor­ma­tik ist die Grund­la­gen­wis­sen­schaft die­ses Rau­mes. Kom­men nicht vie­le poli­ti­sche Regu­lie­rungs­lü­cken auch durch Unwis­sen und sehr leich­te Beein­fluss­bar­keit der Verantwortlichen?

Klin­ge: Auch das kann ich nach­voll­zie­hen. Umge­kehrt drängt die Wirt­schaft dar­auf, ein gleich­na­mi­ges Fach ver­pflich­tend über­all ein­zu­bin­den. SoWi, Erd­kun­de.. es gibt einen gewal­ti­gen Fun­dus an Din­gen, die wir unse­re Kin­der ger­ne leh­ren möch­ten. Wo soll man da beschneiden?

Riecken: Wie haben wir als Gesell­schaft eigent­lich „ent­schie­den“, was wir in Deutsch oder Geschich­te „leh­ren“? Auch dar­über lässt sich treff­lich strei­ten. In der Tat ist es ein immenses Pro­blem, wenn die Wirt­schaft Inhal­te infor­ma­ti­scher Bil­dung bestimmt. Im Fal­le von Infor­ma­tik hat die­ses „Drän­gen der Wirt­schaft“ des­we­gen einen Geschmack, weil wir Ein­fluss­nah­me ver­mu­ten und gleich­zei­tig oft­mals kei­ne Ideen haben, was denn da gelehrt wer­den soll – denn das wür­de infor­ma­ti­sche Kom­pe­ten­zen eben­so erfor­dern wie medi­en­ethi­sche Fra­ge­stel­lun­gen – Phy­sik­un­ter­richt über Atom­ener­gie dürf­te in den 70ern anders aus­ge­se­hen haben als heu­te. Der che­mi­schen Indus­trie wer­fen wir das Fach Che­mie auch nicht vor, eben weil es da Stra­te­gien gibt, lob­by­is­ti­sche Ten­den­zen mehr oder weni­ger effek­tiv zu kom­pen­sie­ren. Mit rei­nem Anwen­der­wis­sen wird das im Bereich Infor­ma­tik eher weni­ger gut klap­pen. Ich hal­te es da mit Gün­ter Dueck: „Man muss nicht über­le­gen, was man für Infor­ma­tik denn weg­strei­chen soll­te – das muss man eben auch noch machen!“ Weil die Welt sich eben dahin­ge­hend ändert, dass sie kom­ple­xer und digi­ta­ler wird.

Klin­ge: Ganz kon­kret: Fin­dest du, alle Schü­ler soll­ten grund­sätz­lich Infor­ma­tik­un­ter­richt erhalten?

Riecken: Ja.

Klin­ge: War­um?

Riecken: Weil zukünf­tig Din­ge wie Teil­ha­be, Sou­ve­rä­ni­tät und neu­tra­le Infor­ma­ti­ons­be­schaf­fung immer mehr von infor­ma­ti­schen Kom­pe­ten­zen abhän­gig sein wer­den. Ich hät­te aber auch kein Pro­blem damit, wenn das nicht so kommt. Dann wechs­le ich halt die Sei­ten und ver­die­ne ganz viel Geld mit der infor­ma­ti­schen Unmün­dig­keit gro­ßer Tei­le der Gesell­schaft. Ange­sichts der Ent­wick­lung der Alters­vor­sor­ge auch kei­ne schlech­te Per­spek­ti­ve :o)…

Klin­ge: Nun, zumin­dest mein Bild von Infor­ma­tik­un­ter­richt ist nun nicht mehr so anti­quiert wie vor­her! Mir fällt nichts kri­ti­sches mehr ein, aber viel­leicht mag der ein oder ande­re Leser sich in den Kom­men­ta­ren noch dazu äußern – ich dan­ke dir erst­mal für die­ses Gespräch!

Medienbildung und Informatik

Fol­gen­de Auf­ga­ben haben Pro­gram­mier­an­fän­ger von mir nach ca. vier Ein­hei­ten Python bekom­men. Das Bei­spiel zeigt – fin­de ich – ganz gut, dass Medi­en­kom­pe­tenz und Infor­ma­tik sich sehr gut ergän­zen kön­nen, teil­wei­se viel­leicht sogar ein­an­der bedin­gen. Das Pro­blem der Pass­wort­län­ge und dem Pass­wort­auf­bau wird hier bewusst nicht ange­spro­chen, weil das pro­gram­mier­tech­nisch etwas anspruchs­vol­ler ist. Das kommt dann in der Folgestunde.
Wei­ter­hin ist natür­lich auch das sha-2-Ver­schlüs­se­lungs­ver­fah­ren moder­ne­ren Ent­wick­lun­gen wie z.B. pbkdf2 weit unter­le­gen, aber auch pro­gram­mier­tech­nisch wesent­lich beherrsch­ba­rer. sha512 ist schon ganz ok, auch wenn heu­ti­ge Gra­fik­kar­ten ca. 200 Mil­lio­nen Schlüs­sel pro Sekun­de berechnen.

Kryptografie

Immer wie­der hörst du davon, dass bei gro­ßen Anbie­tern Daten­bank­in­hal­te gestoh­len wer­den. In dem Arti­kel steht aller­dings nichts davon, dass Pass­wör­ter gestoh­len wer­den, son­dern Hash­es. Heu­te wirst du ler­nen, dass du jetzt schon ganz ein­fach viel bes­ser sein kannst als Lin­ke­dIn und das mit nur ganz weni­gen Code­zei­len in Python.

Um alles mög­lichst gut zu ver­ste­hen, musst du auf jeden Fall die bei­den oben ver­link­ten Arti­kel lesen oder wenigs­tens überfliegen.

Aufgabe 1:

Nimm eines dei­ner Pass­wör­ter und las­se fol­gen­des Pro­gramm lau­fen (z.B. auf https://try.jupyter.org ).

1
2
3
4
5
6
7
# wir weisen Python an, Kryptografiefunktionen zu laden
import hashlib
# wir fragen nach einem Passwort
crypted_phrase = input()
# Und geben den Hash des Passworts als MD5-Hash aus
print("Hash is:")
print(hashlib.md5(crypted_phrase.encode('utf-8')).hexdigest())

Nimm jetzt den Hash und kopie­re ihn auf die­se Sei­te. Nach Ein­ga­be der Sicher­heits­ab­fra­ge (reCaptcha) kannst du schau­en, ob der Hash dei­nes Pass­worts bereits bekannt ist (Wenn du das Ver­fah­ren mit dem Pass­wort „12345678“ durch­führst, wirst du sehen, dass das „geknackt“ wird.

Wie­der­ho­le das Ver­fah­ren mit einem dei­ner Pass­wör­ter und fol­gen­dem Pro­gramm (mit „12345678“ klappt es! – auch mit dei­nem Passwort?):

1
2
3
4
5
6
7
# wir weisen Python an, Kryptografiefunktionen zu laden
import hashlib
# wir fragen nach einem Passwort
crypted_phrase = input()
# Und geben den Hash des Passworts als MD5-Hash aus
print("Hash is:")
print(hashlib.sha512(crypted_phrase.encode('utf-8')).hexdigest())

Wenn dein Pass­wort auch im zwei­ten Fall „geknackt“ wur­de, hast du ein Pro­blem, wenn du Opfer eines Daten­bank­dieb­stahls wirst. Auch dein Anbie­ter wird nur Hash­es in einer Daten­bank speichern.

Infor­mie­re dich jetzt über den Unter­schied zwi­schen dem md5- und dem sha512-Ver­schlüs­se­lungs­ver­fah­ren. Python kann fol­gen­de Ver­fah­ren „von Natur aus“: md5, sha1, sha224, sha256, sha384, sha512.

Aufgabe 2:

Das Pro­blem ist schon lan­ge gelöst – mit nur weni­gen Code­zei­len mehr. Infor­mie­re dich über den Begriff „Salt“ in Ver­bin­dung mit Hashes.

1
2
3
4
5
6
import hashlib
# Statt "somestring" kannst bzw. solltest du möglichst wirres Zeug hier reinschreiben
salt = "somestring"
crypted_phrase = input()
salted_password = crypted_phrase + salt
print(hashlib.md5(salted_password.encode('utf-8')).hexdigest())

Wenn du jetzt ver­suchst, den Hash cra­cken zu las­sen, klappt das nicht mehr, weil ein soge­nann­test „salt“ (Salz) zum Pass­wort hin­zu­ge­fügt wird. Bei unse­rem Pro­gramm ver­wen­det jedes Pass­wort jedoch den glei­chen Salt.

Auch dafür gibt es eine Lösung:

1
2
3
4
5
6
import hashlib, uuid
# Python schreibt nun für dich wirres Zeug hier hinein
salt = uuid.uuid4().hex
crypted_phrase = input()
salted_password = crypted_phrase + salt
print(hashlib.md5(salted_password.encode('utf-8')).hexdigest())

Hät­ten Lin­ke­dIn und ande­re die Benut­zer­pass­wör­ter mit einem siche­ren Algo­rith­mus (z.B. sha512) gehasht und mit einem Salt ver­se­hen, wäre der Dieb­stahl der Daten­ban­ken nicht so ein gro­ßes Pro­blem, da es sehr lan­ge dau­ern wür­de, die Pass­wör­ter aus den Hash­es zu errechnen.

In der Pra­xis spei­chert man die Salts im Klar­text zusam­men mit den Hash­es, meist durch ein Trenn­zei­chen abge­setzt. Du kannst ja ein­mal über­le­gen, war­um das kein Pro­blem darstellt.

Aufgabe 3:

Schrei­be fol­gen­de Programme

  1. Es wird zwei­mal ein Pass­wort abge­fragt und dazu ein Hash berech­net. Stim­men bei­de Hash­es (und damit die Pass­wör­ter) über­ein, soll das Pro­gramm die Aus­ga­be „Access granted!“ machen, ansons­ten „Access denied!“ ausgeben.
  2. Ein Pro­gramm fragt nach einem „Masterpasswort“ (pass­word) und einem Domain­na­men (salt). Es berech­net dar­aus einen Hash, den man als Pass­wort für die betref­fen­de Web­sei­te benut­zen kann – wenn man immer das rich­ti­ge Mas­ter­pass­wort und den glei­chen Domain­na­men ein­gibt – qua­si ein ganz ein­fa­cher Passwortmanager!

10 Pflichtfach Informatik \n 20 goto 10

Ich hal­te ein „Pflicht­fach Infor­ma­tik“ für unver­zicht­bar. Auf Twit­ter wird Lud­ger Hum­bert nicht müde, immer wie­der und wie­der danach zu rufen, wobei die Pene­tranz, mit er er die­se For­de­rung vor­trägt, weit über die von z.B. Jean-Pol Mar­tin impli­zit als not­wen­dig erach­te­te hinausgeht.

Die­se Dau­er­schlei­fe führt im Wesent­li­chen zu drei Reaktionsmustern:

  1. Man erträgt sie nicht mehr und blockt oder mutet.
  2. Man erwi­dert, dass man ja auch nicht ein Auto ver­ste­hen müs­se, um es zu bedienen.
  3. Man erwi­dert, dass man ja auch nicht ein Auto ver­ste­hen müs­se, um es zu bedie­nen und blockt oder mutet dann.

Eigent­lich fin­det damit eine Aus­ein­an­der­set­zung auf zwei Ebe­nen statt: Eine emo­tio­na­le und eine ratio­na­le. Wenn ich in der Bera­tung etwas nicht will, ver­su­che ich genau auf zwei Ebe­nen Ableh­nung zu erzeu­gen: Emo­tio­nal und ratio­nal, wobei die ers­te Ebe­ne wesent­lich wich­ti­ger ist.

Ohne Blu­men­fil­ter: Die Art und Wei­se, wie die­se For­de­rung vor­ge­tra­gen wird, sorgt m.E. eigent­lich erst dafür, dass man ihr kei­ne oder allen­falls nega­tiv besetz­te Beach­tung schenkt.

Die ratio­na­le Ebe­ne der Auto­ana­lo­gie ist für mich aller­dings eine nur vor­der­grün­dig ratio­na­le, die wie­der­um viel mit dem jeweils zugrun­de lie­gen­den Kom­pe­tenz­be­griff zu tun hat. Ver­meint­lich als Syn­the­se schleicht sich zusätz­lich der Begriff der Medi­en­kom­pe­tenz in die Debat­te, wobei ich den­ke, dass es kei­ne wie auch immer gear­te­te Medi­en­kom­pe­tenz ohne infor­ma­ti­sche Bil­dung geben kann. Aber langsam.

Medienkompetenz ist sexy, denn:
  1. Medi­en­kom­pe­tenz ist vor­der­grün­dig ohne tech­ni­sches Wis­sen vermittelbar.
  2. Medi­en­kom­pe­tenz lässt sich am ehes­ten in bestehen­de Fächer inte­grie­ren – das ist admi­nis­tra­tiv sehr sexy, weil es rea­lis­ti­scher erscheint, als ein wei­te­res Fach zu schaf­fen, was ggf. zu Las­ten ande­rer Fächer geht.
  3. Medi­en­kom­pe­tenz fällt digi­tal affi­nen Men­schen qua­si im Vor­bei­ge­hen zu oder wird oft­mals intrin­sisch moti­viert erwor­ben, weil es z.B. Vor­tei­le für den eige­nen Unter­richt bie­tet oder geeig­ne­te, sich selbst bestä­ti­gen­de Fil­ter­bubbles dafür gibt.

Der Medi­en­päd­ago­ge sagt:

Wenn du XY schon nutzt, dann emp­feh­le ich die und die Pro­fil­ein­stel­lun­gen, damit bestimm­te Infor­ma­tio­nen nicht sofort Drit­ten zugäng­lich werden.“

Informatik ist so gar nicht sexy, denn:
  1. Sie hat etwas mit algo­rith­mi­schen Den­ken zu tun, wovon „Pro­gram­mie­rung“ nur ein win­zi­ger Bruch­teil ist. Algo­rith­mi­sches Den­ken zwingt sehr viel an Struk­tu­ren auf. Das ist oft wenig lust­be­setzt, wenn man es nicht kennt. Auch Qua­li­täts­ma­nage­m­ent­zy­klen sind im Prin­zip algo­rith­misch: Eva­lua­ti­on => Ziel­set­zung => Pla­nung => Umset­zung von Maß­nah­men => Eva­lu­la­ti­on … (Ok. Manch­mal ist das ja auch zum Kotzen)
  2. Es haf­tet die­ser Dis­zi­plin immer noch ein Mythos von lang­haa­ri­gen, weiß­häu­ti­gen, piz­za- und ener­gy­drinks­ver­schlin­gen­den Sub­jek­ten an, die sich ansons­ten in Ser­ver­schrän­ken von Bits und Bytes ernäh­ren. Dabei wird ger­ne ver­ges­sen, dass z.B. Social­me­dia nicht ein Pro­dukt von Phi­lo­so­phen und Päd­ago­gen ist und dass gro­ße Soft­ware­pro­jek­te von Teams und sozia­len Umgangs­re­geln geprägt sind, von denen wir auf Social­me­dia oft­mals nur träumen.
  3. Sie bedroht Pfrün­de. Wel­cher enga­gier­te Päd­ago­ge möch­te von sei­nem Fach etwas abge­ben? Und dann noch für ein Fach mit so zwei­fel­haf­tem Nut­zen? Denn: Auto­fah­ren kann man ja auch so (auch so eine Dauerschleife).

Der Infor­ma­ti­ker sagt:

Wenn du XY nutzt, soll­test du fol­gen­de Anga­ben nicht machen und dir dar­über im Kla­ren sein, dass es kei­ne Lösch­funk­ti­on gibt (obwohl sie so heißt), son­dern nur die Mög­lich­keit, die Sicht­bar­keit von Infor­ma­tio­nen tem­po­rär einzuschränken.“

Das Autoargument

… könn­te auch lau­ten: Ich muss nichts über Che­mie wis­sen, um Kos­me­tik zu benut­zen. Oder: Ich brau­che kein Wis­sen über Erkun­de, um eine Rei­se zu unter­neh­men. Trotz­dem „leis­ten“ wir uns bei­de Fächer, obwohl oder gera­de weil die­se bei­den Aus­sa­gen stimmen.

Wir leis­ten uns die­se Fächer, weil wir anneh­men (ja, es ist eine Annah­me), dass die­se umfas­sen­de Kon­zep­te ver­mit­teln, die uns in unse­rer Welt­erfah­rung und Berufs­fin­dung nütz­lich sind.

Bezo­gen auf Infor­ma­tik: Was erle­ben wir denn gera­de und beschrei­ben es ja auch wie­der und wie­der in der Fil­ter­bubble? Rich­tig: Den enor­men Ein­fluss der Digi­ta­li­sie­rung auf Wirt­schaft und Gesell­schaft. Genau wie die Ato­me und Mole­kü­le Grund­kon­zep­te beim Auf­bau von Mate­rie beschrei­ben, beschreibt Infor­ma­tik eben Grund­zü­ge digi­ta­ler Struk­tu­ren. Wenn wir Grund­zü­ge nicht ver­mit­teln wol­len, so müs­sen wir kon­se­quen­ter­wei­se alle Fächer abschaffen.

Das Auto­ar­gu­ment beschreibt kein Grund­kon­zept. Es beschreibt einen win­zi­gen Teil von Mobi­li­tät, der zudem immer unwich­ti­ger wer­den wird. Daher kann man es m.E. gegen die For­de­rung nach einem Pflicht­fach Infor­ma­tik nicht in Stel­lung bringen.

Eben­so wenig wie ich heu­te weiß, wie der Zitro­ne­säu­re­zy­klus genau abläuft, weiß ich durch Infor­ma­tik spä­ter nicht, wie ein Rech­ner funk­tio­niert, aber ich habe Grund­zü­ge der Daten­ver­ar­bei­tung ken­nen­ge­lernt, die sich genau wie der Zitro­nen­säu­re­zy­klus nicht groß­ar­tig ändern.

Das Emotionale am Autoargument

Es ist uns Anwen­dern eigent­lich klar, dass wir sehr wenig wis­sen. Wei­ter­hin ist uns klar, dass die­ses Unwis­sen Kon­se­quen­zen haben wird. Ansons­ten wür­den wir von z.B. der Poli­tik nicht so vehe­ment for­dern, dass sie z.B. bestimm­te Din­ge regu­lie­ren soll, z.B. Ama­zon oder Face­book. Und es ist uns noch etwas klar: Wäh­rend wir das Ler­nen lan­ge Zeit auf jün­ge­re Gene­ra­tio­nen abschie­ben konn­ten, klappt das mit mit dem Ler­nen hin­sicht­lich des Digi­ta­len eher nicht so gut, da die­se Ver­än­de­rung uns alle betrifft und uns daher auch alle for­dert – vor allem auch auf dem Gebiet ethi­scher Grund­sät­ze, die es für Digi­ta­li­en neu zu schrei­ben und zu defi­nie­ren gilt. Das ist schwie­rig, wenn ich nur ahnen kann, was gene­rell mög­lich ist. Dann kommt da z.B. sowas wie Vec­to­ring heraus.

Das ist zusätz­lich sehr unan­ge­nehm und gar nicht bequem. Das sol­len doch bes­ser die lang­haa­ri­gen, weiß­häu­ti­gen, piz­za- und ener­gy­drinks­ver­schlin­gen­den Sub­jek­te machen. Wir wol­len anwen­den und benut­zen. Dum­mer­wei­se bestim­men damit die lang­haa­ri­gen, weiß­häu­ti­gen, piz­za- und ener­gy­drinks­ver­schlin­gen­den Sub­jek­te bzw. ihre Fir­men grund­le­gen­de Struk­tu­ren auf Basis markt­wirt­schaft­li­cher Kon­zep­te. Ich fin­de die­se Vor­stel­lung irgend­wie blöd.

Kom­pe­tenz­ge­sei­er als Ausweg?

Die Ver­mitt­lung von Medi­en­kom­pe­tenz ist im Extrem­fall nichts wei­ter als die Wei­ter­ga­be auto­di­dak­tisch erwor­be­ner Anwen­der­kennt­nis­se bzw. gemach­ter Erfah­run­gen inner­halb von Social­me­dia. Sie ist ohne Zwei­fel wich­tig und soll­te Teil in jedem Fach sein. Sie lässt sich aber auf Basis von Wis­sen über infor­ma­ti­sche Grund­kon­zep­te m.E. viel fun­dier­ter und trag­fä­hi­ger ver­mit­teln. Die fik­ti­ve Aus­sa­ge des ste­reo­ty­pen Infor­ma­ti­kers oben eröff­net erwei­ter­te Hand­lungs- und Bewer­tungs­mus­ter gegen­über der ste­reo­ty­pen medi­en­päd­ago­gi­schen Posi­ti­on (wobei bei­des natür­lich nur Bei­spie­le zur Ver­an­schau­li­chung sind).

Der Kom­pe­tenz­seie­rer wür­de jetzt ein­wen­den, dass infor­ma­ti­sches Wis­sen ja auch ver­al­te und damit eher Kom­pe­ten­zen zum selbst­stän­di­gen Erschlie­ßen des infor­ma­ti­schen Wis­sens ver­mit­telt wer­den soll­ten. Damit macht er einer­seits den Dua­lis­mus zwi­schen Kom­pe­tenz und Wis­sen auf, den er den Kom­pe­tenz­kri­ti­kern ger­ne vor­wirft. Und er öff­net ande­rer­seits Sys­te­men (z.B. Lob­by­is­ten) Tor und Tür, den den Bereich der Infor­ma­tik dann eben auf ihre Wei­se beset­zen, denn Men­schen in Aus­bil­dung ahnen ja schon ein wenig, dass es in die­sem Bereich Ent­wick­lungs­mög­lich­kei­ten im spä­te­ren Leben gibt.

Das Argu­ment mit dem „schnell ver­al­te­ten­den Wis­sen“ fin­de ich dar­über hin­aus auch eini­ger­ma­ßen merk­wür­dig. Genau wie mathe­ma­ti­sche oder che­mi­sche Kon­zep­te eini­ger­ma­ßen kon­stant ver­läss­lich sind und den Kom­pe­tenz- und Wis­sens­er­werb in bei­den Dis­zi­pli­nen sowohl struk­tu­rie­ren und letzt­end­lich dadurch auch erleich­tern, gibt es auch in der Infor­ma­tik all­ge­mein­gül­ti­ge Struk­tu­ren wie etwa die Zer­le­gung eines Pro­blems und Teil­schrit­te. In den Geis­tes­wis­sen­schaf­ten sind die­se Struk­tu­ren natur­ge­mäß weni­ger eng bzw. for­mal bestimmt aus­ge­prägt, aber den­noch vorhanden.

Fazit

Medi­en­kom­pe­tenz ist erst­mal bes­ser als nichts und viel­leicht auch der zunächst prag­ma­ti­sche­re und beque­me­re Weg. Wenn wir jedoch in einer zuneh­mend digi­ta­li­sier­ten Welt leben, wird ein Grund­la­gen­fach wie Infor­ma­tik für mich jedoch unver­zicht­bar, auch wenn die For­de­rung danach viel­leicht unrea­lis­tisch und unbe­quem erscheint. Und nein: Infor­ma­tik heißt nicht „pro­gram­mie­ren ler­nen“. Es heißt viel mehr.

Informatik mit Arduino

leonardo

Ich habe in die­sem Jahr einen Infor­ma­tik­kurs in der Klas­se 10 über­nom­men. Den besucht man als Schü­le­rin oder Schü­ler zusätz­lich zu einem recht vol­len Stun­den­plan in Klas­se 10, um die Opti­on auf eine Teil­nah­me an einem Infor­ma­tik­kurs in Klas­se 11 zu bekom­men. Man darf dann im Abitur zwei Kur­se Natur­wis­sen­schaft durch Infor­ma­tik erset­zen. Ich bin kein gelern­ter Infor­ma­tik­leh­rer – ich bin ein­fach nur ein grö­ßen­wahn­sin­ni­ger Freak und wahr­schein­lich schlägt die Infor­ma­tik­di­dak­tik über mei­ne Ansät­ze die Hän­de in der Luft zusam­men.  Egal – ent­we­der man ist kon­ven­tio­nell oder man lebt.

Stu­fe 1:

Wir haben Pro­ble­me in Ein­zel­pro­ble­me zer­legt – z.B. soll­ten 20 Zah­len von 20 Per­so­nen abge­fragt und addiert wer­den. Unse­re Stra­te­gien haben wir auf­ge­schrie­ben. Dabei spielteh fol­gen­de Fra­gen eine Rolle:

  • Wie mer­ken wir uns die gan­zen Zahlen?
  • Wenn wir sie uns auf­schrei­ben: Wir machen wir das genau? Neben­ein­an­der? Untereinander?
  • Addie­ren wir bei jeder Abfra­ge oder fra­gen wir alle Zah­len ab und addie­ren dann?
  • […]

Stu­fe 2:

Wir haben mit dem Fluss­dia­gramm ein Ver­fah­ren ken­nen gelernt, dass Auf­ge­schrie­be­ne zu visua­li­sie­ren und die­se Visua­li­sie­rung für wei­te­re Pro­ble­me durch­ge­spielt, die z.B. Fall­un­ter­schei­dun­gen enthielten.

Stu­fe 3:

Mit Scratch haben wir unser Pro­blem aus Stu­fe 1 ganz kon­kret gelöst und zwar durch Pass&Fail. Für Scratch muss man heu­te im Prin­zip nicht ein­mal ein Pro­gramm instal­lie­ren – das läuft auch kom­plett im Brow­ser – wenn man beim MIT einen Account anlegt. Wer moch­te, konn­te sich auch schon am klas­si­schen Rate­spiel „rate eine Zahl zwi­schen 1 und 100“ ver­su­chen oder sich eines der vie­len ver­öf­fent­lich­ten Pro­jek­te zu Scratch vor­neh­men. Die Lösungs­an­sät­ze haben wir uns vor­ge­stellt und teil­wei­se diskutiert.

Stu­fe 4:

Anhand eines Aus­drucks eines „Scratch­pro­gram­mes“ galt es, ein Fluss­dia­gramm zu zeich­nen und einen fie­sen, von mir natür­lich absicht­lich ein­ge­bau­ten Feh­ler zu fin­den. Dazu gab es noch eini­ge Erwei­te­rungs- und Optimierungsaufgaben.

Stu­fe 5:

In einem Doku­wi­ki­sys­tem haben die Schü­le­rin­nen und Schü­ler Sei­ten zu Pro­gram­mier­spra­chen erstellt. Ich habe eine kla­re Struk­tur vor­ge­ge­ben: Eine kur­ze Beschrei­bung zur Spra­che, ein „Hel­lo World!“- , ein „if ‑then – else“- und ein „while“-Codebeispiel. Doku­wi­ki kann das abso­lut pri­ma, weil es einen leis­tungs­fä­hi­gen Syn­tax­high­ligh­ter für fast alles hat. Es braucht kei­ne Daten­bank, ist ajax­ba­siert – ein­fach und umkom­pli­ziert. Unnö­tig zu erwäh­nen, dass dabei die Kon­fron­ta­ti­on mit dem Begriff „Syn­tax“ sowohl theo­re­tisch (für die Spra­che suchen) als auch prak­tisch (Wiki­syn­tax) erfolgte.

Zwi­schen­stand:

Die Schü­le­rin­nen und Schü­ler haben bis jetzt eigent­lich schon alles erlebt, was man beim Pro­gram­mie­ren so erle­ben kann:

  • Mein Code läuft nicht!“ – „Hm. Da fehlt ’ne Klam­mer“ – „Oha, wenn ich da etwas ein­rü­cke, dann wird es ja viel übersichtlicher.“
  • Sein Code läuft und mei­ner auch. Wel­cher ist denn nun rich­tig?“ – „Wel­cher gefällt dir denn war­um besser?“
  • Boah, ist das viel zu schrei­ben!“ – „Nun­ja – aber wenn sich das stän­dig wie­der­holt, könn­test du ja viel­leicht auch …“
  • […]

Stu­fe 6:

Kur­zer Leh­rer­vor­trag zu Ardui­no. Dann ran an den Simu­la­tor – der ist abso­lut toll und zu emp­feh­len, bevor die ers­ten Bau­tei­le in Rauch aufgehen.

Natür­lich habe ich zunächst eine ganz ein­fa­che Bei­spiel­schal­tung vor­ge­stellt (blin­ken­de LED).

(circuits.io klappt bis­her so rich­tig gut nur mit Chro­me oder Chro­mi­um als Browser.)

Die soll­te dann um drei LEDs in einer Ampel­schal­tung erwei­tert wer­den. Dazu muss­te man schon ein Biss­chen was am Bread­board ver­ste­hen. Neben­bei wur­de auch etwas über die Wel­len­län­ge des Lichts und Far­be gelernt: Im Simu­la­tor ändert man die LED-Far­be durch Ein­ga­be von Wel­len­län­gen in nm. Und ohne Vor­wi­der­stand macht die LED „peng“, ver­polt macht sie gar nichts. Es gab sofort das Spiel: „Wie klein darf ich den Wider­stand machen, dass die LED heil bleibt?“ Neben­bei ist die Simu­la­tor­home­page auf Eng­lisch (Wider­stand = resistor).

Stu­fe 7:

Es kommt etwas Theo­rie zur Ardui­no-IDE. Wir wer­den den Ardui­no Leo­nar­do bzw. einen pin­kom­pa­ti­blen Nach­bau  nut­zen, weil der durch sein HID-Funk­tio­nen in Kom­bi­na­ti­on mit Lage­sen­so­ren auch als Game­con­trol­ler oder Mau­ser­satz taugt. Den Ardui­no kau­fen sich die Schü­le­rin­nen und Schü­ler selbst, das Zube­hör stift­tet unser För­der­ver­ein. Die Kos­ten sind aber sehr mar­gi­nal im Ver­hält­nis zu den sich bie­ten­den Mög­lich­kei­ten. Dann kön­nen wir unse­re Schal­tung aus Stu­fe 6 real aufbauen.

Aus­blick

Die Schü­le­rin­nen und Schü­ler sol­len sich nach Mög­lich­keit eige­ne Pro­jek­te suchen, die sie mit dem Ardui­no rea­li­sie­ren. Natür­lich habe ich not­falls Pro­jek­te von unter­schied­li­chem Schwie­rig­keits­grad in der Hin­ter­hand. Der Kom­ple­xi­täts­grad der Pro­jek­te darf natür­lich mit dem wach­sen­den Wis­sens­be­stän­den stei­gen. Die Schu­le bekommt aus einem N21-Pro­jekt für eine AG Robo­ter auf Ardui­no­ba­sis gestellt, auf die sich dann ggf. die erwo­be­nen Kennt­nis­se über­tra­gen lassen.

Mit der stei­gen­den Kom­ple­xi­tät der Pro­jek­te erwar­te ich ein Anwach­sen der Pro­gramm­codes, das irgend­wann dazu füh­ren soll, bestimm­te Funk­tio­nen aus­zu­la­gern in objekt­ori­en­tier­te Set­tings (Ende 2. Halb­jahr). Schön wäre es, wenn der Code für einen allei­ne nicht mehr zu pfle­gen ist, sodass auch Struk­tu­ren wie SVN not­wen­dig werden.

Ers­te Eindrücke

  1. Ich ler­ne mit den Schü­le­rin­nen und Schü­lern mit. Für mich ist vie­les Neuland.
  2. Schü­le­rin­nen und Schü­ler fin­den Feh­ler im Pro­gramm­code viel schnel­ler in Peer-Reviews als ich
  3. Die­ser Ansatz schreckt auch eini­ge ab. Man muss ja aller­hand aus­hal­ten und sogar auch Elek­tro­nik- und Eng­li­schwis­sen ausbauen
  4. Ich muss­te die Beschäf­ti­gung mit der Hard­ware vor­zie­hen. Ich und die Schü­le­rin­nen und Schü­ler kön­nen es teil­wei­se kaum erwarten.
  5. Es wird sehr selbst­stän­dig und kon­zen­triert gear­bei­tet – auf die Fra­ge: „Kann ich das so machen?“ ant­wor­te ich oft: „Pro­bie­re es aus!“ – und mit die­ser Ant­wort sind sie oft zufrieden.
  6. Per­fek­tio­nis­ten sind in der Hin­ter­hand – am effek­tivs­ten arbei­ten die Experimentierfreudigen
  7. Man kann wun­der­bar dif­fe­ren­zie­ren: Der C‑Freak bekommt eben eine Bild­röh­re mit Com­po­si­te-Ein­gang, auf der er ein Spiel pro­gram­miert. Das ist vom Timing her nicht tri­vi­al, da der Ardui­no von sei­ner Rechen­leis­tung damit an eine Gren­ze kommt. Dem Anfän­ger reicht viel­leicht ein Lauf­licht als ers­tes Pro­jekt – oder ein Ther­mo­me­ter (NTCs haben eine Kenn­li­nie, muss muss mathe­ma­ti­siert oder mit einem ande­ren Ther­mo­me­ter kal­li­briert werden).
  8. Es kom­men Fra­gen wie: „Darf ich zu Hau­se an mei­ner Schal­tung im Simu­la­tor wei­ter­ar­bei­ten?“ „Dür­fen wir unser Pro­jekt auch mit nach Hau­se nehmen?“
1 2 3 7