Kategorien
Uncategorized

Programmieren als Denktraining

Teaching Minds

Derzeit lese ich das Buch „Teaching Minds“ von Roger Schank, in dem der Autor die Auffassung vertritt, dass man in Schule und Hochschule nicht in erster Linie Fakten, sondern denken lernen sollte. Dabei breitet er zwar auf 220 Seiten aus, was auch auf 50 Seiten gepasst hätte, und er verzichtet leider auch darauf, wissenschaftliche Belege für seine Thesen zu liefern, obwohl er als jahrelang sehr aktiver Kognitionswissenschaftler sicherlich welche nennen könnte. Aber die Grundidee halte ich dennoch für richtig und wichtig (wie man ja auch schon manchen meiner Beiträge entnehmen konnte).

Schank greift dabei eine Reihe kognitiver Prozesse heraus, die er für besonders wichtig hält und die seiner Meinung nach beständig trainiert werden müssen. Auf zwei davon will ich an dieser Stelle besonders eingehen, weil sie für das Thema „algorithmisches Denken“ eine besondere Rolle spielen.

Prediction

Der erste kognitive Prozess heißt bei bei Schank „Prediction“, gemeint ist aber im Wesentlichen der Umgang mit den Skripten, auf die wir Menschen bei so gut wie allem zurückgreifen, was wir tun. Das gilt im Kleinen (z.B. wenn wir uns einen Schnürsenkel zuzubinden), aber auch im Großen (z.B. wenn wir auf Partnersuche sind).

Im Grunde handelt es sich bei diesen Skripten um genau die Heuristiken, von denen in diesem Blog ja schon öfter die Rede war: unbewusste Methoden, die das Gehirn abgespeichert hat und meist ohne unser Zutun nutzt, um konkrete Probleme zu lösen. Solche Skripte sind nicht zwingend ein Zeichen von Intelligenz, denn auch das Handeln von Tieren ist von Skripten geprägt.

Interessant wird die Sache, wenn für eine gegebene Situation kein Skript vorhanden ist. Merken wir das überhaupt, oder schätzen wir die Situation fälschlicherweise als bekannt ein und verwenden ein vorhandenes Skript? Und falls nicht: was tun wir, wenn eine Situation als anders erkennen, aber kein Skript dafür haben? Nach Schank müssten die folgenden Kompetenzen trainiert werden:

  • Ein Vorrat an Skripten für typische Situationen muss angelegt (d.h. durch Wiederholung eingeübt) werden.
  • Wir müssen lernen zu erkennen, wenn wir es mit einer neuen Situation zu tun haben, und kritisch hinterfragen, ob wir sie mit bekannten Skripten angehen sollten oder nicht.
  • Wir müssen lernen, Skripte an neue Situationen anzupassen oder völlig neue Skripte zu erlernen (oder gar selbst zu entwickeln).

Und all das ist nichts anderes als eine Blaupause für die Problemlösungskompetenz, von der in diesem Blog immer wieder die Rede war und weiter sein wird.

Modelling

Den zweiten kognitiven Prozess nennt Schank „Modelling“, und hier geht es darum, ein mentales Modell eines Prozesses zu erstellen. Für viele Abläufe im Leben benötigen wir ein solches Modell: Wir wissen (hoffentlich), wie wir vorgehen müssen, wenn wir mit der Bahn (oder dem Flugzeug) verreisen, welche Regeln beim Essen in einem Restaurant gelten, wie man einem Colaautomaten ein Kaltgetränk entlockt oder wie man ein Formular ausfüllt.

Diese kognitive Kompetenz heißt an anderer Stelle „Prozessmodellierung“, und kurioserweise wird sie (genau wie „Problemlösen“ übrigens) fast ausschließlich im Kontext von Geschäftsprozessen gelehrt. Aber natürlich ist sie keinesfalls auf Unternehmen beschränkt, sondern nützt jedem von uns auch im Alltag.

Und hier kommen wir endlich zum heutigen Thema, denn gerade das Modellieren von Prozessen ist etwas, was man in der Informatik andauernd übt. Nicht von ungefähr ähneln die Werkzeuge aus der Geschäftsprozessmodellierung denen der Informatik stark, denn ein Programmierer tut ja nichts anderes: Er beschreibt einen Prozess (nämlich den Algorithmus) so präzise, dass ihn auch ein völliger Trottel (der Computer eben) ausführen kann.

Modellierung in der Informatik

