SourceForge.net Logo

Wie man großartige Programmierer macht

Warum BASIC noch relevant ist

Wenn man die Frage aufwirft, ob Kinder BASIC lernen sollten, ertönt immer sogleich ein vielstimmiger Chor: "NEIN! Das verdirbt sie nur. Verwende eine moderne Sprache wie (Lieblingssprache hier einsetzen)." Aber das ist Unsinn.

So wie gesprochene Sprachen Werkzeuge sind, die wir benutzen, um Ideen anderen Menschen mitzuteilen, teilen Computersprachen einem Computer Ideen mit. Wirklich wichtig zu wissen ist, was der Computer tun soll, welche Idee mitzuteilen ist. Die benutzte Programmiersprache ist eher egal, wenn sie nur für den beabsichtigten Zweck ausreicht. Um einfache Programme und Spiele zu schreiben, genügt BASIC vollkommen, und das schon seit vielen Jahren.

Und warum sollte der Einwand wahr sein, BASIC zu lernen behindere spätere Fortschritte beim Lernen über Computer? Er stimmt nicht für gesprochene Sprachen. Keiner hat je gesagt, "Ich wünschte, ich hätte niemals Englisch gelernt, denn ich mußte so viele schlechte Angewohnheiten verlernen, um Japanisch zu lernen." Menschen, die viele Sprachen lernen, sagen, dass es leichter wird, je mehr man lernt, denn man kann die Sprachen zueinander in Beziehung setzen und Muster erkennen. Genau so ist es bei Computersprachen, wahrscheinlich sogar noch ausgeprägter, da Computersprachen einander viel ähnlicher sind als gesprochene Sprachen.

Das Problem ist, dass die Frage "Welche Programmiersprache sollte mein Kind lernen?" nicht die richtige zu stellende Frage ist. Das eigentliche Ziel ist nicht, den Schülern beizubringen "wie man programmiert". Das Ziel sollte sein, ihnen beizubringen, wie Computer funktionieren. Wenn man einmal verstanden hat, wie Computer funktionieren, bekommt man das "wie programmiert man" fast umsonst dazu. Es handelt sich dann nur noch um eine Frage der Syntax.

Also, wie kann man jemanden zum Verständnis dieser grundlegenden Ideen, die einen Computer funktionieren lassen, bringen? Nun, das ist eine interessante Frage. Ich vermute, es hängt von den Zuhörern, der verfügbaren Zeit und wahrscheinlich von tausend anderen Faktoren ab. Gegenwärtig gibt es drei verschiedene Methoden zum Lehren der Informatik.

Als erstes die traditionelle Herangehensweise, die den Studenten beibringt, wie man entsprechend der aktuellsten Industriestandards programmiert. Meine Hochschule benutzt diese Herangehensweise. Vor meiner Immatrikulation lernten die Studenten C. Ich lernte C++, und heute unterrichten sie dort Java. Ich kämpfte, wie jeder andere auch, mit Klassen und Zeigern. Ich weiß nicht, womit sich die heutigen Studenten abmühen, aber ich bin sicher, es sind nicht Zeiger, da diese in Java nicht existieren. Ich bin nicht sicher, ob die heutigen Studenten etwas über Zeiger lernen, oder ob erwartet wird, dass sie es sich selbst aneignen, so wie von uns erwartet wurde, dass wir lernen, wie Linker arbeiten, was der Compiler eigentlich tut, wenn wir den grünen Knopf drücken usw. Vielleicht lernen sie niemals, was Zeiger sind.

Das zeigt ein Dilemma. Entweder sind Zeiger heute überflüssig, oder ihre Existenz wird im heutigen Informatik-Lehrplan vertuscht. Wenn sie überflüssig sind, hat mir meine Universität einen Bärendienst erwiesen, als mir ein launenhaftes Programmierkonstrukt wie Zeiger im Informatik-Grundkurs beigebracht wurde. Aber wenn sie noch wichtig sind, sind die heutigen Studenten die Dummen, weil sie nicht frühzeitig etwas über sie lernen.

Die traditionelle Herangehensweise hat immer diesen Pferdefuß. Umso höher das Niveau des Unterrichtsstoffes ist, desto mehr Dinge müssen notwendig ausgelassen werden. Natürlich wird ein guter Lehrplan einen großen Themenbereich abdecken, einschließlich der Funktionsweise von Hardware. Aber wenn der Themenbereich immer größer wird, muß irgendetwas ausgelassen werden.

Die zweite Herangehensweise ist die im MIT praktizierte. Das MIT benutzt ein hervorragendes Buch, welches das mathematische Modell lehrt, nach dem Computersprachen und Algorythmen aufgebaut sind. Es ist sehr theoretisch und vollständig. Jeder Kursteilnehmer erwirbt ein vollständiges Verständnis darüber, wie Computerprogrammierung funktioniert, und ist in der Lage, den gesamten Prozess vom Quelltext bis zur Maschinensprache zur Anwendung zu bringen. Interessanterweise hat die dort benutzte Computersprache (Scheme) ihre Wurzeln in Lisp (das über 40 Jahre alt ist), und die Verwendung von Scheme wird sich wohl auch niemals ändern. Das zeigt, dass das, was man dort lehrt, von universellem Wert ist. Es entspricht lediglich nicht der diesjährigen allgemeinen Industrie-Meinung.

