Die zehn Gebote von BASIC

Mit den Homecomputern gelangte Mitte der 1970er Jahre nicht bloß Hardware-Hochtechologie in Privathände; auch für die Programmierung der Geräte wurde eine Sprache angeboten, die erstmals eine Amateurkultur der Softwareentwicklung hervorbrachte. Das 1964 enstandene BASIC gelangte so Weise zu einer unglaublichen Popularität, brachte zahlreiche Dialekte und unzählige Programme hervor – und wird bis heute trotz (oder wegen) all seiner Mängel weiter entwickelt und immer noch für Programmierprojekte genutzt. Den Grundideen seiner Erfinder Thomas E. Kurtz und John G. Kemeny ist es jedoch schnell untreu geworden, was die ursprünglichen Stilvorgaben ihrer Sprache belegen.

(zuerst erschienen: RETURN, Nr. 53, 2023, S. 94-97)

Der Implementierung von BASIC sollten bestimmte Regeln zugrunde liegen, die das Sprachkonzept in seiner didaktischen Klarheit von anderen Programmiersprachen dieser Zeit unterscheiden. Diese Grundsätze betrafen vor allem das Design des BASIC-Kopilers, der die BASIC-Programme in Maschinensprache übersetzen musste, damit der Computer sie ausführen konnte. Die Entwickler hatten dabei wohl vor allem an mögliche Dialekte ihrer Sprache für andere Systeme gedacht und wollte so verhindern, dass unklare Konzepte in den Sprachbau einziehen. Genau dies ist aber schon früh passiert, wie ich in der folgende Aufzählung der „zehn Gebote“, die Kurtz und Kemeny an verschiedenen Stellen aufgelistet haben, zeigen möchte.

1. Eine Zeile, eine Anweisung

Seine Abstammung von Assemblersprachen (dazu in einer späteren Kolumne) zeigt BASIC vor allem durch zwei Konzepte – eines davon ist die Vorgabe, dass pro Programmzeile nur eine Anweisung gegegben werden sollte. Dies diente nicht nur der leichteren Lesbarkeit der Programmcodes durch die Lernenden (für die BASIC oft die erste Programmiersprache überhaupt war), sondern hielt auch den Compiler einfacher und sorgte dafür, dass weniger Programmierfehler durch falsche Befehlsreihenfolgen entstehen konnten.

Schon die ersten BASIC-Dialekte verstießen gegen diese Regeln. Im POLY-BASIC der Firma Digital Equipment Corporation (DEC), das diese 1969 für ihre PDP-8-Computer herausbrachten, wurde der „\“ als ein „special feature“ eingeführt, um mehrere Anweisungen innerhalb einer BASIC-Zeile unterzubringen. Damit wurde Speicherplatz und vor allem Papier bei Listing-Ausdrucken gespart. Die selben Argumente mögen auch Micro-Soft 1974 dazu bewogen haben dieses Feature in ihr 4K-BASIC für den Altair 8800 zu integrieren. Hier war es der Doppelpunkt, mit dem man mherere Anweisungen pro Zeile trennen konnte – er hat sich in zahlreichen BASIC-Dialekten für Homecomputer (von denen nicht wenigen ebenfalls von Mircrosoft stammten) durchgesetzt. So fragwürdig dieses Feature auch bei Didaktikern und Puristen sein mag; Programmierkunststücke wie einzeilige BASIC-Programme (One-Liner) wären ohne es nicht möglich.

2. Zeilennummern (des Editors) sind auch Sprungziele für GOTOs.

Dass bis zur Einführung des ersten zeilenlosen BASIC-Dialektes für den Commodore Amiga (einiges spricht dafür, dass schon BBC-BASIC diese zweifelhafte Ehre gebührt) jede Programmzeile mit einer Zahl begann, ist das zweite Merkmal, dass BASIC den Assemblersprachen ähnlich macht. Zum einen entscheiden Interpreter durch das Vorhandensein einer Zahl, ob ein Befehl direkt ausgeführt werden soll oder erst später im Programmablauf; zum anderen organisieren die Zeilennummern den Programmaufbau und dienen zugleich als Sprungziele für GOTO– und GOSUB-Anweisungen. Gerade dies hat BASIC den Ruf eingebracht, seine Programmierer zu Spaghetti-Codern mutieren zu lassen, welche wirren, unlesbaren Code produzieren. In der Verwendung von Zeilennummern lassen sich allerdings im Nachhinein auch Bearbeitungsschritte des Programms identifizieren (etwa, wenn in Programme mit Zehnerzeilenabstand auf einmal Zeilennummern dazwischen auftauchen). Ebenso zeugt die GOTO-Verzweigung von den Denkprozessen der Programmierer beim Entwickeln ihres Codes. Computer haben sowieso gar keine Probleme mit GOTOs, arbeiten sie doch auf ihrer maschinensprachlichen Ebene hauptsächlich mit solchen Sprüngen.

