Learning Web Development : Django vs Node vs Rails vs Others [closed]

Solution 1:

Ruby on Rails:

Easy to learn? - Yes - excellent documentation at guides.rubyonrails.org and a great tutorial at railstutorial.org.

Easy to build and iterate? - for sure - rails lends itself to agile and iterative development very well.

Easy to deploy? - To deploy (at least for small apps and while learning), you can't really get easier than using heroku.com - git based push and it's free.

Popularity - very popular!

Django

Easy to learn? - like Rails, Django has excellent documentation at docs.djangoproject.com/en/1.3/. Maybe a slightly steeper learning curve (purely opinion here, but I find rails tends to be "ready to go" whereas django needs a little bit of config before you get into development).

Easy to build and iterate? - again, like Rails, once you are up and running with it, it is pretty easy to iterate.

Easy to deploy? - not as easy as Rails. There are heroku equivalents gondor.io, djangozoom.com, stable.io but they tend to be in private beta. That said, I had no trouble getting an invite to gondor.io.

Popularity - it's popular, but the user community is a little less....lively than the Rails crowd.

Node

Easy to learn? - um yes and no, easy to put a quick hello world server together, but more tricky if you want a full scale app. I would stay away from this in the first instance - it is new and rapidly evolving. Also, Node itself isn't comparable with Rails or Django because the latter two are frameworks whereas Node is more of a barebones set of apis that you could use to develop something. You could opt for a framework like expressjs.com which is more in line with Rails and Django. I've not used it so I can't really give you an opinion.

Easy to build and iterate? - easy to build - yes, easy to iterate - yes.

Easy to deploy? - you can head over to no.de and apply to get a smartmachine - it is free at the moment and easy to deploy - git based.

Popularity - it's gaining.

Solution 2:

A few notes from a Django dev who's spent a bit of time exploring Node.js:

  • The asynchronous programming approach in Node.js is conceptually more difficult. While you can take a similar approach in Django or Rails, it's not common to do so.

  • Node.js is really, really fast out of the box. But part of the reason for that is that it doesn't include very much OOB.

  • The Node world is very fragmented right now, with dozens of Node libraries, solutions, and frameworks all competing for attention. Express seems to be the most popular framework for Node right now, but we're kind of in a waiting game to see what shakes out. Django and Rails already have all the bits you need to create advanced applications without having to glue everything together yourself.

  • The most popular framework for Node.js right now is Express, but Express doesn't even include a way to connect to a database. You have to add that on. Nor does it include an ORM - you need to add that on. I looked into some Node ORMs, but they didn't seem nearly as complete or sophisticated as Django's.

  • Django is a complete, cohesive, end-to-end solution, where all the parts fit together seamlessly ("the Mac way"). Node.js is a baseline on top of which you pick your own framework, your own ORM, your own db driver, your own URL routing system, etc. etc. ("the Unix way").

  • There are advantages to the Unix way, but IMO systems like that are more difficult to get off the ground and more difficult to maintain. The parts don't necessarily talk to each other like you'd expect, and the whole project doesn't get upgraded at once. End-to-end systems like the Mac software/hardware continuum and Django/Rails are huge wins for productivity. For comparison, note the relative obscurity of Python's TurboGears (a bunch of disconnected parts) compared to Django. Django ate TurboGears' lunch because it's cohesive and consistent. If productivity is important to you, you're going to be more productive working in a more mature framework. A Node.js framework that fulfills this vision will arrive someday, but it isn't there yet.

  • Express doesn't provide the range of helpful command line tools, data API, etc. that Django or Rails provide.

  • Node.js frameworks certainly don't include anything like the Django admin, which is a massive productivity win for Django devs.

  • Purely my opinion, but Python just feels more elegant than Javascript. Code is more compact and more readable. Not a big hurdle though, just a preference.

Overall, Django feels like a "batteries included" platform while Node feels more like a rummage sale.

Node/Express are really young. Exciting in ways, and showing huge promise, but how long will it take for Node.js frameworks to feel competitive with mature frameworks? I don't know.

Solution 3:

In terms of job opportunity, I'd say you'll get a good job if you go with Rails or Django. Only a few companies are really paying for Node.js developers now, because it's just not big enough yet.

In terms of startup opportunity, Rails all the way. Most of the fun and exciting startup opportunities are backed by Ruby on Rails. I have come across a couple using Django. But companies like Groupon and Living Social are all written mostly on Rails. Ruby is almost twice as popular as Python on Github as well. And there's this Quora question:

  • Why do so many startups use Ruby on Rails?

In terms of the future, Node.js is the way. HTML templates are starting to be written almost entirely in JavaScript anyways (jQuery.tmpl), so making it so you only have to master 1 language, JavaScript, makes your skill set that much more powerful. And node.js really lends itself to real-time web apps. Plus, cloud deployment platforms like Heroku, which were originally 100% ruby, are also starting to support Node.js. There's others doing it for all languages too, like dotcloud.

There's still a lot of work that needs to be done to make Node.js as fully featured as Ruby on Rails (so Rails is still the standard, for now), but the basics are all there:

  • express.js: web framework
  • jade.js: html templating framework
  • socket.io: real-time web apps

If you want cutting edge, definitely Node.js. If you want

  1. ease to learn
  2. ease to build and iterate
  3. ease to deploy (like free and cheap hosting solutions)
  4. popular

Ruby on Rails.

Solution 4:

Popularity (point 4)): Java Server Faces (JSF) Technology. As from JSF 1.2 to the current JSF 2.1, it's now coincide with Java EE 5 and Java EE 6 respectively. That means that it's now a Java EE Standard. Also, an advantage will mean that Web Application Servers (such as JBoss AS 5 and higher, GlassFish, WebSphere AS, Oracle AS, etc.) that is fully Java EE compliant (5 and higher) can run JSF (no need for configurations, so that solves point c)).

There are various tutorials out there for JSF, e.g. in CoreServlets. BalusC wrote a simple and excellent tutorial on setting up and writing a simple JSF Web Application from scratch.