Yoshua Bengio, ein Mann mit Prinzipien

Yoshua Bengio ist neben Jeffrey Hinton, Yann LeCun und Andrew Ng einer der Begründer der Deep Learning Revolution, welche die Grundlage des momentanen AI Hypes bildet.

LeCun ist unterdessen bei Facebook, Ng bei Baidu und Hinton bei Google. Alle dem Geld erlegen. Nicht so Bengio. Er liess sich trotz der gebotenen Millionen nicht von der Universität Montreal weglocken. Seine Arbeit wird zwar teilweise von grossen Konzernen (Google, IBM, Samsung) gesponsert, er lässt sich aber nicht in seine Forschung rein quatschen. Bei Einflussnahme durch die Geldgeber werden die Geschäftsbeziehungen sogleich eingestellt. Der Mann ist ein Freigeist und will unabhängig bleiben. Hier seine entwaffnend idealistische Begründung:

That’s who I am, that’s the choice I made that fits with my values, and I don’t need to get the millions, I’m fine. My salary is very good, and I care more about how what I can do could have a positive impact for science, humanity, and for training the next generation [of researchers].

AI: bis später

Yann LeCun, einer der Väter der momentan gefeierten Deep Learning Bewegung, nach dem Sieg von AlphaGo über den Weltmeister Lee Sedol:

Statement from a Slashdot post about the AlphaGo victory: “We know now that we don’t need any big new breakthroughs to get to true AI”

That is completely, utterly, ridiculously wrong.

As I’ve said in previous statements: most of human and animal learning is unsupervised learning. If intelligence was a cake, unsupervised learning would be the cake, supervised learning would be the icing on the cake, and reinforcement learning would be the cherry on the cake. We know how to make the icing and the cherry, but we don’t know how to make the cake.

We need to solve the unsupervised learning problem before we can even think of getting to true AI. And that’s just an obstacle we know about. What about all the ones we don’t know about?

Aufgepasst, er spricht von “true AI”, d.h. allgemeiner Intelligenz (z.B. verstehen, dass es draussen regnet).

Es wird also noch ein bisschen dauern, bis die Maschinen vollständig übernehmen, aber für den Taxifahrer und manchen anderen wird es bereits vorher kritisch.

Thompson

Vor zwei Tagen beschrieb ich die fundamentale Wichtigkeit der Einfachheit in der Informatik und berichtete, dass die Programmiersprache C++ diesem Ideal leider in  keiner Art gerecht wird. Heute nun las ich ein Interview mit Ken Thompson (Miterfinder von UNIX, einer der feinsten Programmierer aller Zeiten), der auf C++ angesprochen folgende Aussage macht:

It certainly has its good points. But by and large I think it’s a bad language. It does a lot of things half well and it’s just a garbage heap of ideas that are mutually exclusive. Everybody I know, whether it’s personal or corporate, selects a subset and these subsets are different. So it’s not a good language to transport an algorithm—to say, “I wrote it; here, take it.” It’s way too big, way too complex. And it’s obviously built by a committee. Stroustrup campaigned for years and years and years, way beyond any sort of technical contributions he made to the language, to get it adopted and used. And he sort of ran all the standards committees with a whip and a chair. And he said “no” to no one. He put every feature in that language that ever existed. It wasn’t cleanly designed—it was just the union of everything that came along. And I think it suffered drastically from that.

Stammt aus dem Buch Coders at Work und es ist bestimmt illegal, dies hier abzudrucken, aber ich warte mal ab, was geschieht.

Ganz abgesehen davon stimme ich Thompson zu. Zugegeben, nicht sehr mutig, auf den Schultern eines Riesen stehend Steine zu schmeissen. Aber ich nehme alles mit.

 

Von der Einfachheit

Praktisch jeden Tag meines Arbeitslebens schreibe ich Code in der Programmiersprache C++. Jeder, der C++ kennt, weiss, dass es sich hierbei um eine überaus umfangreiche und komplexe Sprache handelt. Deshalb habe ich mir für die tägliche Arbeit eine Teilmenge von C++ zusammengesucht, die ich verstehe und die andere verstehen werden, wenn sie meinen Code lesen (zwei wichtige Attribute von Source Code sind Einfachheit und Lesbarkeit).

Der Vorgänger von C++ (die Programmiersprache C) war viel simpler. Eine imperative Sprache, nicht objekt-orientiert (OO), nicht raffiniert, eher Punk, aber unter uns gesagt: Einfachheit schlägt OO. Dies ist wahrscheinlich der Grund, weshalb ich mich, je länger ich mit C++ arbeite, immer stärker zu C hingezogen fühle. Ich vermisse ganz offensichtlich die Einfachheit der vergangenen Zeiten (ähnlich sprach mein Grossvater – vielleicht werde ich langsam alt).

