Mitmachen

Psychologische Grundlagen der Programmierung

1. Wie beschreiben Menschen Entitäten, das heißt, Konzepte, Eigenschaften und Prozesse?
Hierzu sind ausgewählte Texte in normierter Sprache, etwa juristische und mathematische Texte, zu untersuchen. Weiterhin ist die Struktur der Kommentierung bei existierender Software zu betrachten. Schließlich ist in Zusammenarbeit mit dem Fachbereich Psychologie ein empirischer Test durchzuführen, der die Art und Weise untersucht wie Expertenprogrammierer, Personen mit Programmierkenntnissen und Nicht-Programmierer der Disziplinen Informatik, Mathematik, Ingenieurwissenschaften und nicht-technischer Disziplinen Entitäten beschreiben.
2. Welche unterschiedlichen Entwicklerpersönlichkeitsprofile gibt es und wie müssen deren Interessen, Denkweisen und Präferenzen im Hinblick auf eine natürlichsprachliche Programmiersprache berücksichtigt werden?
In diesem Bereich sind auch kulturelle Unterschiede, bspw. östliches versus westliches Denken [072], Altersunterschiede, bspw. Sprachen für Kinder und Unterschiede im Erfahrungshintergrund, bspw. Denkschemata von OOP-Programmieren [089], zu berücksichtigen.

Vielen Dank für Dein Interesse an einer Arbeit
im Rahmen des Pegasus-Projektes!


Du bist hier genau richtig, wenn Du ...

1. ... auf hohem Niveau ...
2. ... an vorderster Linie der Forschung ...
3. ... gemeinsam als vollwertiges Mitglied einer Projektgruppe ...
4. ... interdisziplinär (Themen aus der Softwaretechnik, Linguistik, Computerlinguistik, Logik, Philosophie, Psychologie, Mathematik und Wirtschaft) ...
5. ... mit anderen interessierten und motivierten Studenten, Doktoranden und Professoren ...


... eine Diplom-, Master-, Bachelor- oder Studienarbeit (Doktorarbeiten sind nach Rücksprache auch möglich) im Bereich des natürlichsprachlichen Programmierens machen möchtest.


Was muss ich mitbringen?

Interesse an Sprachen im Allgemeinen und die Kenntnis einer oder mehrerer Fremdsprachen, Spaß am Programmieren und Programmierkenntnisse (nicht für alle Arbeiten erforderlich), Teamfähigkeit (Offenheit, Diskussionsbereitschaft und Zuverlässigkeit). Eine Einschränkung nach einer Studienrichtung gibt es nicht, da wir eine interdisziplinäre Projektgruppe sind.


Wie werden die Arbeiten durchgeführt?

Alle Arbeiten werden direkt im Rahmen der Projektgruppe durchgeführt. Neben den regelmäßigen gemeinsamen Besprechungen ist auch der jederzeitige informale Austausch möglich. Du bist vollwertiges Mitglied der Projektgruppe und kannst mit Deinen Ideen und Vorstellungen das Projekt maßgeblich beeinflussen und voranbringen.


Es wird angestrebt, alle Arbeiten auf hohem Niveau durchzuführen und in Form eines wissenschaftlichen Artikels auf einer namhaften Konferenz zu veröffentlichen, falls Interesse Deinerseits besteht.


Die Themen


Du findest hier eine Liste aller offenen Themen, die einzeln oder kombiniert im Rahmen einer Arbeit realisiert werden können. Eigene Vorschläge Deinerseits sind ausdrücklich sehr willkommen! Du kannst auch gerne vorhandene Aufgaben mit Deinen Ideen kombinieren und daraus Deine individuelle Arbeit entwickeln, oder, falls es inhaltlich passt, Deine gänzlich eigene Idee im Rahmen unseres Projektes umsetzen. Sehr umfangreiche Ideen/Arbeiten könnten nach Rücksprache auch im Rahmen einer Doktorarbeit durchgeführt werden.

Lexikalisches Wissen

