Try 7x to 11x. That's the amount of reduced RAM usage -- and the amount of increased accommodated users -- on identical hosting by the two apps I rewrote from Rails to Phoenix.
> If there was a framework for being as productive as Rails at half the cost then it would be flourishing.
Bold of you to assume technical merit is the only factor. Historically this has almost never been true. There are a number of web frameworks that perform much better than Rails and are quite easy to work with.
Cargo culting is a powerful force. Corporate inertia -- even more.
> There are a number of web frameworks that perform much better than Rails
If you're measuring hardware loads and busting out your stopwatch to measure response times, then sure.
Bottom line is, there are plenty of good reasons to choose Rails over Phoenix. If you want to label choosing a well-backed framework with an incredibly mature ecosystem "cargo culting" then by all means.
Have fun writing Ecto queries by hand, wiring up document storage on your own, trying to find a standout auth library of choice like devise, finding a library that makes managing database views less of a pain, wiring up end-to-end system testing.
I'll be over here running rails new, wiring up sidekiq to ActiveJob, and building shit with ease.
I thought we all learned popularity does not correlate with quality. It correlates pretty closely with corporate inertia and perceived lower risk of developer churn though. Businesses love tech stack for which there are bigger pools of programmers. Says nothing of the quality of the stacks.
> If you're measuring hardware loads and busting out your stopwatch to measure response times, then sure.
Needlessly snarky. Response times matter in a lot of businesses. Count yourself lucky that it hasn't been an important metric in your work.
> Have fun writing Ecto queries by hand
I do have fun writing those. Most times the code in my functions ends up more readable than the equivalent Rails code I wrote years ago. There are some exceptions where you have to dig deeper. Haven't seen a framework -- Rails included -- that lets you handle all complex cases with zero deeper digging needed. At one point you do have to understand SQL and query optimizations, no ways around it.
> wiring up document storage on your own
What for?
> trying to find a standout auth library of choice like devise
It's called Pow and works very well. Additionally, Elixir's maintainers themselves are authoring such a library at the moment.
> finding a library that makes managing database views less of a pain
We can argue if this is a good thing until the Sun explodes. It really depends on the business. I have consulted for businesses where it was very important and true enough, using a library that's well-tuned for classic web apps (like Ecto and ActiveRecord) isn't the best idea there.
> wiring up end-to-end system testing
For 3.5 years with Elixir this is the first time I hear that this is a problem. Any data to back this up?
> I'll be over here running rails new, wiring up sidekiq to ActiveJob, and building shit with ease.
More power to you. Rails is excellent for an MVP or a prototype and this is well-known. It's what comes after is what has burned me out of it. Its maintenance burden is much higher than many others, including PHP's Laravel.
My point is that it doesn't come with Phoenix out of the box (unless something has changed?), and that difference in philosophy is the core of what I'm getting at. With rails new I'm getting an end-to-end test suite and chrome driver installation for free.
Phoenix also has no plans of implementing something similar to ActiveStorage do they? How about ActiveJob now that elixir developers have rediscovered how great a queueing system is with the adoption of Oban?. Will Phoenix ever make a move to include something like ActionText?
They won't even consider adding basic things for developer productivity like undoing a generator.
https://github.com/phoenixframework/phoenix/issues/2607 https://github.com/phoenixframework/phoenix/issues/1597
The Rails team is much quicker and happier to extract something out of the companies supporting it (Basecamp, GitHub, Shopify, etc) and include it directly in the framework, whereas the Phoenix team seems much less willing to take a "batteries" included approach.
There's a balance of making something easy to use and making something "technically superior". The Rails team seems to care much more deeply about what the framework feels like to use, and the Phoenix team cares more about building something that is "dogmatically perfect" (which you're correlating with quality).
What's easier for someone to learn?
rails g model article title body user:references
mix phx.gen.html Content Article articles title body
I understand what they're going for here, but I'm not sure the tradeoff is worth it. If Phoenix wants to increase their adoption, then I think they need to accept that things like this matter.
It's gonna be tough for them really, even if it's a great framework (I have no idea). Elixir didn't take off like Golang or other languages from the last decade. It seems to have quite the learning curve, so for beginners any of ruby / php or even .net / java will make much more sense. For seniors...idk. Not everyone like functional programming. I do hear praise for the language I can't deny it and what seems like a tiny but vibrant community, but the numbers are just not there. I hope Elixir can maintain it's niche and not outright die just because I know some people rely on it for their pay check but honestly I'm not sure if we'll still have these discussions 5 years from now.
Fringe tech is usually a secret weapon in consulting, or, more rarely (but still happening quite a bit), in a full-time job.
Apples to oranges.
Erlang existed for 30 years and has been used by its small-ish but also very vibrant community, with great success.
So you know, very popular or not, us the people who use it successfully commercially will keep doing so.
But as I have said in the past, if Rust (or OCaml, or any statically strongly typed language that compiles to native code) gains all the guarantees of the BEAM VM then I'll abandon Elixir the next day.
You put a lot of weight on built-in features of frameworks in your reply. This is not an objective truth and even DHH himself admitted as much -- including in his article "Rails is Omakase" which I very much enjoyed (because he says that the Rails team picks what they deem the best ingredients and if you disagree then you are not the target audience).
You find value in "officially vetted" libraries, I find value in being assemble to assemble my chair the way I want it to, with parts I built or bought myself.
Neither practice is superior per se. Let's both admit that.
> They won't even consider adding basic things for developer productivity like undoing a generator.
Honest question: how many tech stacks even allow for that? Does Ruby have bytecode instrumentation on the level of, say, the JVM? (Java's instrumentation has unlocked it some quite impressive code generation and runtime code analysis abilities.)
Generating boilerplate is pretty easy. But how many tools out there can scan your code and tell you "this looks like Devise's boilerplate with exceptions in files A and B on lines 123 to 150 and 201 to 217"?
If Rails can do that I'd be very impressed. It couldn't, as far as I was aware, about 4 years ago.
> There's a balance of making something easy to use and making something "technically superior".
I never said this was important to me. I value Elixir's hassle-free parallelism and concurrency (which is more than what can be said about 99% of the tech out there where those things are always an afterthought). And Elixir is still pretty easy to use. I don't see why both things have to be presented as opponents? Seems like a false dichotomy.
> The Rails team seems to care much more deeply about what the framework feels like to use
You have spoken to the authors and they have told you this, in these exact words?
> ...and the Phoenix team cares more about building something that is "dogmatically perfect" (which you're correlating with quality)
And you have spoken with the Phoenix team. And they told you this. Exactly this?
No. They don't do that. They don't want to steer developers in the direction they might deem the best (they said as much on ElixirForum). They give you freedom to choose. And the community has provided alternative approaches for a number of the classic building blocks of a web app. That's all there is to it and I am not sure how you managed to so grossly misrepesent it. :(
I also never said anything about dogmatically perfect being important (much less correlated to quality!). You are projecting and we are talking past each other which doesn't help the discussion at all. If I cared about purity or similar concepts in the "dogmatically perfect" lane I'd go for Haskell or even Idris. Elixir -- and thus Phoenix -- are very far from "pure", "dogmatically perfect" or any such other academic ideals.
Really not sure where you got that from?
> What's easier for someone to learn?
This is extremely subjective and varies from person to person. Are you claiming that Rails' way is factually superior to learn? To me both are quite straightforward and both require you to have learned some concepts beforehand. And both aren't exactly English with which you command the machine, no?
> If Phoenix wants to increase their adoption, then I think they need to accept that things like this matter.
Ever since I dropped off the mainstream tech train and started working on the sidelines I've noticed something extremely curious which is happening very consistently: the people who work with mainstream tech always assume that the smaller community wants more adoption.
There have been a number of discussions on ElixirForum about this and various important figures of the maintainers' teams have openly said that they aren't aiming to make the language and its stack more popular; they want to make useful tech. One example is the recent Phoenix 1.5.0 release which now comes integrated with LiveView. A lot of people apparently don't want to deal with JS because at least 50% of the new posts on the forum since the announcement have asked exclusively about LiveView.
So again, the maintainers aim to make useful tech, not to trend on Twitter, dev.to, StackOverflow, or anywhere else really.
---
This became rather long. I apologise for that but still wanted to address several misconceptions that seem to have arisen in this discussion.
We all wanna get paid in the end of the day. Lots of Rails devs got spooked that 5 years from now their knowledge will go to shit. A lot of them still feel insecure about the state of Ruby, even with 90B companies like Shopify using it, because they read a blog about how a startup no one heard of migrated from Rails to Elixir. You don't seem to care about any of that and that's great. But let's face it, a lot of the back and forth "what's better tech" wars and shitting on each other's stacks is simply trying (maybe subconsciously) to gain more adoption and to validate our choices in life, and feel good about what we do by feeling superior to others. Just like a religion really or any other form of community. These aren't really academic discussion on what's "better" in my view.
Even though you and me keep exchanging jabs here I'd like this to stop.
I don't intend to "shit" on anyone's tech choice. What I did and still do intend is to help somebody, here and there, to love their job. I've met a lot of miserable Java and Ruby on Rails devs.
For the sake of the civil discussion we both should stop assuming stuff.
I am grown up enough to not care about validation (and I think everybody shouldn't care about it either but it's not the world we live in, sadly). It's mostly about finding something that clicks better with your brain and gives you a peace of mind while working.
Rails didn't give me that. It gave me anxiety. I had to always be on watch what is shifting beneath my feet. A [mostly] FP tech stack gives you back the control to shoot your own foot as opposed to a library that's a dependency of the dependency of the library you need doing it. Okay? :)
> We all wanna get paid in the end of the day.
Well, exactly. But I also want to be happy while receiving a paycheck.
There's nothing wrong with wanting to pick the parts yourself. But that comes at a cost and that was my original point that you responded to. Rails makes these decisions for you.
Elixir and Phoenix have taken a different approach, and there's nothing wrong with that. But let's not pretend that Phoenix is "as productive" as Rails. It isn't by choice. I disagree with that choice, but it's not my choice to make.
> Generating boilerplate is pretty easy. But how many tools out there can scan your code and tell you "this looks like Devise's boilerplate with exceptions in files A and B on lines 123 to 150 and 201 to 217"?
Rails can reverse just about every generator that it ships with. I'm guessing it's more difficult in Phoenix because the generators append stuff into contexts instead of generating new files maybe?
> and the Phoenix team cares more about building something that is "dogmatically perfect" (which you're correlating with quality)
>> And you have spoken with the Phoenix team. And they told you this. Exactly this? No. They don't do that.
>> There have been a number of discussions on ElixirForum about this and various important figures of the maintainers' teams have openly said that they aren't aiming to make the language and its stack more popular; they want to make useful tech
What? I feel like you're in agreement and disagreeing with me simultaneously here?
> Are you claiming that Rails' way is factually superior to learn?
No, I'm claiming that Rails is easier to learn and use because of the philosophy of its creators and maintainers. ActiveRecord is easier to use than Ecto. Reversible generators is an easier interface than "just undo it with git". Running a rails command for installing ActiveStorage is easier than building it yourself. ActiveJob is easier than wiring up Oban (not much easier, but still). Getting an end-to-end test framework out of the box is easier than hunting down elixir libraries and trying to bring them to the party.
Rails cares deeply about the developer experience. I think Phoenix does as well, but they focus on different things (LiveView).
(In that case, let's replace Laravel with Phoenix.)
Contrary to what you and others try and insinuate, we are very aware that the language is not a universal tech.
So yet again, you guys are smacking at a strawman that's very easy to beat. It's quite tiring to argue with stuff that I never said (and most of Elixir's community haven't said it either). But I think I'll give up for now. :)
It's not charitable to make assumptions for the entire community -- or the tech stack itself -- based on them however.
Seems like you've been chatting with the wrong people. A lot of the ElixirForum regulars -- me included -- are very practical and realistic folk who use several languages all the time.
1. The Elixir community doesn't seem to aim for popularity (at least several important maintainers have said so on ElixirForum).
2. The tech is useful, scales very well and helps with the hosting costs by using less resources. That's an objective fact, proven in many blog posts where people sat down and measured.
3. Concurrency and parallelism are extremely important and will get more and more important as our CPUs can't get faster single-core performance and are just getting more cores.
It's OK if you don't care about any of those things. Really. I personally never got offended if something I like is disliked by others (as we should all).
But making a strawman and then crushing it is not a productive way to discuss either.
Wow, then why does every Rails thread has an Elixir guy trying to tell us what an inferior software we're running? For the sake of humanity?
> and will get more and more important as our CPUs can't get faster single-core performance and are just getting more cores.
I don't think it will become more important in web dev world than it is now. We're here churning out back office CRUD apps like crazy, I don't know what you're doing. For a small team trying to get something up and running this really doesn't matter and that's what Rails is optimised for. If scale ever matters, if you scale that big, you probably already have the resources to deal with it. For the few startups that have huge scale + have very scarce resources and Elixir works well for them - great! I have no issues with that at all.
If you prefer that melodramatic phrase. I've been a Rails dev for 6 years and I know that many current Rails devs don't dare try something else -- call it a survivorship bias, fear to abandon what pays the bills now, habits, and most of the time you won't be wrong.
Every now and then I speak with some of them and we exchange ideas.
And you should stop stereotyping, it's juvenile and definitely has no place in HN.
OK, and I'm the one generalising yes? Clearly you have zero bias towards the Rails devs.
How about simply becoming really good in a skill instead of jumping stacks every 5 years? To REALLY become good in Rails, to the point where you can write gems for activerecord for example that do something cool with arel, or follow the work Tenderlove is doing easily, this type of good takes effort. and time. Some people don't care at all and will happily switch and rebuild that expertise (or will never become experts in anything). That's totally fine. I value expertise, and won't make the switch for something that on the surface doesn't look like will benefit me at all (again, concurrency as it is in Rails is just fine for my career path and I think most Rails devs are on the same boat).
You're the one who chose to use the term cargo cult a few comments above
$ rails c
Loading production environment (Rails 5.2.0)
[1] pry(main)> s = Subscriber.find_by_email('[email protected]')
=> #<Subscriber:0x000055dbb64c3bb8
id: 12913,
email: "[email protected]",
state: "active",
expires_on: Fri, 15 May 2020 14:10:19 UTC +00:00,
...
[2] pry(main)> s.expires_on += 2.months
=> Wed, 15 Jul 2020 14:10:19 UTC +00:00
[3] pry(main)> s.save!
=> true
It is done now! Good luck! Bye! - end of call.Cargo culting? From whom? I don't give a sh*.
What you describe is not exclusive to Rails.
Also, I'll take "double the hardware specs" if it means I'm actually able to focus on what I'm building and not dicking around with devops or rebuilding all of stuff Rails metaprograms for me by hand.
If there was a framework for being as productive as Rails at half the cost then it would be flourishing. There isn't and as a result Rails isn't going anywhere any time soon.