Lehrzeit

Schule & Informatik

Didaktisches Problem?

„Fremdsprachen wie Französisch und Englisch lernen, aber bei 3 Zeilen Java schon aussteigen.“, das ging mir durch den Kopf, als ich meinen aktuellen Zehnklässlern folgende kleine Aufgabe gab:

Aufgabe

Ergänze den Quelltext der GUI so, dass ein Vorschlag angezeigt wird.

Den Quelltext kann man hier herunterladen: Ratgeber2

Die Klasse TippGeber hatte ich mit den Schülern zusammen erstellt und dabei Felder und die Zählwiederholung eingeführt:

import java.util.*; 

public class TippGeber {
    private String[] tipp;

    public TippGeber() {
        tipp = new String[] {
            "Essen",
            "Schlafen",
            "Lernen",
            "Kino",
            "Freunde treffen",
            "Aufrauemen",
            "Lesen",
            "Musik machen"
        };
    }
    
    public String getZufallsEintrag() {
        //Wuerfel definieren
        Random wuerferl = new Random();
        //Wuertfel werfen
        int wurfErgebnis = wuerferl.nextInt(tipp.length);
        //tipp zurueckgeben
        return tipp[wurfErgebnis];
    }
    
    public void tippsAusgeben() {
        for (int index=0; index<tipp.length; index++) {
            System.out.println("tipp["+index+"]="+tipp[index]);
        }
    }
}

Ergänzt werden sollte also nur die folgende Methode in der GUI, die ich wie immer mit dem Java-Editor erstellt habe:

public void jButton_zeigeTipp(ActionEvent evt) {
    //TippGeber initialisieren

    //zufallsEintrag holen
   
    //Tipp anzeigen

}

Da dieses Zusammenspiel zwischen einer Oberfläche und einem Backend bereits gemacht wurde (Quader), dachte ich, dass sei kein Problem. Falsch gedacht. Von 30 Schüler wusste es keiner! Ein paar wenige konnte zwar aus dem alten Projekt die paar nötigen Zeilen rüber kopieren und anpassen. Als aber einer am Lehrercomputer vorprogrammieren sollte, kam er ungefähr soweit:

public void jButton_zeigeTipp(ActionEvent evt) {
    //TippGeber initialisieren
    new TippGeber tipps
    //zufallsEintrag holen
    ??????
    //Tipp anzeigen
    ??????
}

Welche Vorstellung oder Nicht-Vorstellung liegt da vor? Ich stelle mal ein paar Vermutungen auf:

  1. Es ist immer noch nicht klar, dass Programmierzeilen oder zumindest Zuweisungen in der Regel von Rechts nach Links gelesen werden, ähnlich wie in der Mathematik: y=2*5+1
  2. Der Konstruktor ist eine besondere Methode und benötigt daher Klammern… wurde nicht gemacht,
  3. Erkannt wurde, dass Objekte Namen haben müssen… Immerhin
  4. Erkannt wurde, dass komplexe Objekte mit new erzeugt werden… auch schon mal gut.
  5. Anweisungen werden in Java mit einem Semikolon beendet… wurde nicht gemacht, wäre aber, wenn es nicht so gehäuft wie oben auftritt, auch nicht so schlimm.

Aber nicht nur, dass wir das fast schon mal so gemacht hatten. Ich hatte in meiner Grundwissens-Zusammenfassung das alles auch schon stehen::

 Ein Objekt im Quelltext erzeugen können:
 new – Konstruktorname – ( - Werteliste - )
 Beispiel: 
 Hausaufgabe neueHA = new Hausaufgabe("M", "20161101", "B: S 12/1");

Das „-“ verbindet dabei die Token wie ’new‘ und steht für ein Leerzeichen. Ein eingerahmter Begriff bzw, Token kann vom Programmierer frei gewählt werden. Wie im folgenden Beispiel:

public – class – EigenerName – { – }

Hier ist nur das Token „Eigene Name“ frei wählbar. „public“, „class“ und die Klammern müssen so genau an dieser Stelle und genau in dieser Schreibweise stehen.

Was ist nun also schief gelaufen? War die Abstraktion mit den Token zu groß? War der Lerndruck zu gering, was ich vermute? Wie erklärt ihr das?

Kennt ihr auch solche Probleme? Wie löst ihr das? Hat jemand das Programmieren-Lernen über Token irgendwie verbessert? Oder hat einen ganz anderen Ansatz?

Gibt es einen Erklär- und/oder Trainingsansatz ohne Computer? Ich denke da an Spielkarten.

Der Vollständigkeit halber sei erwähnt, dass es in der Parallelklasse mindestens 1 Schüler gibt, der kein Problem damit hatte und das, obwohl er ohne Programmiervorkenntnisse in die 10. Klasse gekommen ist.

