Monday, August 22, 2011

Do Programming Language Skills Exist?

I don't have Python skills. It's true I have programming experience where I've heavily used Python for the past couple of years.  Still, I have a hard time seeing Python as a skill. In fact, I have a hard time believing any of my programming language skills are real.

Making the Case
Programming skills may exist may exist but programming language skills do not.   Let's consider the differences.

SkillsNot Skills

  • Object-oriented
  • Functional
  • Imperative

  • Java
  • Haskell
  • Python

Let's pick on Java.  Java is a tool, not a skill. Real skills are working with concepts like inheritance, compile time type checking, branching, looping and more. None of these concepts are unique to any one language. Understanding that makes picking up new programming languages a breeze.

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. You could spend years working with different Javascript libraries without understanding what a closure is for example.

Don't Limit Yourself
The idea of a language as a skill limits you as a developer.  For one, it limits your thinking to the features your language supports.  Even worse, it puts too much faith in what that your language can do. Stop doing that. Start putting more faith in what YOU can do as a programmer beyond the language. You'll be a better developer for it.


  1. There's actually a prophecy at Headline Prophet for that (which you can reach by simply Googling it). I tend to look at today's breed of application producers as developers, whereas the technologies they develop through are created by gut-level programmers.

  2. Yes, there is a significant amount of wisdom in what you say.

    When I was in graduate school (NYU/Courant Institute), the rule was "read a new language in 24 hours; write code in a new language in 48 hours".

    At that point having worked in over half a dozen higher-level languages, and half a dozen assembler-languages, I found that I agreed with the sentiment. The good programmers among us were able to switch back and forth more or less at will without problems.

    Those who found problems switching back and forth with different programming languages also had many difficulties in other areas.

    This is not to say that those of switching back and forth did not experience problems keeping track of language peculiarities, but they were of a lesser degree.

  3. Yes and no.

    I don't think that knowledge of the language is worthless. While it's true that developers ought to be able to learn the a new language on a whim and reuse the same paradigms, ideas and patterns, an experience with a language - knowing its in's and out's, where to tweak the configs, the syntax of its structures, and sometimes even the underlying implementation - is what really lets the developer get stuff done, instead of spending all their time looking at documentation.

  4. Thanks for the comments both supportive and critical. It's appreciated.

    @Allen You have some valid points but I want to add something. What really lets the developer get stuff done is passion for their craft. That's the thing that leads a developer to get into that level of detail with their tools so they can be at their best for their clients and users.

    I see where I was wrong. Passion was a glaring missing "meta-skill" that should have been in this entry.