I've noticed a 2 tier value system for programmers.
Code monkees know a language and may be expert in it, but they lack an understanding of the environment in which it runs.
So they make insane assumptions about the performance, network lag time, nfs disk availability, file size restrictions, permission issue, database dependencies, uptime requirements, etc, etc, etc. They code in
a perfect world, and try to run in the real world.
No matter how good they are in their given language, lack of awareness of the tools and environmnet kills them. Make them look like idiots.
Even worse, since they DO know a large amount about the specific language, they tend to ponticifate about it. They initially seem bright to management, which then give them some trust. They blow the project and then go into hiding while someone else reimplements in a tenth of the time. Career killer when you screw your boss.
A C programmer that spends a week crafting a utility that I can do with 3 Perl scripts piped together in 10 minutes is worthless. Might has well have a profession hand tooling buggy whips.
On the other hand, a Perl programmer that knows C and lots of Unix utilities is a gold mine. They can whip out the easy Perl stuff in seconds, and hand tool the CPU intensive stuff in C as needed, and use neither when a 'cat | sort | awk' script is all that is really needed.