Samstag, Dezember 13, 2014

Tipps zum OOP-Studium


thm-logo-campus-fb.jpg


Tipps zum OOP-Studium

(Anmerkung: Der Text ist derzeit als kommentierbares Google-Doc verfügbar.)


Das Studieren ist nicht leicht. Man muss viel Stoff in kurzer Zeit verarbeiten und einiges an Zeit dafür aufwenden. Und manchmal muss man so einiges an Frustrationen aushalten. Ein Student erzählt mir im Praktikum:


“Ich habe Space Invaders in Processing programmiert. Insgesamt 16 Stunden habe ich daran in den letzten Tagen gearbeitet. Das hat mit total Spaß gemacht. Und jetzt sitze ich vor dem Aufgabenblatt und weiß nicht, wie ich an die Aufgabe herangehen soll. Ich glaube, den nächsten Test werde ich nicht schaffen.”


Das erinnert mich an meinen Studienanfang. Für die meisten Fächer war ich leicht zu begeistern. Ich las viele Bücher und programmierte. Die Aufgaben aus den Übungen fand ich wenig spannend. Vor den Prüfungen kam ich mir bestens vorbereitet vor. Schließlich hatte ich mich mit viel komplizierteren und anspruchsvolleren Aspekten des Studienfachs beschäftigt. Dass ich anschließend mit Pauken und Trompeten durch meine ersten Klausuren fiel, war eine lehrreiche Erfahrung.


  • Die Begeisterung für ein Fach, wie z.B. für die Programmierung, ist etwas gänzlich anderes, als die Fähigkeit, eine Prüfung zu bestehen.
  • Ich habe mich nicht wirklich darum gekümmert, was man in einer Klausur von mir will, welche Art von Wissen und Können man von mir erwartet.


Mich hat es ein halbes Studium gekostet herauszufinden, was ich aus diesen Einsichten für Lehren ziehen sollte. Als die Erkenntnisse so langsam reiften, lief es in meinem Studium besser und besser. Aber erst mit meinem zweiten Studium hatte ich den Bogen wirklich raus. Es gibt zwar keine Abkürzung zu einem Bachelor- oder Mastergrad. Aber die Zeit und die Energie, die man einfließen lässt, kann man bündeln und effektiv gestalten.


Mit den sechs folgenden Tipps und Vorschlägen möchte ich Ihnen ein paar Hilfestellungen geben, wie Sie effektiv und zielgerichtet studieren können. Vielleicht haben Sie danach eine Idee, wie das Studieren auch anders gehen könnte.


1. Tipp: Kenne Deinen „Feind”! – Finde genau heraus, was man in einer Prüfung von Dir erwartet



Mit dem Eintritt in die Hochschule sind Sie Student bzw. Studentin geworden. Sie studieren. Über Ihren tatsächlichen Beruf sagt das wenig aus. In Wirklichkeit sind Sie professionelle Lernerin bzw. professioneller Lerner geworden, die/der Prüfungen erfolgreich besteht. Das Studienfach schränkt nur ein, was Sie lernen und welche Prüfungen Sie ablegen.


Wenn Sie für sich akzeptieren, dass das Studieren Ihr Beruf ist, dann müssen Sie Ihr Studium nicht einmal besonders mögen. Manchmal habe ich fast den Eindruck, dass eine distanzierte, nüchterne Haltung zum Studium einen professioneller sein lässt. Man wägt besser ab, geht strategischer an die Sache ran.


Wenn Sie das Studieren als Ihre Profession verstehen, als Ihren Beruf, dann sollte auch das gelten, was in jedem Beruf gilt: Sie sollten wissen, auf welches Ziel Sie hinarbeiten. Klar, Sie wollen einen Studienabschluss. Das ist das Fernziel. Doch wie kommt man dahin?


Die Prüfungsordnung zusammen mit den Modulbeschreibungen sagen es ganz klar: Sie müssen eine Reihe von Prüfungen bestehen. Nach einem bestimmten Rechenverfahren bestimmt sich aus den Einzelnoten Ihre Abschlussnote. So einfach ist das! (Ich lasse hier schriftliche Ausarbeitungen außen vor; aber im Grunde ist auch das nur eine spezielle Prüfungsform.)


Und wie besteht man Prüfungen? Indem man in die Vorlesung geht? Mitnichten. Das steht auch so nicht in der Prüfungsordnung. Prüfungen besteht man, indem man auf die Prüfung vorbereitet ist, zur Prüfung hingeht und sie ablegt. Oberste Priorität hat es, herauszufinden, was die Prüfung wie von einem verlangt und was man dafür können muss. Je nach Notenwunsch ist herauszukriegen, welches Anspruchsniveau dabei erreicht werden muss.


Mit diesem Ansatz sind ganz andere Fragen wichtig: Wo bekomme ich alte Klausuren her? Was ist in mündlichen Prüfungen von dem und dem Prüfer gefragt worden? Gibt es Lieblingsfragen? Wie stellt er oder sie Aufgaben oder Fragen, und wie muss ich diese Aufgaben oder Fragen verstehen? Was möchte er oder sie in meinen Antworten hören oder lesen. Sind ihm oder ihr Herleitungswege wichtig?


Bisweilen müssen Sie sich in eine Vorlesung oder Übung setzen, weil Anwesenheitspflicht gefordert ist. Manchmal wird erst über Tests die Klausurzulassung erlangt. Gut, dann sind das Prüfungsanteile, die dazu kommen. Immer gilt es die Frage zu stellen: Ist das, was ich da höre, erfahre, lese, erlerne, ausprobiere – ist das prüfungsrelevant?


Vielen Dozent(inn)en gefällt diese prüfungsorientierte Sicht gar nicht. Ein Studium sei mehr als Prüfungen. Das ist wohl wahr – fraglos lernen Sie in den verschiedensten Veranstaltungen durchaus mehr als für die Prüfung. Das ändert nichts daran, dass Sie schlussendlich geprüft werden. So will es eben die Prüfungsordnung, die den Verlauf Ihres Studiums regelt.


Ich möchte Ihnen keinesfalls ausreden, sich studentisch zu engagieren, im ASTA, in der Fachschaft oder im Studierendenparlament. Oder ein Auslandssemester zu machen. Ganz im Gegenteil. Das ist alles gut und wichtig und prägend für Ihr Leben. Allerdings, wenn es um Prüfungen geht, dann sollten Sie prüfungsorientiert daran gehen. Schließlich haben Sie viel zu tun. Und Sie sind ein Profi, ein Studierprofi. Wer fünf, sechs oder gar sieben Fächer in einem Semester erfolgreich bestehen will, der hat keine Zeit zu verschwenden.


Der Besuch einer Vorlesung oder einer Übung ist keinesfalls verwerflich. Nur wenn Sie dafür Ihre Lebens- und damit letztlich auch Ihre Studierzeit hergeben, dann sollten Sie wissen, warum Sie das tun, und effizient mitarbeiten.


2. Tipp: Nichtwissen, Nichtverstehen, Nichtkönnen sind Ihr größtes Entwicklungspotenzial



Ich sehe viele Studierende, die verstehen das Studieren als ein Abarbeiten von Terminen. OOP-Vorlesung besuchen. Abgehakt. OOP-Übung besuchen. Abgehakt. Im OOP-Praktikum die Aufgaben lösen. Fertig. War eine anstrengende Woche. Irgendwie viel gelernt in OOP, aber auch nicht viel geschafft in OOP. In anderen Fächern läuft es ganz ähnlich.


Darf ich es Ihnen mal so deutlich sagen? Das fühlt sich zwar an wie Studieren, es ist aber kein Studieren. Damit will ich nicht sagen, Sie hätten nicht zu meinen Veranstaltungen und dem Praktikum kommen sollen. Ich freue mich, wenn Sie da sind. Mir fällt immer wieder nur eines auf: Sie tun in der Zeit, wenn Sie bei mir im Hörsaal sitzen, am allerwenigsten von uns beiden. Es ist nicht erkenntlich, dass Sie gerade studieren. Auch wenn Sie im Praktikum an den Aufgaben programmiert haben, dann sehe ich Sie oft ohne eine einzige Lehre oder Erkenntnis aus dem Raum laufen!


