Engineering-Philosophie: Yukihiro Matsumoto (Matz)

Die wichtigsten Erkenntnisse
- Gestalten Sie für Menschen, nicht für Maschinen. Matz machte die Freude der Programmierer zur Zielfunktion und ließ das Silizium die Rechnung begleichen. Jede syntaktische Entscheidung beantwortet zuerst „Wie wird sich ein Mensch beim Lesen fühlen?” und erst danach „Wie schnell bewegen sich die Bytes?”.
- Geringstes Erstaunen heißt geringstes Erstaunen für mich. Das Prinzip ist keine Umfrage unter den Erwartungen von Anfängern; es ist ein einzelner versierter Autor, der seinen eigenen Frust minimiert – gemessen nachdem man Ruby gut beherrscht.
- MINASWAN: Kultur ist ein Gestaltungsergebnis. „Matz is nice and so we are nice” zeigt, dass die Gemeinschaft einer Sprache eine Oberfläche ist, die man gestalten kann, und nicht bloß ein Zufall, der sich aus ihrer Grammatik ergibt.
- Ruby ist ein einziger Geschmack, unermüdlich angewandt. Seine Stimmigkeit entspringt der Synthese – Perl, Smalltalk, Lisp, Ada und Eiffel zu einer einzigen Stimme verschmolzen statt zum Durchschnitt eines Gremiums.
Das Prinzip
„Für mich besteht der Sinn des Lebens zum Teil darin, Freude zu empfinden. Programmierer empfinden oft Freude, wenn sie sich auf die kreative Seite des Programmierens konzentrieren können, deshalb ist Ruby so gestaltet, dass es Programmierer glücklich macht.” – Yukihiro Matsumoto1
Die meisten Sprachentwürfe optimieren für die Maschine: Kompiliergeschwindigkeit, Speicheranordnung, Befehlsanzahl – all das, was dem Silizium am Herzen liegt. Matz kehrte die Prioritäten um. Er entschied, dass der Mensch an der Tastatur die maßgebliche Bezugsgröße ist und dass es Aufgabe der Maschine sei, ihm zu dienen. „Maschinen sollten dem Menschen dienen”, sagte er. „Oft dienen Programmierer unbewusst den Maschinen. Lassen Sie die Maschinen Ihnen dienen.”2
Freude ist hier eine harte Entwurfsbeschränkung, kein weiches Gefühl im Gewand der Ingenieurskunst. Wenn die Freude des Menschen die Zielfunktion ist, dann wird jede syntaktische Entscheidung, jeder Methodenname, jede Voreinstellung zu einer Frage danach, wie sich ein Mensch beim Lesen und Schreiben des Codes fühlt, und nicht danach, wie schnell die Bytes sich bewegen. Matz machte den Kompromiss ausdrücklich und ehrlich: Ruby würde die Zyklen der Maschine ausgeben, um die Bequemlichkeit der Programmierer zu erkaufen. Dieselbe Überzeugung macht Geschmack zu einem strukturellen System statt zu einer Verzierung – die Erfahrung der Person, die die Arbeit verrichtet, wird zum tragenden Anliegen statt zu einem nachträglichen Zusatz.
Eine einzige Entscheidung beherrscht alles Weitere: Gestalten Sie für Menschen, nicht für Maschinen. Die Syntax, die Kultur, das Motto der Gemeinschaft – sie alle liegen ihr nachgelagert. Der Rest dieses Textes zeichnet nach, wie das Streben eines einzelnen Menschen nach seinem eigenen Glück zu einer haltbaren ingenieurtechnischen Position erstarrte – und warum sich „dem Menschen dienen” als ebenso streng erweist wie „der Maschine dienen” und nicht als Rückzug davon.
Der Kontext
Yukihiro Matsumoto wurde am 14. April 1965 in der Präfektur Osaka, Japan, geboren und ab dem vierten Lebensjahr in Tottori großgezogen.3 Er bezeichnet sich selbst als Sprach-Nerd – kein Linguist, sondern ein Programmiersprachen-Nerd. Bis zum Ende der Schulzeit war er ein autodidaktischer Programmierer, und er schloss sein Studium der Informatik an der Universität Tsukuba ab, wo er in einem Forschungslabor mit Schwerpunkt auf Programmiersprachen und Compilern arbeitete.3 Die Faszination kam zuerst; Ruby war ihr schließliches Ergebnis.
Im Februar 1993 gab er Ruby seinen Namen – der Name tauchte in einem Online-Chat mit seinem Kollegen Keiju Ishitsuka auf, bevor auch nur eine Zeile Code geschrieben war – und baute es über die folgenden Jahre aus.13 Der Beweggrund war Unzufriedenheit. „Ich wollte unbedingt eine echte objektorientierte, leicht zu benutzende Skriptsprache”, erklärte er. „Ich habe danach gesucht, aber keine gefunden.”4 Perl war mächtig, aber für seinen Geschmack nicht wirklich objektorientiert. Python war objektorientiert, aber für seinen Geschmack nicht angenehm genug. Also baute er die Sprache, die er selbst benutzen wollte. Die erste öffentliche Version veröffentlichte er am 21. Dezember 1995.3
Der Name war ein kleiner Scherz. Die beiden einigten sich auf Ruby als Edelstein, eine Anspielung auf Perl, jene Sprache, auf die Ruby zum Teil antwortete. Erst eine Perle (pearl), dann ein Rubin (ruby): ein Nachfolger, benannt wie ein inkrementelles Upgrade.4 Jahrelang war Ruby vorwiegend ein japanisches Phänomen, dessen Mailinglisten und Dokumentation auf Japanisch waren. Der weltweite Durchbruch kam später und von außen: David Heinemeier Hansson baute Ruby on Rails darauf auf, und Rails trug Ruby Mitte der 2000er-Jahre in den Rest der Welt.4 Die Sprache, die ein einzelner Mensch für sein eigenes Glück gebaut hatte, wurde zum Fundament der Web-Anwendungen einer ganzen Generation.
Das Werk
Rubys Entwurf: Freude und das Prinzip des geringsten Erstaunens