Tatsächlich ist dies meiner Meinung nach ein Grund, warum die Beschäftigung mit Informatik auch für Nicht-Informatiker großen Nutzen hat: Weil man dadurch das eigene strukturierte Denken und insbesondere die Fähigkeit zum Modellieren von Prozessen trainiert. Dem Computer fällt dabei die Rolle des unbestechlichen Schiedsrichters zu: Wenn das Programm am Ende nicht tut, was es tun sollte, dann war die Modellierung fehlerhaft.

Laien vertreten oft die Auffassung, dass Menschen ja auch ohne die Beschäftigung mit Programmierung in der Lage wäre, funktionierende Modelle von Prozessen zu erstellen. Wer das behauptet, hat aber noch nie eine Aufgabe der folgenden Art gestellt:

Beschreiben Sie alle Schritte, die erforderlich sind, um ein Frühstücksei zu kochen!

Wer einige Jahre lang die Grundlagen der Informatik unterrichtet hat, hat diesbezüglich alle Illusionen verloren: die meisten Menschen sind zwar sehr wohl in der Lage, ein 5-Minuten-Ei zu kochen, aber sie sind völlig außerstande, den Vorgang auch systematisch zu beschreiben. Da wird das Ei mit dem Wasser in den Topf gegeben und dann erst auf den Herd gestellt, da wird der Herd gar nicht erst angeschaltet, das Einschalten des Timers vergessen (aber natürlich auf das Klingeln des Timers gewartet) oder am Ende der Herd einfach angelassen. Psychologen sprechen hier von implizitem Wissen (oder auf Englisch richtiger: tacit knowing): Wir können es, wir können es auch vormachen, aber wir können es nicht beschreiben. Und wenn wir es nicht beschreiben können, dann können wir auch keine bewussten Anpassungen oder Veränderungen vornehmen, sondern bleiben allein auf unsere Intuition beschränkt.

Wer dagegen Erfahrung im Programmieren hat, hat deutlich weniger Probleme damit, ein solches Modell eines Prozesses zu erstellen. Zwar kann auch er nicht jede Form von implizitem Wissen explizit machen – als besonders pathetisches Fremdschämbeispiel sei an dieser Stelle das autobiographische Buch „The Game“ von Neil Strauss empfohlen, in dem männliche Nerds (aka Pick-Up Artists) versuchen, einen Algorithmus zu entwerfen, wie man Erfolg bei Frauen hat. Nichtsdestotrotz gibt es eben auch viele Prozesse, bei denen dies sehr wohl funktioniert, und hier kommt der Programmierer bedeutend weiter als der Ungeübte.

Für das Thema des Blogs bedeutet das also nicht nur, dass wir Techniken aus der Informatik verwenden können, um unser Denken zu verbessern – es bedeutet auch, dass es hier und da hilfreich wäre, tatsächlich Informatik zu betreiben. Und sei es nur, weil unser Denken dann nicht rein abstrakt bleibt, sondern einem Wirklichkeitstest (ähnlich dem in den Naturwissenschaften) unterzogen wird: nur dann, wenn eine Ausführung des Prozessmodells das tut, was erwartet wird, handelt es sich auch um ein korrektes Modell.

Kategorien
Uncategorized

Probleme lösen lernen

In den vergangenen Beiträgen (zum Beispiel unter „Wer will wirklich Probleme lösen?„) habe ich ja bereits angedeutet, dass ich Zweifel habe an der Art, wie wir in Schulen und Hochschulen unterrichten. Da dieser Punkt noch wichtig wird, wenn es darum geht, wie man Algorithmik als Problemlösungstechnik lernen kann, möchte ich ihn heute einmal vertiefen.

Ein Bekenntnis

Ich oute mich an dieser Stelle mal und gebe zu, dass ich diese Zweifel schon als Kind und später als Student hatte. Nun war es nicht so, dass ich in Schule und Hochschule nicht zurecht gekommen wäre: ich war ein typischer Zweierschüler (und später ein Zweierazubi, ein Zweierstudent und irgendwann sogar ein Zweierdoktorand). Nicht überragend, aber ich hatte auch nie wirklich Probleme, mitzukommen. Abgesehen davon, dass ich zu keinem Zeitpunkt das Gefühl hatte, den Stoff wirklich verstanden zu haben, und dass nur sehr wenig davon langfristig in meinem Gedächtnis hängengeblieben ist.

Lange Zeit habe ich geglaubt, das läge an mir. Vielleicht war ich einfach zu perfektionistisch? Andere gute Schüler / Studierende schienen dieses Problem ja auch nicht zu haben. Es machte mich zwar etwas stutzig, dass ich alles, worin ich mich wirklich kompetent fühlte, eher außerhalb der Schule bzw. der Uni gelernt hatte (beispielsweise als Hobby oder im Nebenjob). Aber das lag – so redete ich mir ein – wahrscheinlich einfach daran, dass meine ADS mir nicht nur ein eher schlechtes Gedächtnis beschert, sondern auch dafür sorgt, dass ich nicht sonderlich gut damit zurechtkomme, stillzusitzen und zuzuhören, ohne selbst etwas tun zu können.

