Engineering Philosophy: Yukihiro Matsumoto, Designed for Humans

Yukihiro Matsumoto, creator of Ruby, photographed by Christopher Adams in 2018

Key Takeaways

  • Design for humans, not machines. Matz made the programmer’s joy the objective function and let the silicon pick up the tab. Every syntactic choice answers “how will a person feel reading this?” before “how fast will the bytes move?”
  • Least surprise means least my surprise. The principle is not a poll of beginner expectations; it is one fluent author minimizing his own frustration, measured after you learn Ruby well.
  • MINASWAN: culture is a design output. “Matz is nice and so we are nice” shows that a language’s community is a surface you can design, not just an accident downstream of its grammar.
  • Ruby is one taste applied relentlessly. Its coherence comes from synthesis – Perl, Smalltalk, Lisp, Ada, Eiffel harmonized into a single voice rather than a committee’s average.

The Principle

“For me the purpose of life is partly to have joy. Programmers often feel joy when they can concentrate on the creative side of programming, so Ruby is designed to make programmers happy.” – Yukihiro Matsumoto1

Most language design optimizes for the machine. Compilation speed, memory layout, instruction count, the things the silicon cares about. Matz inverted the priority. He decided that the human at the keyboard was the constituency that mattered, and that the machine’s job was to serve them. “Machines should serve human beings,” he said. “Often programmers serve machines unconsciously. Let machines serve you.”2

Joy here is a hard design constraint, not a soft sentiment dressed up as engineering. If the human’s joy is the objective function, then every syntactic choice, every method name, every default becomes a question about how a person will feel reading and writing the code rather than how fast the bytes will move. Matz made the tradeoff explicit and honest: Ruby would spend the machine’s cycles to buy the programmer’s comfort. The same conviction makes taste a structural system rather than a decoration – the experience of the person doing the work becomes the load-bearing concern instead of an afterthought applied at the end.

One decision governs everything that follows: design for humans, not machines. The syntax, the culture, the community motto all sit downstream of it. The rest of this piece traces how a single person’s pursuit of his own happiness hardened into a defensible engineering position – and why “serve the human” turns out to be as rigorous as “serve the machine,” not a retreat from it.

Context

Yukihiro Matsumoto was born in Osaka Prefecture, Japan, on 14 April 1965, and raised in Tottori from the age of four.3 He describes himself as a language geek – not a linguist, a programming-language geek. He was a self-taught programmer through the end of high school, and he graduated with an information science degree from the University of Tsukuba, where he worked in a research lab focused on programming languages and compilers.3 The fascination came first; Ruby was its eventual output.

He named Ruby in February 1993 – the name surfaced in an online chat with his colleague Keiju Ishitsuka, before any code had been written – and built it out over the following years.13 The motivation was dissatisfaction. “I really wanted a genuine object-oriented, easy-to-use scripting language,” he explained. “I looked for one, but couldn’t find one.”4 Perl was powerful but, to his taste, not truly object-oriented. Python was object-oriented but, to his taste, not pleasant enough. So he built the language he wanted to use himself. He released the first public version on 21 December 1995.3

The name was a small joke. The two settled on Ruby as a gemstone, a nod to Perl, the language Ruby was partly answering. A pearl, then a ruby: a successor named like an incremental upgrade.4 For years Ruby was a primarily Japanese phenomenon, its mailing lists and documentation in Japanese. The global breakout came later and from outside: David Heinemeier Hansson built Ruby on Rails on top of it, and Rails carried Ruby to the rest of the world in the mid-2000s.4 The language a single person built for his own happiness became the substrate of a generation’s web applications.

The Work

Ruby’s Design: Joy and the Principle of Least Surprise

Matz delivering the keynote at EuRuKo 2011, photographed by Mathias Meyer

The most-quoted idea about Ruby is the “principle of least surprise” – the language should behave the way you’d expect, so you spend your attention on the problem and not on the tool. Matz endorses the principle but corrects a common misreading of it. “The principle of least surprise means principle of least my surprise,” he said. “And it means the principle of least surprise after you learn Ruby very well.”5

