rubyday 2016

Can We Still Innovate?

Can We Still Innovate?

by Piotr Solnica

In the talk titled 'Can We Still Innovate?' at RubyDay 2016, Piotr Solnica explores the current state and potential for innovation within the Ruby ecosystem. He expresses enthusiasm about the positive developments in the community, countering his initial doubts as many developers departed the Ruby landscape. The central theme revolves around the significance of innovation, defining it as the process of making changes to established practices in software development. Solnica reflects on the past decade of Ruby's history, highlighting key innovations and shifts in the community's approach.

  • Defining Innovation: Solnica emphasizes that innovation involves challenging established norms and finding better solutions to complex problems. Historically, the Ruby community experienced a notable evolution from 2005 to 2010, marked by the advent of Ruby on Rails, which transformed web application development through its 'convention over configuration' principle.

  • Rails and Its Impact: The introduction of Rails significantly boosted productivity and influenced the community’s expectations from libraries. However, the dependency on conventions also led to ambiguity in terminology, leading to complexities in application development.

  • Handling Complexity: Discussions around managing complexity in Ruby applications began to surface around 2006, motivating developers to explore new paradigms such as Domain Driven Development and the data mapper pattern, aiming to decouple persistence from business logic.

  • Emergence of New Frameworks: The collaboration between Rails and MERP teams culminated in the launch of Rails 3, which improved performance and modularity. The development of innovative gems like MERP, ROM, and Dry RB illustrated new ways to simplify data management and foster creativity.

  • Community Participation: Solnica highlights the vibrant Ruby community, with many smaller libraries and projects like Hanami and Trailblazer emerging, each tackling unique challenges. This diversity reflects a shared commitment to innovation and continual improvement.

  • Looking Ahead: The talk concludes with Solnica advocating for continuous curiosity and openness to new methodologies as essential for the community's growth. He notes potential enhancements to the Ruby language itself, such as unifying method objects and lambdas, implementing a proc composition operator, and addressing mutability concerns.

Overall, the message is clear: the Ruby ecosystem has much potential for innovation, driven by its active community and evolving ideas, making room for future progress.

