I have no experience in web development beyond some HTML/CSS (+ Bootstrap) and some JavaScript.
Which web framework is ideal for developing SaaS applications like Basecamp and Harvest?
However, for a complex SaaS (any SaaS can get here really), you will need to make some sane choices around modularity and building separate, loosely coupled services before things get out of hand. Node.js (or any of its lightweight frameworks on top) is probably a little stronger than Rails in this regard.
This service-based approach is more difficult with Rails as the community hasn't blessed any consistent conventions around doing it. Any custom convention you create to integrate multiple Rails applications will likely break compatibility with future Rails framework upgrades. There are many companies that are paralyzed and stuck on older versions of Rails because they ran into this problem.
All that being said, Java is still a great choice if you make some modern choices and will help you move forward without being slowed down by learning a new framework. Check out the Modern Java Series here: http://blog.paralleluniverse.co/2014/05/01/modern-java/
I think Node.js is hype right now and you'll be betting on a technology that may or may not have a good market share.
RoR is better and have tons of documentations and blogs.
Node.js right now just got forked. Javascript isn't a particular pretty language compare to Python or Ruby. Loosely type and dynamic makes it kinda bad.
I have yet to see any body mastered Javascript as a language and Javascript 6 or ECMA or whatever is coming out. So there is even more stuff to learn. The dev pools for javascript for backend is sparse and their language mastery, from my experiences, for javascript is very low. With that in mind hey you didn't learn prototype OOP yet but guess what we're going to add more to the language and hope that those dev catch up to all of the changes?
yeah... That's a con to be at least. And also Ruby while they're changing with every version it's small iteration, most of the stuff is mostly in place.
Javascript is missing a few construct to build large code base, namely module which they will have a standard soon, and going to add promise construct cause node.js callback hell is bleh. So the language wasn't multi purpose in mind so it's playing catchup.
You can argue that you can do anything with a turing complete language. Sure you can, but how easy it is should be a factor.
Erlang got primitives for spawning process and such. It makes it damn easy.
Javascript got little construct for building large code base. THere are tons of libraries to fix this but still.
I think Node.js ss better as a middleware technology and even then Go would be a better choice with better toolings.
Huh? This is a load of crap. Frameworks, and even languages, have nothing to do with modularity and building services. You can do this in any language and any framework. Modularity and loose coupling are decided by the developer(s) writing the code and if you think a particular tool will solve this for you then you have a grave future.
I respectfully disagree with this statement. Many frameworks actively encourage a monolithic architecture through conventions, all to increase productivity during the initial construction phase of a project. If you're sprinting to launch a project, modularity and loose coupling matter a lot less than sheer productivity to churn out as many features as quickly as possible. Rails was designed with this mindset and it excels in it more than any other framework out there.
Refactoring to modularity and loose coupling down the road after choosing something like Rails is non-trivial, especially when compared to the rapid pace the development team enjoys in the early stages of using the framework. So one needs to be aware of that before diving in.
Other lightweight tools like Node.js front load the cost of modularity by forcing you to design on your own conventions early on. If you know the product is likely going to get complex very quickly, it maybe worth taking on the front-loaded cost of these tools.
There is no magic bullet so use the programming language which you can code the best, faster, easiest in. Framework is second.
Django, Rails, <insert php framework here> all do the same thing. 90% of the time you are going to be fighting fires, so develop in the language you like.
* You are a java developer why not use a java framework?
There is the time for development and the time for learning.
What does "future-proof" even mean in this context?
> In this day and age you're probably building a single page web app
Uh.. no. A tiny percentage of new web applications are single page applications and of those most of them don't need to be single page applications. The web would be a much better place if people thought in terms of "What functionality does this web application need?" instead of "Does this application need to be a single page application?"
Both are great frameworks for SaaS
We see questions like this on HN quite often. When starting a new project that you would like to support yourself on, you must ask "Would I like to make a successful SaaS product?" or "Would I like to learn a new language/framework/ecosystem?". I am sure some would argue that the language/framework/ecosystem can really make or break a web application. However, there are successful business built on just about all of them:
Stackoverflow - .Net
Facebook - PHP
Amazon - Java
Bloomberg - Ruby (could have said Twitter until recently they are migrating to Java, interesting?)
Reddit - Python
DuckDuckGo - Perl
Orbitz - Lisp
OkCupid - C++
Of course many of these organizations use a number of languages and frameworks. The point is, when they started they used what they knew and went with it. My suggestion, start building! Then someday I can use your super successful application in a list like this!
[1] https://news.ycombinator.com/item?id=8677556 [2] http://www.teamten.com/lawrence/writings/java-for-everything...
On the other hand, I recently learned that Perl is making a comeback with a couple of popular web frameworks. I haven't programmed in Perl since the last century, but I remember it being a fun language!
"Node" is not a web framework. There are web frameworks for it, with varying degrees of completeness. There are lots of moving parts.
Rails is a (more or less) complete ecosystem. There are lots of moving parts.
Django I don't know enough about to speak in any meaningful way. Python-the-language is fine.
Ruby and Python OO will be more familiar to you than JavaScript's version.
You may want to do a client-based app; this means JavaScript. Go ahead and learn that now--it will serve you well, regardless of what you use on the client side. On the server side you have essentially unlimited choices, including Java. Serving JSON is fairly easy in any language.
There are a bunch of other issues to consider as well, like data storage, deployment, etc.
This way you don't have to expend any extra energy on the cognitive overhead of switching between languages when you switch from writing something in the client side app and then something on the server side. To be fair to the other languages, I don't think this is a huge issue in day-to-day development, but from my experience is was an enormous issue when I was trying to learn a new language and I actually had to think about the syntax I was writing.
My biggest suggestion though is not to do it in java and instead expand your horizons - if I plotted my strength of a developer against time on a graph there would be long flat sections interspersed with sharp upward inclines. Those inclines? For the most part, short periods of time when I started working on learning to program in a new language.
SaaS is essentially a CRUD application serving some specific need - Rails is good about letting you focus on what your are building (e.g. the house) and not spending enormous time on infrastructure (e.g. plumbing, wiring, etc.)
Edit: I agree with mattwritescode: it doesn't much matter which one you choose since they all will work. From my experience with Java though, you could spend a lot of time just getting infrastructure working - framework, JDBC, etc. Rails will have that out of the box (maybe Django too)
If you choose to do Java, I am a big fan of Google App Engine because it forces you to write scalable code from the beginning.
Django is also a fine choice but Django lacks learning resources. I mean seriously, why aren't you Django guys writing books and recording screencasts?