Serie «Talk to the Machine» – Teil III

Wilsons Algorithmus: Farblich abgeänderte Visualisierung von Mike Bostock.

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

Thomas, hör mal zu, ich hab da vor kurzem einen spannenden Typen kennengelernt. So einen bulgarischen Informatiker, der macht krasse Sachen.

Hanna

Mhm. Ich komme gleich. Muss nur noch schnell zwei Zeilen fertig programmieren …

So!

Thomas

Also, der Typ heisst Martin Vechev, er arbeitet an der ETH Zürich und will deine Arbeit erleichtern – zum Beispiel mit einem System, da kannst du deinen Code reinhauen, und dann verschönert das System ihn für dich. Ganz von allein!

Hanna

Ah, ist das dieses JSNice-Ding? Das hab ich schon mal ausprobiert.

Thomas

Und, wie fandest du es? Du klingst nicht gerade begeistert …

Hanna

Also ein cooles Experiment war es schon. Aber für Software-Entwickler ist das Teil noch nicht super nützlich.

Thomas

Ah, okay. Das kann gut sein. Aber in der Forschung beginnen die Dinge oft klein, oder? Ich bin jedenfalls ziemlich beeindruckt – vor allem von der Idee dahinter.

Hanna

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

Pro­gram­mier 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.

Martin Vechev.
«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.

Also, ich hab das mal ausprobiert, dieses Deep Code. Bei meinem Testlauf waren leider fast alle Vorschläge dürftig.

Thomas

Kritisch wie immer, der Herr Programmierer.

Hanna

Ja. Nur weil jemand anderes aus diesem Code jenen Code gemacht hat, heisst das eben noch lange nicht, dass dieselbe Veränderung in einem anderen Kontext dann auch passt.

Thomas

Okay, verstehe. Aber vielleicht war dein Code auch einfach schon ziemlich gut, und es gab nichts zu bemängeln …

¯\_(ツ)_/¯

Hanna

Haha ;-)

Thomas

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.

Screenshot

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.

Also mir gefällt diese Vorstellung sehr, dass ich mit wenig Aufwand selbst programmieren könnte. Endlich mal direkt bestimmen und nicht abhängig sein von Programmierern. Und nicht selbst gut programmieren lernen müssen. Was meinst du zu dieser Idee von Big Code?

Hanna

Sehr spannend find ich das, besonders auch den Gedanken, dass der eigene, freiwillig und freizügig publizierte Code plötzlich Teil einer künstlichen Intelligenz wird. Wir sind sehr offen und teilen gerne. Aber dass der Code damit auch zum Futter für eine Maschine wird, habe ich bis jetzt kaum bedacht.

Thomas

Und dass die Maschine dann auch noch deinen Job macht. Wenn das so weitergeht, bist du bald arbeitslos …

Hanna

Jetzt übertreib mal nicht. Software-Entwicklung ist Kopfarbeit. Da geht es um Konzepte, und das können die Maschinen noch lange nicht.

Thomas

Okay, das sagen ja auch Martin Vechev und die anderen Forscher, mit denen ich für diesen Artikel geredet habe. Man wird auch in Zukunft noch mit der Maschine kommunizieren und ihr seine Wünsche klarmachen müssen.

Hanna

Siehst du.

Thomas

Ja … aber: Es könnte trotzdem schneller gehen mit deiner Job-Neudefinition, als du meinst. Viele Firmen arbeiten jetzt schon an der Software-Synthese und buttern da auch einiges an Geld rein. Und wenn sich die IT-Industrie mit ganzer Kraft hinter eine Sache klemmt, dann kommt auch meist was dabei raus.

Hanna

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

Dies ist ein Youtube-Video. Wenn Sie das Video abspielen, kann Youtube Sie tracken.
How to Use Flash Fill in Microsoft Excel Tutorial

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.

inferui.com

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.

Siehst du, ich sags ja: Du verlierst deinen Job, so wie er jetzt ist.

Hanna

Bisch e Luschtigi.

Thomas

Nein, aber jetzt mal ernst. Was hältst du von solchen Anwendungen wie dem automatisierten Design von InferUI?

Hanna

Das erinnert mich an The Grid – einen Service, der behauptet, ganze Webseiten automatisch von einer künstlichen Intelligenz gestalten zu lassen. Um die gab es ein riesiges Tamtam vor einem Jahr. Aber vielleicht war das auch alles nur gutes Marketing.

Thomas

Mmmh, kann sein, ich kann das nicht wirklich beurteilen. Ein Schuss Marketing ist heute in der Computerbranche ja immer dabei, auch bei Martin Vechev. Ideen wollen schliesslich verkauft werden. Aber: Ist es denn realistisch, was The Grid da behauptet?

Hanna

Die Frage ist halt, wie viel da tatsächlich künstliche Intelligenz ist. Website-Builder gibt es schon lange, also Werkzeuge, die Personen helfen, Webseiten zu kreieren, ohne selbst programmieren zu müssen. Bei InferUI ist jedenfalls klar: Das ist nur ein kleiner Teil von dem, was es wirklich bräuchte für die Software-Synthese.

Thomas

Das ist also aus deiner Sicht alles noch nicht so berauschend mit der Software-Synthese heute, wenn ich das richtig verstehe?

Hanna

Exakt.

Thomas

Dann muss ich mir noch keine allzu grossen Sorgen machen, dass superintelligente Supermaschinen die Weltherrschaft übernehmen könnten. Oder? Denn eine Maschine, die sich nicht selbst programmieren kann, kann ja wohl nicht superintelligent sein …

Hanna

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.

Aber selbst dann haben wir noch nicht automatisch eine generelle künstliche Intelligenz.

Thomas

Sondern? Was fehlt noch?

Hanna

Auch wenn ein System den Kontext versteht und sich daran anpasst, ist es begrenzt: Es kann jeweils nur die Aufgaben lösen, für die es gebaut und trainiert wurde.

Thomas

Und wenn es eben für Software-Synthese gebaut wurde? Und wenn es selber ganz neue Maschinen entwickeln könnte, die wir noch gar nicht kennen?

Hanna

Das wäre krass. Aber selbst dann: Wie wüsste die Maschine, was sie machen soll. Oder: Was sie machen will? Hat sie eigene Ziele oder bleibt sie eine Sklavin? Das wäre dann entscheidend.

Thomas

Okay, da gleitet die Diskussion jetzt ins Philosophische ab. Lass uns mal Schluss machen hier.

Hanna

Gut. Aber etwas will ich noch sagen: Solange wir Menschen definieren, was sinnvoll und erstrebenswert ist, sind wir der Maschine immer einen Schritt voraus.

Thomas

Dies ist ein Youtube-Video. Wenn Sie das Video abspielen, kann Youtube Sie tracken.
Alexa randomly laughing compilation

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.

Serie «Talk to the Machine»

Sie lesen: Teil III

Pro­gram­mier dich doch selbst!