5 Kommentare

  1. Ich erlebe leider immer wieder ähnliches. Deine Grundwissens-Zusammenfassung habe ich übrigens in abgewandelter Form als arbeitsteilige Gruppenarbeit in einem Google Doc zur Wiederholung genutzt – Vielen Dank dafür!
    Und obwohl dort vieles (nochmal) aufgeführt ist, stolpern SchülerInnen über solche (vermeintlich) einfache Notationen. Ich bin mir nicht sicher woran es liegt. Ob die Syntax bzw das Prinzip der Tokens genauer erklärt / gelernt werden muss? Dafür finde ich deine Idee mit den Spielkarten gut, müsste ich mal ausprobieren. Vielleicht ist das Problem aber auch ein noch tiefergehendes und das grundliegende Prinzip von durch Methoden interagierenden Objekten (->Punktnotation und Klammern) wurde noch nicht verstanden? Ich gehe daher momentan wieder einen Schritt „zurück“ und mache die Grundlagen der OOM: Objekte mit Eigenschaften und Methoden identifizieren, diese zu Klassen abstrahieren und das zusammen mit den Beziehungen und der Kommunikation zwischen den Objekten grafisch darstellen. Viel Material dazu gibt es hier: http://ddi.uni-wuppertal.de/material/materialsammlung/oberstufe.html
    Ist jedenfalls ziemlich frustrierend wenn solche grundlegenden Syntax-Probleme die Beschäftigung mit den eigentlichen Konzepten behindern. Ich habe zuletzt einige Befürworter der grafischen Sprache Snap! (https://snap.berkeley.edu/) auch in der Oberstufe gelesen, wodurch das vermieden werden könnte…

    • Vielen Dank für deinen ausführlichen Kommentar.
      Folgendes fällt mir dazu spontan ein: Ich möchte eigentlich nicht auf ein anderes Sprachmodell oder -konzept wie beispielsweise Snap wechseln, da irgendwann der Punkt erreicht sein sollte, dass Schüler der 10. Klasse solche Strukturen nachvollziehen können sollten. Da finde ich die Frageformulierung im Französischen ja schwieriger.
      Und das Unterrichtsniveau kann man ja nicht beliebig senken.
      Und drittens würde ich das Problem nur verschieben. Wie oft habe ich in sowohl in Java, wie in Excel, wie in Scratch das Problem, dass in bedingten Verzweigungen so etwas wie „wenn (zahl=8 oder 9) dann …“ steht. Und die Schüler verstehen nicht warum. Ich muss dann erklären, dass 1. in der Klammer nur eine Frage stehen darf, die Wahr oder Falsch ist und das 2. Oder nur zwei Wahr/Falsch-Fragen verknüpfen kann. Ob ich das jetzt quasi in Präfix-Schreibweise, wie bei Excel, oder Infix-Schreibweise, wie in Java, tue, spielt dabei keine Rolle. Ich versuche das immer mit Maschinen, welche ich auch in der funktionalen Programmierung benutze zu erklären, aber so recht will es nicht klappen bzw. erst nach etlichen Versuchen.
      Auf der didacta habe ich daher nach Material gesucht, aber Informatik wird, obwohl überall MINT draufsteht, nie als Fach angesehen für das man Materialien produzieren könnte. Schade.

      • Ich sehe das ganz ähnlich. In der Sek I setzte ich Scratch gerne ein, aber in der Sek II sollte eine „richtige“ Programmiersprache genutzt werden. Sich die Syntax einer Programmiersprache anzueignen zeigt einem m.E. auch wie ein Computer eben funktioniert, nämlich streng nach formalen Regeln. Vielleicht könnten wir uns da tatsächlich etwas von der Sprachdidaktik abgucken – ich hab keine Ahnung wie die Grammatik einer natürlichen Sprache heutzutage gelehrt wird. Aber ein Knackpunkt ist wohl bei natürlichen und Programmiersprachen: Gelernt wird sie erst richtig, indem sie immer wieder genutzt wird, z.T. brauch es da einfach „etliche Versuche“…

  2. Ein schöner Einblick in Fehler der Schüler. Meine machen auch genug davon, aber die von anderen schaut man viel ergiebiger an, finde ich. – Ich glaube, die Sprachdidaktik kann da nicht viel beitragen. Es ist allerdings schon so wie bei Sprachen und auch bei Mathematik: Man müsste viel üben.

    • Na ja, die eine Struktur von ein paar Tokens sollte man sich schon merken können, oder? Vor allem, weil es, anders als in den Fremdsprachen, keine Ausnahmen gibt. Mehr als
      Datentyp – Objektnamen – = – new – Datenytyp() – ;
      ist es ja nicht.

Schreibe einen Kommentar

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

*

© 2017 Lehrzeit

Theme von Anders NorénHoch ↑