Why we still build with Ruby in 2025
59 comments
·August 18, 2025JSR_FDED
Some questions for those with RoR experience…
1. If you know Python, Lua, JS and C, how hard would it be to learn Ruby?
2. What’s the best way to learn Ruby and Rails today?
3. How important is it that you know the previous versions of Rails? I remember looking for some resources a while ago and got a sense that there’s a lot of history that you need to know to really grok the latest version of Rails.
4. I’m worried about all the “magic” in Rails, but at the same time intrigued by the productivity that brings. Is there something that explains what’s going on behind the scenes?
Shank
1. Your subjective experience learning a new language is going to be up to you and how many languages you know. Ruby feels great from Java and C# to me, but maybe it won't for you.
2. The Rails guides (official) are great to learn the framework.
3. It's only relevant to learn the older versions of the framework if you're going to a company on the older versions. Realistically, 5, 6, 7, and 8 are all very similar and I would argue it's more important to start with the newest stuff and focus on upgrading apps the newest version than trying to learn the older versions (not for any particular reason, other than there have been meaningful improvements in later versions).
4. The source code, contrary to popular belief, is quite well-documented, and the official guides are also very well written. A lot of the "magic" is just DSL/plumbing that exists in the actual framework. I personally keep a copy of rails/rails locally so I can look at things when I want to, because it's really that readable.
at0mic22
With rails you'd always have to pay for absence of strict types with extensive testing where you'd basically have to verify that data structures match.
I don't buy it anymore
vindin
I don’t understand why Ruby and Rails get a reputation for being outdated or “legacy.” Over the last several years both have seen massive numbers of contributions, both in improvements and new features. I’d be surprised if any tool for building a new web app could even come close to what Rails has to offer across the full stack.
jmuguy
Since it doesn't have as much interest from FAANG people treat it like its dead meat. Rails powers a ton of smaller apps (and some very large ones) but everyone thinks their idea is the going to be the second coming and therefore it needs all the insane optimizations that power Google etc.
myaccountonhn
I've been toying with Perl+CGI-scripts lately and find its super productive with the benefit that I can do serverless without the lock-in.
I don't think the software engineering field is particularly rational and mostly follows trends or what looks good or familiar. We have a proclivity to assume that anything old is legacy. Most developer have never studied any CS history and are quite young, so they're bound to reinvent the wheel as well.
I think its fine to use older technology if its the right fit for the problem, and since the tech is battle-tested, you can read up as to why it went out-of-fashion, and as a result can minimize the risks with using it. It's "predictably disappointing".
mkozlows
I'm old enough to have been using Perl with CGI in the waning years of the old millennium. I loved it then, but it's not just hype cycles that caused people to move on to different solutions: Modern stuff is better in a bunch of very real ways.
JSR_FDED
I love this
Alifatisk
It's because it's not receiving a constant hype that other fullstack frameworks have, so people thing it's outdated. But in reality, Rails is boring, it's a beast and it just works
lenerdenator
I think it's just so strongly associated with a certain era (10-15 years ago) that it's hard for people to get it into the present day. Also, Rails is so dominant in Ruby that there aren't libraries/frameworks for the "latest trends" with as much mindshare.
I wouldn't be against starting a new project in Ruby or RoR.
phplovesong
I feel its the MVC part that IMHO kind of sucks. I really dont like how it couples you to all sorts of frameworky stuff. A simple router is what you really need in 99% of cases.
rafark
It’s the same thing with php. I would say it’s probably because they are languages from the 90s, but then you have python and JavaScript which are from the same era too and people never question their relevance or “modernity”. All of these languages (even java) have been in constant development since then and all of them have modern features. Why are some considered modern and some outdated when they are all basically from the same era?
A truly modern language is Rust.
doublerabbit
PHP typically required a web-server, system administration which is old fashioned. No one wants to do that which is fine as it keeps me employed.
When Ruby made western presence it was clunky. No one knew what it was and it got stuck with that personality. It had an ecosystem too but never hooked in to the western world.
Java is tainted by Oracle and seen as "business".
And it's also weird how Postgres has made an uprising appearance. It was sitting duck back in the 00's. I knew it existed because as an script kiddie I could install a php forum and select it as a database backend but I never did.
Want to make a LCD display? You can simply by slapping a python library in to your code.
Ecosystems pull coders in. Thinking about it, it's probably why Perl was popular before with CPAN.
The old net was special but skills had to be learnt. Remember the days when you had one server for one service?
The new net is terrible but everything is handed to you on a golden plate.
citrin_ru
> PHP typically required a web-server, system administration which is old fashioned
IMHO deploying PHP to production is easier than Ruby/Python. You need a web-server but once it's configured (not a rocket science) you just copy all .php files. For ruby you also want to have a web-server (e. g. nginx) unless the load is negligible. If you want to deploy a project with all dependencies you probably need something like rvm but some gems would be easier to install form OS packages (like pg or other wrappers around C/C++ libraries installed from OS packages too). And then for ruby you need an additional daemon (HTTP) which will be restarted on updates (and auto-restarted if it will crash).
voidfunc
Postgres didn't really become the darling of SQL databases until rather recently.. i'd say the last 5-10 years. It was a clunky DB back in the day compared to MySQL.
sunrunner
> When Ruby made western presence it was clunky.
At least when I first encountered Ruby it felt somewhat cool and exotic, I think because of a combination of its friendly website (compared to say Java), Japanese origin, and the fact that some of the first Ruby I ever learned was from why's (poignant) Guide to Ruby.
mrits
By western world do you mean California? Because in Austin rails was huge and I was a lonely Django fan
AlienRobot
How is it possible that we have this many programming languages and every single one is worse than the other?
FinnLobsien
Agreed!
revskill
Rails has bad spa suppott.
nik736
There is the API only mode :-)
pier25
It has bad support for anything that isn’t html.
dismalaf
SPAs are one of those things that few apps truly need. And honestly, these days, if I thought I truly needed an SPA I'd probably just write it in a compiled language that spits out WASM.
But Rails is hard to beat for CRUD apps.
ecshafer
> - Rails handles our API, domain logic, and billing workflows. - Go powers services that need high I/O concurrency or long-lived network connections. - Rust handles CPU-bound jobs.
Very similar to Shopify. Rails for business line stuff. Go/Rust for performance critical services. React for front end. Python for Datascience/ML.
ewf
I've always blamed the "rails can't scale" take on how easy it is for inexperienced devs to build full stack apps. But code gen has 1000x this so I'd imagine that will fade.
osigurdson
I wonder how much can be attributed to liking vs disliking low level things. Some people like knowing which register their data is in (and sometimes it actually does matter) while others just don't want to get into those details.
I'd say, don't fight this bias - choose the tools that resonate with you.
ksec
I am hoping we have even more surprises in Rails World in two weeks time.
And may be a glimpse of ZJIT? It is not just Ruby and Rails has gotten faster, CPU performance and core count has been getting cheaper.
One thing I forgot to post last time in the GitHub CEO step down thread. I am hoping Microsoft won't force GitHub to move away from Ruby Rails. I remember there were some noise early on during the acquisition M$ wanted to get rid of it.
FinnLobsien
Re: GitHub.
IF they do a rewrite, that should buy us at least 5 years, based on my experience with large-scale rewrites lol
stackskipton
Having been on Microsoft acquisition before, generally they encourage .Net usage for greenfield if possible but it’s pretty gentle encouragement. I’ve heard they are getting pretty pushy against C++.
voidfunc
Really depends on the org you're in and what ecosystems you need to work with. Almost everything we write is Go based at Microsoft in my org.
tekknolagi
Re: ZJIT: all development is happening in the open in the zjit folder of the ruby/ruby repo. You can follow along!
andrei_says_
A language intentionally designed for DX + a pragmatic, stable, well organized framework minimizing boilerplate and BS are still the winning formula for fast web app development.
The productivity and joy I get from working with this stack are immeasurable. I’ve been ruined in terms of having zero tolerance for the agony that comes with the JS ecosystem for example.
FinnLobsien
I think it's the Toyota Camry of languages. No, it's not the cool thing and won't turn heads or get you compliments.
But it'll take you very, very far for a very, very long time.
Alifatisk
> [Ruby is] Toyota Camry of languages
This is such a good statement and describes it very well, I'll actually use it!
aczerepinski
I wonder if AI will eventually make faster languages (eg Rust, Crystal) nearly as simple to ship with, and therefore a better choice. Or maybe that will end up being a new language entirely.
sunrunner
So much of what goes into a language choice involves things that aren't the language itself but the ecosystem around it. Documentation, standard library, third-party libraries, build and deploying tooling, and so on.
So a huge part of getting people to move from an existing tool they know with a well established ecosystem to a new tool that perhaps doesn't have that yet is getting those things in place (and then getting people to want to use them). I can imagine that being able to boostrap part of that process could help with the adoption of new tools.
The counter argument is that the friction behind these things is actually a benefit, as languages are only useful when they're shared and it doesn't make sense to have a huge range of languages that all mostly function the same but are just different synatcically. So it's a feature that it takes time for newer languages to gain traction, because it's essentially being tested for suitability and usefulness by a slowly growing number of people, at first the innovators, early adopters and early majority on the curve and later on the ones that perhaps can't afford to spend time on something that might not gen enough traction to last.
On a related note, I'm curious to know what the impact of generative AI on language-interoperability will be. Every time I see a suggestion that WASM and Interface Types is the thing that will finally allow me to use that weird but useful Python library in my Rust project, I always feel like unless there's a performance consideration involved I'd really rather just have everything in the same language, so the idea of automated translation of libraries at the source level seems like it could be useful. No need for language interop when you can quickly put everything into the same language.
dismalaf
> - Rails handles our API, domain logic, and billing workflows.
> - Go powers services that need high I/O concurrency or long-lived network connections.
> - Rust handles CPU-bound jobs.
It's always amazed me than the discourse around dynamic vs. static languages is that you can't have both.
Like, dynamic languages are literally built on a foundation of static, compiled languages. Ruby's source is C and now some Rust.
So just build in Ruby and when you hit a bottleneck, rewrite that bottleneck in C or Rust...
drzaiusx11
Many times with JIT you don't even need to drop to a more performant language. You can actually get some speed gains by moving C library code back to Ruby so you don't have to pay the translation costs
dismalaf
True. Ruby JIT has increased performance for some tasks you'd drop down to C for back in the day...
All the gains Ruby has made in the last few years are pretty incredible. I never picked it because of performance reasons but it's pretty nice that it's getting faster.
Either way though, Ruby FFI is super super easy. Just for fun, because of this thread, I spent a whole 2 minutes (lol) linking an Odin (my new low-level hobby language) library to Ruby. Literally all it took. Credit to Odin for having such easy export and Ruby for having such easy FFI.
Alifatisk
> I spent a whole 2 minutes (lol) linking an Odin (my new low-level hobby language) library to Ruby.
Would you mind creating a gist of your steps?
Alifatisk
> So just build in Ruby and when you hit a bottleneck, rewrite that bottleneck in C or Rust
Nowadays, yjit is so good that there is no real reason to use c extensions
SkyPuncher
> So just build in Ruby and when you hit a bottleneck, rewrite that bottleneck in C or Rust...
This is basically what we do at my startup. Though, some things we build elsewher from the start, knowing they need language specific tooling (like Python is best for working with LLMs).
You just can't beat the speed at which you can build business logic in Rails. Most features never hit the point of needing actual, raw performance so on 95% of what you build, you get to work incredibly fast. That still makes up for the 5% of features that you rip out and move elsewhere.
dismalaf
> Python is best for working with LLMs
Just curious how you're integrating LLMs... Self hosting?
I've been using RubyLLM and find it pretty decent for my needs, it's also improving at a very rapid rate. But it does focus on the most common providers and tools...
SkyPuncher
Basically, the entire data and language processing world works in Python.
It's not that tools don't exist in other languages. It's that Python has the most readily available tooling. That makes analysis and iteration a lot easier.
fozdenn
Love rails, hate ruby. Hope one day DHH moves it to clojure or gleam.
I work with python and typescript (occasionally c++) for my day job. I love getting to ship complete vertical slices of functionality. But I’m tired of all the faffing about. I’m sick of reinventing wheels and integrating with paid services that should be part of a frame work (e.g. auth). And writing the same types 3 times (pydantic, orm, front end)… I just want to focus on my product’s raison d'etre.
And I feel like I’ve found that with Rails. In my free time I’ve recently chosen Rails to build apps for myself. I’m aware that there’s a productivity bias in new projects but so far everything I’ve needed my app to do has come out of the box with Rails (e.g. object storage). If you’ll pardon the pun, I feel like I have these guard rails that prevent me from going off on tangents and keep me focussed on the product.
And I’ve got the app hosted! This is a first for me and I’ve been a dev for 15 years. I feel like a lot of the complexity of web dev is tamed with this framework and that I’m on a very well trodden path.