Das gesamte lexikalische Wissen von Pegasus, d.h. die Wörter aller von Pegasus unterstützten Sprachen samt aller ihrer durch Flektion abgeleiteten Wortformen, also bspw. das Nomen „Stuhl“ mit seinen Formen „Stühle“, „Stühlen“ usf., müssen in irgendeiner Form gespeichert und dem System zur Verfügung gestellt werden. Hierzu ist eine Datenbankstruktur zu entwickeln, die die Speicherung eines mehrsprachigen Lexikons mit passender Schnittstelle und Zugriffsprotokoll unterstützt.

Da das manuelle Füllen einer solchen Datenbank nicht möglich ist, müssen Mechanismen gefunden werden, wie vorhandene freie Datenbestände automatisch integriert werden können. Dies könnte über einen oder mehrere Crawler geschehen.
 

Grammatik

Die Grammatik einer jeden unterstützten natürlichen Sprache muss Pegasus mittels einer Menge von Regeln bekanntgemacht werden. Die Grammatikregeln bilden einen Kernbestandteil von Pegasus, da über sie auch die Abbildung der Grammatik einer spezifischen Sprache auf die Ideensprache, d.h. die interne Meta-Grammatik, bzw. Interlingua (Zwischensprache), mit der Pegasus arbeitet, bestimmt ist. Das bestehende, auf einer erweiterten selbstentwickelten Attributed-Grammar basierende Grammatikformat, ist so weiterzuentwickeln, dass dessen Mächtigkeit den gewachsenen Ansprüchen des Projektes standhält, bspw. sollen neue Beschreibungsmöglichkeiten Relativsätze, Modalverben, usf. möglich machen. Hierbei sind insbesondere die aktuellen Verfahren der Computerlinguistik zu berücksichtigen, außerdem andere Arten von Grammatiken wie bspw. die Link Grammars [003].
Zur Zeit ist die Grammatik mehrstufig aufgebaut, indem die oberste sehr expressive aber komplexeste Form von Grammatikregeln automatisch in Grammatikregeln einfacherer Form übersetzt wird, die dann vom natürlichsprachlichen Parser genutzt werden können. Dieser Ansatz könnte noch weiter ausgebaut und effizienter gestaltet werden.

Ideensprache

Die Ideensprache (auch „Ideennotation“) stellt als Metasprache, bzw. Interlingua, die interne Sprache und damit den Kern von Pegasus dar. Sie fungiert als Abstraktion der natürlichen Sprache beim maschinellen Einlesen des natürlichsprachlichen Eingabetextes. Auf ihr baut der gesamte Vorgang des Verstehens der Textbedeutung auf. Falls der Eingabetext in eine andere natürliche Sprache übersetzt werden soll, hat sie die Funktion einer Zwischensprache. Daher ist die allgemeine Weiterentwicklung der Ideensprache von zentraler Bedeutung für die Leistungsfähigkeit und Expressivität von Pegasus.
Der englische Satz „If the first element of the second row of the matrix is smaller than 3 then write "I can understand you!".“ würde bspw. folgendem Ausdruck in der Ideensprache entsprechen (die Zeilenumbrüche und Einrückungen dienen nur der besseren Lesbarkeit):

(
  (
  ((be, action), normal mode, present tense, predicate),
  ((element, entity), (first, positive, property),
  ((row, entity), (second, positive, property),
  ((matrix, entity), single, entity reference,
  reference, normal phrase, phrase),
  single, entity reference, reference, normal phrase, phrase),
  single, entity reference, reference, normal phrase, phrase, subject),
  (smallness, comparative, property),
  ((three, entity), single, entity reference, reference,
  comparation phrase, phrase, object),
  statement clause, clause, first),
  (
  ((writing, action), normal mode, present tense, predicate),
  (direct personal reference, reference entity, subject),
  (("I can understand you!", character string symbol),
  symbol phrase, phrase, object),
  command clause, clause, second),
condition sentence, sentence)


