Talks

Keynote: Lessons from the Past

Keynote: Lessons from the Past

by Yukihiro "Matz" Matsumoto

In this keynote presentation at RubyConf 2023, Yukihiro 'Matz' Matsumoto, the creator of Ruby, shares profound insights about the evolution of the Ruby programming language and its community over the last thirty years. He emphasizes the significance of having a supportive community in the development and continued success of programming languages.

Matz covers the following key points:

  • Historical Context of Programming Languages: Matz begins with trivia about programming languages, mentioning PL/I as a notable early example predating Fortran, and reflects on the evolution of programming languages, highlighting the need for practical implementation alongside innovative ideas.

  • Simplicity vs. Complexity: He discusses the balance between simplicity and necessity in programming languages, using examples like Perl, Ada, and PL/I to illustrate how overly complex languages can hinder usage and adoption.

  • Lessons from Perl: Matz shares lessons learned from Perl's trajectory, noting the importance of community engagement and avoiding the pitfalls of becoming stagnant or overly ambitious with language updates, referencing Perl 6 and its rebranding to Raku as cautionary tales.

  • Gradual Evolution of Ruby: Ruby's evolution over the years, including key versions like Ruby 1.9 and 2.x, is highlighted. Matz explains the importance of maintaining backward compatibility to prevent community fragmentation during transitions.

  • Addressing Current Challenges: He discusses the current landscape for Ruby, acknowledging declining popularity amidst newer technologies but emphasizing Ruby's ongoing relevance through consistent improvements, performance enhancements, and a commitment to fostering new developers and contributions.

  • Future Aspirations: Matz expresses hope for Ruby’s future, encouraging community participation to address modern challenges and innovate within the framework of Ruby. He underscores the need for a vibrant community and diverse contributions to shape the language's path forward.

  • Q&A Session Insights: In the Q&A segment, Matz addresses specific concerns about the global interpreter lock (GIL) in Ruby and the language's position with WebAssembly support. He emphasizes adaptability for the future of Ruby with aspirations for ongoing improvements in performance and ecosystem growth.

In conclusion, Matz reaffirms the importance of collaboration, innovation, and the welcoming of new developers into the Ruby community, aiming to keep Ruby relevant and competitive in the software development landscape for the coming generations.

