»Wir waren Lehrer, keine Unternehmer«

Ein Interview mit dem Erfinder von BASIC*

Thomas E. Kurtz und sein 1992 verstorbener Kollege John G. Kemeny haben 1964 die Programmiersprache BASIC am US­-amerikanischen Dartmouth­-College aus der Taufe gehoben. Ziel war es, auch Nicht-Informatikern den Zugang zum Computer als Programmierwerkzeug zu ermöglichen. Über Jahre hinweg entwickelten sie ihre Sprache wei­ter, lehrten Generationen von Studenten Programmieren. Seine wah­re Breitenwirksamkeit bekam BASIC jedoch erst mit dem Auftauchen der Mikrocomputer Mitte der 1970er-­Jahre. Stefan Höltgen sprach mit Thomas E. Kurtz anlässlich des anstehenden 50. Geburtstags sei­ner Erfindung über die Anfänge, die Besonderheiten und seine Sicht auf das Homecomputerzeitalter sowie die Zukunft von BASIC.

Stefan Höltgen: Professor Kurtz, welche direkten Vorfahren unter den Programmiersprachen hatte BASIC zu Beginn der 1960er-Jahre?

Thomas E. Kurtz: Zur Frühgeschichte der BASIC-Entwicklung habe ich mich schon oft geäußert. Im 1981 erschienen Buch »The History of Programming Languages«, herausgegeben von Richard Wexelblat für ACM, habe ich einige Einflüsse aufgeführt. Zwei ältere Programmiersprachen, die BASIC direkt beeiflusst haben, waren Fortran (entstanden etwa 1957) und ALGOL (von 1960). Obwohl ALGOL nie besonders populär wurde, geriet es doch zum Vorbild für Pascal. Ich hatte damals schnell entschieden, das lediglich vereinfachte Versionen von Fortran oder ALGOL für unsere Zwecke nicht geeignet waren. Und auch John Kemeny ist nicht von seiner Überzeugung abgewichen, eine ganz neue Sprache zu entwickeln.

S. H.: Können Sie sich an konkrete Konzepte erinnern, die aus Fortran, ALGOL oder anderen Sprachen stammen?

T. K.: Die Unterschiede und Ähnlichkeiten zeigen sich deutlich, wenn man sich typische Schleifenkonstruktionen in diesen Sprachen ansieht. In Fortran kann die Schrittweite, wenn sie 1 beträgt, weggelassen werden:

DO 100, I=1,10
(Schleifenkörper)
100 CONTINUE

Bei ALGOL ist die Angabe der Schrittweite (»step 1«) zwigend erforderlich:

for i := 1 step 1 until 10 do begin
(Schleifenkörper)
end;

In BASIC ist die Angabe der Schrittweite fakultativ:

FOR I = 1 TO 10
(Schleifenkörper)
NEXT I

Genauso korrekt wäre:

FOR I = 1 TO 10 STEP 1

Wenn die Schrittweite 1 ist, kann sie – wie in Fortran – ausgelassen werden. Die syntaktischen Trennzeichen sind Worte (TO, STEP) wie in ALGOL und nicht Satzzeichen (,) wie in Fortran. (Ich glaube, dass in frühen Fortran-Versionen, die Komma-Trennung notwendig war, um die Schleifenzahl von der Zeilennummer unterscheiden zu können.) Wie dem auch sei: Ich selbst konnte mir nie richtig merken, wann ein Komma nun notwendig war und wann nicht. Wir entschieden uns letztlich, dass das Blockende (NEXT I) den Blockanfang »reflektieren« sollte; anders als in Fortran, wo CONTINUE das übernimmt oder in ALGOL, wo mit Blöcken (begin … end) gearbeitet wird.

S. H.: Dartmouth BASIC war eine Compiler-Sprache. Hatten Sie selbst einmal überlegt, ein interpretiertes BASIC daraus zu machen – vielleicht auf Basis von Bytecode, wie es später in Homecomputern geschah?