3. Alle mathematischen Berechnungen werden mit Gleitkommazahlen durchgeführt.

In BASIC gibt es scheinbar nur zwei Datentypen: Text und Zahl. Das sollte vor allem nicht-technischen Anfängern das Erlernen der Programmierung erleichtern. Der Interpreter behandelt dabei jede Variable als Fließkommazahl, das heißt, als eine Zahl, die nahezu beliebig groß oder klein mit beliebig vielen Nachkommastehhen sein kann. Ist eine solche Zahl zufällig keine Kommazahl (also eine Integerzahl), wird sie auch so angezeigt, intern aber trotzdem als Fließkommazahl verrechnet. Das kostet zwar Speicherplatz, schafft aber, wie geschrieben, Einfachheit. Spätere BASIC-Dialekte haben dann etwas Ordnung geschaffen, indem man Zahlvariablen schon gleich als Integer-, einfach oder doppelt genaue Zahlen definieren konnte. Zu den Zahlen gehören natürlich auch die Zeilennummern. Die Entwickler des BASIC-Dialektes für den Camputers Lynx haben sich daher gedacht, dass sie Kurtz’ & Kemenys Vorgabe auch hier umsetzen könnten. Und so ist es möglich im Camputers-Lynx-BASIC Programme wie 3.1515926 PRINT ”HALLO“:GOTO PI zu schreiben, die funktionieren!

4. Sinnvolle Standardwerte sind vorgegeben.

Das funktioniert auch, weil in den meisten BASIC-Dialekten Standardwerte wie PI als Konstanten vorgegeben sind. ein PRINT PI führt dann zur Ausgabe der Kreiszahl, auch wenn man diese vorher gar nicht definiert hatte. Erstaunlicherweise ist dies der in den meisten BASIC-Versionen einzig vorgegebene Standardwert, sieht man einmal von Systemvariablen wie TIME, TIME$ und ähnliche ab.

5. Alle Anforderungen an das Ein- und Ausgabeformat von Zahlen entfallen.

Hiermit ist gemeint, das Variablen für Zahlen weder definiert noch deklariert werden müssen. Also: Weder muss bei der Verwendung von A vorher vorgegeben werden, ob A ein Integer, eine Boole’sche Variable, eine Fließkommazahl oder eine Konstante sein soll, noch muss sie, um zu existieren zuerst mit einem Wert definiert werden (z.B. A=0). Man kann bei den meisten BASIC-Dialekten einfach im Interpreter PRINT A schreiben (und bekommt dann eine 0) oder die Variable mitten im Programm einführen. Das lädt natürlich Programmiefehler ein: Vertippt man sich und schreibt LIFES statt LIVES, so behandelt der Interpreter beide Variablen fehlerlos unterschiedlich und man wundert sich, dass das Programm nicht richtig funktioniert. BBC-BASIC hat diese Fehlerquelle ausgeschaltet, indem es die Programmierer dazu zwingt, jede Variable mindestens schon mal mit einem Wert definiert zu haben, bevor man sie nutzt, sonst gibt es einen „No such variable“-Error.

6. LET ist zur Variablendeklaration obligatorisch.

Im Dartmouth-BASIC sollte eine Programmzeile immer aus Zeilennummer, Befehl, Funktion, Variable bestehen, wobei die Obligation von Links nach Rechts abnahm: Zeilennummer und Befehl mussten, Funktion und Variable konnten sein. Auch dies galt sowohl der einfacheren Lesbarkeit für Menschen wie für den Interpreter. Deshalb musste jede Variablen-Aktion auch mit einem LET beginnen. Auf diese Weise umschifften die Mathematiker Kurtz und Kemeny auch das unangenehme Zuweisungsparadox, dass durch Konstruktionen wie X=X+1 enstand. Ohne LET hätte dies für (menschliche) Leser bedeuten können, dass X dasselbe (=) ist wie X+1. LET X=X+1 ergab jedoch, ausgesprochen, die Anweisung „Lasse X werden, was X+1 ist“ und der „zeitliche“ Sinn dieser Inkrementierung wird sichtbar. Bis auf in Sinclair-Dialekten wurde das LET jedoch in BASIC schnell fakultativ. Einige Versionen von TinyBASIC haben es aus Speicherplatzgründen sogar ganz weggelassen.

7. Nicht-offensichtliche Satzzeichen entfallen.

