Much as I love the thesis of this post (I love it's formatting much much less -- more paragraphs breaks please) I don't agree that it is in fact possible to be an omni-competent generalist. Switching between Rails and Django is definitely pretty easy, but that experience isn't going to help you switch to, say, programming DSPs, or designing streaming algorithms, or architecting massively concurrent systems. There definitely is specialisation, and if you don't see it it's because you're blind to the box you're currently living in.
Total agreement with "You should always strive to become better!"
> You're blind to the box you're currently living in.
I definitely feel this all the time. Just about the time I start feeling comfortable building webapps, I step back and see _all the programming_ I'm not doing. Writing webapps in Ruby, Python, PHP, JavaScript in any number of flavors (Rails, Django, Flask, web.py, node, Backbone) still has the same feel, because it's all for the web; there's a common goal.
"Sprachgefühl" is perhaps a useful word here — having a "feel" for languages is all you need to start learning new ones. It's even truer for programming than it is for natural languages.
Total agreement with "You should always strive to become better!"