That correction is the whole philosophy in one sentence. He did not poll programmers and average their expectations. He designed the language to minimize his frustration, on the bet that a language that delighted its own author – a fluent, demanding user – would delight others once they reached fluency. “I wanted to minimize my frustration during programming, so I want to minimize my effort in programming,” he said. “I want to have fun in programming myself.”5 Ruby is a personal language that scaled. Its consistency is not the consistency of a committee; it is the consistency of one taste applied relentlessly.

Designing for Humans, Not Machines

Matz treats software as a medium for people, not a set of instructions for hardware. “Don’t underestimate the human factor,” he said. “Even though we are in front of computers, they are media. We are working for human, with human. Most of our tasks are related to humans after all.”5 He pushes the point past slogan: interface, to Matz, is the entire product. “If your system has a bad interface, no one will use it. So the interface or surface of the system, whether to users or other machines, is very important.”2

The corollary is a refusal to be subservient to the machine’s preferences. Asked about the human-versus-computer relationship, Matz was blunt: “We are the masters. They are the slaves.”6 The machine exists to serve the programmer’s intent, and a language that forces the human to think like a CPU has the relationship backwards. Ruby’s blocks, its everything-is-an-object model, its readable method names – Array#each, Integer#times, String#upcase – all spend implementation complexity so the surface reads like intent.

MINASWAN: Culture as a Design Output

Ruby’s most unusual artifact is not a feature; it is a community norm. Matz has a famously kind, patient demeanor, and that disposition propagated into a motto: MINASWAN – “Matz is nice and so we are nice.”7 In Ruby’s early days, when discussions turned heated on the mailing lists, members of the community countered by invoking it to set a warmer tone. It spread until it became identity.8

The lesson most language designers miss is that the culture is a design surface too. A language is more than its grammar; it is the experience of asking a question and getting a generous answer, of reading a library whose author cared whether you understood it. Matz designed the syntax, and by example he also designed the social posture around it. A language built to make programmers happy grew a community committed to being kind because the same value drove both – the community is the principle of least surprise applied to people.

mruby: The Philosophy in Constrained Space

In April 2012, Matz open-sourced mruby – a lightweight, embeddable implementation of Ruby built to run in places full Ruby is too heavy: microcontrollers, embedded systems, consumer devices.9 It complies with a subset of the ISO/IEC 30170 Ruby specification and ships as a small interpreter with a bytecode compiler and a virtual machine, embeddable into C or C++ the way Lua is.10

mruby is interesting precisely because it tests the philosophy under pressure. When you have kilobytes of RAM and no luxury for cycles, does “design for humans” survive? Matz’s answer was to keep Ruby’s expressiveness while shedding the runtime’s weight – to bring the joy of writing Ruby to the firmware layer rather than forcing embedded developers down to C. The human-centered bet held even in the place most hostile to it.

The Method

Matz’s method is empathy formalized into a design discipline. The recurring move is to ask not “what is correct for the machine?” but “what will the person feel?” – and then to pay whatever implementation cost that answer demands.

The second move is synthesis. Ruby is openly derivative: Perl’s pragmatics and regular expressions, Smalltalk’s pure-object model and message passing, Lisp’s flexibility, pieces of Ada and Eiffel.4 Matz did not invent a new paradigm. He stole the best ideas from languages he admired and harmonized them into one coherent voice. Few designers exercise that taste: the discipline to take rather than invent, and the harder discipline to make the borrowed parts cohere instead of collide. The principle of least surprise is partly internal consistency – once you learn one corner of Ruby, the next behaves the way the first taught you to expect.

The third move is honesty about the tradeoff. Matz never pretended Ruby was the fast choice, and he said so plainly, rather than claiming warmth while quietly optimizing for benchmarks. The cost is real and concrete: because everything in Ruby is an object, even an integer is a first-class object, and arithmetic happens by sending the + message to it rather than executing a raw machine instruction.14 The convenience of 5.times or (1..n).map – treating numbers as objects you can talk to – is paid for in dispatch and allocation overhead that a C int never incurs. Matz chose the legible surface and let the runtime absorb the bill, which is exactly the bet stated plainly.

