Apesar de já trabalhar há mais de 20 anos nesse mercado (iniciei com o assembly) esse é o meu primeiro post nesse fórum, que descobri recentemente.
Em linhas gerais concordo com o comentário do @Marco, acima, mas tenho alguns pontos a acrescentar, que só os anos de carreira me proporcionaram.
Tudo depende do objetivo a que se programa. Sistemas que necessitam de alta confiabilidade (tipicamente os que rodam 7x24 em alta disponibilidade no core) , devem passar por processos formais de análise e testes exaustivos, antes de implantar. Nesses, um programador que erra pouco (ainda que lento), tem maior chance de se destacar, pois seu trabalho demanda pouco retrabalho das equipes. Em sistemas menos exigentes, em confiabilidade, mas que exigem baixo tempo de implementação (UI, Web, e outros sistemas que não geram grandes transtornos se falharem), um programador rápido que consiga completar as tarefas com rapidez (e entregar parciais no prazo para avaliação do cliente) são mais valorizados, principalmente se acompanhados de um bom gestor de projetos que priorize as atividades olhando para as necessidades do cliente/usuário final.
Claro que sempre queremos sempre um serviço bom (livre de falhas e com código fonte limpo) e rápido (entregue no menor tempo possível). Mas não temos sempre uma equipe de especialistas à disposição para todo e qualquer projeto. E também temos que dar chance aos novos que ainda estão aprendendo.
Para a dúvida do Yuri, eu diria que não existem pessoas habilidosas, existem pessoas que conhecem e mantém boas bibliotecas. Quanto a linguagem, usada, eu tendo a acreditar que há espaço para o integrador (que conhece várias linguagens) e para o especialista (que conhece o detalhe do detalhe de uma linguagem só), aí também, a escolha se faz caso a caso dependendo do que deve ser entregue ao seu cliente.
O foco deve ser: - O objetivo do seu cliente, ao encomendar o sistema. Somente sua satisfação será a real medida do sucesso de seu trabalho. Costumo falar ao pessoal da minha equipe que, antes de serem programadores, eles estão construindo uma solução, e como tal, tem que usar a ferramenta, ter a confiabilidade , velocidade de implementação (e custo) adequadas às necessidades do projeto. Portanto, a escolha do profissional com as características certas para executar o projeto deve ser feita caso a caso.
Se estiver montando uma equipe, olhe para a média de suas demandas antes de definir um perfil para os profissionais que irão compor. E procure ter um pouco de cada tipo de perfil, lembrando também de pegar novatos para formar e moldar de acordo com as necessidades, eles são mais maleáveis e cobrem melhor as lacunas.
Espero que esse bla bla bla de velho ajude...