Ah, this reminds me I was so excited about the method references syntax, too 😞
I became so disillusioned with how many decisions seemed to be made about Ruby over the last few years. I was ready to abandon the language and although I wouldn’t say I’ve found peace with how things are now, it’s more like I’ve come to a point of resignation. I still make most of my income from Ruby and I’m still productive in it. Most of the bitter feelings I had have passed, but not really because anything I’ve seen has changed, just because time has passed and I’ve had to accept it one way or another.
All that to say that I’m very interested to read Part 3 and how your perspective changed.
I’m curious here. Just some background: I’ve been heavily involved in the Ruby community from 1.6 to 2.0, co-running a lot of the German Ruby community services (rubyforen.de and its blog, the eurucamp conference, forming my first company around it, etc.) before moving to Rust.
I still look at Ruby frequently and actually like the language evolution. Especially 3.0 with ractor and async is a really good way to keep the language fresh and modern. Ruby 1.8 to 1.9 to 2.0 was a really well managed transition, especially compared to how Perl and Python worked out. Ruby is a rich language with many features - it was already at 1.6. It really isn’t a good spot for language conservatism.
What I observe in the Ruby community is a bit of an emotional self-sabotage. I still literally get asked to be on panels about “Is Ruby dead?”. No, Ruby is more alive then ever! Much more alive! I know Ruby developers, especially new ones, left and right. All companies I work for accept it as a reliable workhorse. But still, everyone is looking at its death and people give talks at Ruby conferences about how they would manage Ruby if they were let.
I appreciate that there’s an issue in the Ruby community around development communication: A lot of the design is done and discussed in Japanese and as such inaccessible to the English speaking community until it is close to done. I appreciate that breeds frustration, but there’s an under-appreciated other side of the coin: Ruby is one of the few globally used free software projects from Asia that is a space for people who have a hard time contributing to the English speaking world.
Ruby has an ambitious and diverse and kind community that a lot of people identify with. There’s a reason why I always wear a Ruby shirt when giving a Rust talk and still frequent Ruby user groups - remember where you came from.
I do like some things about the recent direction too. I do love the async stuff. Initially I was more excited for ractors, and I do like how the API for that has turned out, although I wonder if the Ruby community will really adopt them. If not they could end up just another feature that exists but no one really uses. It looks like there is a lot more activity around async, which is nice to see at least.
On the other hand, RBS feels bolted on and I don’t see it gaining much traction. I think it even needs a third party type checker? It felt to me like when faced with pressure to add types to Ruby, rather than making a firm decision either way, they decided to try and please everyone with a solution that probably won’t really satisfy anyone (and I think the answer they really wanted to give was ‘no’), and again, just end up another little used feature of the language. Personally I would have loved to see inline type annotations, as I’m tired of relying on YARD for every method I write just to make my API clear. But I’d rather they just abandoned the whole idea rather than go about it this way. I’m not a Ruby developer so I may be wrong here, but after 3.0 it feels like interest in RBS has dropped off and I’m not at all surprised as I think it was only added begrudgingly in the first place.
Ruby has a real documentation problem. Many popular gems don’t see fit to document their parameter or return types (and good luck figuring out which exceptions could be raised for any given call). Half the time you just have to guess and figure things out through trial and error. This is a cultural problem and I had hoped that adding types would have a kind of TypeScript effect on the community here, but that ship has sailed with RBS being added.
I can’t remember all that influenced my current feelings, but I do recall a few things which frustrated me.
For a long time I added the magic comment at the top of every source file:
# frozen_string_literal: true
I hated this. In the early days, the plan was to make this the default in Ruby 3, and I was really looking forward to that day. But Matz turned it down eventually due to compatibility concerns. Perhaps that’s fair, but there are already breaking changes, and some older code is still unusable on Ruby 3 (notably for me, Hanami 1.x). Would the situation really have been so much worse with this change? Honestly I don’t know, but it feels like another missed opportunity when you’re already breaking compatibility with old code anyway.
One feature that thankfully didn’t make it into the language was the pipe operator |> from Elixir. Except, it wasn’t the pipe operator from Elixir, and it didn’t really do anything new at all. It probably seems silly to complain about something that never made it in, but the fact that something so clearly useless got as far as it did really didn’t leave me with a good impression.
It’s just little things like these that have started to pop up more and more frequently.
I’m certainly not a language conservative. I’m actually a sucker for new features – when they are well thought out, consistent with the language as it exists, and likely to see actual real world use. Ruby gives me a lot to like too, and I hope I don’t come across as entitled. I’m not going around making demands on anyone, but I can’t help but feel that I should start looking elsewhere for what I want (Rust has been top of that list).
I want to clarify that by no means do I think that Ruby is dead or dying. I am thankful for it, and make use of it nearly every day, I’ve just found myself questioning whether it’s still right for me.
Warning: this story ends on a cliffhanger. I recommend waiting to read this until Part 3 is posted “next week”.
My bad :’-( Really wanted to tell entire story in one go, but got carried away!
don’t sweat it, all good second acts end on a cliffhanger