Einführung
Die derzeitige Programmiertechnik weist eine Reihe von Problemen auf, die mittels Natürlichsprachlicher Programmierung im Allgemeinen und Pegasus im Besonderen behoben werden könnten:
Wesentliche Probleme derzeitiger Programmiertechniken und -sprachen
1. Das geistige Problem Ein Entwickler seine Gedanken verlustreich umstrukturieren muss, damit sie dem Weltmodell einer spezifischen Programmiersprache entsprechen, statt diese direkt ausdrücken zu können, so etwa das kreativitätsmindernde fixe Vorabdenken in Klassen, Attributen und Methoden bei der Erstellung eines C#-Programms.
2. Das Programmiersprachenproblem Die selben Algorithmen müssen in immer wieder neuen Programmiersprachen implementiert werden, obwohl sich ihre eigentliche Idee nie ändert: So bleibt etwa „Bubblesort“ ehemals in Assembler, jetzt in Java und bald in wieder einer neuen Sprache, immer der gleiche Algorithmus.
3. Das Dokumentationsproblem Um den erstellten Programmcode verständlich zu machen, müssen Entwickler Kommentare und Dokumentationen schreiben, denn der Code ist nicht selbsterklärend, vermutlich nicht einmal für die Programmierer, die am gleichen Projekt arbeiten. Hinzu kommt, dass die Kommentare oft nicht in der Muttersprache der Programmierer verfasst sind, was eine zusätzliche Quelle für Missverständnisse, Fehler und Ineffizienzen darstellt, etwa weil das Dokumentieren ganz unterlassen wird oder falsche Ausdrücke verwendet werden.
4. Das technische Problem Entwickler verlieren viel Zeit mit technischen Ungereimtheiten, wie etwa der Auswahl des korrekten Zeichensatzes, des Netzwerkprotokolls oder Datenbankformates, statt sich mit den eigentlich kreativen Problemen der Programmidee auseinanderzusetzen.
Lösungen und Hypothesen
Das natürlichsprachliche Programmieren mit Pegasus könnte die genannten Probleme lösen: 1. Die Programmideen der Entwickler könnten ohne eine verlustreiche Umstrukturierung direkt in natürlicher Sprache ausgedrückt werden. 2. Da die natürliche Sprache gewöhnlich über lange Zeiträume unverändert bleibt, bleiben auch die mit ihr verfassten Programme gleichbedeutend: Es wären nicht die Programme neu zu verfassen, um sie dem aktuellen Stand der Technik anzupassen, sondern die Compiler für die natürlichsprachliche Programmierung würden sich weiterentwickeln, ohne das die Entwickler es merken müssten. 3. Entwickler könnten Kommentare und Dokumentation in ihrer Muttersprache schreiben und andere Entwickler könnten auf Grund automatischer Übersetzung in ihrer Muttersprache damit weiterarbeiten. Der Kommentierungsbedarf selbst würde verringert werden, da die Programme schon in natürlicher Sprache verfasst sind. 4. Pegasus lässt nur Standardformate wie etwa Unicode zu.
Auf Grund der obigen Überlegungen legen wir unserer Arbeit folgende Hypothesen zu Grunde, deren Bestätigung wir uns durch die Realisierung des Programmiersystems „Pegasus“ und der Implementierung zahlreicher Anwendungsbeispiele erhoffen.
1. Mit natürlichsprachlichen Programmiersprachen lassen sich im Allgemeinen Anwendungen effizienter entwickeln als mit nicht-natürlichsprachlichen Programmiersprachen, insbesondere unter Verwendung von Kontextabhängigkeit, Referenzierungsmechanismen und Kompressionsmechanismen der natürlichen Sprache.
2. In natürlichsprachlichen Programmiersprachen verfasste Programme lassen sich schneller verstehen als in nicht-natürlichsprachlichen Programmiersprachen verfasste Programme.
3. Natürlichsprachliche Programmiersprachen lassen sich leichter erlernen als nicht-natürlichsprachliche Programmiersprachen.
Die Ideensprache
Die natürliche Sprache, bzw. das menschliche Denken, muss für ihre Verwendung in Pegasus in irgendeiner Form modelliert werden. Zu diesem Zwecke wurde die Ideennotation entworfen. Mit ihrer Hilfe lassen sich atomare Ideen, Ideen, die direkt unseren Sinnen entspringen, wie etwa „rot“ oder „laut“, zu komplexen Ideen, wie etwa „Holz“ oder „Tisch“, kombinieren, jene wiederum zu zusammengesetzten Ideen, mit denen man Gedanken wie „Der Tisch ist braun.“ (Tisch, braun) abbilden kann. Die Ideen an sich stehen über den spezifischen natürlichen Sprachen, da sie in verschiedenen natürlichen Sprachen ausgedrückt werden können. Obwohl alle diese Ideen für jeden einzelnen Menschen individuell sind, sind sie doch unter den Menschen ähnlich. Hierdurch ist Kommunikation überhaupt erst möglich, und dies ist auch die Basis für ein Computersystem mit allgemeinem Wissen.
Eigenarten der natürlichen Sprache
Die natürliche Sprache unterscheidet sich unter anderem in folgenden drei Punkten, die alle darauf abzielen, den Informationsaustausch so effizient wie möglich zu gestalten, von derzeitigen Programmiersprachen: 1. Häufige Anwendung impliziter Referenzierung, bspw. durch Pronomen wie „er“, „sie“ oder „letzteres“, durch direkte Referenzen wie „die Zeichenfolge“ oder durch Teilsatzreferenzen wie in „Ja, das stimmt.“. 2. Verwendung von Kompression, sowohl durch syntaktische Kompression wie in „Gib die Zeilen und Spalten der Matrix aus.“, als auch durch semantische Kompression wie in „Gehe die Menge von links nach rechts durch und umgekehrt.“. 3. Kontextabhängigkeit, wie in „Nimm eine Liste. Hänge die Zahl 3 an das Ende an. Nimm den Namen der Liste. Hänge die Zahl 3 an das Ende an.“, wo der Satz „Hänge die Zahl 3 an das Ende an.“ jeweils zwei unterschiedliche Bedeutungen hat.