Wichtige Entwicklungen stehen beim Superprogramming noch bevor:

Paradigma der interaktiven Programmierung

24.08.1984

Interaktivität und Benutzerfreundlichkeit sind die Hauptmerkmale heutiger Mikrocomputersysteme. Ihre Entwicklung läßt sich an dem zunehmend größer werdenden Prozentanteil an Hardwarekosten und Prozessorzyklen messen, die diesen Funktionen zugeordnet sind. Während die Benutzerschnittstelle hier eine Revolution durchmacht, bleiben die Programmierverfahren davon relativ unberührt auf dem Stand des hergebrachten Edit-Compile-Link-and-Go-Zyklus (ECLG). Dies verhindert, daß der Programmierer optimal in seinem Produktivitätsprozeß vom Computer unterstützt wird. Mit Hilfe der heute vorhandenen Interaktiven Kriterien ist eine wesentlich effektivere Programmierung möglich. Außerdem kann die Diskrepanz zwischen Programmierung und Anwendernutzung dadurch entscheidend verringert werden. Als Beispiel eines interaktiven Ansatzes dient das Programmiersystem "Forth".

Interaktivität und Benutzerunterstützung sind heute die Schlagworte der Computerindustrie. Die Technologie entwickelte sich von den Lochkarten lesenden Batch-Maschinen der Anfangsjahre über Timesharing und alphanumerischen Bildschirm zu den heutigen benutzerorientierten Systemen mit Grafik-Terminal, Window-Software, Ikonen, Maus, Berührungsbildschirm, Sprachein/-ausgabe und anderen interaktiven Methoden. Großcomputer und Minis haben an diesem technologischen Wandel nur wenig teilgenommen; dies ist eine Entwicklung, die nur auf und durch Mikros stattgefunden hat. Der Trend geht weg von Maschinenleistung zur Steigerung der Verarbeitung und des Datendurchsatzes, und ein immer größerer Prozentsatz der Hard- und Software-Ressourcen des Computers wird den Interaktionsmöglichkeiten zur Verfügung gestellt. Im Fall der Spracheingabe wird sogar von einem speziellen 32-Bit-Prozessor Gebrauch gemacht (TI PC), dessen Leistung die der Grundmaschine (8088) um ein Vielfaches übertrifft. Mit diesen Technologien entwickelt sich zunehmend ein entscheidender Abstand sowohl zu den Marinen aus der traditionellen EDV als auch der alten Generation der 8-Bit-Mikrocomputer. In dem Adreßbereich der 8-Bit-Systeme ist es nicht mehr möglich, den Code unterzubringen, den eine solche Benutzerunterstützung benötigt, und grafische Möglichkeiten wie die von Lisa sind nur mit der Prozessorkraft eines MC68000 und darüber zu bewältigen.

Programmieren ist nicht interaktiv

Wesentlich weniger interaktiv sind aber die Mittel, mit denen die interaktiven Softwaresysteme hergestellt werden: die Programmiersprachen. Noch immer muß ein Programm zuerst mit einem Editor geschrieben und korrigiert werden, und dann mit einem Compiler übersetzt, gelinkt werden, (der ECLG-Zyklus) und kann dann erst ausgetestet werden. Die einzelnen Arbeitsschritte werden zwar interaktiv am Computer gestartet, wie das Editieren und das Compilieren, aber es liegen so viele Zwischenschritte zwischen der Codierung des Programms und seinem eigentlichen Lauf und die einzelnen Schritte dauern so lange, daß die ganze Verarbeitung eher Ähnlichkeit mit einem manuell gesteuerten Job-Control-System hat, als mit der vielbeschworenen Interaktivität des Mikrocomputers. Die Computerindustrie steht also vor der paradoxen Situation, daß die Anwendungs-Software der vierten Generation noch mit Produktionssoftware der dritten geschrieben wird.

Die Folgen für die Produktivität des Programmierers sind offensichtlich: Wenn ein Programm erst einmal erstellt ist und als Objektcode vorliegt, dann kann man einen auftauchenden Fehler nicht schnell in dem vorliegenden Code ändern, sondern man muß ganz zurück, in den Editor, den Quellcode modifizieren, und dann den ganzen Zyklus von Editieren, Compilieren, und Linken wieder durchlaufen. Außerdem kann man einen Fehler nicht dadurch finden, daß man das Programm an einem beliebigen Punkt anhält, es Schritt für Schritt durchspielt, und genau die Fehlerstelle ausfindung macht. Es fehlt die Lupe, mit der man das Programm betrachten kann, oder, wie es fachlich heißt, dir "Trace"-Möglichkeit. Das Problem bei compilierten Sprachen ist, daß der Objekt-Code des Programms durch die Compilation keine Ähnlichkeit mehr mit der Quellversion hat, und es daher keinen Sinn ergibt, die einzelnen Schritte der Objektversion (etwa mit einem Debugger) zu verfolgen.