Die Ideensprache soll mindestens die Sprachen Deutsch und Englisch abbilden können. In einer späteren Version, zeit- und interessenabhängig aber vielleicht auch schon bald, soll er zusätzlich die Sprachen Russisch, Türkisch, Chinesisch, Arabisch, Spanisch, Japanisch und Französisch lesen können. Aus naheliegenden Gründen fällt die Wahl auf Deutsch, dazu Englisch als artverwandte und weit bekannte Sprache in der Computerwelt, und die anderen Sprachen als einige der weltweit meistgesprochenen Sprachen, sowie insbesondere, weil ihre stark unterschiedlichen Grammatiken wichtige Erkenntnisse für die weitere Entwicklung der Ideensprache versprechen. Weitere Sprachen, insbesondere auch künstliche Sprachen, können je nach Interesse gerne noch hinzugefügt werden, bspw. Suaheli, Hindi, Esperanto oder Loglan [004].
Obwohl die automatische Übersetzung kein Schwerpunkt dieses Projektes ist, wäre es sinnvoll, eine begrenzte ergänzende Recherche in diesem Bereich durchzuführen. Hierbei sind insbesondere die Arbeiten des Deutschen Forschungszentrums für Künstliche Intelligenz (DFKI) zu berücksichtigen [022, 026, 051, 057, 064, 087].

Leser (Parser für die natürliche Sprache)

Der Leser liest den natürlichsprachlichen Text ein und übersetzt ihn unter Zuhilfenahme der syntaktischen als auch einfacher semantischer Informationen des Textes in die Ideensprache. Hierzu verwendet er die jeweiligen Grammatiken der unterstützten natürlichen Sprachen.
Die Performanz von Pegasus hängt entscheidend von der Geschwindigkeit des Lesers ab. Diese muss stark verbessert werden, da der momentan zum Einsatz kommende Parser lediglich eine für den Pegasus-Prototypen verfasste Eigenentwicklung ist, für das im Projekt zu erstellende umfassende Programmiersystem jedoch nicht ausreichend ist. Um effektiv vorhandene Systeme nutzen zu können, ist die Möglichkeit der Integration eines Parser-Generators, wie bspw. ANTLR, in Erwägung zu ziehen.

Semantisches Wissen

Damit Pegasus noch effektiver den natürlichsprachlichen Programmtext verstehen kann, ist es sinnvoll, Pegasus mit semantischem Wissen auszustatten. Das kann zum Beispiel das Wissen sein, dass eine Matrix ein mathematisches Objekt ist oder dass ein Rad Teil eines Autos sein kann.
Zunächst könnte recherchiert werden, wie Entitäten in der Philosophie, in der Ontologie, betrachtet wurden und werden.
Diese Untersuchung würde in Zusammenarbeit mit dem Fachbereich Philosophie durchgeführt werden, unter anderem mit Herrn Prof. Dr. Gamm und Frau Prof. Dr. Gehring. Hierzu wären auch andere Anwendungen der Ontologie zu betrachten, insbesondere Lexika, Thesauri, Ontologiesprachen wie die Web-Ontology-Language, RDF und DAML+OIL sowie Framesprachen wie F-Logic.
Das semantische Wissen ist, wie das lexikalische Wissen auch, in einer Datenbank zu speichern und über eine effektive Schnittstelle zur Verfügung zu stellen. Hierbei ist in jedem Fall die bisherige Forschung im Bereich der Ontologien, des Semantic Web und der Wissensdatenbanken zu beachten und eventuell zu nutzen. Um das Wissen in der Datenbank zu erweitern und zu modifizieren wäre es sinnvoll einen entsprechenden grafischen Editor zu entwickeln oder vorhandene Systeme zu erweitern.
Es gibt mehrere Möglichkeiten, das Wissen zu erfassen: 1. Die manuelle Eingabe über den grafischen Editor; 2. Die Integration vorhandener freier Wissensquellen; 3. Der Aufbau einer Webgemeinde, die freiwillig zur Erweiterung des Wissens beiträgt, dass dann mittels Webservices allgemein (mehrsprachig!) zur Verfügung gestellt werden kann.
 

Das Sprachmodell