Die augenscheinliche Kompliziertheit viele Programmiersprachen hängt an ihrem Gebrauch von Satz- und Sonderzeichen. Dienen diese vor allem der Strukturierung der Programme und Hinweisen an die Compiler (etwa, dass eine Funktion geschlossen oder Anweisung abgeschlossen ist), wirken Sie auf Programmierneulinge wie mathematische Formelzeichen – also wie Zauberformeln. Aus diesem Grund entschieden sich die Erfinder von BASIC, das keine Sonderzeichen notwendig sind, wenn sie nicht unbedingt gebraucht werden, wie Klammern für Funktionen, das $-Zeichen für Stringvariablen, die mathematischen und logischen Operatoren. Selbst den Doppelpunkt, den die Sprache Python, die BASIC in vielem ähnelt, später wieder eingeführt hat, gab es nicht, bis Bill Gates ihn zur Trennung von Anweisungen (siehe 2. Gebot) eingeführt hat.

8. Befehle und Fehlermitteilungen bestehen aus Wörtern der englischen Alltagssprache.

Auch, wenn immer wieder versucht wurde, Programmiersprachen den natürlichen Sprachen ähnelnd zu gestalten (Cobol, Elephant 2000, …) war es nahezu verpönt, den Versuch zu unternehmen eine Programmiersprache aus natürlichsprachlichen Konzepten und Begriffen zu entwickeln. Dann könnte sie ja jeder verstehen! Kurtz und Kemeny hatten genau dies im Sinn, als sie sich vornahmen, BASIC-Befehle und -Funktionen aus englischen Wörtern oder zumindest Akronymen abzuleiten: PRINT ATN(2) ist im Programmlisting nahezu vorlesbar: „print arcus-tangens of two“. Aus dieser Lesbarkeit ist tatsächlich BASIC-Lyrik entstanden und sogar Buchtitel wie „10 PRINT CHR$(105.5)+RND(1);:GOTO 10“. Selbst Zeitschriften (RETURN, LOAD, …) machen sich dies zunutze.

9. Die Sprache muss plattform-/hardwareunabhägig sein.

Hardwareunabhängigkeit bei der Programmentwicklung ist eine Forderung, die vor allem der Austauschbarkeit von Source-Codes zum Ziel hat. Das funktioniert so lange, wie die Computer, auf denen BASIC läuft, alle gleich viel können. Sobald aber ein neues, teures Hardware-Feature verbaut wird, dass einen Marktvorteil darstellt, muss es über die Programmierung auch erreicht werden können. Das wurde natürlich insbesondere auf dem Homecomputer-Markt ein wichtiges Argument, sich vom Gebot der Hardware-Unabhängigkeit zu lösen: einerseits durch Befehle und Funktionen, die den direkten Zugriff auf die Hardware ermöglichen (PEEK, POKE, USR, SYS, …), andererseits durch Spezialbefehle, die von BASIC aus besondere Funktionen (oft audio-visueller Art) des Computers zum Leben erwecken: Grafik- und Soundbefehle zogen in die Sprache ein und richteten sich je nach Platform an die jeweils verbauten Grafik- und Sound-Bausteine und ihre Möglichkeiten (Auflösung, Farben, Sprite-Funktionen, Tonkanäle, Frequenzen, Hüllkuven, Filter, …) Damit entwickelte sich „BASIC“ zu einem Sammelbegriff für unzählige, oft nur schwer in einander übersetzbare Dialekte, was heute der Grund für die enorme Vielfalt an Programmierkulturen und Programmen ist.

10.Die Sprache darf nur so viele Befehle und Funktionen besitzen, dass sie sich ein Student in wöchentlichen Lektionen einprägen kann.

Diesem letzten Gebot wurden schon die BASIC-Erfinder ab den Folgeversionen des Dartmouth-BASIC nicht mehr gerecht, stellten sie doch fest, dass viele nützliche Befehle und Funktionen ihrem nur 27-BASIC-Wörter umfassenden ersten Dialekt fehlten. Die Lernbarkeit von BASIC musste ohnehin nur so lange auf ein Wochen-Gedächtnis (dem Turnus, in dem die Kurse stattfanden) basieren, so lange die Programmierer keinen Zugriff auf Computer hatten. Ab Ende der 1970er Jahre standen Computer dann in Kaufhäusern und im Idealfall sogar zu Hause, so dass man sein BASIC-Wissen auch zwischen den Kursen „frisch“ halten konnte. Das ging bei den 15 Befehle und Funktionen des Z8671-BASIC im BERT-Computer vielleicht noch; beim Locomotive-BASIC 1.1 für Schneiders CPC6128 (mit 184 Befehlen und Funktionen) musste man sich da auf das ziemlich gute Handbuch verlassen.

Vom BASIC-Lernen innerhalb und außerhalb der Schule schreibe ich in der kommende Kolumne mehr. Wer sein Wissen inzwischen auffrischen und über BASIC diskutieren möchte, ist hierzu herzlich in meinen Discord-Kanal (s.u.) eingeladen.

Über Stefan Höltgen

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

Eine Antwort zu Die zehn Gebote von BASIC

  1. Pingback: BASIC – Zehn Gebote | ResearchBlog Swissdigitization – Latest findings.

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.