Anfänge des dialogorientierten Programmierers

In der Anfangszeit der Mikrocomputer gab es vor allem eine Programmiersprache: Basic. Basic ist interaktiv. Benutzer konnten in Interaktionen mit dem Computer Programme eintippen, und sofort sehen, was sie gemacht hatten. Der Computer gab Feedback. Diese erste Generation der Mikrocomputerbenutzer machten etwas, das man heute "empirisches Programmieren" nennen kann. Basic hat durch seine interaktiven Eigenschaften Hunderttausenden einen leichten, anschaulichen Einstieg in die Computerwelt verschafft. In Basic ist ein Trace leicht möglich. (Man denke an den Film "Tron", der ein spekulativer Bericht eines Trace in einem Supercomputer ist.) In Basic wurden die Programme geschrieben, die den Mikrocomputern den Weg zur allgemeinen Akzeptanz bereiteten, so etwa Visicalc, das Programm, das den Apple-Computer in die Konzernetagen brachte.

Allerdings hatte Basic auch schwerwiegende Nachteile, etwa daß es für größere Programme zu langsam ist und wegen fehlender Strukturierungsmöglichkeiten zu unübersichtlich. Dies fiel bei Anwendungen auf den frühen Mikrocomputern mit maximal 8 oder 20 Kilobyte Speicherplatz nicht auf, machte sich aber bei anspruchsvollen Programmen schnell bemerkbar. So hat Basic zwar das interaktive Programmieren eingeleitet, aber heute ist die professionelle Programmierung wieder auf die Methoden der Groß-EDV übergegangen, nicht viel anders als zu den Zeiten von Fortran, Cobol und PL/1. Es sieht so aus, als ob hier eine hoffnungsvolle Entwicklunglinie abgebrochen worden ist.

Effizienzkriterien und Programmierungsmethodologie

Es ist klar, daß man sich bei der Erstellung von Software, die den Umfang von Groß-EDV-Programmen hat (heute 150 bis 500 K), auch der Programmiermethoden der Groß-EDV bedient. Man vergißt da aber zu leicht den grundlegenden Wandel, den die Computertechnologie in den letzten zehn Jahren durchgemacht hat, eben den Übergang von Batchorientierten zu interaktiven Systemen. Es gibt einen gravierenden Unterschied, und der ist nicht quantitativ, sondern qualitativ. Der Ursprung der Programmierung kann mit einem Wort charakterisiert werden: institutionell. Computer waren bis vor ein paar Jahren sehr teure Maschinen, deren Nutzung nach sehr strengen Effizienzkriterien eingeteilt wurde. Die Strukturen der Programmiersprachen reflektieren diesen Ausgangspunkt. Früher wurden Programmiersprachen dahingehend entwickelt, daß der Programmierer sowenig Zeit wie möglich auf der Maschine verbrauchen mußte und soviel Arbeit wie gerade möglich als Kopfarbeit dazu verwendete um das Problem am Schreibtisch maximal vorzubereiten. Computerzeit war teuer, und es konnte sich kein Computerbetreiber leisten, kostbare Maschinenzeit mit Experimentieren oder gar Herumspielen zu vergeuden.

Vor allem konnte man es sich nicht erlauben, daß ein Programmierer mit Herumspielen in einen wichtigen Bereich eindrang und aus Versehen das System zum Absturz brachte. Sicherungen gegen diese absichtlichen und unabsichtlichen Bereichsverletzungen mußten eingebaut werden. Demgemäß war auch die gesamte Programmierung auf diese Effizienz- und Sicherheitskriterien hin strukturiert, und sie ist es auch heute noch, in einer Zeit, wo die Kostenverhältnisse sich umgekehrt haben, und Hardware ein Zehntel der Softwarekosten ausmacht, und jeder Programmierer die ganze Maschine für sich allein hat, und ein Absturz nicht mehr kostet als ein Druck auf den Reset-Knopf.

Die Hauptarbeit der Programmiersprachenentwicklung ging in Richtung auf Modularität und logische Klarheit (Pascal, Modula, Ada). Die Methodik der Batch-Arbeitsweise von Codieren, Compilieren, und Linken wurde beibehalten. Der Computer wird zu wenig zur interaktiven Unterstützung des Programmierens selber benützt. Zwar gibt es heute schon Ansätze einzelner Anbieter, diese Situation zu verbessern, so etwa das Micro Focus Cobol, dessen Animator-Funktion eine sehr komfortable interaktive Programmentwicklung zuläßt, aber im wesentlichen liegt dieses Feld noch brach.