00:00:18.560 Our keynote speaker actually needs no introduction. Yukihiro Matsumoto, affectionately known to us as Matz, is the creator and steward of the Ruby programming language.
00:00:23.840 He has pre-recorded his keynote and a short Q&A answering some of your questions. Please enjoy.
00:00:35.600 Hello, this is Matz, the creator of the Ruby language and a person who initiated everything about this conference.
00:00:42.920 Today, I'm going to talk about the lessons from the past. As a keynote speaker, some may know that I love programming languages. Programming languages, in general, are my lifelong work. From that love, I created my own programming language, which gradually became Ruby.
00:01:03.320 My love and motivation led me to devote much time and effort to the development of Ruby. The language has changed everything about my life and others' lives, and partially, Ruby has changed the world.
00:01:17.960 Since I am quite passionate, you may call me a language geek. I'll share with you a bit of programming language trivia and the lessons I have learned through my experiences with Ruby's development.
00:01:39.560 Okay, the first question is: what is the first programming language? Some may say that the first programming language in the world is Fortran, which was developed in 1954. But in reality, there was a programming language that predates Fortran, known as PL/I.
00:02:10.319 PL/I was designed by a German engineer who invented a very ancient computer called Z3. He discovered that human language was too limited to express ideas in binary for such computers, so he came up with the concept of a programming language.
00:02:39.920 At that time, in 1942, there was no term like 'programs' or 'software' associated with computers. The term 'program' was often used in contexts like theater. The inventor of PL/I introduced the name, which roughly translates to 'plan for calculation.' This language included key features such as assignments, if statements, loops, structures, subroutines, arrays, assertions, exceptions, and even guided execution.
00:03:07.840 It's kind of surprising that PL/I was far more advanced than Fortran, but since the concept was too advanced for that era, it was not widely adopted or accepted. In fact, PL/I fell into obscurity for a long time, and it wasn't until 1985 that some design documentation resurfaced. However, the full specification of the language was first published in 1972, much later.
00:03:45.600 At that time, no implementation existed until 1998, when the first compiler for PL/I was implemented, which is even newer than Ruby itself. From this fact, we can learn that having an idea alone is not enough. There needs to be a practical implementation to validate that idea, and we must share that idea with others.
00:04:41.039 Systems must grow with their users. Ruby was first created in 1993, thirty years ago, and officially published in 1995. In these thirty years, it's important to note that this is not just my work. The community has worked together to make Ruby a better programming language.
00:05:16.800 This community effort is what truly defines Ruby. We can learn that the community is the key to success.
00:05:31.320 Next question: what is the simplest programming language in terms of syntax?
00:05:43.759 There are many simple programming languages, but I would name Lisp and APL, which were invented in the 1960s. They are not very popular today, possibly because simplicity is not the first goal in programming language design. Larry Wall, the creator of Perl, once stated that if a language is simple, software will become more complex because the total amount of complexity is constant.
00:06:25.600 This means we can learn that simplicity in programming languages is not always the ultimate goal. Since human minds are complex, we often struggle with complex tasks and issues, which is reflected in the complexities of the software we develop.
00:06:57.199 An example of a less-than-simple programming language is PL/I, which is a combination of Fortran and COBOL from the 1970s. Fortran was popular for scientific computing, while COBOL was commonly used in business software.
00:07:34.080 The idea behind PL/I was to combine those two into a single programming language, but while Fortran and COBOL are still in use today, PL/I has nearly been abandoned.
00:08:06.760 Another example is Ada, which was named after the first programmer. The United States Department of Defense sought to unify many disparate programming languages in its various systems. The idea was to reduce the burden of learning multiple languages.
00:08:38.560 However, even though Ada is still in use in certain governmental contexts, most software developers today are largely unfamiliar with it.
00:09:09.839 We also witness a tendency towards 'creeping featurism' in programming. As we respond to user requests, systems can grow too large and complex, often to the point of becoming unmanageable. The complexity in software often mirrors the limitations of our own understanding.
00:10:02.720 This leads to the insight that being bigger is not always better—a lesson we should keep in mind. Next, let's move on to the lessons from the programming language Perl.
00:10:39.960 You may not know that 20-something years ago, Perl was the king of programming languages. Perl 1.0 was released in 1986, and by the time Ruby was in development in 1995, Perl was still incredibly popular. I borrowed many ideas from Perl when designing Ruby.
00:11:18.560 However, now, thirty years later, the latest version of Perl is 5.38, which indicates that there have been no major versions released in that time. Perl has made various improvements, but its basic structure remains unchanged.
00:11:47.760 At a Perl conference in the year 2000, the community realized that the engagement was dwindling, and they had to spark excitement again to attract developers.
00:12:16.960 They initiated new projects to address the historical issues with Perl and sought input from the community through 'Request for Comments' to revitalize the language.
00:12:43.200 However, the new version, which they named Perl 6, ultimately failed to gain popularity and was later renamed Raku, marking a significant pivot in the trajectory of the language.
00:13:17.760 From Perl, we can learn two key lessons: First, avoiding the 'boring pitfalls' is crucial. The excitement and motivation behind open-source software must be maintained, or the community will become disengaged.
00:13:48.320 Second, we must be cautious of 'second system syndrome.' When creating a successor to a language, we can become overly ambitious and take on too many challenges, complicating the system beyond manageability.
00:14:35.640 In the early 2000s, I proposed an ambitious idea for Ruby 2, similar to the Perl 6 initiative. However, we learned from Perl to evolve gradually rather than scrap and rebuild everything, leading to Ruby 1.9 in 2007.
00:15:15.119 Ruby 1.9 introduced a new virtual machine, overhauled the string implementation, and added support for multiple encodings. This was a gradual evolution, not a radical reconstruction, which helped to ease the transitions.
00:15:43.420 Although this transition caused some incompatibilities, we maintained backward compatibility to avoid a prolonged community split.
00:16:14.760 This taught us the importance of preserving compatibility unless absolutely necessary. The longer the split, the more damage it could do to the community.
00:16:54.960 Ruby 2.x introduced keyword arguments, refinements, and module prepend for performance-oriented programming.
00:17:29.960 During this time, Ruby was known for its productivity in web application development, but we observed a slow decline in popularity, primarily due to newer languages and technologies.
00:18:10.560 Despite these challenges, it's crucial not to dismiss Ruby just because it is not the 'shiny new language.' With over thirty years of history, Ruby is still valuable and evolving.
00:19:01.920 The hope lies in attracting new developers to the Ruby community. We wish to foster fresh talent and new energy.
00:19:42.880 During these challenging times, we continue to introduce improvements, as well as versions, with promises of a bright future.
00:20:05.040 We need new contributions and ideas. Specifically, in 2020, Ruby 3.0 and Ruby 3.1 were implemented with many significant advancements.
00:20:27.680 Moving forward, we must retain community engagement and strive to avoid stagnation while improving our performance and comprehensibility.
00:20:59.840 Utilizing better tools and technological support is a must for enhancing productivity in Ruby programming.
00:21:31.120 In the past thirty years, we've made substantial advancements in productivity with improved supporting tools.
00:21:57.920 Effective programming tools and improvements have drastically increased overall language productivity.
00:22:24.960 Additionally, Ruby 3.3 introduced the Prism gem for type inference, promoted by the Ruby core team working on optimally utilizing the language.
00:22:56.319 This gem itself was developed by teams from Shopify, aimed at improving the user experience and performance of Ruby.
00:23:28.959 We are continually working to improve the developer experience, encouraging creativity and discussions among the community regarding these improvements.
00:24:00.480 In improving our tools, we will ensure that every idea and suggestion is welcomed. Every individual's input is valuable.
00:24:31.199 As I mentioned earlier, we need to maintain consistency while embracing innovation and new opportunities.
00:25:06.560 It's essential to engage newcomers so that they feel welcomed and invested in the future development of Ruby.
00:25:43.360 The growing community is essential. We must continuously work to attract new developers to participate.
00:26:10.560 Ruby on Rails and other popular frameworks have proven to be effective for small teams, allowing startups the agility needed to navigate today's tech landscape.
00:26:40.080 However, while it's great to learn from large companies like Google, our focus must be on proving our ideas on a smaller, adaptable scale. Building agile development capabilities is where smaller teams thrive.
00:27:21.920 My aspirations for Ruby's future include continuously improving performance and developer experience, ensuring we provide a rich ecosystem that promotes innovation.
00:28:01.760 In the coming years, as we work towards releases, I hope to maintain Ruby's identity while also addressing newer paradigms.
00:28:37.920 The next ten years should see Ruby enhance performance while fostering creativity, commitment to achieving maximum impact through community collaboration.
00:29:16.960 At the same time, we must refine our processes, whether it's through steering committees or design experiments, to inspire new directions.
00:29:57.199 I look forward to working with anyone interested in becoming part of this community, contributing their insights and creativity to Ruby's growth.
00:30:41.840 As I reflect on the future dynamics of Ruby, I urge each of you to participate. Your unique perspectives and experiences are invaluable.
00:31:19.920 We need your voices. Our goal is to bridge the wisdom from our experiences to upcoming generations of programmers.
00:32:01.760 So, if you have ideas for improvement, do not hesitate to reach out! Join in as we cultivate a better Ruby for everyone.
00:32:45.920 The future of Ruby is exciting, and together we can ensure it continues to evolve while nurturing the community spirit that has always distinguished Ruby programming.
00:33:29.920 In conclusion, we look forward to collaborating, innovating, and keeping Ruby alive, vibrant, and relevant in the software development landscape.
00:34:59.440 Now, let’s transition into the Q&A session where I will address some queries collected from the audience.
00:35:41.840 The first question is: do you think we'll ever truly be able to remove the global interpreter lock (GIL)? This is an important topic we discussed during this year's keynote.
00:36:34.959 Theoretically, removing the GIL in Ruby is possible, but practically, it poses a considerable challenge. As focused on web applications, we might not prioritize its removal, especially since the demand for concurrency can be addressed by other application services.
00:37:22.920 Instead, we provide alternatives like fibers and various scheduling solutions. Therefore, we’re optimizing for concurrency without necessarily eliminating the GIL.
00:38:09.840 Next question: what are your hopes for Ruby as it relates to WebAssembly? With Ruby 3.32, we have established the capability to compile the Ruby version machine to WebAssembly, enabling it to run in the browser.
00:38:55.440 However, we must manage performance and optimize the challenges of running the Ruby VM within the browser's constraints.
00:39:32.840 Moving on, my thoughts on the future of RBS indicate a focus on interoperability across different typing systems as our community strives to enhance type-checking capabilities across languages.
00:40:16.840 Finally, I see a hopeful vision for Ruby ten years from now—a Ruby that retains its essence while progressing in performance, developer experience, and ecosystem growth.
00:40:56.560 That’s my aspiration—to ensure Ruby remains a beloved programming language while being adaptive to change and relevant to future generations.
00:41:38.560 The core team is ready and eager to nurture new talent who will take the baton, ensuring Ruby’s legacy and future sustainability.
00:42:20.640 Consequently, I welcome anyone interested in language design to join the efforts to cultivate the next generation of Ruby programming.
00:43:02.200 You don't need to be an expert programmer, just have a passion for Ruby. You are already part of our community.
00:43:44.080 Thank you all for your time today and for your commitment to the ongoing journey of Ruby. Let’s continue contributing to make Ruby an even better language!
00:44:29.440 I hope to see you all at future Ruby conferences!