Jetzt Richtungswechsel.

C.A.R “Tony” Hoare ist einer der bedeutendsten Computerwissenschaftler aller Zeiten. Nicht nur erfand er den quicksort Algorithmus, er entdeckte auch profunde Konzepte wie die communicating sequential processes, die dank Googles (neuer) Programmiersprache Go hoffentlich Eingang in den Informatik-Mainstream finden werden.

Es ist immer wieder interessant, alte Informatik Papers aus den 70ern und 80ern zu lesen, als die Informatiker meist noch Mathematiker waren und unablässig an den Grundlagen der Computerwissenschaften gewerkelt haben. Manche dieser Papers sind geradezu visionär. Man merkt irgendwie, dass die Leute damals Zeit zum Nachdenken hatten und nicht von Konferenz zu Konferenz hetzten.

Letzte Woche stolperte ich über ein Dokument von besagtem Tony Hoare, das den Titel Everything you’ve wanted to know about programming languages but have been afraid to ask trägt. Ein höchst zugängliches (nicht-technisches) Dokument aus dem Jahr 1978. Das ganze ist im Frage-Antwort Stil verfasst.

Schon lange umtrieb mich die beunruhigende Beobachtung, dass Programmierer (und insbesondere C++ Programmierer) von der Sprache ihrer Wahl geradezu besessen sind, Religionskriege nichts dagegen. Ich hegte denselben Verdacht, den Hoare bereits 1978 zu Papier brachte (notabene bevor C++ erfunden wurde).

Why do programmers get so attached to the programming language they currently use?

[…] But there is another, more disturbing reason for the intense partisanship of a programmer – that his existing programming language has presented so many problems, complexities, and unexpected traps that he spent a long time learning how to master it. The prospect of a new language presents a severe threat – it might take even longer to learn to use it properly than the old one. But perhaps an even worse threat is that is might actually be easier to learn and use effectively, since that would wholly devalue the programmer’s hard-won professional expertise in his earlier language and its implementation. In this way, a complex programming language can drive out a simple one.

Ich denke, dass es diese mit Blut und Tränen erkämpfte Expertise ist, die C++ Programmierer mit Händen und Füssen verteidigen. Wahrscheinlich kann man einfacher von simplen Programmiersprachen ablassen. Könnte aber auch ein typischer Nerd-Charakterzug sein (Obsessionen etc.). Ich hoffe, dass in den kommenden Jahren simplere Sprachen wie Go oder Clojure im Mainstream Fuss fassen werden und wir auf C++ zurückblicken werden mit ein wenig Wehmut, aber noch viel mehr Erleichterung.

Prolog

Ein begeisternder und ehrlicher (not all sunshine and rainbows) Vortrag über eine faszinierende Programmiersprache: Prolog.

Der Mann mit dem Moustache heisst Michael Hendricks und scheint ein offener Geist zu sein. Die Präsentation hat er nicht in Powerpoint, Keynote oder Prezi geschrieben, sondern in … Prolog.

 

Schönheit

Es gibt dieses berühmte Zitat von G.E. Hardy:

Beauty is the first test: there is no permanent place in the world for ugly mathematics.

Daran denke ich, wenn ich (allzu oft) Code schreibe oder lese. Es gibt ganz einfach zu viel hässlichen Code. Und mit hässlichem Code meine ich: komplexen, gewundenen, schwer verständlichen Code. Deshalb bin ich dazu übergegangen, an Code so lange rumzuwerkeln, bis er eine elementare Schönheit erreicht hat. Das dauert zwar, aber es lohnt sich.

Aber es gibt Hoffnung: funktionale Programmiersprachen. McCarthy, Backus et al. haben uns den Weg aufgezeigt, 50 Jahre ist es her. Was haben wir daraus gelernt? Nicht viel, leider. Wir haben uns entschieden, ihre genialen Ideen zu ignorieren und stattdessen Sprachen wie C#, C++ und Java zu verwenden. Kaum zu glauben. Ein Trümmerfeld.

Aber Achtung, jetzt der grosse Dijkstra:

Simplicity is prerequisite for reliability.

So viel Wahrheit in bloss fünf Wörtern. Sieht man selten. Aber zurück zu den Schafen: komplexer Code ist schlechter Code. So einfach ist das. Komplexität bringt uns um. Immer und immer wieder.

Man kann auch sagen:

Einfachheit ist die Axt für den komplexen Code, den wir schreiben.

Apropos Kafka:

Wege entstehen dadurch, dass man sie geht.