It's not as 'hip' as Rails/Django but you will be very productive and you will have the benefit of the plethora of Java libraries out there that are performant and reliable. Not to mention the great profiling tools.
A great example of this stack, is that it powers stackoverflow.com
Jersey/JAX-RS are good, alternatively if I felt like taking a bit of risk I might give Play2 a try.
The Java/JVM ecosystem just has too many positives going for it (awesome VM, libraries, great community, huge developer pool) to really consider another stack for a 'large' web app.
1. This is what we were most experienced in. It is important to use what you know in a lot of circumstances because otherwise you'll have a harder time getting off the ground with your projects. Sure, Java isn't hip/cool in a lot of circles, but it gets the job done and there is a ton of support for it. Libraries like Joda DateTime/Money and Jackson are lifesavers that you can't find anywhere else. Do you want to build a business or spend time working on your tooling?
2. When your is new, you pivot your code a lot as you figure out the best way to do things. I can't tell you how many times we've said: "Wow, so glad we used a language that is easily refactored". Being able to safely make huge sweeping changes across your entire codebase without worrying about whether or not you are going to have runtime errors is golden.
3. We are hosted on top of Google AppEngine using Objectify to talk to the datastore as our database. This is another huge win for us. We get unlimited scalability with all the benefits of never having to carry a pager, manage servers or databases. Deploying code takes 2-3 minutes and is super simple. This means more time for adding features, which is very important when you are just starting off. Python is another good choice here, but lacks #2.
I'm definitely not a huge fanboy of Java any longer. I do feel that it hasn't grown with the times and I think Java has too much stuff to type out (even with Eclipse doing most of it for me). That said, I do see Sunacle actively working on it and 3-5 years from now, I bet there will be a shift either back to Java (as Java8 starts to get more widely used and brings the language more current) or to another language like Ceylon, which unfortunately just isn't quite ready yet.
Why? You can scale very easily, write code in a higher level language that has lots and lots of libraries, have map reduce out of the box, but you don't need to really worry about your DB dying on you.
Here is what you do need to worry about in this set up: Eventual consistency. But I would argue that any web app at scale needs to worry about it. So if you are coming from a company that already has lots of users and you are writing a new app that will be in the hands of lots of people very quickly, go with Riak + Tornado/Twisted. You'll probably want to set R = 1 or 2 and pay special attention to conflict resolution.
I think Clojure makes a lot of sense for the web, emphasis on immutability etc. I also am a sucker for lisps, and I think the Hiccup templating system is nice. Noir seems to do middleware well. Plus, real nerds get on that ClojureScript.
Then again, I kind of also believe that the back-end really shouldn't do much more than process CRUD commands, and that most of your serious application logic should happen on the client. So it doesn't really matter. Pick something with a DB adapter you're comfortable with and get to javascripting.
* The property list pattern and inheritance-like behavior are very natural and convenient with maps and records. I think that sort of thing is very helpful with large applications.
* Clojure has the ability to abstract the database (I'm thinking of Korma here) in a way that preserves and works with the relational model more directly than ORM.
Clojure's ability to leverage Java libraries also means you're unlikely to ever get stuck implementing common functionality from scratch[0] when another language would have a library.
[0] I did, however once write a CSV library for Clojure because it seemed easier than using an existing Java library for the subset of functionality I needed or writing a wrapper.
I am starting to rebel a bit against really fat JavaScript/CoffeeScript/ClojureScript clients as the default implementation strategy. For many apps, using old fashioned forms, render on the server, and after you have functionality convert bits to AJAX as needed to make the web app nicer to use. It is an economic decision: is the cost of a slick fat client justified for a given project?
Use what you know and like and just build the app. Scaling is a nice problem to have, but don't solve it until you have it.
And for a large app, use what the team knows. Both dev and ops.
Scaling is a nice problem to have, but don't solve it until you have it.
And since scaling issues are mostly matters of architecture, rather than language, see rule one: "use what you know."
I like Node.js + Mocha
* Development in Node is super fast
* Mocha makes TDD or its variants really fun
* Node feels natural for webapps (the Hello World example is an HTTP server)
* JavaScript is a really flexible and elegant language if you get past its minor quirks
* The community is fantastic
* The built-in package manager is fantastic
* The open-source libraries are fantastic (pick the right DB for the job, there are good drivers for all of them)
There's lots to say about Node. No language is perfect for every task.
EDIT: fixed spacing
Given my current project where i am the sole developer i dont want to know how much more time i would have spent coding in e.g. PHP.
Rails (and in particular the RailsApi gem) makes prototyping and putting together a SOA like this easy and fast. Except for the API client, which I don't yet have a good solution (ie, what ActiveResource was supposed to solve).
If you want to decrease development cost go with an ecosystem that most of your developers have mastered. Python, PHP, Ruby, Java, .NET, whatever. Pretty much all these languages have great frameworks these days to allow for faster development.
I personally go with Ruby because they were pretty much first on the scene with their gem ecosystem (which is massive), they have a lot of cool and smart developers in the community and it's overal a great experience. Easy to pick up too with all the resources that are out there.
But whatever you do don't force a language along with it's ecosystem that your developers don't like. Listen to the dev team and know that every language has great potential. I'd come back and ask what frameworks should I use to build a high performance site as quickly & efficiently as possible given I work with language X. Maybe the dev team is unaware of recent awesome frameworks in the language they know & love.
Do you mean starting to build a large webapp today?
I would recommend Ruby on Rails or Python/Django - they allow for fast prototyping and easy collaboration.
See my post here for specifics: http://forum.linode.com/viewtopic.php?t=9230&p=53085#p53...
For the Web UI I recommend GWT by using Eclipse and the GWT Designer GUI web designer they bought from the excellent folks at Instantiations back in 2010.
https://developers.google.com/web-toolkit/tools/gwtdesigner/ https://developers.google.com/web-toolkit/tools/gwtdesigner/...
If you have customers that demand a platform GUI application which accesses your web backend, Google donated WindowBuilder to Eclipse.
Why?
- It's easy to get things done fast.
- There are plenty of classes available online that'll make things even easier.
- It's easier to maintain (IMHO) than some other languages.
- It'll run on almost all web hosting services cheaply.
- It's scaleable.
If and when you need something more powerful, a seamless transition can be made over to another language.
There are simply other languages which have all the goodness you mentioned of the "Personal Home Page"(PHP) language, as well as some more advangtages over PHP in a long term development procedure.
But PHP is quite good. Especially PHP 5.4, which has lots of nice things like short array syntax.
However, premature optimization and all that, don't choose Java because its faster than Ruby in some arbitrary benchmark. Choose Ruby because it makes you happy and you can meet business objectives faster and easier with it.
* Groovy & Grails * Ruby & Rails * Python & Django