Influence Chain

Who Shaped Him

Larry Wall and Perl. Ruby inherited Perl’s pragmatic, get-things-done sensibility and its regular-expression DNA. Matz himself framed Ruby as an answer to Perl – keeping the practicality, fixing what he saw as its lack of real object orientation. (Direct influence)4

Smalltalk. The conviction that everything is an object – integers, classes, nil – and that computation happens by sending messages came from Smalltalk. It is the deepest structural inheritance in Ruby’s object model. (Direct influence)4

Lisp, Ada, and Eiffel. Lisp contributed flexibility and the sense that the language should bend to the programmer; Ada and Eiffel contributed other concrete pieces of syntax and design. Ruby is the synthesis. (Formative influences)4

Who He Shaped

The Rails-era web. Ruby on Rails made Ruby the default language of a generation of startups and gave “developer happiness” a commercial argument: happier programmers shipped faster, so the human-centered language won projects on economics, not just on feel.

A generation’s baseline expectation. After Ruby, programmers expected languages to be pleasant – to read like prose, to forgive, to delight. That expectation reshaped what newer languages had to clear to be taken seriously.

Crystal and Elixir. Crystal borrows Ruby’s syntax almost wholesale while compiling to native code through an LLVM backend.11 Elixir, José Valim’s functional language for the BEAM, carries Ruby’s ergonomic sensibility into the concurrent world; Valim cites his “previous background in Ruby” for many of its borrowed constructs.12 Ruby’s aesthetics outlived its runtime. (Stylistic lineage)

The Throughline

Here is the productive tension. Matz optimizes for human happiness and is honest that he spends the machine’s cycles to do it. The other pole of engineering optimizes for the machine – John Carmack counting cycles until the frame fits the budget, Linus Torvalds defending “good taste” as the data structure that makes the special case disappear. Carmack and Torvalds ask what the hardware deserves; Matz asks what the human deserves. Neither pole is wrong. The best systems live in the argument between them – expressive enough that a person enjoys writing them, disciplined enough that the machine isn’t insulted. Matz is the proof that “design for the human” is a legitimate, rigorous engineering position and not merely a comfort. (Series bridge)

What I Take From This

I build developer tooling and AI-agent harnesses, and Matz’s bet is the one I keep making: the human in the loop is the constituency that matters. A coding agent, like a programming language, is an interface between a person’s intent and a machine’s execution. If it surprises you, fights you, or makes you think like the machine instead of about the problem, it has failed – no matter how clever the internals are. The whole point of the internals is to make the experience legible to the person. That is also why I keep the surface honest and the stack thin – the no-build manifesto is the principle of least surprise applied to a toolchain. And like Matz refusing to pretend Ruby was fast, I’d rather be honest about the tradeoff than hide it: quality is the only variable, and programmer happiness is part of quality, not opposed to it.

FAQ

What is Yukihiro Matsumoto’s engineering philosophy?

Matz designs programming languages for human happiness and productivity rather than machine efficiency. His stated purpose: “Ruby is designed to make programmers happy.”1 He treats the programmer’s experience – legibility, joy, least surprise – as the primary design constraint, and accepts a slower runtime as the honest price of serving it. “Machines should serve human beings,” he said. “Let machines serve you.”2

What is the principle of least surprise in Ruby?

It is the idea that the language should behave the way an experienced user expects, minimizing friction. Matz clarifies that it means “the principle of least my surprise” – he designed Ruby to minimize his own frustration as a fluent user, and “the principle of least surprise after you learn Ruby very well,” not surprise for a beginner on day one.5

What does MINASWAN mean?

MINASWAN stands for “Matz is nice and so we are nice” – a motto of the Ruby community that grew from Matsumoto’s kind, patient demeanor. Early Rubyists invoked it to set a generous tone on the mailing lists, and it became part of Ruby’s cultural identity.78 It reflects the idea that a language’s community is itself a design surface.

What languages influenced Ruby?

