I think it would be insane for someone with little or no experience in the field to devote years to a specific skill (say, complete mastery of Postgres), before working on problems in the real world.
Even in areas where failure has high costs (say, medicine, or war), you don't go off and try to master a specific skill before doing anything -- you master some basic skills, practice using those (in increasingly realistic environments), then learn more advanced skills. For one thing, you don't even know beforehand where you may have particular strength, and you also don't know what opportunities will arise.
Even a junior developer with basic knowledge can make meaningful (and thus compensated) contributions during the learning process. I'd rather spend 10 weeks or 6 months or whatever building some skills, then get a job and learn while being paid, vs. spending my whole life in isolation trying to become a zen master and write the one perfect line of code.
For "deep" areas such as mathematics, medicine, and theoretical computer science one needs an extensive theoretical background before being able to advance the field. A depth-first approach may be the only way of learning a useful subset. This may also apply to something like "database theory in general".
However for "product skills" (such as learning a specific database package or API) there's something to be said for a breadth-first approach. Especially nowadays, where today's hot skill can be neigh useless tomorrow. If you spend years only perfecting some skill you may be too late to profit from it! Also as the field is moving so fast, by the time you learned the PostgresSQL manual from beginning to end, there has been a new major release that invalidates many of the best practices that you spent so much time learning...
You don't even need to be able to "advance the field" to contribute meaningfully.
Take medicine. It's possible to teach someone some specific skills quite quickly (I probably have 200 hours of first aid training, essentially much of EMT-B plus lots of specific training in trauma, specifically dealing with massive hemorrhage from traumatic amputations, dealing with GSW, tension pneumothorax, etc., and various diving related issues, and some extremely basic radiology knowledge to assist technicians and rads in debugging a PACS.) With that level of training, or even 4 hours of really basic first aid training, you know enough to help. I won't be writing any dissertations on the best way to deal with a specific kind of trauma, but I can do a pretty good job of stopping bleeding in most cases. You're not going to have a top-flight trauma surgeon in every car. The 200-hour tech isn't going to be operating on his own (ideally), but can be a part of the solution. For some fields, like datacenter operations, experience is worth more than formal training, too.
Plus, there actually are a surprising number of cases where a relative newcomer to a field actually does end up advancing the theoretical limits. Maybe it's due to not knowing and accepting the limits of the field at the time, or maybe it's because that moderately passable junior programmer also happens to be a world-class expert in some other domain which just happens to be similar to the problem at hand, but it's not all that uncommon.
I'd still prefer any pending neurosurgery on me be done by someone with a good amount of experience, credentialing, and expertise, but it's a rare Django app which requires that level of caution :)
Even in areas where failure has high costs (say, medicine, or war), you don't go off and try to master a specific skill before doing anything -- you master some basic skills, practice using those (in increasingly realistic environments), then learn more advanced skills. For one thing, you don't even know beforehand where you may have particular strength, and you also don't know what opportunities will arise.
Even a junior developer with basic knowledge can make meaningful (and thus compensated) contributions during the learning process. I'd rather spend 10 weeks or 6 months or whatever building some skills, then get a job and learn while being paid, vs. spending my whole life in isolation trying to become a zen master and write the one perfect line of code.
Breadth first, then depth.