Lassen Sie mich ein Beispiel geben: Im Praktikum haben wir Ihnen in einer Aufgabe Programmcode vorgesetzt, in dem Fehler versteckt waren. Einfache Fehler und auch ein paar schwierigere Fehler. Den einen oder anderen Fehler haben Sie entdeckt und auf dem Zettel markiert. Weil es doch schneller geht und Sie irgendwie unsicher sind, ob da noch mehr Fehler sind, tippen Sie das Programm ab und suchen mit der Entwicklungsumgebung nach weiteren Fehlern. Wenn das geschafft ist und das Programm frei von Fehlern ist, sehe ich Sie gedanklich einen Haken an die Aufgabe machen. Und es geht an die nächste Aufgabe.


Sie haben sich mit diesem Vorgehen um wertvolle Erkenntnisse gebracht! Sie schöpfen die Sahne von einer Übungsaufgabe nicht ab. Die Sahne ist nicht nur lecker, sondern sie hat viele Nährstoffe reich an Denkvitaminen und Wissensstoffen – und das zur Verköstigung ist kürzester Zeit.


Jeder Test, jede Aufgabe, jede Übung ist ein wunderbares Analyseinstrument Ihres aktuellen Wissensstands. Markieren Sie sich das, was Sie wissen. Nehmen Sie Gekonntes als Motivationsspritze für den zweiten Teil: die kritische Auseinandersetzung mit dem, was Sie übersehen, nicht gewusst oder nicht gekonnt haben. Da wird es spannend. Als Lernender, als Studentin oder Student ist das der Normalzustand. Sie studieren genau aus diesem Grund: weil Sie eben vieles noch nicht können und noch nicht wissen.


In dem Nichtwissen, in dem Nichtkönnen liegt Ihr Entwicklungspotenzial, Ihre Chance, Ihr Studieren. Seien Sie unerbittlich: Markieren Sie in gelb jeden Fehler, den Sie übersehen haben. Schreiben Sie sich dazu, wie man diesen Fehler hätte bemerken können. Oder bei einer Programmieraufgabe: Was hat der Sitznachbar, die Sitznachbarin so wunderbar hingekriegt, woran Sie sich eben zehn Minuten lang die Zähne ausgebissen haben? Wieso sind Sie selber nicht darauf gekommen? Haben Sie ein Programmkonstrukt nicht gekannt oder noch nicht verstanden? Gibt es ein wiederkehrendes Schema, das Sie sich merken können?


Wenn Sie sich solche Fragen stellen und die Antworten dazu notieren, dann beginnen Sie wirklich zu studieren. Das ist der Turbo, der Sie in kurzer Zeit an die Spitze Ihres Könnens und Ihrer Fähigkeiten beschleunigt. Dann macht das Studieren Spaß, weil Sie regelrecht spüren, wie die Beschleunigung Sie in den Sessel drückt. Sie merken, Sie kommen voran.


Wenn Sie geschickt sind, machen Sie diese Selbstanalyse noch im Hörsaal oder Seminarraum. Wenn Sie die Analyse gleich in eine Form bringen, die zum Lernen geeignet ist (dazu später ein paar Anregungen), dann haben Sie die Zeit effizient genutzt. Dann haben Sie tatsächlich studiert. Sie haben Aufgaben, Probleme und Punkte, die Sie zu hause recherchieren, klären oder in Ihrer Lerngruppe besprechen. Ihr Lernen und Studieren bekommt eine Struktur, und Sie können das Ziel, eine bestandene Prüfung mit Wunschnote, viel besser planen und angehen.


3. Tipp: Nutze die Zeit, die Du in der Hochschule bist



Ich erlebe Studierende oft aufmerksam zuhörend in meiner Vorlesung. Die meisten versuchen mir zu folgen, mitzudenken, zu verstehen. Hin und wieder ernte ich nickende Köpfe. Als wollte man mir sagen: „Ja, verstanden, ist klar.” Ich nehme das als Zeichen weiterzumachen.


So geht es 90 Minuten. Wenn ich gut bin, habe ich die ganze Zeit über die Aufmerksamkeit meiner Zuhörer. Dann habe ich, aus meiner Sicht, einen guten Job gemacht.


Wenn Sie den Hörsaal verlassen, ist die Zeit der größte Feind. Legt man die Vergessenskurve von Ebbinghaus zugrunde, werden nach 20 Minuten nur noch 60\% des Vorlesungsinhalts erinnert, nach einer Stunde sind es gerade noch 45\%, nach einem Tag 34\%. Zur nächsten Vorlesung, eine Woche später, ist es realistisch, von einer Erinnerung um die 20\% auszugehen. Das ist nicht gerade viel.


Eine Vorlesung ist erschreckend unergiebig, sie ist im Grunde verschenkte Lebenszeit – wenn es eine einseitige Angelegenheit bleibt. Mit meinem Edutainment im Hörsaal (ein Kunstwort aus Education und Entertainment) unternehme ich den Versuch, eine Flasche mit Wissen zu füllen. Es ist die Natur des menschlichen Gedächtnisses, dass die Flasche arg löchrig ist. Das gleiche gilt übrigens, wenn Sie sich eine Vorlesung als Video anschauen. Mit dem kleinen Unterschied: Die Flasche lässt sich immer neu auffüllen. An den Löchern ändert das nichts.


Wenn Sie sich nicht umgehend um die Stopfung der Löcher kümmern, dann bleibt vom Edutainment nur noch das Entertainment übrig. Dann haben wir vielleicht eine schöne Zeit im Hörsaal gehabt, aber der einzige, der etwas gelernt hat, bin ich. Ich habe immerhin mein Wissen aktiv reproduziert und wiederholt. Es hilft mir, den Stoff noch besser zu beherrschen.


Wie können Sie die Löcher stopfen?


Unser Gedächtnis vergißt schnell und viel, was es nicht für absolut relevant und wichtig erachtet. Das erste, was Sie tun können, ist, sich während der Vorlesung oder Übung Notizen und Anmerkungen zu machen. Dann ist das Ausmaß des Vergessens begrenzt, Sie können das Gehörte wieder hervorholen.


Der Witz ist aber eine Informationsverdichtung. Wer alles mitschreibt, verpasst den Inhalt. In der Vorlesung redet man viel. Das ist nicht unnötiges Gebrabbel. Das Gesagte stellt Zusammenhänge her, es gibt Beispiele, es erläutert ein und denselben Sachverhalt auf verschiedene Weise, es wiederholt. Das ist die Art, wie wir Menschen uns Dinge mitteilen, wie wir uns Wichtiges hervorheben, wie wir uns verständlich machen wollen. Sie kennen das: Wenn Ihnen in geselliger Runde ein kleines Ereignis z.B. aus dem Urlaub erzählt wird, kann das ein abendfüllender Programmpunkt werden. Menschen lieben es, sich ein und dasselbe mehrfach zu erzählen, mal mehr mal weniger ausgeschmückt, mal aus der, mal aus jener Perspektive.


Wenn eine Botschaft während der Vorlesung bei Ihnen ankommt, wenn Sie verstanden haben, dann ist das Konzentrat wichtig: Was nehmen Sie mit? Was war der entscheidende, wichtige Punkt? Gibt es ein Prinzip, was es sich zu merken gilt. Wie ist das Prinzip, die Idee begründet worden? Wie sieht die Herleitung aus? Was ist daran so toll, was so wertvoll? – Bleistift und Papier sind dann meist die besten Werkzeuge, um die Erkenntnis, das Verstandene, das Neue festzuhalten.