Ruby is a deliberate synthesis. It drew Perl’s pragmatic sensibility and regular expressions, Smalltalk’s pure-object model and message passing, Lisp’s flexibility, and elements from Ada and Eiffel. Matz combined the features he admired into a single coherent language rather than inventing a new paradigm.4


Sources


  1. Bill Venners, “The Philosophy of Ruby: A Conversation with Yukihiro Matsumoto, Part I.” Artima Developer, 29 September 2003. “For me the purpose of life is partly to have joy… so Ruby is designed to make programmers happy.” 

  2. Bill Venners, “Matz on Craftsmanship: A Conversation with Yukihiro Matsumoto, Part III.” Artima Developer, 2003. “Machines should serve human beings… Let machines serve you.” Also: interface as the surface of the system. 

  3. “Yukihiro Matsumoto.” Wikipedia. Born 14 April 1965 in Osaka Prefecture, raised in Tottori from age four; University of Tsukuba information science; first Ruby release 21 December 1995; mruby (April 2012). 

  4. Sinclair Target, “The Ruby Story.” Two-Bit History, 19 November 2017. Started 1993; “I really wanted a genuine object-oriented, easy-to-use scripting language”; naming with Keiju Ishitsuka after a gemstone / nod to Perl; influences from Perl, Smalltalk, Lisp, Ada, Eiffel; “I hope to see Ruby help every programmer in the world to be productive, and to enjoy programming, and to be happy”; Rails-driven global breakout. 

  5. Bill Venners, “The Philosophy of Ruby, Part I.” Artima Developer, 2003. “The principle of least surprise means principle of least my surprise”; “I wanted to minimize my frustration during programming”; “Don’t underestimate the human factor… We are working for human, with human.” 

  6. “Yukihiro Matsumoto.” Wikiquote, citing The Philosophy of Ruby, A Conversation with Yukihiro Matsumoto, Part I, Bill Venners, Artima Developer, 2003. “We are the masters. They are the slaves.” 

  7. “Yukihiro Matsumoto.” Wikipedia. “Matz’ demeanor has brought about a motto in the Ruby community: ‘Matz is nice and so we are nice,’ commonly abbreviated as MINASWAN.” 

  8. “MINASWAN.” Wiktionary. Initialism of “Matz is nice and so we are nice”; origin and use as a community-tone norm in Ruby’s early days. 

  9. “Mruby.” Wikipedia. mruby open-sourced April 2012 under Matsumoto’s direction; lightweight, embeddable implementation for constrained environments; conforms to a subset of ISO/IEC 30170. 

  10. “mruby – Lightweight Ruby.” mruby.org. Embeddable interpreter, bytecode compiler (mrbc), and virtual machine; embeddable into C/C++ in a manner similar to Lua; ISO/IEC 30170:2012 compliance. 

  11. “Crystal (programming language).” Wikipedia. “With syntax inspired by the language Ruby… it compiles to much more efficient native code using an LLVM backend.” 

  12. José Valim, “Elixir Design Goals.” elixir-lang.org, 8 August 2013. “Given my previous background in Ruby, it is natural that some of the constructs added were borrowed from Ruby.” Also: Elixir runs on the BEAM (Erlang VM), per “Elixir (programming language),” Wikipedia

  13. “Ruby (programming language).” Wikipedia. “The name ‘Ruby’ originated during an online chat session between Matsumoto and Keiju Ishitsuka on 24 February 1993, before any code had been written for the language.” 

  14. “class Integer.” Ruby Core Reference. “An Integer object represents an integer value.” Arithmetic operators such as self + other are documented as public instance methods, meaning integer arithmetic is performed via method dispatch on an object rather than a raw machine instruction. 

Verwandte Beiträge

Engineering Philosophy: Grace Hopper, Make the Computer Speak Human

Grace Hopper built the first compiler so programs could be written in human language, made latency physical with a nanos…

20 Min. Lesezeit

Engineering Philosophy: Barbara Liskov, The Contract Is the Type

Barbara Liskov made data abstraction a programming primitive: a type is the contract it keeps, and a subtype must honor …

20 Min. Lesezeit