Learning Web Development : Django vs Node vs Rails vs Others

JavaRuby on-RailsDjangonode.js

Java Problem Overview


I know Java and Python(with some Django) and little bit of Ruby(no Rails) and no Node.js and probably there are more that I am not aware of.

I am planing to start learning web development and its complete stack, but when I see around I see loads of options and this confuses me. I need suggestions based on the following params

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

Please throw some advice

Thank you

Java Solutions


Solution 1 - Java

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 - Java

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 - Java

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:

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:

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 - Java

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.

Solution 5 - Java

JSF 2.x becomes nowadays become so popular, and more UI centric framework in combination with primefaces,if you need rapid application development in JSF ecosystem like rails you should consider

http://www.springfuse.com/

http://www.myeclipseide.com/documentation/quickstarts/ME4STutorialScaffoldingJSF/scaffoldingjsfarticle.html

Spring Roo with JSF Addon http://java.dzone.com/articles/jsf-20-spring-roo

1)ease to learn (http://www.vogella.com/articles/JavaServerFaces/article.html)

2)ease to build and iterate

3)ease to deploy (like free and cheap hosting solutions) 

   a) http://www.mkyong.com/google-app-engine/google-app-engine-jsf-2-example/
   b) http://blog.jelastic.com/2012/06/11/how-to-deploy-primefaces-applications-into-jelastic-cloud/

4)popular (http://www.primefaces.org/whouses.html)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondaydreamerView Question on Stackoverflow
Solution 1 - JavaslapthelownoteView Answer on Stackoverflow
Solution 2 - JavashackerView Answer on Stackoverflow
Solution 3 - JavaLanceView Answer on Stackoverflow
Solution 4 - JavaBuhake SindiView Answer on Stackoverflow
Solution 5 - JavaSamView Answer on Stackoverflow