Do Programming Language Skills Exist?
hundredminutehack.blogspot.com
hundredminutehack.blogspot.com
Unfortunately some recruiting agents only do simple pattern matching and they won't forward you CV to a client when you do not have $language_name skills :(
I have heard a small legitimate argument for strong familiarity with specific tools: although you may know how to program very well, you may not be familiar with C# libraries, and that can mean implementing code already available in a canonical way.
But meh.
It's very hard to understand recursion or closures without expressing them out through a language. I don't remember who said it 'but programming is understanding.' Likewise how do I know you understand object oriented programming unless you can program idiomatically in an object oriented language like Smalltalk, Self, or Ruby?
Or how do I know you can program functionally unless you can program idiomatically in a functional language like Scheme, Haskell, or Erlang and not in some hackish, crude way but idiomatically? But in order to program idiomatically and elegantly in the respective languages requires learning libraries, learn the constraints of the language, its quirks, its opinions,etc.
And if that's the case, at the beginning of the year I thought I could get a PHP job, but I didn't have that skill, in fact, it served me to remind me how much I hate PHP.
My "programming skills test" was to create an auth system for PHP, stuff are pretty broken in that language IMHO, I just couldn't during the time frame they gave me even though I do understand all (and a lot more) concepts behind PHP. I got confused with simple stuff like "chaining methods" something I just take for granted in other languages simple didn't work.
Say, decorators. Or metaclasses. Lots of those are hairy little edge features of a language (where some are quite useful features you should be teaching to new people in your shop if they don't know them already).
I strongly disagree with this bit. What are programming skills if not the ability to effectively get things done? How is domain knowledge not, therefore, directly tied to programming skills?
I agree with what I think your broader point is, that classes of knowledge (e.g. imperative vs. functional) are more important to note than, for example, particular languages. However, when it comes down to it, deep knowledge of the platform is the difference between clean code that's working quickly and spaghetti messes that take forever. I say this as someone who has written plenty of spaghetti. ;-)
It's true that having knowledge of libraries is valuable, because as you say, how will you get anything done otherwise?
However, there's a certain type of learning that only occurs once, typically when you're first learning to program.
For example: you need to download data from a web page and parse it. If you're a total newbie, you first need to understand that there's a protocol (HTTP) involved, and that libraries exist to parse the markup language (HTML).
Just knowing that those libraries should be available in your language (standard or otherwise - another piece of knowledge) is valuable. But once you've done it once in one language, you'll know the approach for all other languages.
Another way to put it is that it's all important, depending on which problems you're trying to solve. But putting all your eggs in one basket is problematic and does not necessarily guarantee programming skill.
For example, control structures like `for' and `while' are clearly part of the language in C. But in Haskell they are part of the standard library.
That being said, I agree with your broader point. Having both domain knowledge and programming skills are key to being effective on a project.
Real-world domain knowledge is somewhere between helpful and vital, depending on one's role.