Auch wenn Sie etwas nicht verstehen, dann ist das nicht weniger wichtig, das festzuhalten. Dann haben Sie einen offenen Punkt, eine Baustelle. Da will etwas geklärt werden. Wenn Sie vergessen, was Sie nicht verstanden haben, dann lassen Sie den Zufall bestimmen, wann Sie das Unverständnis kalt erwischt.


Das Verdichten und Festhalten von Wissen ist eines. Sie helfen damit Ihrem Gedächtnis, Informationen zu behalten, die es ansonsten in kürzester Zeit vergessen hätte. Das allein reicht nicht. Damit haben Sie das Gehörte lediglich auf Papier gebracht oder auf Ihrem Rechner abgelegt. Das war der erste Schritt, der Vergessenkurve etwas entgegenzusetzen.


Das Wissen muss in Ihren Kopf. Und dazu gibt es ein paar Techniken.


4. Tipp: Wiederholtes, aktives, prüforientiertes Lernen ist die effektivste Lernmethode, die es gibt.



Im Film „Die Matrix” schaut die Hauptfigur Neo auf den vor ihm stehenden Hubschauber und fragt seine Begleiterin Trinity: „Can you fly that thing?” – „Not yet!”, antwortet sie, holt ihr Telefon hervor und fordert einen Upload in ihr Gehirn an. Momente später ist sie die perfekte Pilotin.


Schön wäre es, wenn man so leicht etwas lernen könnte. Beneiden könnte man auch die Geistesgiganten, die Savants, die sich so mühelos Telefonbücher, Enzyklopädien, Zahlenreihen oder Bilder einprägen können. Diese Menschen zahlen einen hohen Preis für diese Fähigkeit. Sie können die auf sie einprasselnden Informationen kaum filtern. Sie sehen sich einer Flut an Wahrnehmungsreizen und Details ausgesetzt, die ihnen ein normales gesellschaftliches Leben fast unmöglich macht.


Es ist also normal zu vergessen. Das Filtern und Aussortieren von unwichtigen Dingen ist eine Eigenschaft unseres Gehirns. Wenn allerdings etwas interessant und von Bedeutung ist, dann ist das die Anziehungskraft, die Informationen im Gedächtnis einfängt und – wenn Interesse und Bedeutung bestehen bleiben – bleibend verhaftet.


Es gibt ein paar einfache Prinzipien, Wissen im Gedächtnis zu verankern


  • Knüpfe neues Wissen an bekanntes Wissen an – so wird das Neue wichtiger und bedeutsamer
  • Mache das zu Lernende interessant – und es wird sich wie von selbst im Gedächtnis einnisten
  • Wiederhole das zu Lernende – prüforientierte Wiederholungstechniken sind an Effizienz nicht zu überbieten

Was weiß ich schon?



Ein gute Dozentin bzw. ein guter Dozent hilft Ihnen dabei, neue Vorlesungsinhalte zu verstehen. Da werden Verbindungen hergestellt und Brücken geschlagen zu Dingen, die Sie schon wissen und verstanden haben (sollten). Metaphern, Analogien und Vergleiche sind genau der Versuch, das Neue mit dem Bekannten in Beziehung zu setzen.


Da das Lernen jedoch individuell ist und jedes Hirn anders tickt, müssen Sie selber herausfinden, ob die Anküpfungspunkte und Ankerhaken bei Ihnen greifen und hilfreich sind. Wenn Sie Anschlusslücken haben, dann müssen Sie selbst nacharbeiten oder andere, alternative Verbindungen an ihr bisheriges Wissen herstellen. Dank des Internets können Sie heutzutage mühelos jeden Wissensbroken nachschlagen, sich in Lehrvideos etwas erklären lassen oder in Diskussionsforen Fragen stellen.


Hier beißt sich übrigens die Katze in den Schwanz: Wer wenig lernt, hat wenig Anschlusspunkte, um neues Wissen in den Kontext des neu Gehörten, Gesehenen oder Erfahrenen zu stellen. Man merkt das sehr gut daran, dass einem eine Vorlesung oder Übung anfängt davonzulaufen. Man kommt nicht mehr hinterher. Mit anderen Worten: man hat zu wenig getan. Vielleicht helfen Ihnen die zwei folgenden Punkte, leichter aufzuholen und aufzuschließen.

Nutzen Sie Mnemotechniken, Gedächtnistechniken.



Dr. Gunther Karsten war 2007 Gedächtnisweltmeister. Die Jahre davor belegte er drei Mal den zweiten und drei Mal den dritten Platz. Stellen Sie sich vor Ihrem geistigen Auge die folgende Szene vor: James Bond (007) braust mit seinem Auto (car) heran und bringt es mit einem Schleudermanöver knapp vor einem Siegerpodest zum Stehen (car-sten). Es bietet sich eine merkwürdige Szene: Auf Platz zwei und drei stehen zwei Gabeln (3 Zinken für die Zahl 3). Agent 007 (für das Jahr 2007) springt mit einem Satz auf den unbesetzten Platz 1, schraubt – und jetzt wird es widerlich – mit einem Schwung seine Schädeldecke ab, nimmt sein Hirn heraus und spießt es auf die Gabel von Platz 2. Dr. Karten wurde nämlich im Folgejahr 2008 noch einmal Zweiter unter den Gedächtniskünstlern.


Der Ekel, der sich einstellt, ist gewollt und provoziert. Sie wissen doch: Sex and Crime sells – das gilt auch für Ihr Gedächtnis. Sowas findet Ihr Gehirn nämlich brandspannend und interessant. Diese Geschichte müssen Sie sich nur noch ein, zwei Mal bewusst abrufen (sagen wir heute und morgen), dann werden Sie für lange Zeit nicht mehr vergessen, dass ein Herr Karsten (car-stehen) 2007 (Agent 007) Gedächtnisweltmeister wurde, zuvor schon dreimal (die Gabeln) Platz zwei und drei inne hatte und im Folgejahr noch einmal den zweiten Platz belegte (Hirn auf Gabel Platz Nr. 2 aufspießen).


Es kostet Zeit, sich nette, absurde Geschichten auszudenken. Das kann und sollte aber auch Spaß machen. Der Gedächtniseffekt ist bemerkenswert. Auf diese Weise merkt man sich langfristig unglaublich viele Dinge mit nur ein, zwei Wiederholungen. Effizienter geht es kaum. Die deutsche Wikipedia liefert Ihnen unter dem Stichwort „Mnemotechnik” einen ersten Einstieg in die Welt der Tricks der Gedächtniskünstler.


Sie müssen selber herausfinden, welches Wissen Sie gerne mit Hilfe von Mnemotechniken in Ihrem Gehirn verankern möchten. Es lohnt sich. Wenn Sie diese Techniken eine Weile praktizieren, werden andere irgendwann neidisch darauf sein, wie leicht Sie sich an vieles erinnern – und das noch nach ein, zwei Semestern. So ein Gedächtnis hätte jeder gerne! Tatsache ist: So ein Gedächtnis hat jeder! Wenn die Erinnerungstechnik stimmt.

Wende prüforientierte Wiederholungstechniken an



Mnemotechniken sind großartig, aber nicht jede Art von Lernstoff und Wissen ist dafür geeignet. Zum Beispiel müssen beim Erlernen einer Fremdsprache die Vokabeln ohne Umschweife, fast reflexartig zur Verfügung stehen. Es dauert zu lange, Wörter anhand kurzer „Filme im Kopf” abzurufen. Ähnliches gilt für die Sprachkonstrukte und Programmier-Schemata einer Programmiersprache.


