Es gibt verschiedene Ansätze, die Programmierung zu lehren. Bei uns am Institut für Informatik der Ludwig-Maximilians-Universität München wird derzeit im ersten Semester in die imperative und objekt-orientierte Programmierung mit Java und im zweiten Semester in die funktionale Programmierung mit SML eingeführt. Anschließend nimmt ein Teil der Studenten an einem Software-Entwicklungspraktikum teil.
Früher hat man ähnliche Lehrveranstaltungen in einer anderen Reihenfolge angeboten: Im ersten Semester eine Einführung in die funktionale Programmierung mit SML, im zweiten Semester eine Einführung in die imperative und objekt-orientierte Programmierung mit Java, dann ein Programmierpraktikum. (Ob unser derzeitiges Software-Entwicklungspraktikum etwas anderes ist als ein Programmierpraktikum ist übrigens fraglich.)
Für die derzeitige Reihenfolge – zuerst Java dann SML – spricht der Praxis-Bezug: Java ist derzeit eine unumgängliche Programmiersprache in der beruflichen Praxis. Für die frühere Reihenfolge – zuerst SML dann Java – sprechen zwei Argumente: Erstens werden erfahrungsgemäß allgemeine Prinzipien der Programmierung besser mit einer modernen funktionale Programmiersprache besser als mit einer industriellen Programmiersprache beigebracht; zweitens kennt kaum ein Anfänger SML oder eine ähnliche Programmiersprache, so dass alle Anfänger gleichgestellt werden. Letzteres ist auch für die Studenten förderlich, die bereits programmiert haben, weil sie neben einer wertvollen Erfahrung meist ziemlich falsche Vorstellungen sowohl der Programmierung im Allgemeinen wie auch der eigenen Programmierfähigkeiten haben.
An Java zur Vermittlung von Programmierprinzipien stört der Umfang und die Kompliziertheit der Sprache: Um ein Java-Programm ganz zu verstehen – nicht nur zu kopieren –, das nur “Hallo World!” anzeigt, sind schon viele Stunden nötig.
An unseren Einführungen in die Programmierung stört mich, dass die meisten Studenten die Prinzipien der Programmierung und die Merkmale der verschiedenen Programmierparadigma nicht ausreichend verinnerlichen. Fragt man zum Beispiel nach dem wesentlichen Unterchied zwischen Funktions- oder Prozeduraufruf einerseits und Nachrichtenweitergabe andererseits stehen die meisten unserer Studenten auf dem Schlauch. An unseren Einführungen in die Programmierung stört mich auch, dass kaum einer unserer Studenten einen guten Überblick über die ganze Bandbreite der Programmierparadigmen erhält.
Ein Alternativansatz könnte darin liegen, dass die Einführung in die Programmierung an Hand von so genannten Mini-Programmierpsrachen oder Mini-Sprachenstattfindet. Der Artikel “Mini-languages: A Way to Learn Programming Principles” von Peter Brusilovsky, Eduardo Calabrese, Jozef Hvorecky, Anatoly Kouchnirenko und Philip Miller (erschienen in der Zeitschrift “Information Technologies “, Band 2, Nummer 1, Seiten 65-83) führt in die Mini-Programmiersprachen ein und bespricht ihre Vorteile für die Lehre.
Die Einführung in die Programmierung mit Mini-Programmiersprachen dürfte ermöglichen, mit dem selben Arbeits- und Zeitaufwand in mehr als zwei Programmiersprachen und Programmierparadigmen einzuführen. Dies wäre wichtig in einer Zeit eines extrem schnellen technischen Wandels: Wer weiss denn, ob eine Programmiersprache nach einem bisher wenig verbreiteten Programmierparadigma in wenigen Jahren nicht für alle Informatiker nicht ein Muss werden wird?
