← Back to posts

My Rails Journey in...2025?

Yes you read that right. Ruby on Rails in the year of our Lord 2025. Insert <ryan-reynolds-but-why.gif>

Ruby has never captured me as a language. After I got enamored with ML-inspired FP languages (e.g. Elm) I felt like I had reached programming Nirvana. Immutability, type safety, algebraic data types, pattern matching, etc. I felt like OO was forever dead to me.

But.

There always has been something about Rails. The batteries included nature of it. The "One Person Framework" is just such a compelling idea. A story for every level of the stack. Something you don't have to assemble yourself to get something truly published to production.

I have been an Angular developer for over a decade. I know my frontend space, and I am good at it. The era of the SPA was where I thrived. I know the downsides, but the mental model was straight forward.

I know why there was a desire to embrace the server more. The SPA-era created bloated and slow applications (although I would argue that was in part just bad programming, not something inherent to the model). But the complexity that the JS ecosystem has built up for "full stack" applications just never sat right with me. From the rube Goldberg-like conception of SSR with hydration, to the tangled mess of RSCs in the React ecosystem. Knowing where what code was running took that nice clear mental model I had and jumbled it all up.

I got drawn into the HTMX hype. I dug in, and the simplicity and power blew me away. Yes, you will not get the same fidelity of experience and interactivity as a JS framework. But you can get so much further than you expect with so much less complexity.

The problem I had with HTMX, was that it contained no tooling or opinions. There are times that this is good! But I found myself stitching together my own templating and partial conventions and tooling. It worked, but it wasn't pretty. And it had no consistency.

This is where the strong opinions of Rails excited me. Not only did you get HTMX-like mental model, there was a compelling progression you could follow with Turbo and Hotwire. You can start with 1990's style CRUD page (which is actually still powerful in its simplicity) Then you can move up to Turbo Frames to get more targeted updates, then move all the way to Turbo Streams when you needed fine-grained control. You opt-in when you need it.

I think Rails gets a bad rap for it's strong opinions. But my hot take is most people are terrible at working with frameworks (ESPECIALLY super opinionated ones like Rails). Frameworks are built to solve a problem in a predefined way. They embody the world view of the framework creators. You need to learn how to think about a problem in a way that the framework wants you to. Most people don't take the time to do that, and they end up fighting the framework instead of being empowered by it.

But....Ruby.

Oh Ruby. I still struggle with it as a language. The LSPs are lacking, and the absolute embracing of the dynamic language features just gives me no guard rails that I'm used to. I very much have learned to appreciate it for what it is. And I'm going to stick with it for a while longer to see what I can take from it. I think there are some super compelling language features that can really give you elegant, ultra-readable solutions. It feels more akin to writing prose than it does writing a traditional programming language.

So why would I spend so much time trying to learn a language that I fundamentally disagree with?

Because it's important to challenge your beliefs. Give something an honest try, try to understand it as deeply as you can. If in the end you don't find it sticks with you, I guarantee it will change how you view solutions. You will have a new appreciation for looking at the problem in a different way. Elm took me on an adventure that made me a much better developer. And although I never thought I would actually find a dynamic language such as Ruby a worthwhile adventure. It absolutely has changed me. And I'm excited to take that learning to my day-to-day.