Sie wissen sehr gut aus der Schule, wie Sie Vokabeln gelernt haben: durch Wiederholung. Und zwar wiederholen Sie die Vokabeln so lange, bis sie sich ohne großes Nachdenken an sie erinnern. Diese Strategie haben Sie in ähnlicher Form vermutlich schon oft angewendet: Sie lesen mehrfach ihre Mitschriften oder das Vorlesungsmanuskript oder ein Lehrbuch, solange bis Sie das Gefühl haben, den Stoff zu beherrschen. Diese Lernmethode ist weit verbreitet und viele Studierende halten das für eine effektive Lernform – das hat die Lernforschung herausgefunden. Das verteufelte daran ist: Da das wiederholte Lesen zunehmend leichtgängiger wird, stellt sich eine sogenannte Kompetenzillusion ein: Die Studierenden glauben, Sie hätten den Stoff nun im Griff und gut gelernt. Wenn es dann in der Prüfung nicht läuft wie geplant, wird die Schwere der Prüfung und die Aufgabenstellung bemängelt, jedoch nicht die Lernstrategie hinterfragt.


Die Lernforschung verrät uns auch, dass es eine wirkungsvollere Lernstrategie ist, den Lernstoff wiederholt frageorientiert abzuprüfen und zu erinnern – das wird in der Fachliteratur als Retrieval-Based Learning bezeichnet.


Die Idee ist einfach und könnte wie folgt umgesetzt werden: Zerlegen Sie den Stoff in kleine, leicht verdauliche Einheiten. Wir sprachen schon im Zusammenhang mit dem Vorlesungsbesuch davon, dass es sinnvoll ist, das Gehörte und Gelernte kompakt zusammen zu fassen. Das dient dazu, den Stoff zu verarbeiten und gegen das Vergessen anzugehen. Wenn Sie nun eine Karte zu Hilfe nehmen: Schreiben Sie auf die Vorderseite eine Frage oder eine Aufforderung oder Aufgabe, die zu dem Wissensbaustein passt. Auf die Rückseite schreiben Sie die Antwort oder das Ergebnis. Mit diesem Schritt haben Sie einen Wissensbaustein transformiert in eine Lerneinheit. Und das können Sie oft noch während der Vorlesung, der Übung, dem Seminar oder dem Praktikum erledigen!


Dieser Punkt ist entscheidend: Was eben noch eine Wissenseinheit auf Paper war, ist mit der Übertragung auf eine Karte und der Frage zu einer Lerneinheit geworden. Mehrere solcher Lernkarten bilden ein Lern-Quizz.


Mit diesen Lernkarten können Sie sehr effizient regelmäßig Ihren Wissenstand abfragen und durch die Wiederholung einprägen. Was gut sitzt, darf eine Weile zurückgestellt werden. Sie kennen vielleicht die Lernkastensysteme wie sie gerne für das Vokabellernen eingesetzt werden. Ob Sie nun Vokabeln oder Lerneinheiten abfragen, das System ist für alle Arten des Wissenserwerbs und der Wissensfestigung einsetzbar.


Wie die Lernforschung auch festgestellt hat, halten viele Studierende diese Lernkartentechnik und die Quizzes für stumpfes Auswendiglernen. Das ist nicht ganz verkehrt – aber nur die halbe Wahrheit. Das wiederholte, aktive Abrufen von Wissen fördert außerdem die Entwicklung von Verständnis. Jeder Abrufvorgang triggert Erinnerungspfade an, die regelrecht auf der Suche nach Sinnzusammenhängen sind. Verknüpfungen werden hergestellt. So kann es sein, dass Sie zu Anfang des Lernens sagen: „Uff, was muss ich alles auswendig lernen.” Und nach der fünften Wiederholung plötzlich feststellen: „Interessant, ich beginne zu verstehen.”


Das aktive Einprägen und Abfragen von Lernstoff ist nicht auf Lernkarten beschränkt. Sie können sich in Ihrer Lerngruppe gegenseitig Fragen stellen, das hat einen ähnlichen Effekt. Wichtig ist die Wiederholung und die Frage oder Aufforderung, die aktiv ein Erinnern erfordert. Das wiederholte Lesen von Notizen ist zu passiv. Viele der Vorschläge im nächsten Kapitel sind eine Variante davon: Wiederholte, aktiv eingeforderte Erinnerung. Das übt und trainiert und macht gut. Sehr gut sogar.


5. Tipp: Kenne Dich selbst und schaffe Dir ein Lernumfeld, dass es Dir so leicht und interessant macht wie möglich, dass Du tatsächlich lernst



Nach einiger Zeit des Studiums wusste ich ziemlich genau, wo ich am wenigsten gut lernen konnte: daheim in meinem Studentenzimmer. Es gab einfach zu viele Ablenkungen. Mein Computer, das Telefon, die Mitbewohner, der Kühlschrank. Also suchte ich mir eine Bibliothek, und zwar die langweiligste Bibliothek überhaupt, gefüllt mit Büchern, die mich nicht interessieren, und einen Platz, wohin sich nur wenige Studierende verlieren. In einer derart reizarmen Umgebung wurde mein Ordner mit den Prüfungsvorbereitungen plötzlich zu einer willkommenen Abwechslung. Kein Anruf, kein Computerspiel, kein Mitbewohner, der mal eben den Kopf durch die Tür steckt, kein Kühlschrank mit leckeren Joghurts – nichts, was mich hätte von meiner Mission ablenken können. Gelegentlich saß ich da und träumte vor mich hin, aber spätestens nach 10 Minuten war der Versuch, die nächste Aufgabe zu lösen, dann doch wieder die interessantere Unternehmung.


Jeder Mensch ist anders. Für mich ist der „Trick mit der Bibliothek” das Richtige gewesen. Vielleicht lernen Sie am liebsten in den eigenen vier Wänden. Oder dann, wenn Hund oder Katze Ihnen wärmend auf den Füßen liegen und man das Aufstehen nicht wagt. Oder Sie brauchen eine Lerngruppe, die Ihnen den Anstoß gibt sich zu strukturieren, wo man diskutieren kann und Hilfe bekommt, wenn man mit irgendetwas nicht zurecht kommt.


Entscheidend ist, dass Sie sich ein Umfeld zum Lernen schaffen. Es ist hart und macht das Lernen unnötig schwer, wenn man das sicher interessantere Gespräch mit der Freundin ablehnen muss. Wenn man den Leckereien im Kühlschrank widerstehen muss. Oder wenn man dem Internet und dem unendlichen Quell hochspannender Nachrichten aus sozialen Medien ausweichen muss. Mit Disziplin alleine ist es nicht getan. Jede Entscheidung gegen etwas kostet Energie, Zeit und Nerven, die einem für das Lernen fehlen. Mit all diesen Ablenkungen schrumpft eine geplante Lernzeit von vier Stunden rasch auf eine halbe Stunde zusammen. Und am Ende plagt einen das schlechte Gewissen, dass man eigentlich hätte mehr lernen sollen.


Es ist viel, viel leichter, sich in ein Lernabenteuer zu stürzen, wenn man sich aus der Schußlinie aller erdenklichen Ablenkungen gebracht hat. Das kann der einsame Ort einer Bibliothek sein.


Oder, und das ist die Alternative, man kommt mit Leuten zusammen, die das gleiche Anliegen haben. Wo man sich in der Gruppe fokussiert, wo man sich gegenseitig davon abhält, etwas anderes zu tun, als die geplante Lernzeit auch zu lernen. Wo man sich gegenseitig hilft, wo das Lernen von spannenden, anderen Sichtweisen und Lerntechniken geprägt ist. Mit den richtigen Leuten lernt es sich besser als einsam in der Bibliothek. Wir Menschen sind soziale Wesen. Es fühlt sich gut an, eine Herausforderung gemeinsam mit anderen zu meistern.


6. Tipp: Vorschläge zum Lernen im Team



Es gibt viele schöne Arten, wie man das Lernen mit einem oder mehr Studienkolleg(inn)en abwechslungsreich und interessant gestalten kann. Ein paar Vorschläge mit Bezug zur OOP-Veranstaltung:

Syntaktische Probleme



