

Do Programming Language Skills Exist? - pcote
http://hundredminutehack.blogspot.com/2011/08/do-programming-language-skills-exist.html

======
prospero
Language fluency, on the other hand, does exist and is very valuable. It
shouldn't be a prerequisite for a full-time hire, but not everything about a
platform can be inferred from first principles. Understanding the idioms and
pitfalls of your tools comes from practice and experience.

------
struppi
You are absolutely right. For my current client I had to pick up C# very
quick. Before that I had only created a couple of "toy programs" to play with
the language. But I already knew a lot of the concepts behind C#: Inheritance,
delegates, properties, lamda expressions, ... so learning the new language was
really easy and I completed the first programming tasks within the first week.

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 :(

~~~
Xurinos
I noticed this, too, about recruiting agencies. Funny thing was when they were
looking for 10 years of experience in C# before it was 6 years old.

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.

------
hardboiled
Word. Agree completely with your comments georgie. Although there are high
level abstract programming ideas that are beyond any particular language, the
only true way to learn about them in any practical/actionable sense is to
program in a language that can express those ideas.

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.

------
aklein
The author's list of "skills" are programming paradigms. You can't be skilled
at a paradigm, only within it.

~~~
jerf
Hmm.... "I am skilled at object-oriented programming." Seems grammatically
correct, everybody knows what I mean, there's no particular ambiguity in it...
compare with "I am skilled within object-oriented programming." which as a
native speaker I find clearly wrong. What exactly are you saying?

~~~
aklein
I'm starting to split hairs here, but I'd say the skill lies mostly in the
action of programming, and not in the methodological use of object-
orientation. That is, you are a skilled programmer within that paradigm.

------
igorgue
Nobody but recruiters care about "Programming Languages Skills"

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.

------
gte910h
I think people need to understand core concepts of the field, but honestly,
you will do fine in most jobs if you don't use certain concepts, ever.

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).

------
jinushaun
After several years, I find that programming languages are so similar that I
can pick up the language aspect (syntax) of a new programming language in
minutes, maybe hours, but spend time weeks learning the library. So I agree
with the author.

------
georgieporgie
_Does knowledge of standard libraries on a language platform count? Not
really. It means you're good at learning libraries. It says nothing about your
programming skills._

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. ;-)

~~~
bitops
I think both points being made here are correct.

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.

~~~
eru
Yes. But you can't separate standard libraries from the language itself so
cleanly.

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.

