Broad Knowledge vs Narrow Specification

As far as I see there are two ways of learning things: one is to touch upon a lot of subjects from different areas to some extend and be get more or less deep in one particular, another is to ignore a lot of stuff out there and just focus on one subject deepest possible. For instance one may be quite familiar with different programming languages like C, Java, Perl, PHP, Visual Basic and programming for different platforms, in addition know a bunch of things about system administration on different OSes and so on and so forth and be more advanced let\’s say on Linux administration or whatever. Another person may not know all of those things, but be very very good in Java programming or any other field.

Until now I was more of the first type of the person where I was getting my hands on everything I could and meanwhile I was doing Linux administration (especially in MS Windows network environment) better than anything else. But recently I thought that maybe I should change the approach and just focus all my attention on one thing to get to do it perfectly well? What is the way you do things?