Pegasus basiert, wie jede andere Programmiersprache auch, auf einem bestimmten Weltmodell. Pegasus unterscheidet sich hierbei von anderen Sprachen dadurch, dass das Weltmodell von Pegasus soweit wie möglich mit dem „normalen“ menschlichen Weltmodell übereinstimmen soll. Mit jedem Computerprogramm erstellt der Programmierer die Beschreibung einer bestimmten eng begrenzten Welt. Die Programmiersprache bildet diese Weltbeschreibung in eine interne Weltabbildung ab. In Java bspw. gibt der Programmierer direkt seine Weltbeschreibung in Form von Klassen, Methoden und Einzelanweisungen an. Aus dieser Beschreibung erzeugt der Interpreter und Just-in-Time-Compiler dann entsprechende Darstellungen im Speicher, die dem Rechner „verständlich“ sind. Das Sprachmodell von Java besteht also aus Klassen, Methoden und Einzelanweisungen. In Pegasus hingegen gibt der Programmierer seine Weltbeschreibung in Form eines natürlichsprachlichen Textes an. Pegasus extrahiert aus diesem Text alle Informationen, um daraus ein schlüssiges Programm aufzubauen. So definiert der Programmierer mittels Ausdrücken wie „Ein Haus ist ein Gebäude.“ neue Konzepte und deren Ordnung zueinander, mittels Ausdrücken wie „Ein Mann ist verheiratet, wenn er eine Ehefrau hat.“ definiert er Eigenschaften und mittels Ausdrücken wie „Die Reihenfolge der Zeichen in einer Zeichenfolge umdrehen:“ Prozesse. Das Weltmodell von Pegasus, sowie die interne Weltabbildung eines Pegasus-Programms, nachdem es vom Pegasus-Compiler „verstanden“ worden ist, besteht also unter anderem aus den drei Entitäten: Konzepten, Eigenschaften und Prozessen.
Das Weltmodell von Pegasus ist in vielen Bereichen weiterzuentwickeln, bzw. grundsätzlich zu gestalten: Umgang mit Fehlern, bzw. Nicht-Standardsituationen („Wenn das Lesen der Datei nicht funktioniert, dann...“), Ereignismanagement („Immer wenn der Nutzer mit der rechten Maustaste klickt, dann...“), Persistenz von Daten (Sollen Daten automatisch in eine Datenbank geschrieben werden oder nicht?), Programmfluss (bspw. Parallelisierung/Nebenläufigkeit: „Währenddessen tue...“), Aspektorientierung („Immer wenn ein Grafikobjekt neu gezeichnet werden soll, dann...“), Konsistenz („Wenn das Folgende nicht funktioniert, dann mache es rückgängig:“), Quellcode-Organisation (Pakete? „Paragrafen“, „Kapitel“ und „Bücher“? Assoziativ?), Rechte und Sicherheit (Werden die Identitäten der Nutzer als Kontextinformation im Programm zugelassen? Wem „vertraut“ Pegasus?), Netzzugriff und Remote Calls (Wie geht Pegasus im Verbund mit anderen laufenden Systemen um?), Welche Arten von Programmen sollen unterstützt werden? (Webanwendungen? Serverprogramme? Grafische Programme? usf.), Dokumentation und Kommentierung (Wie werden Pegasus-Programme dokumentiert und eventuell zusätzlich kommentiert? Soll der Programmierer dazu animiert werden, Angaben zu machen, oder steht es ihm frei?), Verifikation und Tests (Soll der Programmierer dazu gezwungen werden zu jeder Entität die entsprechenden Korrektheitsaussagen zu machen? Muss er Testfälle schreiben?).
Um eine wirklich praktisch verwendbare natürlichsprachliche Programmiersprache entwickeln zu können, müssen wesentliche in den jetzigen Programmiersprachen verwendete aktuelle Programmiertechniken und Sprachkonzepte herausgearbeitet und eingebunden werden. Hierzu ist einerseits eine Auswahl an spezifischen aber repräsentativen Programmiersprachen auf ihre Konzepte hin zu untersuchen, andererseits sind programmiersprachenübergreifende Konzepte, wie bspw. Patterns [025], zu erfassen. Konkret sollten wenigstens die folgenden Sprachen untersucht werden:

