Mitmachen
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
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
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
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
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
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.