It may be just me, but I tried using FreeBSD on my laptop. But sadly some software do not have distribution for BSD. I could not get eclipse working. And Android SDK is not available for BSD too. And it was a downer for me.
What I find appealing about Gentoo is its documentation. One of the best documentation on a Linux distro. Arch is very well documented too. I switched to Arch from Fedora and happy with it. But on one of my netbooks, I plan to use Gentoo, in spite of the scary tales of huge compilation time. I checked out Slackware. Its documentation is sparse. I can conclude that it is not for non-expert users like me.
Thank you. I was under the impression that Spring MVC (actually Spring, in general) requires a lot of XML configuration. But, maybe it's the best bet now. I checked out Play 2.0. It's a nice framework, but documentation is sparse, which is a show-stopper for a newbie like me.
Adding a Haskell-like list comprehension (or Python-like) is not Java-ish anyway. You anyway need to add new syntax and since SQL is already known to most developers, I think it will be easy to learn for the most.
LINQ is a query/update language for data structures. The beauty of it is that it can be used to read/update/modify vectors, lists, maps, etc. So, you just have one API to learn. And this API is easy to learn because it is modeled on SQL.
Yes, I understand the problems with "magic". One good thing about magic is that it reduces verbosity though. I have been programming in Rails for a few months now. I still prefer Python explicitness over Ruby magic.
Thanks for your comments. I am looking for a Java framework to learn. And Tapestry seems like a good candidate. I have just written a hello-world application in Tapestry. And I have no experience in developing using tapestry. My understanding from tapestry 5.2 docs is
1. Tapestry retains the state of the pages and components. (you need to annotate your state variables though). So, I am surprised that you need to reinitialize the field every time.
2. Tapestry provides parameter blocks to pass parameters to a component. It looks similar to a function call. What am I missing here?