Imperative Programmierparadigmen
Prozedurales Programmierparadigma : Pascal, C
Objektorientiertes Programmierparadigma : Java, C++, Python
Aspektorientiertes Programmierparadigma : AspectJ, Alpha

Deklarative Programmierparadigmen
Funktionales Programmierparadigma : Haskell
Logisches Programmierparadigma : Prolog

Insbesondere sollten aspektorientierte Techniken [005, 012] untersucht werden, da auch diese, wie das natürlichsprachliche Programmieren, den Versuch unternehmen, die Programmierung dem menschlichen Denken ähnlicher zu gestalten. Weiterhin sind verschiedene andere Ansätze und Ideen im Hinblick auf deren Bezug zum natürlichsprachlichen Programmieren zu untersuchen, so etwa Subject Oriented Programming, Intentional Programming [035], Conscientious Software [021], Crosscutting Effective Views [056], Parallel Programming und Wiring [001], Multi-Dispatch [042, 050], Event Driven Architectures, Prototypenbasierte Sprachen wie Self und neuere Websprachen wie HOP [033] oder Ruby on Rails [058].

Intelligente Rückmeldungen

Natürliche Sprache ist oft nicht eindeutig, weder syntaktisch noch semantisch. Natürlichsprachliche Programmierung heißt aber nicht Schreiben von mehrdeutigen Programmen, sondern das Schreiben von eindeutigen Programmen mittels natürlicher Sprache. Darum ist es sehr wichtig, dass Pegasus uneindeutige Anweisungen seitens des Nutzers erkennen kann.
Das System muss dem Nutzer Hinweise der Art „Ich kenne das Wort ,XY‘ nicht.“ oder „Der Satz ,XY‘ enthält einen Grammatikfehler: Das erwartete Akkusativ-Objekt nach dem Verb ,spielen‘ wurde nicht gefunden.“ geben, oder Rückfragen stellen wie „Meinen Sie mit ,sie‘ die Zeichenfolge oder die Zahl?“, damit der Nutzer den Fehler, bzw. die Uneindeutigkeit, schnell und unkompliziert beheben kann. Fehlermeldungen wie „Syntaxfehler in Zeile 22 an Position 11“ würden hier nicht weiterhelfen, bzw. sind unserer Meinung nach ohnehin nicht mehr zeitgemäß. Die Art der Rückmeldung ist hier frei: Sie kann in Textform erfolgen, wie im obigen Beispiel, sie kann aber auch durch farbliche oder anderweitige Unterlegungen und Markierungen geschehen, wie bspw. die Rechtschreibüberprüfung in Textverarbeitungsprogrammen. Bei Rückmeldungen in Textform kann der eigene Sprachgenerator von Pegasus weiterentwickelt und in Anspruch genommen werden.

Generator und Interpreter

Das von Pegasus verstandene natürlichsprachliche Programm könnte entweder mittels eines Interpreters ausgeführt werden oder in ein ausführbares Programm einer anderen Programmiersprache übersetzt werden. Der natürlichsprachliche Befehl „Gib die Zeichenfolge ,Hallo Welt!‘ aus.“ sollte bspw. in Java in „System.out.println("Hallo Welt!");“ übersetzt werden, in C++ dagegen in „cout << "Hello World!";“.

Die Erstellung eines Generators, bzw. mehrerer Generatoren für eine Menge verschiedener repräsentativer Programmiersprachen, wird durch das Studium der Programmierkonzepte unterschiedlicher Programmiersprachen im direkten Bezug zu Pegasus, bzw. zur natürlichsprachlichen Programmierung im Allgemeinen, weitere Anregungen und Erkenntnisse über das Verhältnis von aktuellen Programmiersprachen und deren Kodierung von Bedeutung im Vergleich zur natürlichen Sprache bringen.
Die Generierung von Programmen in verschiedenen Ausgabesprachen erlaubt auch das Weiterverarbeiten dieser Programme in der Ausgabesprache. Damit können Entwickler, die in einer der unterstützten Programmiersprachen arbeiten möchten oder müssen, Pegasus auch als Hilfssystem zur Strukturierung ihrer Gedanken im Sinne eines Automated-Programming-Systems nutzen.
Durch verschiedene Generatoren kann zudem eine sicher performante Anwendung von Pegasus realisiert werden, bspw. können auch rechenintensive mathematische Algorithmen, übersetzt bspw. in C, verfasst werden.
 