Wenn Sie ungenau bei syntaktischen Feinheiten sind (Sie vergessen z.B. immer wieder das Semikolon oder die schließende zu einer öffnenden Klammer), dann mag Ihnen Folgendes helfen: Schreiben Sie kleinere Programme auf Papier. Nehmen Sie dazu einfache Programmieraufgaben, die Sie aus dem Kopf nachprogrammieren. Ein Studienkollege bzw. eine Studienkollegin schaut Ihnen dabei zu und meldet sich sofort, sobald Sie den Fehler machen. Direktes Feedback hilft sehr gut, sich ein Korrekturverhalten anzutrainieren.

Verständnis eines Sprachkonstrukts



Lassen Sie sich in Ihrer Lerngruppe 10 Aufgaben geben, in denen das Sprachkonstrukt (z.B. die for-Schleife) verwendet werden soll. Wenn Sie alleine arbeiten: Suchen Sie sich Code-Beispiele raus (etwa per Google-Suche), in denen das Sprachkonstrukt verwendet wird. Schauen Sie sich das Programm an, lassen Sie es laufen und versuchen Sie, sich das Verhalten des Sprachkonstrukts zu erklären.

Unsicherheit in der Verwendung eines Sprachkonstrukts



Machen Sie sich Lernkarten. Auf der Vorderseite fragen Sie beispielsweise: „Wie sieht der schematische Aufbau einer for-Anweisung aus?”. Auf die Rückseite kommt das Schema und zusätzlich ein Beispiel. Legen Sie fest, wann Sie die Lernkarten lernen wollen. Sie können dafür Pausen oder Zeiten in öffentlichen Verkehrsmitteln nutzen.

Prüfsimulation



Sie nehmen Sich eine Aufgabe aus der Übung oder dem Praktikum vor, die Sie bereits gelöst haben. Sie geben sich 20 Minuten, das Programm auf Papier zu entwickeln. Nach 20 Minuten brechen Sie ab, egal, wie weit Sie gekommen sind. (Sie müssen ein Zeitgefühl entwickeln.) Anschließend geben Sie das Programm in der PDE ein. Sie markieren sich Fehler und Probleme, die Sie hatten. Sie wiederholen das täglich, bis Sie die Zeit einhalten und nur noch maximal einen Fehler machen.

Programmverständnis I



Erklären Sie einem Studienkollegen bzw. einer Studienkollegin, was ein Programm aus der Übung oder dem Praktikum macht; Zeile für Zeile.

Programmverständnis II



Drucken Sie sich den Quellcode eines Ihnen unbekannten Programms aus. (In der PDE gibt es einen Verweis auf zahlreiche Beispiele.) Das Programm sollte etwa 100 Zeilen umfassen und keinesfalls 200 Zeilen überschreiten. Versuchen Sie detailliert vorherzusagen, was das Programm tun wird. Erst wenn Sie absolute Klarheit haben oder nicht Weiterkommen, lassen Sie das Programm in der PDE laufen. Notieren Sie sich Irrtum, Missverständnisse etc. Machen Sie daraus eventuell Lernkarten.

Programmverständnis III



Setzen Sie sich zu zweit an einen Rechner und programmieren Sie gemeinsam an einer Aufgabe. Nach jeder Programmzeile tauschen Sie die Tastatur. Fehler des Vorgängers dürfen korrigiert werden, wenn man an der Reihe ist. Es wird die ganze Zeit über nicht gesprochen. Eventuell darf man Kurzkommentare im Quellcode ergänzen.

Stresstraining



Programmieren Sie mit Ihrer Lerngruppe zeitgleich um die Wette. Nehmen Sie eine Programmieraufgabe aus den Übungen oder dem Praktikum. Oder denken Sie sich selbst Varianten oder neue Miniprojekte aus. Sieger ist, wer zuerst ein lauffähiges Programm erstellt. Analysieren Sie gemeinsam das Siegerprogramm und verbessern Sie es. Starten Sie den Wettbewerb mit der gleichen Aufgabe erneut, wobei der Sieger als Coach dem einen oder anderen kurz hilft, wenn er oder sie hängt.


Buchempfehlungen



Bevor Sie das eine oder andere Buch kaufen möchten, bedenken Sie bitte eines: Weder der Besitz eines Buches noch das Lesen eines Buches sind ein Garant dafür, dass sich irgendetwas an Ihrem Studium und Ihrem Studierverhalten ändert. Der Konsum von Büchern (wie Konsum überhaupt) ist nicht selten der Anfang eines Vorsatzes („Ich kümmere mich um meine Probleme!”), dem die Umsetzung fehlt. Sie haben in diesem Text genug Anregungen bekommen, die Sie sofort anwenden können. Dafür brauchen Sie keine Bücher. Mein Vorschlag ist: Erst wenn Sie drei, vier Wochen etwas umgesetzt haben, dann besorgen Sie sich das Buch. Dann wird das Buch zur Anregung und Bereicherung eines Projekts, das Sie bereits gestartet haben: professioneller zu studieren.

Schnell und gut studieren



Zwei Bücher hätte ich gerne zu Beginn meines Studiums gehabt. Leider gab es sie damals noch nicht.


Cal Newport hat während seines Studiums versucht herauszufinden, wie es sich besonders effizient studieren und lernen lässt ohne sich ausbrennen zu lassen und nächtelang zu lernen. Er hat die Erfolgstechniken anderer Top-Studierenden genommen, sie selbst angewendet und in dem Buch „How to Become a Straight-A Student” (frei übersetzt: Wie man ein Einser-Student wird) festgehalten. Auch sein Blog „Study Hacks” ist voll mit hilfreichen Ratschlägen. Mittlerweile ist Newport Professor für Informatik.


Wie man den Beruf des Studierens auf die Spitze treiben kann, das haben Robert Grünwald, Marcel Kopper und Marcel Pohl eindrucksvoll bewiesen. Sie haben es geschafft, ihren Bachelor und ihren Master in vier statt in elf Semestern abzuschließen. Ihr im Buch „Die Turbo-Studenten” (Gabal, 2013) dokumentiertes Studium ist für die Wenigsten zur Nachahmung geeignet. Die Drei haben sich ungewöhnlich viel abverlangt und profitierten von den verteilten Standorten der privaten FOM Hochschule. Lesenswert finde ich das Buch dennoch für jeden Studierenden, allein schon zur Selbstreflektion, was möglich ist.

Lerntipps



Der erwähnte Dr. Gunther Karsten (Sie erinnern sich: 007 kommt mit seinem Auto angebraust) hat einige Gedächtnistechniken und Lerntipps anschaulich und kurzweilig in seinem Buch „So lernen Sieger – Die 50 besten Lerntipps” (Wilhelm Goldmann Verlag, 2012) zusammengestellt. Auch die Psychologie des Lernens kommt nicht zu kurz.

Java



Im Studium hat man in manchen Fächern genug an Material und an Stoff zu verdauen und aufzuarbeiten. Da ist es kaum möglich, dicke Programmierbücher zu OOP oder zu Java zu lesen. Darum gefällt mir das Buch „Java: Der Grundkurs” (Galileo Computing, 2015) von Michael Kofler so gut. Es bietet in meinen Augen einen guten Mittelweg zwischen Nachschlagewerk und Einführung zu Java~8. Das Buch kommt im Taschenbuchformat daher und ist ein leichter Tagesbegleiter durch den Java-Programmieralltag eines Informatik-Studierenden, besonders, wenn Sie am Anfang Ihres Studiums stehen.


Zum Schluss



Es würde mich sehr freuen, wenn Sie diesen Text jetzt nicht einfach beiseite legten, sondern anfangen darüber nachzudenken, wie Sie Ihr OOP-Studium ändern wollen. Schreiben Sie sich auf, was Sie ändern möchten und wie Sie fortan diese Änderung in Ihrem Studienalltag einbauen wollen. Fangen Sie heute damit an. Dann lässt der Erfolg auch nicht auf sich warten!



Samstag, November 22, 2014

Was mich am Inverted Classroom bzw. Flipped Classroom nervt