T. K.: Dartmouth-BASIC war immer kompiliert. Unser Originalcomputer hatte damals eine Speicherkapazität von 32.768 20-Bit-Wörtern und eine Taktrate von sechs Mikrosekunden. Damit hatten wir eine Menge Rechenkraft für die damalige Zeit zur Verfügung. Während die meisten Programme recht kurz blieben, schrieben doch einige Studenten und Mitarbeiter ziemlich lange Programme in BASIC – das hatten wir durchaus erwartet. Allein dafür war eine Vorab-Kompilierung unbedingt notwendig. Natürlich war es unabdingbar, dass unser Compiler sehr schnell sein musste. Aber in Dartmouth haben wir nie einen Interpreter für BASIC entwickelt – auch später für True BASIC gab es keinen. Interpreter waren ja eigentlich nur auf den frühen Personal- und Homecomputern nötig, die in einigen Fällen ja gerade einmal 2000 Bytes RAM-Speicher besaßen.

S. H.: In früheren Texten und Interviews über BASIC sprechen Sie manchmal davon, dass Ihr BASIC einen »1.5-Pass-Compiler« hatte. Worin unterscheidet sich das von herkömmlichen Two-Pass-Compilern anderer Sprachen? Konnten Sie den zweiten Durchgang für die Code-Optimierung abkürzen, weil BASIC schon besondere, maschinennahe Eigenschaften besitzt?

T. K.: BASIC war nie so optimiert, dass es maschinennah gewesen wäre. Tatsächlich gab es darin ja sogar Dinge wie die Schleifenzähler-Variable, die in doppelter Genauigkeit arbeitete, selbst dann, wenn der Nutzer dachte, er hätte es mit einer Integerzahl zu tun. Der Ausdruck »1.5-Pass-Compiler« bezog sich auf die Tatsache, dass, während der Compiler den Sourcecode scannt, ihm alles schon bekannt ist – mit Ausnahme der Ziele für Vorwärtssprünge mit GOTO. Daher kann man das Scannen der Linkliste durchaus als »halben« Compilerschritt bezeichnen. Es ging nämlich ziemlich schnell. Und das musste es auch: Ich erinnere mich, dass bei einer frühen Version von Fortran selbst ein triviales Programm eine sehr lange Zeit zum Kompilieren benötigte, weil das Unterprogramm, das zum END des Programms gehörte, ganz am Ende des Subroutinen-Library-Bandes war. Den Entwicklern von Fortran war die Kompilier-Geschwindigkeit offenbar viel weniger wichtig als die nachherige Ausführungsgeschwindigkeit, weil die langen Programme, die für die Forschung in Fortran geschrieben wurden, sowieso nur selten kompiliert wurden, dafür aber für Stunden laufen mussten. Im Kontrast dazu haben wir mit einem Haufen kurzer Programme von Studenten gerechnet, die sehr oft kompiliert wurden, dafür aber immer nur den Bruchteil einer Sekunden ausgeführt wurden. Daher war unsere Devise: Mach das Kompilieren so schnell wie möglich und denk’ nicht an die Laufzeitoptimierung der kompilierten Programme.

S. H.: »Dartmouth-BASIC« hat in den 1960er-Jahren einige Updates erfahren. Wann hat die Entwicklung daran geendet? Oder gab es einen kontinuierlichen Übergang in eine andere Lehrsprache oder zu »True BASIC«?

T. K.: BASIC wurde in Dartmouth kontinuierlich weiterentwickelt. »BASIC 7« (1983), basierte sogar auf dem ANSI-Standard (X3J2-1978 for »Minimal BASIC«, X3J2-1987 for »Full BASIC«) und war der Vorläufer von »True BASIC«, das ebenfalls nach dem ANSI-Standard für »Full BASIC« entwickelt wurde.

S. H.: Mit anderen Worten hat BASIC die Universität sozusagen als »True BASIC« verlassen. Nun, zu dieser Zeit, in den frühen 1980er-Jahren, war BASIC die beliebteste Programmiersprache für Kinder, Teenager und auch in Schulen. Gleichzeitig rief es jedoch auch scharfe Kritik hervor: BASIC sei zu problemfern und zu maschinennah (so ein Statement einer Gruppe deutscher Programmierdidaktiker, die eine Schulsprache finden oder entwickeln sollten). Sie hingegen haben immer wieder darauf hingewiesen, das BASIC als Anfängersprache entwickelt wurde. Was glauben Sie also, war das Problem? Dass es zum Programmieren von Spaghetticode verleitete?

