Michael Valentine Jones (6/8/2011)
. . . My experience is that people that are good programmers in one langage are good programmers in other languages. . . .
Being a crack closse-to-the-metal C++ programmer is a significant obstacle to mastering Prologic or Forth. That might be an extreme example; however, I have to deal daily with programmers who are highly experienced but are unable to switch between C# and T-SQL mindsets. (Although they of course think they are masters of both.)
Maybe I'm crazy, but I sort of agree with both of you.
I've known people who were crack close-to-the-metal assemly language programmers who became crack functional programmers followed that up with becoming crack database programmers, so I know that some very good programmers don't have a serious problem with switching between programming paradigms. But I've also observed good C/C++ programmers who couldn't get their heads around Prolog or Hope or ML, so I know some good people can't cope with a paradigm switch.
I think it was at least partly an overspecialization thing - people who had done just one procedural language (usually one of C, C++, or Java) for more than a decade generally couldn't learn to write decent code in anything but a procedural language (so no query language, no logic language, no functional language, no process language) and were not terribly good at even any procedural language other than their first one. Specialize too much and you risk not being able to break out. Refrain from overspecialization and you'll be able to pick up new languages involving new programming paradigms without any trouble. And of course people with decent CS or Maths degrees are likely to have learnt both recursive function theory and lambda calculus and maybe even a decent amount of mathematical logic and set theory, so they should have no difficulties either.