{"id":1612,"date":"2026-09-18T13:32:45","date_gmt":"2026-09-18T12:32:45","guid":{"rendered":"https:\/\/ruby-doc.org\/learn\/?p=1612"},"modified":"2026-09-11T13:46:00","modified_gmt":"2026-09-11T12:46:00","slug":"brief-history-of-ruby-programming-language","status":"publish","type":"post","link":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/","title":{"rendered":"A Brief History of the Ruby Programming Language"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A brief history of Ruby programming language development starts with a distinction: the idea came before the public release. Yukihiro Matsumoto, usually called Matz, began designing Ruby in 1993. Ruby 0.95 reached Japanese newsgroups in December 1995. Those dates describe different milestones, so accounts that use either year need not disagree.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide follows three well documented moments: Ruby&#8217;s conception, its early public release, and Ruby 2.0. It then connects that history to a small program you can read today. The aim is to explain the language&#8217;s character without turning a short history into a list of every release.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured.webp\" alt=\"Brief history of Ruby programming language illustrated by a glowing ruby beside successive generations of computers\" class=\"wp-image-1607\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured.webp 1536w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured-300x200.webp 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured-1024x683.webp 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured-768x512.webp 768w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><figcaption class=\"wp-element-caption\">A conceptual illustration of Ruby&#8217;s evolution; the computers are not a dated record of its releases.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">A brief history of Ruby programming language milestones<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ruby&#8217;s official introductory FAQ <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ruby_(programming_language)\">records 24 February 1993 as its birthday<\/a>. Matsumoto describes discussing an object-oriented scripting language with a colleague. He wanted features such as objects, iterators, exceptions and automatic garbage collection together in a language he enjoyed using.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The same account places the posting of Ruby 0.95 in December 1995. Think of 1993 as the start of the project and 1995 as an early public-release milestone. Neither date means that Ruby arrived with its present libraries, tooling or community already assembled.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The distinction matters when you read older articles. \u201cCreated,\u201d \u201cannounced\u201d and \u201creleased\u201d are not interchangeable labels. A language can spend years in development, and its first public users may have a very different experience from the people who learn it later.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What the original design helps explain<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ruby encourages you to work with objects by sending them messages, usually through method calls. An array can transform its contents with <code>map<\/code>; a string can produce an uppercase version with <code>upcase<\/code>. A block supplies the operation to perform for each element.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That arrangement is useful to notice before studying individual punctuation marks. You can read a line as a request to an object, followed by the work it should do. The program still has strict rules, but related operations can fit together in a compact expression.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Automatic memory management also changes a beginner&#8217;s workload. You normally do not write a matching manual deallocation for each ordinary Ruby object. You still need to manage resources such as open files and network connections; garbage collection does not make resource ownership disappear.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These observations are a way to read modern Ruby, not evidence that every present-day feature existed in the first release. Historical explanations become misleading when they project today&#8217;s syntax backwards.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ruby 2.0: a useful point on the timeline<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/www.ruby-lang.org\/en\/news\/2013\/02\/24\/ruby-2-0-0-p0-is-released\/\">Ruby 2.0 release announcement<\/a> is dated 24 February 2013, the project&#8217;s twentieth birthday. It lists keyword arguments, lazy enumeration and <code>Module#prepend<\/code> among the additions. It also announces UTF-8 as the default script encoding.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a helpful milestone because the announcement names concrete changes. Rather than saying that Ruby simply became \u201cmore powerful,\u201d you can ask what a developer could express differently. Keyword arguments can give a call meaningful parameter names. Lazy enumeration can postpone work until a result is needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A release announcement is a document from its own time. Read it to understand what changed in that release. When maintaining a program today, use the documentation for the Ruby version running it. Historical feature descriptions do not guarantee compatibility with every later version.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Read the design in a short modern program<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This example is modern Ruby for learning purposes. Its output and four behaviour checks passed with Ruby 3.2.3. It does not attempt to recreate Ruby 0.95. Save it as <code>greetings.rb<\/code>, then run <code>ruby greetings.rb<\/code> in a terminal with Ruby installed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def greeting(name, prefix: \"Hello\")\n  \"#{prefix}, #{name}!\"\nend\n\nnames = &#91;\"Ada\", \"Matz\"]\nmessages = names.map { |name| greeting(name, prefix: \"Welcome\") }\nputs messages<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The output is two lines: <code>Welcome, Ada!<\/code> and <code>Welcome, Matz!<\/code>. The array receives <code>map<\/code>, and the block calls the method for each name. The method returns its last expression, a string. Its keyword argument lets the caller choose a greeting prefix.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Change the array to an empty array and run the file again. No greeting lines print. You changed the input without adding a loop counter or checking an index. Next, remove the supplied prefix from the method call to try the default greeting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For more practice with this style, read our <a href=\"https:\/\/ruby-doc.org\/learn\/ruby-functional-programming\/\">guide to Ruby functional programming<\/a>. It explains collection transformations and the places where changes to shared objects can surprise you.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Explore the history: choose a question<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open a question to check your understanding. Each answer links a date or design idea to a practical reading habit.<\/p>\n\n\n\n<details class=\"wp-block-details rdc-disclosure is-layout-flow wp-block-details-is-layout-flow\"><summary>Was Ruby created in 1993 or released in 1995?<\/summary>\n<p class=\"wp-block-paragraph\">Both statements can be accurate. The official FAQ gives 24 February 1993 as Ruby&#8217;s birthday and places the public posting of Ruby 0.95 in December 1995. Check which event an author is describing before comparing dates.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details rdc-disclosure is-layout-flow wp-block-details-is-layout-flow\"><summary>Does the example show the original Ruby syntax?<\/summary>\n<p class=\"wp-block-paragraph\">No. It is a modern teaching example. The keyword-argument milestone discussed here comes from the Ruby 2.0 announcement, so this snippet should not be presented as code from the first public release.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details rdc-disclosure is-layout-flow wp-block-details-is-layout-flow\"><summary>Did Ruby and Rails begin as the same project?<\/summary>\n<p class=\"wp-block-paragraph\">Ruby is a programming language; Rails is a web framework built with it. Learning Ruby does not require creating a Rails application. Keep the language&#8217;s history separate from the history of a framework that uses it.<\/p>\n<\/details>\n\n\n\n<h2 class=\"wp-block-heading\">Keep the language and its ecosystem separate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Many tutorials move quickly from Ruby to Rails, gems, testing tools and deployment commands. That can make several layers seem like one product. They are distinct parts of a working environment, each with its own versions and responsibilities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our <a href=\"https:\/\/ruby-doc.org\/learn\/ruby-vs-ruby-on-rails\/\">Ruby versus Ruby on Rails explanation<\/a> untangles the language and framework. For a history reader, that distinction prevents a common error: treating the growth of a prominent Ruby tool as the beginning of Ruby itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you encounter an old code sample, note its publication date, identify its Ruby version if possible, and run it in an appropriate test environment. Those small steps turn history into something useful: a way to understand the assumptions behind a program, rather than a set of dates to memorise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">                           <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trace Ruby&#8217;s origins, early public release and Ruby 2.0 milestone, then explore the design through a short modern example.<\/p>\n","protected":false},"author":3,"featured_media":1607,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1612","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Brief History of Ruby Programming Language<\/title>\n<meta name=\"description\" content=\"A brief history of Ruby programming language milestones, from Matz&#039;s 1993 design to Ruby 2.0, with a modern example and expandable history questions.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Brief History of Ruby Programming Language\" \/>\n<meta property=\"og:description\" content=\"A brief history of Ruby programming language milestones, from Matz&#039;s 1993 design to Ruby 2.0, with a modern example and expandable history questions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/\" \/>\n<meta property=\"og:site_name\" content=\"Ruby-Doc Learn\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-18T12:32:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"James Britt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Britt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/\"},\"author\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/#james-britt\"},\"headline\":\"A Brief History of the Ruby Programming Language\",\"datePublished\":\"2026-09-18T12:32:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/\"},\"wordCount\":977,\"publisher\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/brief-history-of-ruby-programming-language-featured.webp\",\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/\",\"name\":\"Brief History of Ruby Programming Language\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/brief-history-of-ruby-programming-language-featured.webp\",\"datePublished\":\"2026-09-18T12:32:45+00:00\",\"description\":\"A brief history of Ruby programming language milestones, from Matz's 1993 design to Ruby 2.0, with a modern example and expandable history questions.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/brief-history-of-ruby-programming-language-featured.webp\",\"contentUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/brief-history-of-ruby-programming-language-featured.webp\",\"width\":1536,\"height\":1024,\"caption\":\"A conceptual illustration of Ruby's evolution; the computers are not a dated record of its releases.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/brief-history-of-ruby-programming-language\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Brief History of the Ruby Programming Language\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#website\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\",\"name\":\"Ruby-Doc Learn\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#organization\",\"name\":\"Ruby-Doc Learn\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ruby-doc-logo-transparent.png\",\"contentUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ruby-doc-logo-transparent.png\",\"width\":1650,\"height\":305,\"caption\":\"Ruby-Doc Learn\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/#james-britt\",\"name\":\"James Britt\",\"image\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/jgb_self-portrait-20140914.png\",\"description\":\"Creator and long-term maintainer of Ruby-Doc.org, founder of Neurogami, and author of practical Ruby tutorials for Ruby-Doc Learn.\",\"sameAs\":[\"https:\\\/\\\/jamesbritt.com\\\/\",\"https:\\\/\\\/neurogami.com\\\/\",\"https:\\\/\\\/www.oreilly.com\\\/pub\\\/au\\\/2595\",\"https:\\\/\\\/www.rubyevents.org\\\/profiles\\\/james-britt\"],\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/\",\"jobTitle\":\"Ruby developer and writer\",\"knowsAbout\":[\"Ruby programming language\",\"Ruby documentation\",\"JRuby\",\"Open Sound Control\",\"Software development\"],\"affiliation\":{\"@type\":\"Organization\",\"name\":\"Ruby-Doc.org\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Brief History of Ruby Programming Language","description":"A brief history of Ruby programming language milestones, from Matz's 1993 design to Ruby 2.0, with a modern example and expandable history questions.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/","og_locale":"en_US","og_type":"article","og_title":"Brief History of Ruby Programming Language","og_description":"A brief history of Ruby programming language milestones, from Matz's 1993 design to Ruby 2.0, with a modern example and expandable history questions.","og_url":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/","og_site_name":"Ruby-Doc Learn","article_published_time":"2026-09-18T12:32:45+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured.webp","type":"image\/webp"}],"author":"James Britt","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Britt","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/#article","isPartOf":{"@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/"},"author":{"@id":"https:\/\/ruby-doc.org\/learn\/james-britt\/#james-britt"},"headline":"A Brief History of the Ruby Programming Language","datePublished":"2026-09-18T12:32:45+00:00","mainEntityOfPage":{"@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/"},"wordCount":977,"publisher":{"@id":"https:\/\/ruby-doc.org\/learn\/#organization"},"image":{"@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/#primaryimage"},"thumbnailUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured.webp","articleSection":["Programming"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/","url":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/","name":"Brief History of Ruby Programming Language","isPartOf":{"@id":"https:\/\/ruby-doc.org\/learn\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/#primaryimage"},"image":{"@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/#primaryimage"},"thumbnailUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured.webp","datePublished":"2026-09-18T12:32:45+00:00","description":"A brief history of Ruby programming language milestones, from Matz's 1993 design to Ruby 2.0, with a modern example and expandable history questions.","breadcrumb":{"@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/#primaryimage","url":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured.webp","contentUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/brief-history-of-ruby-programming-language-featured.webp","width":1536,"height":1024,"caption":"A conceptual illustration of Ruby's evolution; the computers are not a dated record of its releases."},{"@type":"BreadcrumbList","@id":"https:\/\/ruby-doc.org\/learn\/brief-history-of-ruby-programming-language\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruby-doc.org\/learn\/"},{"@type":"ListItem","position":2,"name":"A Brief History of the Ruby Programming Language"}]},{"@type":"WebSite","@id":"https:\/\/ruby-doc.org\/learn\/#website","url":"https:\/\/ruby-doc.org\/learn\/","name":"Ruby-Doc Learn","description":"","publisher":{"@id":"https:\/\/ruby-doc.org\/learn\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ruby-doc.org\/learn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ruby-doc.org\/learn\/#organization","name":"Ruby-Doc Learn","url":"https:\/\/ruby-doc.org\/learn\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ruby-doc.org\/learn\/#\/schema\/logo\/image\/","url":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-doc-logo-transparent.png","contentUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-doc-logo-transparent.png","width":1650,"height":305,"caption":"Ruby-Doc Learn"},"image":{"@id":"https:\/\/ruby-doc.org\/learn\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/ruby-doc.org\/learn\/james-britt\/#james-britt","name":"James Britt","image":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/jgb_self-portrait-20140914.png","description":"Creator and long-term maintainer of Ruby-Doc.org, founder of Neurogami, and author of practical Ruby tutorials for Ruby-Doc Learn.","sameAs":["https:\/\/jamesbritt.com\/","https:\/\/neurogami.com\/","https:\/\/www.oreilly.com\/pub\/au\/2595","https:\/\/www.rubyevents.org\/profiles\/james-britt"],"url":"https:\/\/ruby-doc.org\/learn\/james-britt\/","jobTitle":"Ruby developer and writer","knowsAbout":["Ruby programming language","Ruby documentation","JRuby","Open Sound Control","Software development"],"affiliation":{"@type":"Organization","name":"Ruby-Doc.org","url":"https:\/\/ruby-doc.org\/"}}]}},"_links":{"self":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/posts\/1612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/comments?post=1612"}],"version-history":[{"count":3,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/posts\/1612\/revisions"}],"predecessor-version":[{"id":1620,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/posts\/1612\/revisions\/1620"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/media\/1607"}],"wp:attachment":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/media?parent=1612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/categories?post=1612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/tags?post=1612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}