Lehrzeit

Schule & Informatik

Funktionale Programmierung mit Java

Nachdem ich in den letzten Wochen viel um die Ohren hatte und abschließend auch noch Mittelohrentzündung  – gemerkt ? – hatte, kann ich mich mal wieder etwas mehr unterrichtlichen Neuorientierungen widmen. In diesem Fall wäre das die Informatik in der 9. Klasse.

In Bayern wird in der neunten Jahrgangsstufe im ersten Halbjahr i.a. Funktionale Programmierung mit Hilfe von Excel oder Calc unterrichtet. Im zweiten Halbjahr folgt dann der Themenkomplex Datenbanken.

Die Funktionale Programmierung in Excel findet ich dabei wirklich verwirrend. Wie bitte schön, solch ich Funktionale Programmierung in Excel unterrichten ohne das es eine reine Anwenderschulung von Excel wird? Ich weiß es nicht. Bislang habe ich eine erweiterte Anwenderschulung gemacht, habe schrittweise immer komplexere Funktionen erklärt und eingeführt und diese dann mit Hilfe von Datenflussdiagrammen umsetzen lassen.

In der Praxis sieht das dann beispielsweise so aus:

Meine Schüler benötigen dabei 40 Minuten für das Zeichnen des Datenflusses und maximal 5 Minuten um den Inhalt zu verstehen. Das steht, finde ich, in keinem Verhältnis. Vor allem dann nicht, wenn man merkt, das in der zehnten Jahrgangstufe eigentlich viel zu wenig Zeit für das Programmieren in Java zur Verfügung steht. Dort bräuchte ich viel mehr Zeit. Der Gedanke liegt also nah, beide Themen miteinander zu verbinden.

Ich lasse die Schüler die Flussdiagramme mit der Hand zeichnen, oder kennt jemand eine gute Internetanwendung (ähnlich wie websequencediagrams.com für Sequenzdiagramme) mit der diese Diagramme erstellt werden können, und lasse das Diagramm dann in Java erstellen. Das würde im obigen Fall dann hierzu führen:

Das dies keine einfache Sache sein wird, ist wohl offensichtlich. Denn ich muss einiges meinen Schülern erklären, ganz besonders diese static-Sache.

Mehr zum Thema Funktionale Programmierung mit Java habe ich noch bei auf dem Blog n log n gefunden. Diese Gedanken werden auch noch einfließen. Dabei ganz besonders der erste Block:

  • Das Programm besteht nur aus einer Klasse, keine Klassen-/Instanzvariablen.
  • Nur primitive Datentypen und Strings sind erlaubt.
  • Alle Methoden sind statisch (ab hier sind wir mehr oder weniger imperativ) und liefern stets einen Wert zurück, d.h. der Rückgabetyp einer Methode ist nicht void — Ausnahme ist main. Damit muss kein Objekt für die Klassen erzeugt werden.
  • Es kommen keine For-, While-Schleifen, continue, break und  goto vor.
  • Es kommt kein switch-Block vor.
  • Lokale Variablen werden bei ihrer Deklaration auch definiert. Außer bei ihrer Deklaration und gleichzeitiger Definition darf keine Variable auf der linken Seite einer Zuweisung stehen.
  • Die Zuweisung kommt außer bei Variablendeklaration und gleichzeitiger Definition sowieso nicht vor.  Das ist im übrigen auch der Grund, warum wir keine sinnvolle Iteration haben können.
  • main ist die einzige Methode, die System.out.println(…); enthält.

Durch diesen Ansatz erhoffe ich mir in erster Linie etwas Zeit in der zehnten Klasse zu erkaufen, das Verständnis für Methodenaufrufe zu erhöhen, was in der elften Klasse bei den rekursiven Datenstrukturen immer wieder massiv Probleme macht und abschließend natürlich auch die Motivation in der neunten Klasse dadurch zu erhöhen, dass das Niveau erhöht wird und die Schüler nicht nur am Malen sind.

Ob das alles so gelingen wird – wir werden sehen.

 

