Over my career I have made a living as a generalist. I have been a jack of all trades and a master of none. It has served me well in that I am able to move from one technology to the other quickly and make myself productive. Where it becomes a problem is deep knowledge. I am constantly digging for the things that aren’t basic knowledge. How do you make a product like WCF or Windows RT do more than just “Hello World”?
As an architect I need to be a jack of all trades. This is what helps me to bring the big picture of a project into focus for developers with different skills to accomplish the goals of the project. It is a key when the mix technologies crosses Windows, Unix and Mainframe with different languages and databases. The larger the company that the project is for the more likely this scenario will arise.
As a consultant and a developer I need to have specialized skills in order to get the job done efficiently. If I have a SharePoint or Windows Phone project knowing the object model details and possible roadblocks of the technology allow me to stay within budgets as well as better advise the client on technology decisions.
What is the solution? Constant learning and associating with developers who specialize in a variety of technologies is the best thing you can do. You may have thought you were done with classes when you left college, but in this industry you need to constantly be learning new products and languages. The ultimate answer is you must generally specialize. Learn as many subject areas as possible, but go deep whenever you can. Sleep is overrated. Good luck.