Mich nervt die Begeisterung für den "Umgedrehten Unterricht" -- im Englischen als Inverted oder Flipped Classroom bezeichnet --, die durch die Hallen der Hochschulen und Universitäten geistert. Die Idee: Statt einer Vorlesung werden Videos produziert, die die Studierenden im Selbststudium konsumieren. So kann die eigentliche Vorlesungszeit in effektive Übungszeit gewandelt werden.

Der Ansatz ist simpel. Und er scheint einen Reiz auszuüben. Seit drei Jahren treffen sich in Marburg Schul- und Hochschullehrer(innen) aus dem deutschen Sprachraum auf der ICM-Konferenz. Man ist gewillt, sich von der Idee anstecken zu lassen und Erfahrungen auszutauschen. Es gibt einige sehr engagierte Produzenten von Lehrvideos, allen voran Jörn Loviscach, Hochschullehrer in Bielefeld. Er schneidet jede Vorlesung und jeden seiner Vorträge mit. Nicht ganz 2.000 Videos listet seine Homepage aktuell auf. Seinen Youtube-Kanal haben über 41.000 Menschen abonniert, fast 15,5 Millionen Aufrufe seiner Videos hat es bisher gegeben. Damit ist Loviscach so etwas wie der "Popstar" der deutschsprachigen ICM-Szene.

Dabei sind es nur Videos! Der Eifer eines Loviscach, seine Traute aber auch sein Können öffentlich dokumentierter Lehre ringen mir Bewunderung ab. Loviscach kann erklären, der Gute hat was auf dem Kasten. Er macht meinem Berufsstand alle Ehre. Allein, es sind und bleiben nur Videos.

Loviscach weiß es und eigentlich weiß es auch jeder andere (Hochschul)Lehrer und jede andere Hochschullehrerin: Videos können Freiräume schaffen, ohne Frage, aber die Lehre revolutionieren können sie nicht. Weil Lehre weit mehr ist als ein Buch, als ein Video, als ein Professor, als eine Vorlesung oder eine Übung. Da Lernen individuell ist, muss auch die Lehre irgendwann beim Individuum ankommen, dort etwas auslösen, Wissen verankern, Erfahrungen einfließen lassen. Als Produktionsfaktor muss Lehre zu einem gewissen Grad massentauglich sein, aber sie muss das Denken, Leben und Fühlen eines einzelnen Menschen erreichen und verändern. Das ist ein interessanter Spannungsbogen, und die Suche nach einem Brückenschlag bleibt eine stete Herausforderung. Die Lebenswelten der Menschen ändern sich permanent, digitale Technologien durchsetzen eindringlich den Alltag, Wertesysteme sind im Wandel, vieles ist im Fluss. Lehrer(innen) werden allein schon benötigt, um diesen steten Wandel und den Transformationsbedarf zu bedienen, wenn es um die Lehre und das Lernen geht. Es gibt immer wieder aufs Neue einen Bedarf an didaktischen und pädagogischen Konzepten, Ideen, Methoden, Techniken.

Ich will die Absurdität der "Umgedrehten Vorlesung" einmal auf die Spitze treiben. Nehmen wir ein Beispiel aus meinem Hochschulalltag an der Technischen Hochschule Mittelhessen (THM) in Gießen. Dieses Semester bietet meine Veranstaltung "Objektorientierte Programmierung" 270 Informatik-Studierenden im 1. Studiensemester eine Einführung in die Programmierung. Es ist nahe liegend, die Veranstaltung zu "flippen" oder zu "invertieren", nicht wahr? Bei der Masse muss man ja regelrecht Videos produzieren. Warum sollte man sich unten in den Hörsaal stellen und über das Mikro 270 Menschen beschallen? Interaktivität ist ohnehin kaum möglich in so einem Setting. Gut, produzieren wir also Lehrvideos für 14 Semesterwochen. Übungen mit 270 Studierenden im Hörsaal sind auch nicht sehr ergiebig. Also werden wir auch die Übungen auf digitalem Zelluloid bannen! Und dann? Ja dann haben wir im Grunde das Material für einen MOOC, einen Massive Open Online Course, beisammen. Die Videos sind schnell hochgeladen. Lehre im neuen Jahrtausend ist online. Weil es noch an der Interaktivität mangelt: Quizzes dazu, ein Diskussionsforum aufsetzen, fertig. Wir richten noch eine Sprechstunde ein, in der sich Studierende an Tutoren wenden können. Es ist anscheinend alles Menschenmögliche getan, damit jeder Student und jede Studentin am Ende programmieren kann. Dann gibt es am Ende des Semesters nur noch die Klausur.

Ich behaupte, das ist keine Lehre! Videos sind so wenig Lehre wie es Texte in Büchern sind. Es macht keinen Sinn, ein Kind vor ein Video zu setzen, damit es dann Fahrrad fahren oder Schwimmen lernt. Da braucht es das Vorbild, die Demonstration, auch einmal die führende Hand, das ermutigende Wort, Rückmeldung und ermunternden Applaus, wenn erste Erfolge zu sehen sind. Die Lehre im digitalen Jahrtausend soll gerne alles nutzen, was digital zur Hand ist. Videos sind ja nicht per se schlecht. Und eine gamifizierte Lerneinheit am Computer auch nicht. Wenn sich Lehre jedoch entfremdet von den Sorgen und Ängsten junger Menschen. Wenn sie beim Lernen alleine lässt, wenn sie um den Preis der Orientierung an Masse am Individuum vorbei zielt. Wenn sie keine Orientierung und vor allem: keinen Lehrer bzw. keine Lehrerin mehr hat. Dann, so glaube ich, findet keine Lehre statt.

Kommen wir auf mein Beispiel zurück. Was beschäftigt mich, wenn ich 270 Studierende an das Programmieren heranführen will? Das letzte, woran ich denke, sind Videos! Es beginnt mit einem Leitsatz: "Lernzentrierte Lehre". Und das heißt für mich: Vom Ende, von der Klausur her denken. Wie bekomme ich meine Studierenden fit für die Programmierung in Java, wobei ich das Prüfungsformat nicht ignorieren kann. Einen Studierenden interessiert, wie er oder sie die Klausur nicht nur bestehen, sondern es soll auch klar sein, wie man mit einer Bestnote abschließen kann. Und darauf muss ich vorbereiten. Es muss Übungen und Tests geben, die Training sind für die Klausur. (Außen vor lassen möchte ich die Diskussion, ob eine Klausur die adäquate Prüfungsform ist. Das ändert nichts an dem Leitsatz und der Implikation: Wie gestalte ich Lehre aus Sicht der Studierenden?)

Was mich beschäftigt:

* Wie kann ich meinen Studierenden das Programmieren vereinfachen? Visuelle Orientierung und Interaktivität bringen abstrakte Konzepte an die sichtbare Oberfläche und gewährleisten schnelles Feedback beim "Sprechen" mit dem Computer. Das sind gute Voraussetzungen für selbstbelohnendes Lernverhalten. Darum fiel meine Wahl auf Processing. Das ist ein wunderbar verpacktes Java. Und zu Processing gibt es sehr gute Lernvideos! (Und wer mag, findet da großartige Unterstützung beim Lernen.)

* Ein anderer Leitsatz: "Programmieren ist ein Handwerk". Darum programmieren die Studierenden mit mir im Hörsaal. Das wird zweimal in der Woche angeboten für jeweils rund 120 Studierende. Das ist wie gemeinsames Fahrrad fahren, Schwimmen gehen oder Schreinern. Hier muss keiner fürchten, etwas falsch zu machen. Man bespricht gemeinsam Programme, tippert sie, probiert aus. Spielräume sind geschaffen.

* Wie erreiche ich den einzelnen Studierenden? Es gibt sieben Termine, die sich eine Assistentin und ein Assistent zusammen mit vier Tutoren teilen. So erreichen wir eine Gruppengröße von fast 40 Studierenden. Es herrscht Teilnahmepflicht, es gibt Übungsaufgaben und Tests. Betreuung ist in der Nähe, Hilfestellung wird gegeben. Jetzt macht jeder seine eigenen Erfahrungen im Sprachwasser der Programmiersprache.

