In unserer Reihe „Zukunft gestalten mit“ stellen wir euch interessante Persönlichkeiten vor, die an Zukunftstechnologien arbeiten. Dieses Mal mit Sumit Gulwani von Microsoft Research. Er erklärt, warum die Computer der Zukunft uns Menschen besser verstehen werden.
Sumit Gulwani gründete und leitet derzeit das PROSE-Forschungs- und Entwicklungsteam bei Microsoft Research, das Techniken für die Programmsynthese entwickelt und diese in verschiedene Massenmarkt-Produkte einbaut. Er hat mit seiner Arbeit sein Forschungsfeld geprägt. Die Programmsynthese ist die Fähigkeit, automatisch Computerprogramme erzeugen zu können. Diese Programme werden aus natürlichen Formen der Absicht, wie z.B. Input-Output-Beispielen, natürlicher Sprache, oder manchmal sogar vorausschauend aus dem strukturellen oder zeitlichen Kontext der Kodierung erstellt. Unter anderem ist er der Erfinder des beliebten Flash Fill-Features in Microsoft Excel. Flash Fill fügt automatisch Daten in Excel-Spalten ein, sobald es ein Muster darin erkennt, wie diese mit anderen Spalten in Beziehung stehen.
Wir haben mit Sumit über seine richtungsweisende Arbeit gesprochen, die kürzlich mit der Max-Planck-Humboldt-Medaille 2021 ausgezeichnet wurde. Außerdem haben wir uns darüber unterhalten, wie die Programmsynthese das Leben von uns allen erleichtert und welchen Einfluss sie auf die Bildung haben kann.
Du wurdest kürzlich mit der Max-Planck-Humboldt-Medaille 2021 für deine Leistungen auf dem Gebiet der Programmsynthese ausgezeichnet. Wie würdest du einem Kind dein Forschungsgebiet erklären?
Sumit: „Die Techniken der Programmsynthese ermöglichen es den Anwender*innen, einen Vorgang auf die natürlichste Art und Weise auszudrücken, sei es durch Beispiele oder durch eine Beschreibung in natürlicher Sprache, ohne dafür mit einer strengen und manchmal schwer verständlichen Syntax programmieren zu müssen.
Was es mit den beiden Techniken auf sich hat, habe ich letztens meinem Sohn Sumay erklärt, der in seiner Grundschule für viele digitale Anwendungen eigene Passwörter benötigt. Die Lehrerin teilte diese Passwörter mit, indem sie per E-Mail ein Beispiel dafür schickte, wie man diese aus dem Namen und der ID der Schüler*innen ableiten kann: ‚Wenn du Alex Zorn heißt und die ID 12345678 ist, dann ist dein Passwort a-ZORN#1234.‘ Ich zeigte Sumay, dass die Flash Fill-Funktion in Excel, die ich 2010 entwickelt habe, intelligent genug ist, um solche Aufgaben der Analogie zu lösen. Und zwar, indem ein Programm aus sehr wenigen repräsentativen Input-Output-Beispielen erzeugt wird, das dann mit neuen Inputs ausgeführt wird, um die gewünschten Outputs zu erhalten. Dies wird als Programmsynthese anhand von Beispielen bezeichnet.
Während Beispiele manchmal ein einfacher Weg sein können, um die Absicht einer Berechnung mitzuteilen, lassen sich andere Aufgaben am besten in natürlicher Sprache beschreiben. Das lässt sich gut mit einem Problem aus Sumays Mathematikaufgaben erklären:
Sumay hat eine große Liste mit der Anzahl der Sternchen, die Schüler*innen aus verschiedenen Klassen erhalten haben. Nun soll er feststellen, ‚welche Klasse die meisten Sternchen erhalten hat‘. Techniken zur Programmsynthese in natürlicher Sprache können solche wörtlichen Beschreibungen in ausführbare Programme über Tabellen (wie SQL-Abfragen oder Tabellenkalkulationsformeln) übersetzen. Damit kann Sumay das Ergebnis ohne eine manuelle Berechnung schnell ermitteln.
Diese Techniken haben die automatische Programmierung geprägt. Sie haben gezeigt, dass Programme aus unpräzisen Spezifikationen effizient erzeugt werden können und dass die Programmsynthese nicht nur Computerfachleute mit komplizierten Algorithmen, sondern auch Computeranwender*innen bei relativ einfachen Programmen oder Programmausschnitten helfen kann. Kürzlich habe ich erfahren, dass Flash Fill in Indien in mehreren Computerlehrbüchern für die Mittelstufe behandelt wird.“
Inwieweit glaubst du, dass die Verbesserungen in der Programmsynthese Einzelpersonen und Organisationen in die Lage versetzen können, unsere Zukunft zu gestalten?
Sumit: „Die Computertechnologie hat alle Aspekte unseres Lebens durchdrungen. Jedoch kann die große Mehrheit der Computernutzenden nicht programmieren und müssen sich deshalb mit mühseligen, sich wiederholenden Aufgaben herumschlagen. Programmierung, wie sie heute existiert, stellt ein künstliches Hindernis für eine effektive und kreative Nutzung von Computern dar.
Sumays Lehrerin hätte zum Beispiel jede*r Schüler*in ein eigenes Passwort schicken können, wenn sie ein entsprechendes Programm hätte erstellen können. Die Techniken der Programmsynthese durch Demonstration können Sumays Lehrerin dabei beobachten, wie sie ein paar dieser personalisierten E-Mails versendet, und ihr dann anbieten, entsprechende E-Mails an die übrigen Kinder der Klasse zu senden.
Die Programmsynthese kann auch Computerfachleute wie Datenwissenschaftler*innen oder Entwickler*innen unterstützen.
Datenwissenschaftler*innen verbringen viel Zeit damit, Daten zu bearbeiten, sie zu bereinigen, umzuwandeln und zu analysieren. Diese Datenbearbeitung kann durch die Programmsynthese beschleunigt werden, etwa durch die Datenkonnektoren in Microsofts Power Query-Engine. Kürzlich hat es uns gefreut zu sehen, wie sie verwendet werden, um Dashboards für verschiedene Covid-19-Datensätze zu erstellen.
Entwickler*innen verbringen die meiste Zeit mit dem Schreiben von schablonenhaftem Code oder mit Aufgaben der Codepflege, wie z. B. dem Refactoring von Code, der Lösung von Merge-Konflikten und der Durchführung von wiederkehrenden Bearbeitungen zur Fehlerbehebung. Die Programmsynthese kann bei solchen Aufgaben helfen und als KI-gestützter pair programmer bei der Arbeit Vorschläge machen. Unsere Funktion IntelliCode Suggestions in Visual Studio ist ein solcher Formfaktor für dieses Einsatzszenario.
Der jüngste Spross im Bunde, GitHub’s CoPilot, der auf dem von OpenAI entwickelten, vorab trainierten Modell Codex basiert, hat die Fantasie der Welt beflügelt. Er sagt Codefragmente vorher – anhand von Kommentaren in natürlicher Sprache und dem vorherigen Codekontext. Wir stehen an der Schwelle einer Disruption, die eine KI-gestützte Paarprogrammierung mit sich bringen wird.“
In letzter Zeit setzt du die Instrumente der Programmsynthese für den Bildungsbereich ein. Wie kann die Programmsynthese die Programmierausbildung, Lernfeedback, Noten und mehr unterstützen? Wo siehst du mögliche zukünftige Anwendungen im Bildungsbereich?
Sumit: „Eine einzige Lehrkraft ist für viele Schüler*innen in einem Klassenzimmer verantwortlich, so dass die einzelnen Personen häufig kein personalisiertes Feedback erhalten können. Online-Kurse mit vielen Teilnehmenden verstärken dieses Problem noch.
Ein Beispiel: Lernt man heute Programmieren, dann sind die Fehlermeldungen der Compiler (Programme, die maschinenlesbaren Code erzeugen) oft verwirrend. Zudem reicht es nicht aus, den Studierenden eine Musterlösung vorzulegen, wenn sie ein Problem nicht lösen können. Denn was sie wirklich wissen müssen, ist, wie ihre Lösung in eine korrekte Lösung umgewandelt werden kann. Programmsynthesetechniken können eingesetzt werden, um die Lösung von Schüler*innen in eine nächstgelegene korrekte Lösung (oder den nächsten logischen Schritt) umzuwandeln. Das kann nicht nur die Grundlage für eine gerechtere Benotung bilden, sondern auch für personalisiertes Feedback und Hinweise an die Schüler*innen, die damit eine bessere Lernerfahrung bekommen.
Ich möchte eine große Herausforderung angehen: die Entwicklung eines KI-Bots, der sich in Bezug auf das Feedback und die Hinweise für die Lernenden kaum von einer menschlichen Lehrkraft unterscheidet. Durch das Sammeln von Lernwegen einer Vielzahl von Lernenden aus der ganzen Welt könnten wir geeignete Machine-Learning-Modelle entwickeln. In Verbindung mit geeigneten Programmanalyse- und -synthesetechniken können diese die Grundlage für einen KI-Bot bilden, der den Lernenden ein sofortiges personalisiertes Feedback geben kann. Eine solche Technologie kann sogar das Lernen unter Gleichaltrigen erleichtern, indem sie Lernende miteinander verbindet und pädagogische Experimente ermöglicht. Die Lehrenden gewinnen dadurch mehr Zeit für die Interaktion mit Lernenden.“
Du hast einmal gesagt: „Programmieren ist die Wissenschaft, mit Computern zu sprechen“. Wie begeisterst du andere Menschen dafür, diese Sprache zu lernen?
Sumit: „Die tiefste Ebene des Lernens findet statt, wenn man etwas schafft, das für einen selbst von Bedeutung ist. Mit diesem Verständnis fand ich letztes Jahr den richtigen Moment, um meinem Sohn Sumay das Programmieren vorzustellen.
Er löste gerade eine Matheaufgabe der 2. Klasse: Suche nach allen Kombinationen (a,b,c,d), bei denen a*b=c*d gilt und a, b, c, d unterschiedliche Ziffern sind. Nachdem er mühevoll die vierzig Lösungen aufgezählt hatte, scherzte ich mit ihm: ‚Weißt du, dass ein Computer das für dich übernehmen könnte? Du musst ihm nur sagen, was er tun soll.‘ Seine Augen leuchteten auf, und er probierte begeistert sein erstes Computerprogramm aus.
Neben einem motivierenden Lehrplan müssen wir auch dafür sorgen, dass Computer intelligenter werden, damit wir Menschen einfacher mit ihnen sprechen können.
Als Sumay begeistert sein erstes Computerprogramm schreiben wollte, um seine Matheaufgabe zu lösen, rief ich einen Online-Python-Editor auf. Dann haben wir angefangen, das Programm für die Aufgabe zu schreiben. Und Sumay hielt den Atem an, während er auf dem Bildschirm auf die Lösung wartete. Allerdings hatte ich noch nie ein Python-Programm geschrieben. Mit meinen 20 Jahren Programmiererfahrung war ich aber zuversichtlich, dass ich das mit Hilfe von Fehlermeldungen herausfinden kann. Aber nein, ich bin gescheitert. Ich habe viele verschiedene Syntaxen ausprobiert, aber die Fehlermeldungen waren nicht hilfreich und verwirrend. Sumay war frustriert und fragte: ‚Papa, bist du sicher, dass du programmieren kannst?‘ Letztendlich musste ich in der Dokumentation nachsehen, um das Ganze zum Laufen zu bringen. Weißt du, die meisten Menschen hätten meine Absicht aus dem ungenau geschriebenen Programm herauslesen können. Und wenn auch Computer solche schlampigen Programme oder Pseudocodes verstehen können, kann dies nicht nur die Programmierausbildung verändern, sondern auch den Grundstein für die nächste Programmierrevolution legen. Diese Revolution wird das Programmieren für alle demokratisieren und die Programmierung einer menschlichen Unterhaltung annähern.“
Ein Beitrag von Bosse Kubach
Trainee Business Communications Digital Qualification & Innovation / Data Applications & Infrastructure