Rails has always been bloated. That's what you get from frameworks that come with automation for common tasks.<p>However, let me provide a counter-point ... I think that Rails 3 is finally a good framework that I want to use. Blogs written in 5 minutes (which you can still do in Rails 3) have never impressed me.<p>What impresses me is code-reuse, modularity and readability. Which is why I preferred Django instead of Rails 2. The biggest reason was that I can read Django's source-code, but Rails (prior to 3) was really awful in that regard and cargo-culting is OK, but only when you're starting out.<p>Node & Coffeescript are indeed cool and have their place. However I prefer mature frameworks that save me effort when building yet-another-admin or yet-another-facebook-login.<p>Not pursuing hotness is the new hotness IMHO.
I love Giles. His first Archaeopteryx talk was one of the best Ruby-related talks of all time. He's way too harsh on Rails though. The original "blog in 15 minutes" demos that catapulted Rails into the limelight are still possible with Rails 3. Things like 'gem install rails' still work. If you are determined to skip bundler, you can do that too. What's more, unlike 2005, in the 15 minutes it takes to build a Rails blog, you can deploy to Heroku and have a live site running.<p>Node is fun. V8 smokes MRI. But Node's web framework ecosystem has a long, long, long way to go before one can reasonably say that Rails is a bad investment. If anything, we should be celebrating the number of options that are open to us. It's a great time to be developing for the web. Good things will come from Node's ascendancy, whether its frameworks dethrone Rails or not. The negativity is unnecessary.
This came across to me as a long rambling rant which amongst other things interchangeably referred to ruby as both "ruby" and "rails", but i got the feeling it was more about bashing rails.<p>Rebuilding something because the older stuff is is "bloated" and the new stuff is somehow superior always seems like a weak excuse to me. The new stuff quickly becomes the old "bloated" stuff and you're back to square 1. In fact I have no doubt that within 5 years something else new will come along and perhaps Giles will be writing another article about "Node Went Off The Script: Why I'm Rebuilding Clyde In TheNextBestThing".<p>Personally I would rather concentrate on making something which is actually good in its own right.
tl/dr Rails is not the new hotness anymore, the Rails 3 rewrite was a waste of time and it's strayed far from its initial ease of use. Node & Coffeescript, the new hotness, are awesome, here's my new video series, the first one's free.
I agree Rails has evolved to become many of the things that DHH first complained about in so-called Enterprise frameworks. But that's because a wider audience has wider problems to solve than Basecamp 1.0. At the end of the day, Rails 3.2 for all its complexity still "gets" server-side web development better than the antiquated Java frameworks that it replaced ever did.<p>What Rails really never got was client-side development. Even as it ushered in the era of easy AJAX support in 2005, it was based on a poor fundamental understanding of how to do good client-side development (to be fair, no one really had that understanding for javascript apps back then because we were lost in the weeds of browser compatibility). Over the years it's improved only in fits and starts, with bandaids and ancillary features like the asset pipeline and coffeescript (RJS was probably one of the worst ideas ever hyped).<p>So to me what the new crop of frameworks bring to the table is rethinking things from a deep understanding of client-side development, in much the same way that Rails rethought things from a deep understanding of server-side web development. I don't hold much hope for Rails to get good at client-side development due to the fact that DHH doesn't really <i>like</i> client-side development (as indicated by some of his commentary in the Basecamp Next caching article). He likes coffeescript because it's more like ruby and thus less painful, but the fertile ground of client-side development techniques will never be tilled by someone with this attitude. Javascript may not be the prettiest language, but it is powerful and paradigm-shifting when embraced to its fullest.<p>All that said, server-side ain't goin away, and Rails is still one of the best ways to develop server-side apps. If Rails was fast I would happily stick it on the server as I explored client-side development independently. Unfortunately I'm really starting to feel like Ruby performance is holding me back and that it will be impossible to fix regardless of how seriously Ruby and Rails core get about performance. Who was it that said "everything can be fixed with another layer of indirection, except performance"?
Has anyone made a comprehensive comparison of the top web frameworks and how mature the libraries/plug-ins/services around them are?<p>Frankly, Rails and Node.js seem to have much more in common than apart. Both are based around relatively inconsistent languages (though conforming to some BDD or Good Parts style can help), both have deeply flawed runtimes in terms of performance and especially parallelism, and they seem to have extremely high overlap in the people who program in both frameworks.<p>What I care about is libraries, plug-ins, and services. Specifically, if I have some new web task, what I care about is that there is some library/plug-in/service that exists to perform that task (e.g., user auth, Facebook API, exception logging, Heroku, resque, state machines), that the library/plug-in/service is mature enough that I can pretend it works, and that it has enough of a community around it that it won't break in the future.<p>Is there some comprehensive list of use cases, plug-ins/libraries/services, and relative maturity of those plug-ins/libraries/services across web frameworks? For example, the maturity of the various ORMs across frameworks, or the various testing tools, or the various Facebook libraries. It would be great to see it change over time, and to know when to jump ship to the next flawed language/runtime that has good plug-ins/libraries/services.
"It's a bloated meta framework that requires enormous amounts of peripheral knowledge to understand."<p>Unfortunately I think that might be because web development requires enormous amounts of peripheral knowledge to understand. It might be overkill for the first prototype of a new web app, but after a while that web app will probably acquire lots of peripheral hacks, too.
Glad you published this Giles. I really think you hit the nail on the head in your criticism of rails, and not necessarily ruby. I think some of the framework decisions in the 3.0 release were kind "abstraction for abstraction's sake" moves. In other areas, I think the framework has pushed beyond what the language is capable of handling in a reasonable manner, from a performance perspective (I'm talking about development efficiency performance, not production performance).<p>No doubt, these features were implemented with good solid principles in mind. But, imo, at this point in Rails' lifecycle as a framework (something that has been in public release for 5+ years) performance (both production and in development) should have held more weight in the decision-making process than doing things for what appeared to be because they were the "right" things to do.<p>For one, the startup time of the framework is just, atrocious. If it takes me 15-30 seconds to boot up the framework (and on my quad core dual processor 8gb ram MBP running a small-to-medium-sized project, it does) just to run one test, that is just plain ridiculous. A lot of that time is spent loading the large dependency graph of gems with which most new rails apps these days are packaged. I think this trend -- rigorous packaging open source library code as a first-class dependency, instead of writing it yourself, or snapshotting that actual code in your SCM -- is a good thing. But I think the performance characteristics of the ruby language, and of the ruby community, make trying to cram 150+ gems into the load path and then require all of them, serially, in a single thread, unacceptably slow for modern web development.<p>I will say that I think the situation has improved quite a bit more recently, and the focus seems to be honing in more on development performance, but it might be a tad too late for me. I'm focused more on building api's than I am building "web apps". For that, sinatra is just a much simpler, faster and elegant stack IMHO.
I can't say much about Rails, but I will say that after doing a CoffeeScript, Backbone, and require.js with clientside compilation project -- debugging is <i>pain and tears</i>. Even though Chrome supports source maps, CoffeeScript doesn't, and the error messages raised by require.js are of the "you fucking peon" variety referred to in the article.<p>I like CoffeeScript and AMD, but they aren't ready to be in the same room together. Hopefully, jrburke's almond will let me build a serverside compilation strategy that isn't awful to debug.<p>On the other hand, Backbone kicks ass, and I wrote a DOM-twiddling Knockout.js inspired data binder called _outback.js_ to make it better. It's up on github (politician/outback) if anyone's interested.
I'm not ready to ditch rails yet, but I think the framework (and Ruby itself) needs an intervention. Bundler, Ruby 1.9.2, 1.9.3, and a ton of gems are all making life harder than it used to be.<p>I have faith the community is self critical enough to identify these problems and fix them. Posts like this are needed though to give us all a kick in the ass and make things better.
Rails is very suited to big API projects now - but there is no escaping the fact that all the action is moving clientside.<p>The Rails learning curve is now very steep for new users and the accusation that it has become all it set out to solve is a fair one.<p>For me it's a mature/stable framework and ripe for using commercially now, but I can understand the new kids gravitating to something more disruptive.
<i>As Smalltalk creator Alan Kay said: "Once you have something that grows faster than education grows, you’re always going to get a pop culture."</i><p>This is so true in so many levels, that I feel I bit sad just thinking about it.
While I agree with most of the points, you can just do<p><pre><code> require 'bundler'
Bundler.setup
</code></pre>
In your Rakefile, and never have to type bundle exec.<p>This is exactly what I use in my commandline Node.JS project which is BDD tested using cucumber and aruba.
This is garbage, why is it being voted up?<p>Rails is <i>not</i> bloated it's modular and quite simple if you understand ruby and can read - look at the source. That said his to address his _complaints_:<p>* Rspec / Testing <i>is</i> slow as it has to reinitialize a whole rails stack every time it runs - run it async smartass it's what you're preaching, use inotify or fsevent with watchr or guard.<p>* Bundle exec for Gemfile changes? This guy is inept.. async yet again with inotfiy / fsevent<p>* HTML5 - It's a server side framework, if you want HTML5 you do it in the markup or the included coffeescript pipeline, why not pure coffeescript / javascript? because I value my time and sanity over the new hotness
FTA
> <i>I literally need to type bundle exec every single time I want to scratch my balls. I don't like having to type bundle exec every single time I scratch my balls. I named the task balls, so I can type rake balls, because it rakes my balls, and Bundler pisses all over my tidy syntax, but am I going to complain? Am I going to point out that asking me to type bundle exec every time I want to scratch my own balls shows incredible contempt for me as a user</i><p>Really? This what passes for A vs B discussion at the top of HN?
This is not a fashion show, or "my framework is leaner and executes faster than yours" competition. "Rails is old and busted; Node.js is the new hotness." Seriously? is this the mentality we should adhere to? What happened to the problem solving, or building stuff? Old is bad, eh? If that is our credo we should quit javascript altogether because it is oldness itself!<p>Please don't get me wrong but I see a problem here. The attitude is quite problematic. You choose a programming language based on what do you want to achieve, and how that language helps you to achieve, not on buzzwords. If I want to build a weblog application, I won't try to learn c++ for example. Not because "it is old and bloaty and requires a peripheral knowledge", it won't help me to solve my problem. And I wonder, what kind of programming language does not require peripheral knowledge?<p>I can go on and on about how hard is it to do such a shift in a corporate environment and maturity of a codebase is good, and code is not a thing that rusts but I think I made my point.<p>tl;dr: you choose programming languages based on what you want to do and how that language makes your job easier; not because it is new or old or bloaty or "lean".
As far as Node goes, there is still no "holy grail" framework that can help one build a web app seamlessly across both client and server side. The momentum will definitely shift heavily towards Node if and when that happens. Right now, there is still a lot of manual glue work needed to set-up a client side MVC app using Node + Backbone while also taking care of graceful degradation etc.
That's called throwing the baby out with the bathwater.<p>There might be a few issues when your newbie & want to kickstart a rails app, but they're easily overcome with a good template.rb (the later being as small as possible, many of them <i>are</i> bloated).<p>Also I find the Rails 3.0 bashing cheap and unfair since it's a huge step forward in terms of robustness, modularity & coherence.<p>But yes I agree the fine tuning you need to get your quicky rails app up & running with your special flavor (eg: rspec, haml, inherited_resources etc) should be better advertised & explained.<p>I also spend more time on js nowadays but with backbone.js, throwing out the legacy of rails on the server seems a huge waste of time at this stage.
Now it is risky to bet on Node.js. Especially for bigger projects. I'll wait two years and see how Node.js evolves. For now I'll continue to use RoR.<p>I really would like to see something like Google Dart to succeed. Node.js feels like PHP in early 2000s.
I guess the first of many things I don't understand about this post is that Archaeopteryx is not built in Rails, has nothing to do with Rails, nor is it a web site nor has anything to do with http nor even requires active_support or similar.<p>I know some people think Rails is going in the wrong direction - I disagree, but it's a topic on which reasonable minds can differ. This post may have something valuable to say on that subject, or not. Regardless, it's got nothing to do with the author's music library and I suspect the only reason Rails was mentioned at all was to stir controversy and bring attention to an otherwise unrelated announcement.
tl/dr What I take from the post: Guy has no fun with underlying technology, rewrites from scratch with more fun framework, does not care about current users, thinks this is offset by future users who can more easily use coffeescript.
Rails is missing the V8-like phenomena Node.js has.<p>Imagine if we would see something like V12 in the future, a JavaScript engine running on nVidia CUDA. That's where I would like to run my Node.js from ;-)
Right on.<p>Being old enough in this industry I have seen technologies come and go, while a few are able to stick around for a little longer.<p>The Node.js hype will be gone in the next 5 years, being replaced by whatever is hype, while giving me and other consultants lots of money to port existing applications to more mature enterprise level technologies.
Can't Rails and Node play together (see: <a href="http://www.perfectline.ee/blog/optimizing-ruby-on-rails-application-with-nodejs" rel="nofollow">http://www.perfectline.ee/blog/optimizing-ruby-on-rails-appl...</a>)? To me it falls back to 'the best tool for the job'. Both Rails and Node have their strong points.
I don't get the frequent comparisons (mostly by bloggers) between Rails and Node.js. The things you most want Node.js for you don't really want to be doing in Rails, and vice-versa.
I'm going to preserve the best thing I've read in awhile in a HN comment:<p>"And as for overly ceremonial code, let me tell you about my balls. I actually have a rake task to scratch my balls. Somebody told me a good entrepreneurial programmer writes code to scratch their own itch, and I took them literally. The code uses a serial port to power an Arduino board. The Arduino's got a servo with a backscratcher attached. I keep it on a shelf at scrotum height underneath my desk."
We are developers and we can learn and use any language if we just know the concepts of what we are doing. Same thing, different language... who cares. Hope it's the last "why I switched" blogpost because I never found them useful.
The people who learned with Rails always make me chuckle. The only reason Rails got anywhere was because of scaffolding and the hype that surrounded it - which of course already existed in some form in other platforms. It's completely revisionist to think that platforms like Java or .NET didn't already have application creators and ORM.<p>The genius of Rails and DHH was the marketing which isn't surprising seeing as how much he loves Apple for it. They can always try to say the other platforms were bloated, but this is coming from people who thought full Unicode support at launch wasn't necessary.
Recently, I actually started to learn the Ruby spec because I was offered a well paid work in Ruby for many months to come, and I thought it would be cool to work in something new. Besides web dev, my past is C/C++, then many years of Java, and recently Node.js. I turned the Ruby project down because very early down the spec I realized that I don't want to work with technology belonging to 5 (or at least 2) years ago, language design-wise. I'm now on Node and I have great fun. The JS community is great, the Node.js subset even greater. The NPM repository is exploding with new libraries. You can see a new framework literally every week, but you also have tested ones to rely on. Good patterns are taken from anywhere, anytime, and new ones are being created. I'm not saying this to bash Ruby, it's just my personal story. I approached Ruby with optimism, but what I saw was a badly designed language. I can understand it being so popular compared to Java, I know I would be Ruby coder today had I discovered it during my Java days. But today I have Node.