This is a rather general question about how best to further yourself as a programmer both professionally and personally.
As good Pragmatic Programmers, we have been taught that continual learning and self-improvement are things that we should consider a natural part of our lives as technologists. Part of this process is keeping abreast with the latest developments and changes in the technology, languages and frameworks that surround us.
Time is unfortunately a finite resource, limiting our ability and scope about what we can learn and to what degree.
My question is therefore: Is it better to develop a broad range of skills with a large variety of languages and frameworks - but never being able to call yourself expert in any, or is it preferable to develop a very focused set of skills but to the level of a zen-master?
As a further sub-topic, is it better to learn similar/related languages (C/C++/C#), which you can grok very quickly. Or take the time to learn a more disparate selection?
I'm thinking of this in both the context of personal development, and ability to further a career. Obviously you can argue that a greater perspective of different languages and frameworks will make you a better overall thinker, but what about a better overall earner?