00:00:09.780 Hello everyone! I'm super happy to be here. It's a real pleasure to talk to you today. We're going to discuss innovations in the Ruby ecosystem. My talk is titled 'Can We Still Innovate?'—a question I pondered last year. As you may know, I have been working on several libraries for quite a while, but it has been somewhat challenging at times. While observing our community, I noticed some great Ruby developers, my good friends, leaving Ruby. At that moment, I thought, "Well, maybe I should do the same." Coincidentally, however, I also noticed many positive developments in our community. The community is expanding, with more projects, people contributing, providing feedback, and helping with issues. This positivity energized me, and ultimately, I realized that everything is fine. So you don’t have to wait an hour to get an answer to this question: yes, we can still innovate.
00:01:25.470 A little about me: I'm a software developer working for a company called Mojo Tech, a software development and design agency located in Providence, Rhode Island. I also work on open source projects during my so-called spare time. The first project I want to highlight is Ruby Object Mapper, and the second one, which is a bit younger, is called Dry RB, which we established last year. I will use these projects as examples of some innovative ideas within the Ruby ecosystem.
00:02:40.380 First, I want to discuss what it actually means to innovate. Innovation involves making changes to something that is already established. Both aspects are challenging because changing software is inherently difficult, and altering established norms poses even more difficulties. We tend to become accustomed to specific solutions, knowing how to solve certain problems in particular ways, and we have our preferred tools that enhance our productivity, providing a sense of comfort in their use. The task of challenging these established norms and attempting to change them—essentially improving them—is quite difficult.
00:04:00.240 To provide some context, I want to reflect on what has happened in our community over the last ten-plus years. Between 2005 and 2010, there was a tremendously interesting period in our community's history. This era began with Rails, which was revolutionary. Rails was a technology that significantly innovated how people approached web application development. It improved productivity in writing software.
00:04:48.660 One key aspect of Rails that we often take for granted today is the principle of 'convention over configuration.' This concept has deeply influenced the entire community along with our mindset, shaping the way we use our software and raising our expectations for Ruby libraries and frameworks.
00:05:10.440 The first aspect of 'convention over configuration' is that it significantly increases productivity. When we start using a new tool, the fact that it just works out of the box means we don't have to spend much time on configuration or writing extensive code. However, after years of working in this manner, there has been an interesting impact on our mindset surrounding libraries and software development in general.
00:06:00.240 At some point, we realized that the term 'model' was ambiguous; nobody quite knew what it meant. Many developers associated 'model' primarily with Active Record. This led to several explorations and experiments to deal with complexity in our applications—this discussion ignited around 2006, identifying our enemy: complexity. It was clear that our applications were growing more complex, and we needed to address this issue.
00:07:12.150 Years passed, and throughout 2007 to 2009, we experimented with various approaches to managing complexity. Ideas such as Domain Driven Development and Data Context Interaction emerged. Discussions surrounding the data mapper pattern became pivotal, leading to efforts to separate data persistence from domain logic. This was the foundation for broader experimentation around simplifying data handling, setting the stage for more impactful innovations.
00:08:44.760 In 2008, both the Rails and MERP teams decided to collaborate to create a robust full-stack framework that followed the convention over configuration principle. The release of Rails 3 in 2010 represented a significant milestone in our ecosystem, incorporating many ideas from MERP, thereby improving modularity and performance. However, discussions about handling complexity within large Rails applications persisted. The ongoing complexity posed pressing concerns that needed strategic solutions.
00:10:34.410 Over the following years, various Ruby gems emerged, focusing on different aspects of application development and addressing the complexities associated with traditional patterns like Active Record. For instance, the introduction of MERP illustrated an innovative approach to building applications, showcasing features like faster Ruby frameworks and modular structure, which sparked further creativity in development practices.
00:12:21.250 As the Ruby community evolved, we recognized the importance of embracing innovation. This collective journey began shifting paradigms, allowing developers to explore unique solutions beyond conventional setups. The iterative process involved uncovering the value of new frameworks while maintaining an openness to experimentation and constant learning.
00:14:01.140 The rise of libraries like ROM and Dry RB exemplified this ongoing evolution. While traditional paradigms were questioned, the Ruby ecosystem donned new ventures, utilizing insights and experiences gained from earlier frameworks to forge paths that prioritize simplicity, performance, and distinct conceptual foundations.
00:15:38.710 The innovations in the Ruby ecosystem are numerous, and I have discussed various projects that I have been involved with. However, it's important to highlight that they are not the only advancements occurring. The beauty of our community is in its diversity and willingness to innovate. There are many interesting gems like Hanami and Trailblazer emerging, along with countless smaller libraries aiming to solve unique challenges in our development processes.
00:17:39.740 As I conclude, I'd like to emphasize that innovation is a continuous journey, remarkable in its unfolding. Engaging in discussions on programming abstractions, new ideas, and code development fascinates me. Staying curious and open to new methodologies allows us to perceive the evolving landscape of Ruby development in a brighter light.
00:18:50.640 With the remaining time, I'll take questions. I am eager to discuss any aspect of Ruby, programming techniques, or the innovative directions we can explore. Thank you for your time today!
00:20:03.330 In response to the audience question about innovation in the Ruby language itself, there are many changes I'd love to see. For instance, unifying the functionality of method objects and lambdas, addressing the long-standing proposal for a proc composition operator, and finally tackling mutability concerns in Ruby to allow for true immutability without performance drawbacks.
00:20:32.258 Furthermore, fostering the concept of first-class functions, similar to constructs in Scala, could greatly enhance Ruby's capability. I believe that such changes would add significant value to the language but require careful consideration and clear implementation strategies.