Noch gibt es eine Vorlesung. Und ich überlege in der Tat, Teile davon als Videos zu produzieren, um stattdessen eine weitere Übung anzubieten. Aber die Videos sind nur ein Baustein. Es soll in Zukunft auch ein Skript geben. Papier als Nachschlagemedium ist dem Video weit überlegen. Und noch wichtiger: Lernkarten!!! Lernkarten (am besten digital) und Quizzes sind so mit das Beste, was es gibt, um Wissen in die Hirne zu befördern.

Was mich am "Umgedrehten Unterricht" bzw. an der "Umgedrehten Lehre" nervt? Es ist kein Lernkonzept! Vielleicht sollte das die 4. ICM-Konferenz in Marburg thematisieren.

Freitag, Juni 27, 2014

Let me tell you a story: I'm a Prisoner of the JVM


In JVM prison we live in a totalitarian system. You are not allowed to do something unless you are called to do something.

You can call someone else to ask for assistance. But that's no fun either. You have to stand still and wait for the other to complete your call.

Some poor guys call themselves to experience the joy of activity. If you call yourself too often, guards will step in and brutally silence you.

Whenever you do not behave properly, an alarm goes on. The guards try to manage exceptional situations one way or the other. They hate to face a situation they are not prepared to handle.

There are instructions we have to follow when called for action. Very often the instructions are carelessly written and buggy. We get punished if we misbehave and guards yell at us.

Life in JVM is full of shit. A lot of us are dying. When they bury the dead, they call it "garbage collection". Can you imagine that?

Fight for a better JVM. Fight for programmers who care about objects. 
Fight for objectivity. 

Know what you are doing when programming in Java, Clojure or Scala!

Remark: While thinking about a nice way to explain object-orientation, I suddenly found myself inventing this story about "The dark side of the JVM". It's just a story. Don't worry, keep on and enjoy programming, they are just objects ;-)

Sonntag, Juni 22, 2014

"Weniger schlecht programmieren"

Gestern hing ich mit Kathrin Passig und Johannes Jander in der Pause in Marburg ab. Anbei: Das Straßencafe "Die Pause" in der Oberstadt ist ein Geheimtipp, und ich hatte den Eindruck, dass es Kathrin und Johannes hier sehr gut gefallen hat. Ein gemütlicher Ort, an dem man ein wenig die Zeit verlieren und sich ausführlich über das Programmierleben unterhalten kann. Software-Testing, ja das ist wichtig, aber man muss es nicht übertreiben. Wir waren uns mal wieder einig. Das muss einen nicht daran hindern, Warstories aus Softwareprojekten zum besten zu geben. Ich, zum Beispiel, kannte einen Software-Tester, dessen Gespür für Softwarefehler geradezu unheimlich war -- so ein Uri Geller, der mit ein paar Tests zeigte, dass an der Software so gar nichts richtig und gerade war. Der führte einem vor, welche Codezeilen alle "verbogen" waren. Wahnsinn.

Zuvor hatten mir Kathrin und Johannes im Zug von Gießen nach Marburg von ihren Ansichten über das Testen erzählt. Das Schöne: Beide blieben auf dem Teppich, die Softwarebranche hat sie geschliffen. Sie wissen, was wichtig ist, wo es drauf ankommt, ohne dogmatisch zu sein. Gerade das sind beide nicht: Dogmatiker. Gesunde Pragmatiker eher. Daher kann man mit den beiden auch so unkompliziert seine Zeit verbringen. Sie wissen viel, sind unglaublich herumgekommen in der Softwarewelt, und bringen ihr Wissen solide und hübsch auf den Punkt!

Ich habe mit beiden seit einiger Zeit meinen Spaß. Kathrin, Johannes und ich, wir treiben uns seit zwei Monaten an wechselnden Orten herum. Mal in Gießen, mal in Marburg, mal in meinem Büro, mal zuhause. Natürlich -- ich gestehe -- kenne ich Kathrin und Johannes nicht persönlich. Sie sprechen über ihr Buch "Weniger schlecht programmieren" mit mir. Das Buch ist derart informell und gleichzeitig grundsolide, dass es wie ein Plausch unter Freunden anmutet. Unter guten Freunden sogar. Niemals hebt wer den Zeigefinger, es geht um das Programmieren unter menschlichen Bedingungen. Der Mensch ist ein Mängelwesen. Aber das weiß jeder selbst -- kein Grund, sich dafür fertig zu machen und abzustrafen. So erklärt sich der Titel. "Besser programmieren" wäre so anmaßend, so besserwisserisch. "Weniger schlecht programmieren" hat Verständnis für Dich und mich als Programmierer(in) und erinnert bestenfalls mit einem Augenzwinkern an die eine oder andere Episode, manch einsamen Tag vor der Tastatur, der hätte ganz anders verlaufen können, hätte, ja hätte man das Buch "Weniger schlecht programmieren" schon vor 10 oder 20 Jahren gelesen.

Oh, welche Blessuren hätte ich mir ersparen können, wären Kathrin und Johannes nicht solche elenden Prokrastinierer -- das Buch hätte schon vor Jahren erscheinen sollen. Andererseits: Es macht sie doppelt sympathisch, die beiden wissen, wovon sie reden und leiten das Buch so wunderbar ein im ersten Teil mit einem Kapitel "Zwischen Hybris und Demut". Es sind Menschen, die Computer programmieren.

Im zweiten Teil geht es um Themen wie: Konventionen, Namensgebung, Kommentare, Code lesen, Hilfe suchen, Lizenz zum Helfen, Überleben im Team -- all das unter dem klarsichtigen Titel "Programmieren als Verständigung". Kein Lehrbuch bringt es so realititätsnah auf den Punkt.

Teil 3 widmet sich dem "Umgang mit Fehlern". Da geht es ums Debugging, Refactoring, Testing und um Warnhinweise. Worte der Weisheit! Ich wünschte, auch das hätte mal auf dem Lehrplan meines Studiums gestanden.

Der vierte und letzte Teil, überschrieben mit "Wahl der Mittel", trägt Weisheiten, Techniken und Werkzeuge zusammen, die das Tagwerk eines Programmierers bzw. einer Programmiererin prägen sollten. Die Themen: Mach es nicht selbst, Werkzeugkasten, Versionskontrolle, Command and Conquer -- vom Überleben auf der Kommandozeile, Objektorientierte Programmierung, Aufbewahrung von Daten, Sicherheit, Nützliche Konzepte, Wie geht es weiter.

Das Buch lohnt sich. Die Zeit mit Kathrin und Johannes ist ein echter Gewinn. Nicht alles ist für den erfahrenen Programmierer bzw. die erfahrene Programmiererin neu, "aber gut, dass wir nochmal darüber geredet haben". Reflektion, Bewusstwerdung, das Erinnern an Techniken, Werkzeuge, Weisheiten aus dem Werkzeugkasten der Softwaretechnik, all das wird helfen, beim "Weniger schlecht programmieren." Es macht Dich besser!

Das Buch ist nichts für Programmieranfänger(innen). Aber man sollte das Buch im Regal stehen haben. Damit es in Reichweite ist für die Momente, wenn man ein wenig Beistand und Verständnis bei Kathrin und Johannes braucht. Am Abend, in der Programmierpause, im Cafe oder unterwegs. Und diese Momente sind häufiger als man denkt.

Kathrin Passig, Johannes Jander: Weniger schlecht programmieren, O'Reilly, 2013, http://www.oreilly.de/catalog/wenschleprogger/

[Hinweis zum Interessenkonflikt: Der O'Reilly-Verlag hat mir ein kostenloses Rezensionsexemplar zukommen lassen. Ich würde mich sehr freuen, wenn O'Reilly der "Für Dummies"-Serie eine "Weniger schlecht"-Serie entgegensetzen würde. Den Anfang haben Kathrin Passig und Johannes Jander gemacht. Weiter so!]

