Programmier dich doch selbst!
Nach einem Blick in Vergangenheit und Gegenwart der Schritt in die Zukunft. Das Ziel sind Computer, die sich selbst programmieren. Wie soll das gehen? Wir laden Sie ein zum letzten Teil unserer Reise durch Digitalien.
Von Thomas Preusse, Hanna Wick, 27.06.2018
Eine Idee, die Martin Vechev vor Aufregung schneller reden lässt. «Big Code» nennt er sie. «Angelehnt an Big Data. Denn auch wir brauchen grosse Datenmengen, nur sind es keine Fotos, Audios oder Videos, sondern eben Code.» Code, den jemand bereits geschrieben hat und von dem Maschinen nun lernen sollen, was das heisst: zu programmieren.
Solcher Code steht heute massenweise frei zur Verfügung, vor allem in der Datenbank Github. Sie ist ein zentraler Bestandteil der Software-Community – so zentral, dass Microsoft sie Anfang Juni für 7,5 Milliarden US-Dollar gekauft hat. Da teilen über 25 Millionen Nutzer ihre Programme, Milliarden und Abermilliarden von Code-Befehlen. Zeile um Zeile in die Tasten gehauen, im Schweisse ihres Angesichts. Auch die Programmierer der Republik haben ihren Code auf der Plattform öffentlich gemacht.
Diesen Code-Schatz will Martin Vechev nun heben. In seinem spartanischen Büro an der ETH Zürich – Tisch, Computer, Wandtafel, Stuhl – erklärt er, wie das gehen soll. Mit künstlicher Intelligenz, natürlich. Aber nicht nur mit neuronalen Netzen, wie wir sie gestern in Teil II («Blick in die Black Box») kennengelernt haben, sondern auch mit zusätzlichen Methoden des maschinellen Lernens.
Serie «Talk to the Machine»
Hanna Wick und Thomas Preusse bringen Ihnen in drei Folgen bei, wie man mit Maschinen spricht: Sie beleuchten unsere nicht ganz unbelastete Beziehung mit Computern mit einem Blick in die Vergangenheit, die Gegenwart und die Zukunft.
Sie lesen: Teil III
Programmier dich doch selbst!
Muster im Code zu erkennen, den Kontext zu erfassen – das ist für Maschinen schwierig. Viel schwieriger jedenfalls, als einfach nur Katzen in Bildern zu finden. Die Aufgabe gleicht eher der Spracherkennung, denn auch Programmieren ist eine Sprache, allerdings mit einer anderen, sehr mathematischen Logik. Bei natürlichen Sprachen hängt zum Beispiel die Bedeutung oft von benachbarten Wörtern ab. Bei Computersprachen hingegen beeinflussen sich auch Versatzstücke, die weit voneinander entfernt stehen.
Die Aufgabe ist also trickreich. Doch immer mehr Forscher auf der Welt glauben, dass sie sich lösen lässt. Dass Computer die Struktur unserer Software tatsächlich verstehen und sie dann umbauen können. Dass wir auf dem Weg sind zur sich selbst programmierenden Maschine.
Wie schlau ist Deep Code?
Ein Automat, der uns auch noch die Programmierarbeit abnimmt. Der quasi seine eigenen Lochkarten stanzt und sich selbst damit füttert. Der unsere Wünsche versteht und sie selbsttätig in Code umwandelt – das ist die Vision.
Keine neue Vision, wohlgemerkt, aber eine, die heute viel attraktiver scheint als noch vor einigen Jahren. Lange Zeit versuchten Forscher, den Computern alle Regeln mitzugeben, die es fürs eigenständige Programmieren braucht – eine Art grundlegende Grammatik des Codes. Doch das funktionierte nur bei ganz simplen Beispielen und war dazu noch extrem mühsam. Software-Synthese galt als kindische Träumerei.
Heute ist das anders: Das Interesse wächst, und auch Google, Microsoft und andere Industriegiganten sind auf den Zug aufgesprungen. Fast riecht man schon den kommenden Hype. Manche prophezeien dem Forschungsgebiet gar einen ähnlichen Boom wie den neuronalen Netzen.
«Wir wollen verstehen, weshalb das System eine bestimmte Änderung vorschlägt.»
«Wir gehen heute nicht mehr wirklich regelbasiert vor wie vor einigen Jahrzehnten», sagt Vechev. «Wir sind jetzt datengetrieben wie der Grossteil der Informatik.» Jeder Tastenhieb ein Datenpunkt, jede Programmzeile wertvoller Rohstoff.
Noch sind die Fortschritte klein, aber es gibt sie: Die Software Deep Code aus Vechevs Gruppe zum Beispiel findet Mängel in Programmen, die Menschen entgehen. Dafür schaut Deep Code sich auf Github nicht nur den Code selbst an, sondern auch dessen zeitliche Veränderung. Das Programm weiss also, wie andere Entwickler bestimmte Fehler beheben oder auch verschlimmbessern.
Am Ende präsentiert Deep Code für jeden Mangel eine Lösung, samt Begründung. «Wir wollen verstehen, weshalb das System eine bestimmte Änderung vorschlägt. Nur so können wir Transparenz und Erklärbarkeit garantieren», sagt Vechev. «Und nur so wird das Produkt am Ende auch akzeptiert.» Das Resultat ist eine Art Autokorrektur für Software, ähnlich wie wir es von Textnachrichten auf dem Handy kennen.
Was Vechev versucht, ist ein erster Schritt. Das nächste Ziel: ein Vervollständigungssystem für Code. Man kann sich das vorstellen wie die Hilfe bei Google, wenn man nach etwas sucht. Kaum tippt man das erste Wort ein, schlägt Google schon mögliche Suchbegriffe vor – basierend auf Dingen, nach denen andere bereits gesucht haben.
So ähnlich würde das dann auch beim Programmieren ablaufen: Die Software-Entwicklerin müsste nur die ersten paar Zeilen ihres Codes schreiben, und schon würde der Programmier-Automat den Rest machen. Oder zumindest sinnvolle Vorschläge dafür liefern, wie der Code weitergehen könnte.
Einen Haken hat die Idee allerdings: Vervollständigungssysteme sind immer abhängig vom Dateninput – also von dem, was wir Menschen tun, was wir Menschen programmieren. Müll rein, Müll raus. Gold rein, Gold raus.
Wäre Github ein Schrottplatz, käme bei Big Code folglich nichts Brauchbares zustande. Da könnte sich Martin Vechev noch so grosse Mühe geben. Weil in der offenen Software-Datenbank aber viel qualitativ hochstehender Code zu finden ist, können Maschinen gut daraus lernen. Und vielleicht, meint Vechev, ja, vielleicht können sie irgendwann sogar so gut programmieren wie heute Experten.
Dann könnte jeder Laie mit der Maschine sprechen. «Programmieren für die Massen!», schwärmt Armando Solar-Lezama vom Massachusetts Institute of Technology, einer der Vorreiter auf dem Gebiet der Software-Synthese. «Ich glaube, das wird den Job des Programmierers völlig neu definieren.»
Wenn alle fehlerfrei programmieren könnten, nicht nur die Super-Hacker – dann hätten wir alle das Werkzeug in der Hand, das unsere heutige Welt so stark verändert: den Code.
Zum Beispiel bei der Firma Microsoft: Sie war eine der ersten, die 2013 im Gebiet der Software-Synthese ein konkretes Produkt vorweisen konnten. Es handelt sich um ein Feature im Programm Excel, mit dem man viel schneller eine Liste vervollständigen kann.
Flash Fill braucht einen Input und einige Beispiele davon, welchen Output man sich wünscht. Dann findet es die erwünschte Lösung, als Computerprogramm. Nun arbeitet Microsoft daran, dieses Feature mit neuronalen Netzen zu verbessern – damit es beginnt, aus seinen eigenen Fehlern zu lernen, und sich für neue Aufgaben nutzen lässt.
«Wir wollen, dass ein Nutzer der Maschine seine Absicht ganz einfach mitteilen kann, statt Schritt für Schritt jede Aussage spezifizieren zu müssen.» So erklärt es Microsoft-Forscher Rishabh Singh in einem Podcast. «Wir nennen das: die Demokratisierung des Programmierens.»
Knackige Schlagworte hat das Forschungsgebiet jedenfalls schon parat. #BigCode #Demokratisierung. Da kann natürlich die Firma Google nicht aussen vor bleiben: Auch sie experimentiert mit der Software-Synthese, zum Beispiel mit neuronalen Netzen, die andere neuronale Netze bauen. Damit will Google auch etwas gegen den Fachkräftemangel tun. Denn Experten für künstliche Intelligenz sind derzeit Mangelware auf dem Jobmarkt.
Software als Ersatz für den Menschen. Ein alter Traum. Und einer, der Ängste heraufbeschwört: vor dem Ende der Arbeit, vor menschlicher Nutzlosigkeit, vor existenzieller Not.
Die Menschen, wie so oft bei technologischen Schüben, würden durch sich selbst programmierende Software nicht gleich überflüssig. Erstens hätten Programmierer dann mehr Zeit, kreativere Software zu schreiben, statt mühsam Fehler auszubessern. Zweitens brauchte es auf absehbare Zeit noch immer jemanden, der dem Computer präzise sagt, was er tun soll.
Man kann seine Maschine auch in Zukunft nicht einfach anschreien oder treten und meinen, dass sie schon versteht. «Für die Kommunikation des Befehls braucht es nach wie vor algorithmisches Denken», erklärt der Computerwissenschaftler Eran Yahav vom Technion in Haifa. «Wie sonst bringen wir die Maschine dazu, unsere Absicht zu erkennen?»
Der Befehl an die Maschine muss also so logisch sein, dass sie ihn auch erfassen kann. Der israelische Informatiker glaubt deshalb nicht, dass Programmierkenntnisse überflüssig werden könnten (wie es andere tun). Allerdings würde sich unsere Interaktion mit Maschinen wohl stark wandeln.
Wünsche, die wir zeichnen können
Könnten wir Computer leichter programmieren, würden wir sicher anders mit ihnen umgehen. Jede (gute und doofe) Idee liesse sich flugs in eine Software umwandeln. Neue Datenbank? Schon fertig! Neuer Wetterradar fürs Smartphone? Zack, parat! Ein Glückwunsch-Generator, der automatisch die Facebook-Seiten meiner Freunde bespielt, wenn sie Geburtstag haben? You got it!
Gewisse Befehle könnten wir den Maschinen vielleicht sogar direkt mit unserer Stimme geben. Immerhin ist die Spracherkennung heute schon ziemlich gut, wie Siri und Alexa zeigen. Wir könnten im wahrsten Sinn des Wortes mit der Maschine reden.
Andere Wünsche könnten wir zum Beispiel zeichnen. Wie bei Vechevs neuer Anwendung InferUI, die aus einer einfachen Skizze für eine App den entsprechenden Code fürs User-Interface berechnet. «Damit kann man das Design ein Stück weit automatisieren», sagt ETH-Forscher Vechev. Neue Gestaltung für deine schicke Website? Hier hast du sie.
Die kreative Idee muss zwar noch immer vom Menschen kommen. Doch das Programmieren des Layouts fällt weg. Und damit auch die Arbeit, mit der sich viele Software-Entwickler heute beschäftigen. Die Menschen würden nicht überflüssig, aber ihr Beruf würde sich stark wandeln.
Die meisten Fachleute sind sich in der Tat einig: Ohne die Fähigkeit zur Selbstprogrammierung können Maschinen niemals wirklich intelligent werden. Doch auch mit dieser Fähigkeit ist Intelligenz nicht garantiert. Auch sich selbst programmierende Computer können ziemlich dumm bleiben.
Darpa, die Forschungsabteilung des amerikanischen Militärs, beschreibt die künstliche Intelligenz in drei Wellen:
Die drei Wellen der künstlichen Intelligenz
1. Handgefertigtes Wissen
Handgefertigte Algorithmen automatisieren Expertenwissen.
Ein Beispiel sind Schachcomputer, denen alle Regeln direkt einprogrammiert sind. Diese Stufe liegt bereits hinter uns.
2. Statistisches Lernen
Der Computer lernt Regeln aus grossen Datensammlungen. Ein Beispiel ist die Erkennung von Sprache oder Bildern. Diese Stufe ist Stand der Technik.
3. Kontextuelle Anpassung
Die Maschine lernt nicht nur aus Daten. Sie versucht gleichzeitig mit einem Modell zu verstehen, was sie da «sieht» oder «hört». Das System sollte also fähig sein, aus dem Kontext heraus die jeweils richtige Lösung zu wählen. An dieser Stufe wird gerade herumprobiert.
Alle grossen IT-Firmen und viele Forscherteams rund um die Welt versuchen derzeit, die dritte Welle zu erwischen. Auch Martin Vechev und seine Kollegen. Sie wollen die Software-Synthese zum Fliegen bringen. Nehmen wir an, sie hätten dereinst Erfolg. Dann kann man sich die Zukunft auf zwei Arten ausmalen:
Im ersten Szenario gibt es bessere Werkzeuge für Programmierer und Designer, die Software-Entwicklung wird effizienter, und ein Teil der Arbeit wird durch künstliche Intelligenz automatisiert. Das ermöglicht ganz neue Arbeitsweisen, ähnlich wie auch in anderen Sektoren. Doch die Entwicklerin bleibt im Cockpit. Diese Zukunft ist sehr wahrscheinlich, auch wenn man heute noch nicht sagen kann, wann es so weit sein wird.
Im zweiten Szenario schafft es jemand, verschiedene neuronale Netzwerke und andere Komponenten der künstlichen Intelligenz tatsächlich zu etwas Grösserem zu verknüpfen. Zu einem System, das Kontext versteht und sinnvoll Neues kreiert, inklusive Code. Das wäre die Grundlage für eine generelle künstliche Intelligenz.
Debatte: «Wie behalten wir die Maschinen im Griff?»
Sind wir zu sehr von Maschinen abhängig? Oder nehmen sie uns genau die Arbeiten ab, die uns nur lästig sind und die sie sowieso besser können? Haben Sie Angst davor, dass Maschinen einmal besser funktionieren als das menschliche Gehirn? Und warum muss ich eigentlich selbst programmieren können? Hier geht es zur Debatte mit Autorin Hanna Wick und IT-Spezialist Andreas Moor, heute Mittwoch von 8 bis 11 Uhr.