When you first start to program, the question plagues you. The problem, as you see it, is quite simple: learning to program is a series of building blocks, and you want to know which is the lowest to get your knee up onto first. It seems like a straight-forward question - why can no-one give you a straight-forward answer?
Experienced developers will blow out their cheeks, take a swig of their drink, look you dead in the eye and say “look, it just depends.” It’s likely at this point they’ll spiel off a long list of pros and cons of their favourite language, give a potted history of the web, and explain the difference between, say, frameworks and programming languages. They’re trying desperately to be helpful, bless ‘em.
So, here, finally, is the answer. I’ve split it into three discrete categories, and I promise, sort of, that it doesn’t end in “it depends”.
This, of course, is completely different to “it depends”. It doesn’t matter. Spending a long time deciding which programming language to learn is like starting a multinational corporation and getting hung up on the design of the letter-head. Every second you spend on this decision is a second you are not learning how to program.
Ok, I’m not suggesting you bring up the Wikipedia of programming languages and pick the first one (A# .NET, to stop you checking), but just be safe in the knowledge that there are so many shared concepts that, whichever language you chose, you will be learning "to program". Yes, there are huge differences, but really, learning the differences is part of learning to program. Pick one. Start learning.
Of course, it helps if you know what you are trying to do. In fact, that’s so important that it should be its own heading.
I assume by now that if you are set on learning to program, you know what you want to do with the skill. You don’t learn to cast spells just to see what kind of spells are available; you learn to cast spells because you want to fly, or move a mountain, or turn your enemies into cups of soup. The end goal is intrinsically tied to the journey.
This leads nicely to a huge secret about programming: knowing what you want to do and what your language is capable of doing is 90% of the battle. If you know a) what you are trying to create and b) how your chosen programming language handles data, the rest is just plumbing and Google.
That’s not to say, of course, that you won’t get stuck. And that’s when you need someone to talk to.
The internet is great, and generally the programmers you meet on Stack Overflow are insanely helpful. It will blow your mind that someone will spend 20 minutes of their life typing out intricate instructions for strangers, and all they ask in return is an upvote and a thank-you. But there is no substitute to being able to talk over a problem face-to-face with someone who knows what they're doing. Some issues are just too granular to type out; some explanations too intricate.
That developer who blew out their cheeks and told you about their favourite language? Just do what they’re doing for a bit. Programming languages are picked up like any other language: reading, writing and listening. Immerse yourself, sign up to the weekly mailing lists, and talk about it. Your understanding will build, and then your enthusiasm, and finally your ability. But it’s a rough old ride, and you’re going to want that person who keeps you motivated and enjoying it.
So… is this blog a long, fancy way of saying “it depends”? Of course it isn’t.
Ok fine. Learn Rails.