Dienstag, März 04, 2014

2 Programmiertipps: Bring Kopfwelt und Programmierwelt in Passung

Wenn es eine oder zwei Empfehlungen gibt, die ich einer Programmiererin oder einem Programmierer mit auf den Weg geben möchte, dann diese zwei:
  • Visualize what you don’t see
  • Express your understanding of your code
Beide Tipps drehen sich um ein und denselben Punkt: Stimmt das, was ich da programmiert habe, mit meinen Vorstellungen überein, was der Code wirklich tut? Habe ich ein korrektes Abbild dessen im Kopf, was sich zur Laufzeit meines Programms abspielt? Gerade in einer OO-Sprache ist die Gefahr sehr groß, dass man nicht wirklich überblickt, wie sich Objekte untereinander verknüpfen, ob die Objektstrukturen auch das abbilden, was man wollte. Man muss eine lebhafte Phantasie haben, um zu sehen, welche Auswirkungen der Programmcode in Form von Klassen und Methoden bei seiner Ausführung auf die Ebene der Objekte hat.
Beide Tipps seien an einem Beispiel erläutert.
In den letzten Tagen implementierte ich eine besondere Variante der binären Bäume: AVL-Bäume. AVL-Bäume achten beim Hinzufügen oder Entfernen von Knoten darauf, dass der Binärbaum balanciert bleibt — die englischsprachige Wikipediaseite erklärt AVL trees sehr gut. Als kleine Herausforderung kam dazu, dass der AVL-Baum als persistente Datenstruktur umgesetzt werden sollte. Man braucht persistente Datenstrukturen in der funktionalen Programmierung. Bei einer persistenten Datenstruktur werden Daten niemals verändert (Immutabilität), das Hinzufügen oder Entfernen von Daten erzeugt eine neue Datenstruktur, wobei so viele Anteile der “alten” Struktur wie möglich wiederverwendet werden.

Tipp 1: Visualize what you don’t see

Ich startete mit einer persistenten Implementierung eines Binärbaums — das ist in Python rasch geschehen. Dann folgte der Ausbau zum AVL-Baum, was ein wenig Arbeit und vor allem Verständnis erforderte. Wenn nach dem Einfügen eines Knotenelements der Baum seine Balance verliert, dann müssen Teilbäume rotiert werden, damit der Baum wieder ausgewogen ist.
Nachdem ich fertig war, stellte sich die Frage aller Fragen: Macht mein Code, was er soll? Erste Gehversuche mit dem Code an der Python-Konsole verliefen gut und ohne Probleme. Doch sind die Bäume wirklich ausbalanciert? Ich will nicht nur Sonderfälle testen, sondern auch sehen, dass die Verlinkung der Knoten stimmt. Visualisierung als vertrauensbildende Maßnahme ist nicht zu überbieten!
Zum Glück gibt es ein wunderbares Werkzeug zur Darstellung von Graphen aller Art: Graphviz. Schnell war die __str__-Methode der Node-Klasse angepasst und ich konnte mir mit Hilfe einer Funktion gviz eine passgerechte Ausgabe für eine Graphviz-Ausgabe erzeugen. Und die brachte das Unglück an den Tag.
n1 = Node(3).insert(4).insert(2)
n2 = n1.insert(1)
n3 = n2.insert(0)

print(gviz(n3))
Der sich ergebende Baum war alles andere als balanciert. Ab einem Höhenunterschied von mindestens 2 muss der Baum neu ausgerichtet werden. Blau eingefärbt ist jeweils der Verweis auf den “linken” Teilbaum eines Knotens, in Rot der “rechte” Teilbaum. Die Angabe im Knoten entspricht dem Schlüsselwert, dem key des Knoten.
Der Fehler im Code war schnell gefunden. Die “Höhe” eines Knoten wurde falsch berechnet, ich hatte die Addition um + 1 am Ende von max( ... ) vergessen. So ein Fehler passiert schnell und ist leicht behoben.
        self.height = max(left.height  if left  else 0,
                          right.height if right else 0) + 1
Und siehe da, jetzt stimmt es!
Die Visualisierung der ansonsten verborgenen Verlinkungen von Node-Objekten hilft außerdem dabei, die schrittweise Entstehung der Baumstrukturen zu beobachten, wobei die Immutabilität gewahrt bleibt. Es werden keine Referenzen “verbogen”, sondern gegebenenfalls neue Knoten mit neuen Referenzen erzeugt. Wann immer möglich, wird auf vorhandene Teilstrukturen verwiesen. Ein
print(gviz(n1,n2,n3))
liefert mir die Darstellung von drei Bäumen mit jeweils n1, n2 bzw. n3 als Wurzelknoten.
Links sieht man den durch n1 aufgespannten Baum, der mit der Ergänzung um einen Schlüssel 1 einen neuen Wurzelknoten, n2 liefert, der die rechte Teilstruktur beibehält (die roten Verweise auf den Knoten mit dem Schlüsselwert 4), jedoch links einen neuen Teilbaum mit dem zusätzlichen, neuen Knoten mit dem Schlüssel 1 aufbaut. Die Ergänzung um einen Schlüssel mit dem Wert 0 liefert den Knoten n3, der nun im linken Baumteil eine Rotation durchführen muss, um den n3-Baum zu balancieren.
Ohne eine solche Visualisierung hätte ich meinem Code kaum getraut. Vor allem sind große Baustrukturen rasch auf ihre Balanciertheit hin visuell inspiziert. Visualization builds trust in code!

Tipp 2: Express your understanding of your code

Natürlich gehören zu jedem guten Stück Code ein paar Testfälle. Was ich mit diesem zweiten Tipp jedoch meine, greift noch viel unmittelbarer: Überprüfe — beispielsweise mit Unit-Tests — ob der Code auch das tut, von dem Du glaubst, dass er es tut. Im Beispiel: Hat ein instanziierter Node tatsächlich die ihm zugewiesenen Eigenschaftswerte, insbesondere die berechneten Eigenschaftswerte. Wie ich feststellen musste, was schon die erste und einfachste meiner Annahmen nicht korrekt. Ein Knoten ohne jegliche Nachfolger sollte die Höhe 0 haben — hatte er aber nicht.
    def test_oneNode(self):
        n = Node(3)
        self.assertTrue(n.key == 3)
        self.assertTrue(n.height == 0)
        self.assertTrue(n.left == None)
        self.assertTrue(n.right == None)
Der obige Code zur Berechnung von self.height hatte tatsächlich noch einen Fehler! Er konnte niemals 0 werden, was von mir gar nicht beabsichtigt war. Dieser Widerspruch zwischen Annahme und tatsächlich berechneter Knotenhöhe fiel nicht weiter auf, da es für die Berechnung der Balance zwischen zwei Teilbäumen keine Rolle spielt, ob ein konstanter Wert konsistent dazugerechnet wird oder nicht. Erst die kleine Korrektur von self.height brachte die Welt wieder in Ordnung.
        self.height = max(left.height  if left  else -1,
                          right.height if right else -1) + 1

Zusammengefasst

Wer programmiert, baut Kunstwelten aus Objekten auf. Und dabei ist vor allem wichtig, dass die Ideen und Vorstellungen im Kopf übereinstimmen mit den erschaffenen Objektwelten. Sonst weiß man nicht wirklich, was man da programmiert hat, was da abläuft und was sich da tut.
Kopfwelt und Programmwelt müssen unbedingt in Passung gebracht werden. Und dazu gibt es zwei Techniken:
  • Visualisiere die Welt Deiner Objekte, damit Du Deine Erwartungen und Vorstellungen abgleichen kannst. Graphiz ist dafür ein sehr elegantes Werkzeug.
  • Formuliere Deine Vorstellungen an die Objektwelt, so dass Brüche in der Objektwelt sofort zutage treten. Assertions und TestCases sind hier ein gutes Hilfsmittel.