Kollaborative Online-Gemeinschaft

Ein wichtiges Programmierkonzept ist die Wiederverwendbarkeit von bereits verfassten Komponenten, sowohl von eigenen als auch von fremden. Dies gestaltet sich mit einer natürlichsprachlichen Programmiersprache weitaus leichter als mit anderen Programmiersprachen. Erstens, weil natürlichsprachliche Programme bereits eine inhärente Kommentierung, in Pegasus sogar mehrsprachig, mit sich bringen. Dies ermöglicht den Nutzern fremdprogrammierter Komponenten, deren Korrektheit und Sicherheit wesentlich schneller zu überprüfen, was insbesondere bei sicherheitsrelevanten Anwendungen unabdingbar ist. Zweitens, weil das Auffinden der Komponenten erheblich vereinfacht ist, da die Namensgebung von Entitäten natürlichsprachlicher Programmiersprachen wesentlich konkreter ist als von Entitäten anderer Programmiersprachen, bspw. würde ein Befehl zur Ausgabe einer Zeichenfolge in einer natürlichsprachlichen Programmiersprache höchstwahrscheinlich lauten: „Eine Zeichenfolge ausgeben“, „Eine Zeichenfolge schreiben“ oder „Eine Zeichenfolge drucken“. Alle Varianten sind aber in jedem Fall sehr viel aussagekräftiger als Befehle wie „printf“, „System.out.println“ oder „cout <<“.
Denkbar ist daher eine Gemeinschaft von Pegasus-Entwicklern im Internet, die mittels einer auf einer Datenbank basierenden Plattform bereits entwickelte Komponenten austauscht. Entitäten wie Konzepte oder Prozesse könnten über eine textbasierte Schnittstelle gesucht werden und direkt in eigene Programme eingebunden werden, gefolgt von einer entsprechenden Anpassung an die individuellen Bedürfnisse der Nutzer. Ebenso könnten eigene entwickelte Komponenten mittels der Plattform auf freiwilliger Basis an die Gemeinschaft übergeben werden. Der gemeinsame Entitätenfundus von Pegasus könnte so nach und nach immer reichhaltiger werden und ein immer effektiveres Programmieren ermöglichen.
Eine solche Online-Gemeinschaft bedarf natürlich zusätzlicher Sicherheitsmechanismen, dass der vorhandene Programmkode wirklich korrekt ist. Ein integriertes Reputationsmanagement könnte hierbei von Nutzen sein, in Verbindung mit einem Social Network von Entwicklern.
An dieser Stelle könnten auch Mechanismen zum kollaborativen Arbeiten in die Pegasus-IDE integriert werden, bspw. Aufgabenplanung, Zeitplanung, CVS-Unterstützung, etc. Durch die Nutzung einer Bezahl-Infrastruktur, wie bspw. Paypal, ließe sich auch der Austausch von kommerziellem Programmkode im Rahmen der Plattform motivieren.

Eine Pegasus-IDE

Pegasus bedarf einer speziell angepassten Entwicklungsumgebung, weil Natürlichsprachliches Programmieren ein hoch interaktiver Prozess ist, unter anderem wegen der spezifischen Rückmeldungen des Systems bezüglich der Nutzereingaben und der Schnittstelle zur Online-Gemeinschaft für den Austausch von Komponenten.

Je nach Art der Rückmeldungen des Systems könnten bspw. farbliche Markierungen direkt im Programmtext den Nutzer, ähnlich wie in Textverarbeitungsprogrammen, auf Rechtschreib- oder Grammatikfehler aufmerksam machen. Rückfragen bezüglich unauflösbarer Referenzen könnten direkt auf die Stelle im Programmtext verweisen, die die Uneindeutigkeit verursacht hat.
Eine integrierte Schnittstelle zur Austauschplattform der Online-Gemeinschaft würde das herunterladen und hochladen von Entitäten und das Einbinden jener in das aktuelle Projekt ohne Zweifel stark vereinfachen.
Um die genannten Punkte zu realisieren muss die bestehende IDE des Pegasus Prototyps entsprechend erweitert werden. Denkbar ist auch eine Version als Plugin für bestehende IDE-Systeme, wie zum Beispiel Eclipse.

 