15 Kommentare

  1. Ein bisschen Java schon in der 9. Klasse ist jedenfalls eine gute Idee.

  2. Ich bin ja immer wieder beeindruckt und neidisch, was ihr in Bayern in der Mittelstufe schon machen dürft. Ich fürchte, das geht über das hinaus, was ich meinen Zwölfern (!), die ein halbes Jahr lang für zwei Wochenstunden Programmieren (kennen-)lernen dürfen, zumuten werde.
    Persönlich hatte ich mein „funktionales Aha-Erlebnis“ mit Java, als ich zum ersten Mal Brucke Eckel’s „Thinking in Java“ gelesen und darin das Konzept der anonymen inneren Klasse kennengelernt habe. Damit kann man nämlich tatsächlich halbwegs funktional in Java programmieren!
    Anderer Vorschlag: Warum nicht BYOB benutzen? Ist für jüngere Schüler sehr zugänglich (weil SCRATCH) – aber mächtig wie eine echte funktionale Programmiersprache. Tolle Sache!

    • BYOB kenne ich nun gar nicht. SCRATCH mache ich zwar manchmal mit meinen Siebtklässlern. Aber nich alle Kollegen machen es auch, so dass ich in der neunten dann eine sehr heterogene Schülermenge vor mir sitzen habe. Und es soll ja auch einen Mehrwert in Bezug auf das Java programmieren in der zehnten haben. Daher werde ich wohl bei Java bleiben. Aber danke für die Anregung. Vielleicht kann ich es mal anderweitig benutzen.

  3. Lasse doch die ganzen static-Klamotten raus und verwende Objekte. Das ist vielleicht intuitiver.

    • Nochmal zur Tabellenkalkulation: Ich weiß ja nicht, was euer Lehrplan genau unter „Funktionaler Programmierung mit Excel“ versteht – aber tatsächlich ist Excel in gewisser Hinsicht ja funktionaler als die meisten „richtigen“ Programmiersprachen, die Schüler heutzutage kennenlernen. Dass „WENN“ eine ganz normale Funktion mit einem Rückgabewert ist, ist schon sehr erstaunlich, wenn man Sprachen gewohnt ist, bei denen die Kontrollstrukturen ganz klar imperativ sind (Java, Python, …, you name it). Die Schüler scheint das auch nicht besonders zu irritieren, oder?

      • Was „wir“ darunter verstehen, lässt sich im Lehrplan nachlesen. Von funktionaler Programmierung ist da direkt recht wenig die Rede, aber wenn ich folgendes lese

        Funktion als informationsverarbeitende Einheit (Bezeichner, Eingangsparameter, Funktionswert, Zuordnungsvorschrift; Eindeutigkeit); vordefinierte Funktionen, insbesondere bedingte Funktion („Wenn-Funktion“) und logische Funktionen

        ,
        dann fällt mir eigentlich nichts anderes ein, als an Funktionale Programmierung zu denken.

    • Wäre wahrscheinlich einfacher. Und viel verlieren tut man ja nicht.

      • Oder doch Python in der 9. Klasse? Das geht ohne Klasse oder Objekt oder explizite Datentypen oder geschweifte Klammern oder Strichpunkte, einfach:

        def verdoppeln(c):
        return 2*c

        Und so weiter. Werde ich das nächste Mal machen.

        • Das stimmt. In der zehnten Klasse kommt dann aber bei uns immer Java. Und ich weiß nicht, ob es den Aufwand wert nochmal eine neue Sprache zu nehmen. Und wenn ich dann schon eine Sprache extra für funktionale Programmierung nehme, warum dann nicht Haskell?

          • Haskell ist von der Syntax etwas fremd und streng, glaube ich; Python ist da außerdem näher an Java. Und die meisten Elemente der Sprache (Klassendefinition, Datentypbezeichner, Attribute) lässt man weg, da bleibt kaum etwas übrig. Dürfte kaum Aufwand sein – wenn Python auf den Schulrechnern installiert ist.

          • Wie wäre es mit dem hier: pythontutor.com Da wird vieles dargestellt und man muss auch nichts installieren – finde ich als Admin auch immer ganz wichtig 😉

          • Den Pythontutor habe ich erst vor kurzem kennengelernt, und finde ihn genial.

          • Vielleicht sollte man mal zu so etwas Materialien erstellen. Warum wird so etwas eigentich nicht für uns Lehrer / Schüler entwickelt und zur Verfügung gestellt? Wäre doch super praktisch, oder?

          • (Ich hoffe, das ist der richtige Antwortknopf.) Wer sollte das Material erstellen? Die Unis? Da gib es gar nicht so viele, und da kommt ja auch immer wieder praktisches Material. (Habe erfreut fetsgestellt, dass Filius in einer neuen Version da ist.) Das Kultusministerium? Da gibt es einmal Handreichungen von teils ordentlicher Qualität, auch wenn ich sie nicht benutze; und dann nichts mehr, das stimmt.

          • Vielleicht sollte man mal damit anfangen. Und zwar mit einer Linksammlung zu Online-Editoren… Also auf zum nächsten Artikel/Seite.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

*

© 2016 Lehrzeit

Theme von Anders NorénHoch ↑