A few days ago I wrote a post about what programming language you should learn first for a career in programming. This sparked a lot of conversation (much of it on Google+ submitted without reading the article).
Imagine you want to be a race car driver and team XYZ is looking for a new driver. It’s much easier to get started by picking up a bicycle to compete in bike races than it is to acquire a race car and get behind the wheel on a track. For the bike the cost is low, the learning curve is very shallow, and you can become proficient with it rather quickly. Let’s say you race that bike for 5 years and become quite good at it. Now you approach team XYZ for a position as a race car driver and cite your 5 years of bicycle racing experience. They are going to hire the person who has less experienced in race car driving than you do in bicycle racing because the foundation is better and they’ll improve in car racing more quickly.
It’s important to note that I’m talking about software development, software engineering, end-to-end systems programming, not solely web development. [Insert rebuttal citing Node.js here]. Yes, Node.js, I know. But an experienced software professional knows several languages and doesn’t need to cram a single language into every scenario. You could cut down a tree with a hammer eventually, but using a chainsaw makes more sense.