So it came as no surprise when a very knowledgeable technologist asserted to me that a good programmer could write code in any language. As expected, I agreed. Being a polyglot programmer myself, it certainly seemed correct. At the time it did. But maybe...
But only the basics. The problem lies in what it takes to be a productive programmer. Understanding how to program a computer or write in some language is less than half of what you need to know to do it professionally. Enterprise applications especially are built around entire frameworks and environments.
Take Java. There are several graphics built-in libraries such as AWT and Swing. It has a rich set of general collection objects with the ability to adapt them to any type of object using simple syntax. There are lots of utility, security, reflection, multi-threading, and database connection classes. That's not even getting into Enterprise JavaBeans (the middleware/SOA framework) or servlets which are used for web programming. Keeping up requires books, training, and on-line resources. You have to focus on staying current with changes and new additions.
This is where the difference lies. There is Java the language and Java the development environment. C++ is a language but C++ in the .Net environment is what you write code in. It's very difficult to focus on being expert enough to be a productive in more than one of these complex environment. This is why you see programmers with so much religion around their languages and environments. .Net people can be passionately pro-.Net. Java people can be Java bigots.
It's a natural side effect from all the effort that goes into being expert enough at something to do a good job with it. It's not that one environment is better or worse – all have their strengths and weaknesses. The demands of being productive in any particular environment require that you focus all of your attention on being good at one thing. You can switch languages and environments but it's like switching religion. It can be done but it's a process that will take time, effort, and will.
So, I take back what I've said in the past. A good programmer needs to have religion. Not religion in the sense of unquestioning zealotry. Religion as in a deep devotion to their craft and a singular focus on what they are doing.