Which programming language should you learn first?

This question lies at the heart of all computer science curriculum design efforts, and it resurfaces year after year after year. One reason that it can never be answered conclusively is that the range of options, and the kinds of programming needs that are out there, change over time. Another reason is that it’s a holy war. For some folks, you might as well be asking what their favorite text editor is. For those folks, don’t.

But it’s a question of more general interest, beyond the computer science classroom. Douglas Rushkoff argues that everyone should be programming-literate, for their own survival, and even less extreme views highlight the benefits of computational thinking.

I’m not going to tell you what language to learn first, because I don’t have (and I don’t think there is) a fully general best-possible recommendation.

Lifehacker took a stab at characterizing a few common languages to help newcomers make this decision. Their programming language menu goes like this:

  • C: Trains You to Write Efficient Code
  • Java: One of the Most Practical Languages to Learn
  • Python: Fun and Easy to Learn
  • JavaScript: For Jumping Right in and Building Websites

  • … which isn’t quite how I would have done it. And I’m not sure these characterizations are even useful.

    I’m much more persuaded by this approach which points out that “learn a language” is not a single specific concept. It’s important to ask how *well* you want (or need) to learn the language.

    I was immediately struck by the parallel with learning natural (human) languages. When I’m going to a foreign country for a week-long conference, I learn a smattering of useful/polite phrases to help me get around and not be That American while I’m there. If I were to move to that country, I’d be willing to invest orders of magnitude more effort to be functional in the language. I don’t agonize over which language to learn; I learn the one I’m going to need.

    Likewise, the programming language you want to learn is the one you’ll need to have at your disposal. Work, school, implementation, or other constraints might dictate that to you. And if not — if you’re a hobbyist or just want to learn “programming” with no particular end goal — then does it matter? Pick a mainstream language (so that there are sufficient resources out there to aid your learning) and dive in!