It’s not you… it’s the system!

Nun stehe ich aber schon seit Jahren auf der anderen Seite des (metaphorischen) Lehrpults, und mit jedem Jahr, das vergeht, wird das Gefühl stärker, dass es keineswegs nur mir so geht. Ich beobachte, dass auch die meisten Studierenden den Stoff nicht wirklich verstanden haben, und zwar auch dann nicht, wenn sie einen Kurs mit einer guten Note abschließen. Denn wenn man mal nachhakt, eine Verständnisfrage stellt oder gar ein halbes Jahr später nochmal nachfragt (beispielsweise, weil man etwas braucht, was im letzten Semester behandelt wurde), dann sind sie blank. Und zwar nicht einer oder zwei, sondern fast alle.

Und genau wie bei mir selbst habe ich den Eindruck, dass diejenigen Studierenden, die den Stoff wirklich drauf haben, diese Fähigkeit neben dem Studium erworben haben. Sie haben ein passendes Hobby, nehmen an freiwilligen Praxisveranstaltungen teil, gehen einem Nebenjob in der Branche nach oder haben eine relevante Berufsausbildung absolviert.

Wenn das nur in meinen Veranstaltungen so wäre, müsste ich mir ja die Frage stellen, ob es vielleicht einfach daran liegt, dass ich kein guter Dozent bin. Aber ich weiß, dass es bei den Veranstaltungen der Kollegen genauso aussieht – auch bei solchen Kollegen, von denen ich weiß, dass sie didaktisch sehr gut und persönlich sehr engagiert sind.

Natürlich mache ich mir so meine Gedanken, woran das liegen kann. Einige meiner Hauptverdächtigen nennt die folgende Liste:

  • Stoffmenge: Der Stoffumfang der meisten Lehrveranstaltungen ist so bemessen, dass man alle 1-2 Wochen ein neues Thema behandeln muss. Für ein wirkliches, tiefes Verständnis ist das viel zu schnell: man müsste sich dem Thema eigentlich von verschiedenen Seiten nähern, Theorie und Praxis beleuchten und in Anwendungsszenarien damit arbeiten. In der gegebenen Zeit ist das schlicht nicht möglich.
  • Interesse: Oft sind Studierende auch nicht wirklich intrinsisch für eine Veranstaltung motiviert. Dozenten bedauern oft, dass die Studierenden noch nicht soweit sind, die Bedeutung dieses oder jenes Faches für ihr künftiges Berufsleben zu schätzen. Ich habe aber den Verdacht, dass es oft umgekehrt ist: die Studierenden haben ein sehr viel besseres Gefühl dafür, was sie später wirklich brauchen werden, als ihre Dozenten. Um eine faire Antwort auf die Relevanzfrage zu bekommen, müsste man eigentlich eher erfolgreiche Praktiker als erfolgreiche Professoren fragen. Aber Hand aufs Herz: wer hat das für seinen Studiengang schon mal gemacht?
  • Frontalunterricht: Die klassische Vorlesung ist ja eigentlich ein Relikt aus dem Mittelalter, als der Buchdruck noch nicht erfunden war und Professoren den Studenten daher Bücher vorlasen. Seltsamerweise hat sie sich auch in Zeiten erhalten, in denen jede Menge Alternativen (wie Bücher, Lernvideos oder interaktive Lehrformen) zur Verfügung stehen. Das wäre per se nicht schlimm, hätte die Vorlesung nicht einen entscheidenden Nachteil: Menschen lernen nur sehr, sehr schlecht, indem sie einfach jemandem zuhören. Und ja, inzwischen habe ich verstanden, dass das keinesfalls nur mir so geht…
  • Prüfungen: In den meisten Lehrveranstaltungen ist die Klausur (typischerweise 60 oder 90 Minuten) die gängige Prüfungsform. Das macht es fast unmöglich, ein wirkliches Verständnis des Stoffes abzuprüfen; dafür reicht die Zeit einfach nicht aus. Stattdessen werden also Faktenwissen und kleine Beispiele abgefragt. Das, worum es eigentlich gehen müsste – die Fähigkeit, in echten Anwendungsszenarien mit dem gelernten Material zu arbeiten – findet hier keinen Platz. Und was in der Prüfung nicht drankommt, spielt natürlich auch in der Vorbereitung keine Rolle.
  • Ausbildung der Dozenten: Au weia, ganz dünnes Eis, dabei sprechen die Studierenden das natürlich (wenn wir gerade nicht in der Nähe sind) in aller Deutlichkeit aus: Professoren sind in den meisten Fällen keine Praktiker. Um Professor zu werden, muss man promovieren, und allein das zeigt schon, dass der Weg zur Professur nur über die Theorie führt. Praxis ist in den meisten Fällen optional, und nur wenige schaffen den Spagat, wirklich beides zu beherrschen (und dann auch zu vermitteln).