Weiterentwicklung anderer Programmiersprachen

Die Erkenntnisse, die durch Pegasus und die Natürlichsprachliche Programmierung im Allgemeinen gewonnen wurden und voraussichtlich gewonnen werden, können auch auf andere, nicht-natürlichsprachliche Programmiersprachen übertragen werden.
Hierbei sind insbesondere die in der natürlichen Sprache zur Verfügung stehenden Referenzierungsmechanismen von großem Interesse. In Java bspw. gibt es Referenzen wie „this“ oder „super“, die kontextbezogen aufgelöst werden. Denkbar wären an dieser Stelle bspw. zusätzliche Referenzen wie „it“, die auf das zuletzt verwendete Objekt verweisen würden oder Referenzen wie „former“ und „latter“. Die Auswirkungen solcher Erweiterungen wären im Kontext der natürlichsprachlichen Programmierung zu untersuchen und in der Praxis zu erproben.

Evaluation und Nutzer-Tests

Die Hypothesen über die Vorteile des natürlichsprachlichen Programmierens sind in einer breiten Evaluation zu überprüfen. Hierzu könnte in Zusammenarbeit mit dem Fachbereich Psychologie eine Untersuchung mit Expertenprogrammierern, Personen mit Programmierkenntnissen und Nicht-Programmierern der Disziplinen Informatik, Mathematik, Ingenieurwissenschaften und nicht-technischer Disziplinen durchgeführt werden. Eine Evaluation könnte folgendermaßen durchgeführt werden:
Einer ersten Probandengruppe könnten Programmieraufgaben gestellt werden, die mit Pegasus zu bearbeiten sind. Einer Kontrollgruppe sind die gleichen Aufgaben zur Bearbeitung mit einer anderen Programmiersprache zu stellen. Hierbei ist vergleichend die benötigte Bearbeitungszeit der Aufgaben zu messen, um festzustellen, ob die erste Hypothese, das sich mit natürlichsprachlichen Programmiersprachen im Allgemeinen Anwendungen effizienter entwickeln lassen als mit nicht-natürlichsprachlichen Programmiersprachen, Gültigkeit besitzt.

Einer weiteren Probandengruppe könnten Pegasus-Programme gezeigt werden, deren Bedeutung durch die Probanden zu erkennen und schriftlich niederzulegen ist. Einer Kontrollgruppe sind bedeutungsgleiche Programme in einer anderen Programmiersprache zu zeigen. Hierbei ist die benötigte Zeit zum Erkennen der Bedeutung sowie die Richtigkeit der gegebenen Antworten zu bewerten, um festzustellen, ob die zweite Hypothese, das sich in natürlichsprachlichen Programmiersprachen verfasste Anwendungen schneller verstehen lassen als in nicht-natürlichsprachlichen Programmiersprachen verfasste Anwendungen, Gültigkeit besitzt.
Einer Probandengruppe von Nicht-Programmierern könnte die Programmiersprache Pegasus im Rahmen einer kurzen Einführung erklärt werden, einer Kontrollgruppe eine andere Programmiersprache. Danach ist beiden Gruppen eine Menge von selben einfachen Programmieraufgaben zu stellen, die mit Hilfe der jeweiligen Programmiersprache zu bearbeiten sind. Hierbei ist die benötigte Zeit zum Verfassen der Programme sowie die Richtigkeit der Programme zu bewerten, um festzustellen, ob die dritte Hypothese, das sich natürlichsprachliche Programmiersprachen leichter erlernen lassen als nicht-natürlichsprachliche Programmiersprachen, Gültigkeit besitzt.

Es wäre sicherlich interessant auch das Programmierverhalten von Kindern beobachten zu können in Bezug auf eine natürlichsprachliche Programmiersprache. Bisherige Versuche mit Kleinkindern lassen einen großen Erfolg erwarten.