T. K.: Das Problem war hauptsächlich die Arroganz. Natürlich hängt es davon ab, über welche Version von BASIC (und von welchem Unternehmen) wir hier sprechen. Aber ein Beispiel: BASIC (wenistens »Dartmouth-BASIC«) unterstützte die einfache Idee von »eine Zahl ist eine Zahl ist eine Zahl«. Und das, obwohl die meisten Computer einen Unterschied zwischen Festkomma- und Fließkommazahlen machen. Wir haben unsere Programmierer von diesem »esoterischen Konzept« immer ferngehalten, weil es bloß dazu diente, die Maschine effizienter zu nutzen oder den Ablauf zu beschleunigen. Alle Sprachen, die für Experten entwickelt wurden, berücksichtigen diese Unterscheidung mehr oder weniger (einschließlich Fortran, Pascal, ALGOL, C und so weiter). Wir wussten jedoch – wie erwähnt –, dass die meisten Programme, die in Dartmouth und anderswo geschrieben wurden, sehr klein sein würden. Der Unterschied, ob man beispielsweise Fest- oder Fließkommazahlen für eine Addition verwendete, machte vielleicht 12 zu 36 Mikrosekunden Rechenzeit aus. Ein Unterschied von 24 Mikrosekunden! Stellen Sie sich nun vor, ein kleines Programm würde 10.000 Additionen durchführen. Dann wäre der Unterschied 240.000 Mikrosekunden – oder eben 0,24 Sekunden Rechenzeit-Unterschied! Solch ein BASIC-Programm benötigt vielleicht nur 0,5 Sekunden Kompilierzeit, während eines in Pascal fünf Sekunden kompiliert. Mit BASIC hätte man dann 4,5 Sekunden gespart.

S. H.: Und man müsste zuvor auch nicht den Unterschied zwischen Festkomma- und Fließkommazahlen lehren, wenn er nicht gecodet wird.

T. K.: Um das Beispiel noch weiterzutreiben: Wenn man nicht gerade ein Programmierexperte ist, könnte es durchaus zehn Versuche benötigen, ein korrekt ablaufendes Pascal-Programm zu schreiben – nicht nur, weil die Syntax dieser Sprache durch ihre Verwendung von Semikola und Kommata unnötig kompliziert ist. Mir ist das selbst passiert, lange bevor meine BASIC-Karriere begann: Ich hatte ein paar komplexe statistische Berechnungen am MIT zu programmieren. Wegen des ganzen Unsinns darüber, dass Assembler dafür am effizientesten wäre, bin ich genau diesem Weg gefolgt. Nach etlichen Versuchen, das Programm zum Laufen zu bringen, habe ich aufgegeben … und schon über eine Stunde Rechenzeit auf dem IBM 704 verschwendet. Also dachte ich mir: Verdammt, ich programmiere das jetzt in Fortran. Und tatsächlich hatte ich meine Ergebnisse nach nur fünf Minuten IBM 704-Rechenzeit. Daher lasse ich mich lieber nicht über die Effizienz von Fortran aus.

S. H.: Einige Konzepte in BASIC kommen Assembler-Programmierern sehr bekannt vor: Die Nutzung von Zeilennummern (Adressen) als Sprungziele, die Nutzung von Stacks für die Verwaltung von GOSUB/RETURN-Subroutinen (der Programmzähler), nur eine Operation pro Zeile und so weiter. Haben Sie aus Ihren Erfahrungen mit Assemblern auch Ideen in BASIC übernommen?