Die meistzitierte Idee zu Ruby ist das „Prinzip des geringsten Erstaunens” – die Sprache solle sich so verhalten, wie man es erwartet, damit man seine Aufmerksamkeit auf das Problem richtet und nicht auf das Werkzeug. Matz befürwortet das Prinzip, korrigiert aber eine verbreitete Fehldeutung. „Das Prinzip des geringsten Erstaunens bedeutet das Prinzip des geringsten Erstaunens für mich”, sagte er. „Und es meint das Prinzip des geringsten Erstaunens, nachdem man Ruby sehr gut gelernt hat.”5
Diese Korrektur ist die ganze Philosophie in einem einzigen Satz. Er befragte nicht die Programmierer und bildete den Durchschnitt ihrer Erwartungen. Er gestaltete die Sprache so, dass sie seinen Frust minimierte – in der Wette, dass eine Sprache, die ihren eigenen Autor erfreut – einen versierten, anspruchsvollen Nutzer –, auch andere erfreuen würde, sobald sie die Geläufigkeit erreichen. „Ich wollte meinen Frust beim Programmieren minimieren, also möchte ich meinen Aufwand beim Programmieren minimieren”, sagte er. „Ich möchte selbst Spaß am Programmieren haben.”5 Ruby ist eine persönliche Sprache, die in die Breite ging. Ihre Konsistenz ist nicht die Konsistenz eines Gremiums; es ist die Konsistenz eines einzigen, unermüdlich angewandten Geschmacks.
Für Menschen gestalten, nicht für Maschinen
Matz behandelt Software als ein Medium für Menschen, nicht als eine Reihe von Anweisungen für Hardware. „Unterschätzen Sie den menschlichen Faktor nicht”, sagte er. „Auch wenn wir vor Computern sitzen, sind sie Medien. Wir arbeiten für Menschen, mit Menschen. Letztlich haben die meisten unserer Aufgaben mit Menschen zu tun.”5 Er treibt diesen Punkt über die Parole hinaus: Für Matz ist die Schnittstelle das gesamte Produkt. „Wenn Ihr System eine schlechte Schnittstelle hat, wird es niemand benutzen. Daher ist die Schnittstelle oder Oberfläche des Systems – ob gegenüber Nutzern oder anderen Maschinen – sehr wichtig.”2
Die Folgerung daraus ist eine Weigerung, sich den Vorlieben der Maschine unterzuordnen. Nach dem Verhältnis zwischen Mensch und Computer befragt, antwortete Matz unverblümt: „Wir sind die Herren. Sie sind die Diener.”6 Die Maschine ist dazu da, der Absicht der Programmierer zu dienen, und eine Sprache, die den Menschen zwingt, wie eine CPU zu denken, stellt das Verhältnis auf den Kopf. Rubys Blöcke, sein Modell, in dem alles ein Objekt ist, seine lesbaren Methodennamen – Array#each, Integer#times, String#upcase – geben allesamt Implementierungskomplexität aus, damit sich die Oberfläche wie eine Absicht liest.
MINASWAN: Kultur als Gestaltungsergebnis
Rubys ungewöhnlichstes Artefakt ist kein Merkmal; es ist eine Norm der Gemeinschaft. Matz hat ein bekanntermaßen freundliches, geduldiges Auftreten, und diese Veranlagung pflanzte sich in ein Motto fort: MINASWAN – „Matz is nice and so we are nice.”7 In Rubys Anfangstagen, wenn die Diskussionen auf den Mailinglisten hitzig wurden, beriefen sich Mitglieder der Gemeinschaft darauf, um einen wärmeren Ton anzuschlagen. Es verbreitete sich, bis es zur Identität wurde.8
Die Lehre, die den meisten Sprachgestaltern entgeht, ist, dass auch die Kultur eine Gestaltungsoberfläche ist. Eine Sprache ist mehr als ihre Grammatik; sie ist die Erfahrung, eine Frage zu stellen und eine großzügige Antwort zu erhalten, eine Bibliothek zu lesen, deren Autor sich darum sorgte, ob man sie versteht. Matz gestaltete die Syntax, und durch sein Beispiel gestaltete er auch die soziale Haltung um sie herum. Eine Sprache, die gebaut wurde, um Programmierer glücklich zu machen, brachte eine Gemeinschaft hervor, die der Freundlichkeit verpflichtet war, weil derselbe Wert beides antrieb – die Gemeinschaft ist das Prinzip des geringsten Erstaunens, auf Menschen angewandt.
mruby: Die Philosophie im beengten Raum
Im April 2012 veröffentlichte Matz mruby als Open Source – eine leichtgewichtige, einbettbare Implementierung von Ruby, gebaut, um an Orten zu laufen, an denen das vollständige Ruby zu schwer ist: Mikrocontroller, eingebettete Systeme, Endgeräte für Verbraucher.9 Es entspricht einer Teilmenge der Ruby-Spezifikation ISO/IEC 30170 und wird als kleiner Interpreter mit einem Bytecode-Compiler und einer virtuellen Maschine ausgeliefert, einbettbar in C oder C++, so wie es Lua ist.10
mruby ist gerade deshalb interessant, weil es die Philosophie unter Druck prüft. Wenn man nur Kilobytes an RAM hat und sich keinen Luxus an Zyklen leisten kann, überlebt dann „für Menschen gestalten”? Matz’ Antwort war, Rubys Ausdruckskraft zu bewahren und zugleich das Gewicht der Laufzeit abzuwerfen – die Freude am Schreiben von Ruby auf die Firmware-Ebene zu bringen, statt eingebettete Entwickler hinunter zu C zu zwingen. Die auf den Menschen ausgerichtete Wette ging selbst an dem Ort auf, der ihr am feindlichsten gesinnt ist.
Die Methode
Matz’ Methode ist Empathie, formalisiert zu einer Entwurfsdisziplin. Der wiederkehrende Schritt besteht darin, nicht zu fragen „Was ist für die Maschine richtig?”, sondern „Was wird der Mensch empfinden?” – und dann jeden Implementierungspreis zu zahlen, den diese Antwort verlangt.
Der zweite Schritt ist die Synthese. Ruby ist offen abgeleitet: Perls Pragmatik und reguläre Ausdrücke, Smalltalks reines Objektmodell und seine Nachrichtenübermittlung, Lisps Flexibilität, Teile von Ada und Eiffel.4 Matz erfand kein neues Paradigma. Er stahl die besten Ideen aus Sprachen, die er bewunderte, und brachte sie zu einer einzigen, stimmigen Stimme in Einklang. Wenige Gestalter üben diesen Geschmack aus: die Disziplin, zu nehmen statt zu erfinden, und die schwierigere Disziplin, die entliehenen Teile zusammenklingen statt zusammenstoßen zu lassen. Das Prinzip des geringsten Erstaunens ist zum Teil eine innere Konsistenz – hat man erst eine Ecke von Ruby gelernt, verhält sich die nächste so, wie die erste es einen zu erwarten lehrte.
Der dritte Schritt ist Ehrlichkeit über den Kompromiss. Matz gab nie vor, Ruby sei die schnelle Wahl, und er sagte es klar heraus, statt Wärme zu behaupten und im Stillen für Benchmarks zu optimieren. Der Preis ist real und konkret: Weil in Ruby alles ein Objekt ist, ist sogar eine Ganzzahl ein erstklassiges Objekt, und Arithmetik geschieht, indem man ihr die Nachricht + schickt, statt einen rohen Maschinenbefehl auszuführen.14 Die Bequemlichkeit von 5.times oder (1..n).map – Zahlen als Objekte zu behandeln, mit denen man sprechen kann – wird mit einem Mehraufwand an Dispatch und Allokation bezahlt, den ein C-int niemals verursacht. Matz wählte die lesbare Oberfläche und ließ die Laufzeit die Rechnung übernehmen – genau das ist die klar ausgesprochene Wette.
Die Wirkungskette
Wer ihn prägte
Larry Wall und Perl. Ruby erbte Perls pragmatische, ergebnisorientierte Gesinnung und seine DNA der regulären Ausdrücke. Matz selbst rahmte Ruby als Antwort auf Perl – die Praxistauglichkeit beibehaltend und das behebend, worin er einen Mangel an echter Objektorientierung sah. (Direkter Einfluss)4
Smalltalk. Die Überzeugung, dass alles ein Objekt ist – Ganzzahlen, Klassen, nil – und dass Berechnung durch das Senden von Nachrichten geschieht, kam von Smalltalk. Es ist das tiefste strukturelle Erbe in Rubys Objektmodell. (Direkter Einfluss)4
Lisp, Ada und Eiffel. Lisp steuerte Flexibilität bei und das Gespür dafür, dass sich die Sprache dem Programmierer beugen sollte; Ada und Eiffel steuerten weitere konkrete Teile von Syntax und Entwurf bei. Ruby ist die Synthese. (Prägende Einflüsse)4
Wen er prägte
Das Web der Rails-Ära. Ruby on Rails machte Ruby zur Standardsprache einer Generation von Start-ups und verlieh dem „Glück der Entwickler” ein wirtschaftliches Argument: Glücklichere Programmierer lieferten schneller, sodass die auf den Menschen ausgerichtete Sprache Projekte über die Wirtschaftlichkeit gewann, nicht nur über das Gefühl.
Die Grunderwartung einer Generation. Nach Ruby erwarteten Programmierer, dass Sprachen angenehm seien – sich wie Prosa lesen, nachsichtig sein, erfreuen. Diese Erwartung formte neu, was neuere Sprachen überwinden mussten, um ernst genommen zu werden.
Crystal und Elixir. Crystal entleiht Rubys Syntax fast vollständig, während es über ein LLVM-Backend zu nativem Code kompiliert.11 Elixir, José Valims funktionale Sprache für die BEAM, trägt Rubys ergonomische Gesinnung in die nebenläufige Welt; Valim führt für viele seiner entliehenen Konstrukte seinen „früheren Hintergrund in Ruby” an.12 Rubys Ästhetik überlebte seine Laufzeit. (Stilistische Abstammung)
Der rote Faden
Hier liegt die fruchtbare Spannung. Matz optimiert für das Glück des Menschen und ist ehrlich darüber, dass er dafür die Zyklen der Maschine ausgibt. Der andere Pol der Ingenieurskunst optimiert für die Maschine – John Carmack zählt Zyklen, bis das Bild ins Budget passt, Linus Torvalds verteidigt „guten Geschmack” als die Datenstruktur, die den Sonderfall verschwinden lässt. Carmack und Torvalds fragen, was die Hardware verdient; Matz fragt, was der Mensch verdient. Keiner der Pole liegt falsch. Die besten Systeme leben im Streit zwischen ihnen – ausdrucksstark genug, dass ein Mensch sie gern schreibt, und diszipliniert genug, dass die Maschine nicht beleidigt wird. Matz ist der Beweis, dass „für den Menschen gestalten” eine legitime, strenge ingenieurtechnische Position ist und nicht bloß ein Trost. (Brücke der Reihe)
Was ich daraus mitnehme
Ich baue Entwicklerwerkzeuge und Gerüste für KI-Agenten, und Matz’ Wette ist diejenige, die ich immer wieder eingehe: Der Mensch in der Schleife ist die maßgebliche Bezugsgröße. Ein Coding-Agent ist, wie eine Programmiersprache, eine Schnittstelle zwischen der Absicht eines Menschen und der Ausführung einer Maschine. Wenn er Sie überrascht, sich Ihnen widersetzt oder Sie zwingt, wie die Maschine statt über das Problem zu denken, dann ist er gescheitert – wie raffiniert das Innenleben auch sein mag. Der ganze Sinn des Innenlebens besteht darin, die Erfahrung für den Menschen lesbar zu machen. Das ist auch der Grund, warum ich die Oberfläche ehrlich und den Technikstapel dünn halte – das No-Build-Manifest ist das Prinzip des geringsten Erstaunens, angewandt auf eine Werkzeugkette. Und so wie Matz sich weigerte, vorzugeben, Ruby sei schnell, bin ich lieber ehrlich über den Kompromiss, als ihn zu verbergen: Qualität ist die einzige Variable, und das Glück der Programmierer ist ein Teil der Qualität, nicht ihr Gegenpol.
Häufig gestellte Fragen
Was ist die ingenieurtechnische Philosophie von Yukihiro Matsumoto?
Matz gestaltet Programmiersprachen für das Glück und die Produktivität des Menschen statt für die Effizienz der Maschine. Sein erklärter Zweck: „Ruby ist so gestaltet, dass es Programmierer glücklich macht.”1 Er behandelt die Erfahrung der Programmierer – Lesbarkeit, Freude, geringstes Erstaunen – als die primäre Entwurfsbeschränkung und nimmt eine langsamere Laufzeit als den ehrlichen Preis dafür in Kauf. „Maschinen sollten dem Menschen dienen”, sagte er. „Lassen Sie die Maschinen Ihnen dienen.”2
Was ist das Prinzip des geringsten Erstaunens in Ruby?
Es ist der Gedanke, dass sich die Sprache so verhalten sollte, wie es ein erfahrener Nutzer erwartet, um Reibung zu minimieren. Matz stellt klar, dass es „das Prinzip des geringsten Erstaunens für mich” meint – er gestaltete Ruby so, dass es seinen eigenen Frust als versierter Nutzer minimiert, und „das Prinzip des geringsten Erstaunens, nachdem man Ruby sehr gut gelernt hat”, nicht das Erstaunen eines Anfängers am ersten Tag.5
Was bedeutet MINASWAN?
MINASWAN steht für „Matz is nice and so we are nice” – ein Motto der Ruby-Gemeinschaft, das aus Matsumotos freundlichem, geduldigem Auftreten erwuchs. Frühe Rubyisten beriefen sich darauf, um auf den Mailinglisten einen großzügigen Ton anzuschlagen, und es wurde Teil von Rubys kultureller Identität.78 Es spiegelt den Gedanken wider, dass die Gemeinschaft einer Sprache selbst eine Gestaltungsoberfläche ist.
Welche Sprachen beeinflussten Ruby?
Ruby ist eine bewusste Synthese. Es zog Perls pragmatische Gesinnung und reguläre Ausdrücke heran, Smalltalks reines Objektmodell und seine Nachrichtenübermittlung, Lisps Flexibilität sowie Elemente aus Ada und Eiffel. Matz vereinte die Merkmale, die er bewunderte, zu einer einzigen, stimmigen Sprache, statt ein neues Paradigma zu erfinden.4
Quellen
-
Bill Venners, “The Philosophy of Ruby: A Conversation with Yukihiro Matsumoto, Part I.” Artima Developer, 29. September 2003. „Für mich besteht der Sinn des Lebens zum Teil darin, Freude zu empfinden … deshalb ist Ruby so gestaltet, dass es Programmierer glücklich macht.” ↩↩
-
Bill Venners, “Matz on Craftsmanship: A Conversation with Yukihiro Matsumoto, Part III.” Artima Developer, 2003. „Maschinen sollten dem Menschen dienen … Lassen Sie die Maschinen Ihnen dienen.” Außerdem: die Schnittstelle als Oberfläche des Systems. ↩↩↩
-
“Yukihiro Matsumoto.” Wikipedia. Geboren am 14. April 1965 in der Präfektur Osaka, ab dem vierten Lebensjahr in Tottori aufgewachsen; Informatik an der Universität Tsukuba; erste Ruby-Veröffentlichung am 21. Dezember 1995; mruby (April 2012). ↩↩↩
-
Sinclair Target, “The Ruby Story.” Two-Bit History, 19. November 2017. Begonnen 1993; „Ich wollte unbedingt eine echte objektorientierte, leicht zu benutzende Skriptsprache”; Benennung mit Keiju Ishitsuka nach einem Edelstein / als Anspielung auf Perl; Einflüsse von Perl, Smalltalk, Lisp, Ada, Eiffel; „Ich hoffe, dass Ruby jedem Programmierer auf der Welt hilft, produktiv zu sein, am Programmieren Freude zu haben und glücklich zu sein”; durch Rails getriebener weltweiter Durchbruch. ↩↩↩↩↩↩↩↩
-
Bill Venners, “The Philosophy of Ruby, Part I.” Artima Developer, 2003. „Das Prinzip des geringsten Erstaunens bedeutet das Prinzip des geringsten Erstaunens für mich”; „Ich wollte meinen Frust beim Programmieren minimieren”; „Unterschätzen Sie den menschlichen Faktor nicht … Wir arbeiten für Menschen, mit Menschen.” ↩↩↩↩
-
“Yukihiro Matsumoto.” Wikiquote, zitiert The Philosophy of Ruby, A Conversation with Yukihiro Matsumoto, Part I, Bill Venners, Artima Developer, 2003. „Wir sind die Herren. Sie sind die Diener.” ↩
-
“Yukihiro Matsumoto.” Wikipedia. „Matz’ Auftreten hat in der Ruby-Gemeinschaft ein Motto hervorgebracht: ‚Matz is nice and so we are nice‘, gemeinhin abgekürzt als MINASWAN.” ↩↩
-
“MINASWAN.” Wiktionary. Initialwort für „Matz is nice and so we are nice”; Ursprung und Verwendung als Norm für den Ton der Gemeinschaft in Rubys Anfangstagen. ↩↩
-
“Mruby.” Wikipedia. mruby wurde im April 2012 unter Matsumotos Leitung als Open Source veröffentlicht; leichtgewichtige, einbettbare Implementierung für beengte Umgebungen; entspricht einer Teilmenge von ISO/IEC 30170. ↩
-
“mruby – Lightweight Ruby.” mruby.org. Einbettbarer Interpreter, Bytecode-Compiler (mrbc) und virtuelle Maschine; einbettbar in C/C++ auf eine Lua ähnliche Weise; Konformität mit ISO/IEC 30170:2012. ↩
-
“Crystal (programming language).” Wikipedia. „Mit einer von der Sprache Ruby inspirierten Syntax … kompiliert es über ein LLVM-Backend zu weitaus effizienterem nativem Code.” ↩
-
José Valim, “Elixir Design Goals.” elixir-lang.org, 8. August 2013. „Angesichts meines früheren Hintergrunds in Ruby ist es naheliegend, dass einige der hinzugefügten Konstrukte von Ruby entliehen wurden.” Außerdem: Elixir läuft auf der BEAM (Erlang-VM), gemäß “Elixir (programming language),” Wikipedia. ↩
-
“Ruby (programming language).” Wikipedia. „Der Name ‚Ruby‘ entstand während einer Online-Chat-Sitzung zwischen Matsumoto und Keiju Ishitsuka am 24. Februar 1993, bevor irgendein Code für die Sprache geschrieben worden war.” ↩
-
“class Integer.” Ruby Core Reference. „Ein Integer-Objekt repräsentiert einen ganzzahligen Wert.” Arithmetische Operatoren wie
self + othersind als öffentliche Instanzmethoden dokumentiert, was bedeutet, dass Ganzzahlarithmetik über einen Methoden-Dispatch auf einem Objekt erfolgt und nicht über einen rohen Maschinenbefehl. ↩