Die Kriterien der Interaktivität im Anwenderbereich werden heute mit hohem Aufwand erforscht. Was Interaktivität in der Programmierung bedeuten kann, ist dagegen noch wesentlich weniger klar. Interaktive Unterstützung des Programmierens ist mit Compilersprachen generell wegen der starken Umwandlung des Quellcodes problematisch. Nur Sprachen, die einen interpretierten Zwischencode erzeugen (p-Code Pascal oder CBasic) sind für den interaktiven Einsatz besser geeignet und erlauben einen Trace. Die generelle Programmiermethodik mit Variablen macht es schwer, auch mit Trace eine Übersicht über den Programmablauf zu bekommen.

Was ist Interaktivität?

Interaktivität kann kein Strukturelement einer Sprach-Syntax sein, sondern sie beruht auf Kriterien, die der reinen Syntax-Betrachtung entgehen. Interaktivität ist ein Systemfaktor. Es gibt keine Markierung, an der man sagen kann, ein System ist interaktiv, und ein anderes nicht. Interaktion selber ist nur in einem Systemkontext definierbar.

Ein Mensch und eine Maschine oder zwei Menschen sind in Interaktion. Es ist auch schwer, zu sagen, nach welchen Kriterien ein System interaktiver als ein anderes ist. Ein Video-Terminal mit Tastatur ist interaktiv. Ein Computer mit Maus ist interaktiver. Ist er auch dann noch interaktiver, wenn man dauernd zwischen der Maus und der Tastatur hin- und herspringen muß, wie es ja bei Texteingabe und Korrektur der Fall ist? Wo liegen die Kriterien und was ist optimale Dialogorientiertheit? Es ist klar, daß Interaktivität auf einem Zusammenspiel von Systemparametern beruht.

(Nicht-)Interaktivität

Interaktion ist zwischen zwei Partnern definiert. Der Grad ist in Zeitfaktoren zu messen. Das Maß ist beim Menschen die Aufmerksamkeitsspanne und die maximale Verarbeitungsgeschwindigkeit von Signalen bei Mensch und Maschine. Interaktivität ist dann gegeben, wenn die Maschine Antworten gibt, die schnell auf die Eingabe des Menschen folgen, und die der Mensch auch selber schnell verarbeiten kann.

Die meisten kommerziell benutzten Timesharing-Systeme der Groß-EDV nennen sich zwar interaktiv, zeichnen sich aber dadurch aus, daß zwischen zwei Tastendrücken des Bedieners generell eine Pause von zehn Sekunden bis zehn Minuten liegt, eine Relation, die dann im normalen Sprachgebrauch nicht mehr als Interaktivität, sondern als Frustration bezeichnet wird. Umgekehrt hängt die Zeit, die ein ungeschulter Benutzer benötigt, um auf eine Fehlermeldung zu reagieren, im wesentlichen davon ab, wie lange es dauert, bis er einen Systemprogrammierer ausfindung gemacht hat.

Dies war zwar in den Zeiten der Groß-EDV eine bewährte Methode, sich sowohl vor übermäßiger Neugier des Benutzers gegenüber dem System zu schützen, und es war auch eine gern angewandte Strategie, den Computeranwender von der Notwendigkeit der sehr teuren Programmier- und anderen EDV-Dienstleistungen zu überzeugen, aber bei Mikrocomputern, bei denen Umsatz - und damit der Profit - nur mit Akzeptanz von möglichst vielen untrainierten Benutzern möglich war, war dieser Weg nachteilig.

Die heutigen benutzerfreundlichen Systeme erleichtern zwar den Umgang mit ihnen entscheidend, doch diese Erleichterung kostet ihren Preis. Dieser Preis ist zweifach. Einerseits benötigt man damit ein Mehrfaches an Hardwareleistung, um die Funktionen zu unterstützen. Viele der heutigen Systeme drohen trotz der höheren Kapazität ihrer Prozessoren an den Hilfsleistungen zu ersticken. Apples Lisa ist dafür ein Beispiel. Da Hardware aber immer billiger und leistungsfähiger wird, ist dieser Preis erträglich. Der andere Preis ist schwerer zu verkaufen. Die System werden auf der einen Seite zwar immer leichter zu bedienen, aber sie werden immer komplexer und undurchdringlicher. Ein Benutzer konnte vielleicht an einem Basicprogramm, das er benutzte, etwas für seine speziellen Bedürfnisse abändern, aber ein modernes Standardpaket schließt jede Benutzer-Änderung aus.

* Andreas Goppold ist Diplom-Informatiker MSc und Begründer der Forth Gesellschaft Deutschland in Hamburg, einer Non-profit-Vereinigung zur Förderung dieses Programmiersystems.

wird fortgesetzt