Warum also nicht einfach die MIT-Herangehensweise verwenden? Nun ja, berücksichtigen Sie MIT's Zielpublikum. Ich würde wetten, dass kein einziger Teilnehmer des MIT-Informatikstudiums den Grundkurs Informatik besucht und sein erstes Computerprogramm schreibt. Diese Leute haben wahrscheinlich ihr ganzes Leben nur für Computer gelebt und geatmet und möchten nun etwas lernen, was man allein nur sehr schwer lernen kann. Sie möchten tiefes Verständnis, und haben wahrscheinlich alle Motivation, die sie brauchen.

Und jetzt betrachten Sie unsere Zeilgruppe, Kinder und Jugendliche. Die MIT-Herangehensweise wird bei ihnen schiefgehen. Sie ist abstrakt, mathematisch anspruchsvoll, und man malt dabei keine Bilder auf den Bildschirm.

Es gibt eine dritte Methode, und ich bin relativ sicher, dass sie meiner Generation bekannt vorkommt. Es ist die von unten nach oben aufbauende Methode. Bei der von unten nach oben aufbauenden Methode würde man mit einem Rechner anfangen, der eine nur kleine Teilmenge der Funktionalität hat. Ich hatte einen Commodore 64, der ein BASIC hatte, das nur eine Stufe über Assembler stand. Man würde ein erstes Programm schreiben und ausführen:

Ian Rules!

Und dann würde man mehr hinzufügen. Man benutzt ein GOTO-Kommando, um es wieder und wieder auszugeben. Man würde genau sehen, wie der Computer im Speicher hin- und herspringt, um die Dinge in der spezifizierten Reihenfolge auszuführen.

Was bringt das? Nun, eines der wichtisten Dinge beim Informatikunterricht ist die De-Mystifizierung der Maschinerie. Hochsprachen wie Java oder Python tun das nicht. Eine Sprache wie Assembler, die direkt analog zu dem ist, was der Computer tut, ist dazu nötig.

Wenn man einmal Assembler gelernt hat, ist nichts anderes jemals zu kompliziert. Ist das deshalb so, weil Assembler so viel schwerer ist als alles andere? Nun, nicht wirklich. Verglichen mit Java und seinen Bibliotheken ist die Assembler Sprache winzig -- sie zu lernen ist einfach. Es ist deshalb, weil man Computer versteht, wenn man Assembler versteht. Man weiß dann, dass "Funktionen" nichts anderes sind als Sprünge mit etwas Stack-Manipulation, um es so aussehen zu lassen, als ob kein GOTO verwendet würde. Man weiß dann, dass "Objekte" nichts anderes als eine Sammlung von Funktionspointern und Daten sind, mit compilererzwungenen Regeln, wie das alles angesprochen werden kann.

Sollten Kinder also zuerst Assembler lernen? Natürlich nicht. Es ist viel zu kompliziert, in Assembler all die lustigen Dinge zu tun, die Kinder gern tun wollen, wie z.B. Spiele schreiben. Sie würden gelangweilt sein und weggehen, um etwas anderes zu tun. Neunzig Prozent der Schwierigkeiten beim Unterrichten von Kindern bestehen darin, sie lange genug zu interessieren, damit sie die Informationen aufnehmen können. Aber wenn Assembler einfacher und lustiger wäre, wäre es nicht die ideale Sprache für Kinder?

Tatsache ist, dass das BASIC, mit dem die meisten von uns aufwuchsen, aussichtslos unterentwickelt war. Gleichzeitig war es einfach genug, um von einem 7-jährigen Kind verstanden zu werden. Warum ist das so? Nun, das ist so, weil Computer inhärent dumme, einfache Maschinen sind. Es ist keinerlei Magie an ihnen, egal was die Intel Werbung sagt. Der Übergang von Commodore BASIC zu Commodore Assembler war einfach, weil Commodore BASIC so beschränkt war, genau so wie Assembler. Sie hatten sogar die gleichen Kontrollstrukturen, wie z.B. GOTO.

Und hier kommt BASIC ins Spiel. Es ist so nahe an der Computer-Hardware, wie das möglich ist, wenn man noch witzige Dinge anstellen will. Es ist die höchstentwickelte Low-Level-Sprache, die es gibt.

Also hören Sie nicht auf die Verfechter der traditionellen Herangehensweise. Um jemanden die Programmierung beizubringen, muß er erst verstehen, wie Computer funktionieren. BASIC kann ihm das einfach beibringen, sozusagen "von unten", und er wird interessiert bleiben. Danach, wenn er das geschafft hat, wird er eher in der Lage sein, nach dem MIT-Weg zu lernen.