MUPIS - Modellieren und Programmieren in der Schule

 

Ein Bild zeigt mehr als tausend Worte

Eine  einfache Aufgabe in Java: Kampf der Klammern, usw.

// Mittelwert d. Quadratzahlen 0..n-1
public class mittelwert         
{	
   public static void main(String[] parameter)
   {
      int i;
      int anzahl = Integer.parseInt(parameter[0]);
      double Summe = 0;
      for (i=0;i<anzahl;i++)
         {
         Summe = Summe + i*i;
         }
      System.out.print(Summe/anzahl);
   }
}

... und in Scheme (HtDP): einfache Syntax, starke Semantik

;Mittelwert d. Quadratzahlen 0..n-1
(define (mittelwert n)
  (/ (apply + (build-list n sqr)) n))


Abstraktionstechniken, z.B.
Funktionen als Parameter von Funktionen?

Wir wollen
für eine beliebige (integrierbare) Funktion f näherungsweise berechnen:
(define (integral f a b dx)
  (if (>= a b) 
      0
      (+ (* (f a) dx) (integral f (+ a dx) b dx))))

z.B.

(integral sqr 0 1 0.01)
    ––> 0.32835

Wie soll das in Java, Pascal oder Delphi gehen?

 
 

Anfängersprache ≠ Industriesprache

Der Streit um die anfängergerechte Programmiersprache ist so alt wie der Informatikunterricht selbst, wird aber fast immer ohne didaktischen Hintergrund geführt, sondern viel mehr mit Hinweisen auf sog. „Industriestandards”.

Aber genau darum geht es nicht, denn solche Entwicklungspakete sind für Profis gedacht, die die Programmierparadigmen beherrschen (sollten). Zu dem besitzen die populären Programmiersprachen der Industrie u.a. eine barocke Syntax (s. Beispiel links), deren Erlernen wertvolle Zeit verschwendet, andererseits mangelt es an ausdrucksvoller Semantik auf Kosten von Abstraktionstechniken.

Oder, anders gesagt: Wie vermittelt man Paradigmenwissen, ohne dabei durch handwerkliche Aspekte abgelenkt zu werden?

Aus dem vorgestellten didaktischen Konzept ergeben sich folgende

Anforderungen

  1. einfache Syntax

  2. multiparadigmatisch

  3. ausdrucksvolle Semantik, d.h. alle gängigen Abstraktionstechniken müssen ohne Umwege möglich sein

  4. skalierbare Lernsprache, z.B. ist in den Anfängerstufen keine imperative Programmierung möglich, damit die Lernenden gezwungen sind, eine Problem funktional zu modellieren und zu programmieren

All diese Kriterien erfüllen die Lernsprachen-Varianten HtDP und DMdA von Racket/DrScheme.

 

Die Programmiersprache