T. K.: Einer der BASIC-Vorläufer, »DARSIMCO«, war ja auch ein mnemonischer Assembler.
»Eine Zeile – ein Befehl« stammt noch aus der Zeit der Teletypes von 1964. Weil wir noch keine Bildschirme benutzen konnten, dachten wir, dass wir zum Programmeditieren Zeilennummern verwenden sollten. Warum die dann nicht auch gleich als Sprungziele für GOTO nutzen, wenn wir dadurch keine eigenen Labels einführen mussten? (Auch Fortran nutzte damals Zahlen als Zeilen-Label, aber nicht für Editierzwecke, weil ja alle Programme von Lochkarten stammten. Die meisten anderen Sprachen führten eigene Label-Konzepte mit einer eigenen Syntax ein.) Es ist richtig, dass einige Informatiker ein paar Programmbeispiele mit dem Label »Spaghetticode« versehen haben – aber genauso wahr ist eben auch, dass BASIC von so vielen Menschen mehr benutzt wurde als Pascal. Spätere BASIC-Versionen ließen dann strukturierte Programmierung zu und machten die GOTOs damit überflüssig. Aber bei all diesen Entwicklungen stand die ultimative Vereinfachung, es nur mit einer Art Zahlen (doppelt genaue Fließkommazahlen) zu tun zu haben, immer im Vordergrund.

S. H.: 1975 gründete Bill Gates seine Firma Micro-Soft mit der Entwicklung und dem Vertrieb von BASIC für Intels 8080-Mikroprozessoren. Ein paar Monate später schrieb Steve Wozniak dann ein BASIC für Apple-Computer. Waren Sie in irgendeiner Form in die Entwicklungen der Mikrocomputer-BASIC-Dialekte einbezogen? Vielleicht als Berater oder Lizenzgeber?

T. K.: Nein, zu den Mikroprozessor-Versionen von BASIC hatte ich nie eine Verbindung. Wir waren diesen Konzepten um Jahre voraus in Dartmouth. Als ich zum ersten Mal einen Apple II benutzt habe, war ich schockiert, wie krude sein BASIC war. Da konnte man beispielsweise Variablen mit mehreren Zeichen benutzen, aber nur die ersten beiden Buchstaben wurden erkannt. Das ist sehr schlecht, suggeriert es den Nutzern doch, sie könnten Variablennamen mit beliebig vielen Zeichen wählen! Wir haben BASIC übrigens absichtlich nicht mit einem Copyright versehen, weil wir wollten, dass andere es kopieren, denn wir dachten, BASIC böte einen überlegenen Ansatz in der Computerprogrammierung für die Massen. Wir waren Lehrer, keine Unternehmer.

S. H.: Haben Sie die explosionsartige Verbreitung der BASIC-Dialekte für Heimcomputer in den frühen 1980er-Jahren verfolgt? Da gab es doch sicherlich auch Ideen, die für Ihren eigenen Dialekt nützlich waren.

T. K.: Wir gründeten die »True BASIC«-Gesellschaft um eine Standardversion von BASIC (basierend auf dem ANSI-Standard) zu entwickeln, die auf einer großen Zahl unterschiedlicher Plattformen laufen sollte. Es gab Implementierungen von »True BASIC« für wenigstens ein halbes Dutzend Computer. Aber wie sich herausstellte, veränderte sich die Hardwareentwicklung bei Mikrocomputern zu schnell für unsere Sprache. Am Ende hatten wir Implementierungen für IBM-kompatible Rechner und für Apple Macintosh. (Das »True BASIC« für IBM-Kompatible gibt es immer noch und es läuft auch immer noch!) Allerdings zeigte sich dann bald, dass wir mit nur einem oder zwei Programmierern recht wenig erreichen konnten, um »True BASIC« weiterzuentwickeln. Daher lösten wir die Gesellschaft 2002 wieder auf.

S. H.: BASIC steht kurz vor seinem 50. Geburtstag im kommenden Jahr. Und es wird immer noch auf ganz unterschiedlichen Plattformen und in zahlreichen Dialekten genutzt. Welche Stärken sehen Sie bei BASIC heute im Kontrast zu anderen, populären Programmiersprachen? Und würden Sie BASIC heute immer noch als Anfängersprache empfehlen?

T. K.: Nein, nicht wirklich. Das Thema hat sich weit über die Grenzen dessen hinaus entwickelt, an denen es für die meisten noch sinnvoll wäre zu wissen, wie man programmiert. Und auch wenn das Produkt »True BASIC« immer noch existiert, wird es doch nicht mehr besonders häufig benutzt.

* zuerst erschienen in: Retro Nr. 29 (Winter 2013/14), S. 12-14.

Über Stefan Höltgen

siehe: http://about.me/hoeltgen
Dieser Beitrag wurde unter Computer, Programmiersprachen, Technikgeschichte/RetroTopie abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.