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!