Die Liste ließe sich verlängern, es handelt sich aber stets um strukturelle Gründe: Die Art, wie wir (teils aus Gewohnheit, teils aus Bequemlichkeit, teils aus Kostengründen) unterrichten, geht an den Erkenntnissen der Kognitionspsychologie vorbei und lehrt die Studierenden häufig auch nicht das, was wichtig wäre.

Problemlösungskompetenz unterrichten

Nun soll es in diesem Blog ja nicht um eine Generalabrechnung mit den Bildungssystemen der westlichen Welt gehen (auch wenn ich manchmal gute Lust dazu hätte, wenn ich an die unfassbare Menge von Lebenszeit und Energie junger Menschen denke, die da verschwendet wird). Ich bin aber davon überzeugt, dass das Wichtigste, was Studierende an einer Hochschule lernen, nicht ein gewaltiger Vorrat an Faktenwissen ist (das ja meist auch recht schnell veraltet) und auch nicht das Lösen von Übungsaufgaben, die im wirklichen Leben ohnehin schon längst der Computer für sie löst. Entscheidend sind meiner Meinung nach vielmehr Methodenkompetenzen wie kritisches Denken, Problemlösungskompetenz, Selbstmanagement, Selbststudium, Kommunikation, soziale Interaktion usw.

Und hier kehre ich dann endlich wieder zum Thema dieses Blogs zurück, denn meine Kernthese ist ja, dass die Algorithmik einen umfangreichen Werkzeugkasten zum Lösen von Problemen bereitstellt. Nur leider wird das Fach (wie so viele andere auch) eben oft nicht so unterrichtet, dass die Problemlösungskompetenz im Vordergrund steht (siehe „Meta-Algorithmik„): Der Schwerpunkt liegt allzu oft nur auf dem Erlernen bekannter Algorithmen und nicht darauf, neue Lösungsverfahren für neue Probleme zu finden.

Im letzten Wintersemester habe ich den Kurs „Algorithmen und Datenstrukturen“ stärker als bisher auf die Entwicklung genau dieser Problemlösungskompetenz ausgerichtet. Die Studierenden wurden bei jedem neuen Problem aufgefordert, dieses zunächst selbständig algorithmisch zu lösen, und die Lösungen wurden auch gleich dem Praxistest unterzogen, indem sie an Ort und Stelle implementiert wurden. Das Ziel war es, neues Faktenwissen, Methodenkompetenz und Praxisanwendung viel enger als bisher zu verzahnen. Zugleich gab es eine klare Ansage, dass in der Klausur weder Faktenwissen noch kleine Übungsaufgaben abgefragt würden – um zu bestehen, musste man in der Lage sein, selbständig Algorithmen zu entwickeln und zu implementieren.

Aufgrund der Corona-Einschränkungen musste konnte der Kurs dann leider doch nicht wie geplant als Live-Coaching in einem Rechnerpool stattfinden, sondern musste über weite Teile im Selbststudium anhand eines Skripts mit zahlreichen Trainingsaufgaben absolviert werden. Dennoch waren die Ergebnisse vielversprechend: Obwohl die Klausur sicherlich schwieriger war als in vergangenen Semestern, fiel sie deutlich besser aus. Vor allem aber waren die Teilnehmer besser als in früheren Jahren in der Lage, Lösungsalgorithmen für neue Probleme zu entwickeln.

Natürlich gäbe es auch die Möglichkeit, einen solchen Kurs komplett im Wege des problemorientierten Lernens zu unterrichten, und vielleicht probiere ich das auch eines Tages einmal aus. Aber im Augenblick bin ich mit der jetzigen Mischung aus Lernen und Ausprobieren, Theorie und Praxis ungewöhnlich zufrieden. Es steht zu hoffen, dass kommende Semester ohne Corona-Beschränkungen die Möglichkeit bieten, die Sicht der Studierenden auf das neue Lehrkonzept zu evaluieren. Und spätestens eine Vertiefungsveranstaltung im Hauptstudium wird zeigen, ob im Kurs auch bleibende Kompetenzen entwickelt wurden.