|May 15th, 2018
I wanted to write this up because people often write to ask me this, generally because they're considering going and getting a Masters in Computer Science to become more employable. I almost always recommend against that: employers don't consider one to be a strong signal and most of what you learn isn't relevant to working as a programmer. In most places I've worked, someone with N years of work experience is more valuable than someone with a Masters and N-2 years of experience.  Financially these differ enormously in a way that makes a Masters clearly not worth it: not only do you pay tuition but you 'pay' the opportunity cost of two fewer years of employment (~$200k).
Instead what I recommend is learning enough that, at an entry level, you can (a) do the job (b) get hired. Once you're working you'll learn lots of things that make you a better software developer and mostly you'll just get a lot of practice.
So, what does that take? Unusually, everything you need to know to be a programmer is available freely online. If you're looking for a place to start, I recommend Learn Python the Hard Way (but really do it the way it asks: no cutting and pasting!). The best way to learn to program is to dive into it, and do as much as you can.
Once you're pretty fluent in coding, there are additional things you need to learn to get hired. The most common way of evaluating entry level applicants these days is effectively a series of oral exams. Typically these will have components of problem solving, applying algorithms, and writing code. It doesn't test everything involved in doing the job, but it's pretty informative. A resource I've seen people recommend is Cracking the Coding Interview. Many of the things you learn in preparing for coding interviews are also useful later, so it's not just studying for a specific test.
It's common not to have enough internal motivation to learn everything through self study, however, even among people who would be good programmers. This is where I see coding bootcamps doing well: they put you in an environment where what's expected of you is hours of intense practice, along with classmates and instructors. The best bootcamps are set up so their incentives are aligned with yours: they don't charge tuition up front and instead you only owe them if you get a job as a professional programmer.  Bootcamps generally cover teaching, interview prep, and help you find job placements.
Since bootcamps started, I've been expecting that they would expand enough that the labor market for programmers would cool down. Salaries would fall, initially for entry level people, later for more experienced people, and then level off as it stopped being worth it for people to move into programming. I think this hasn't happened, though I don't have great visibility into entry level compensation, and I don't really understand why. This indicates something about my model here is pretty off, and I'd be curious if people have ideas for why this hasn't happened. Still, even if it does happen, a bootcamp pays for itself very quickly, within about a year.
 This may break down for large N, but I doubt it gets large enough to overcome the tuition + opportunity cost penalty on the Masters.
 Unfortunately I don't think this is stable. As a person considering bootcamps, ones that offer deferred tuition are giving a hard-to-fake signal: a bad bootcamp, or one that accepts people who won't succeed, is much less able to defer tuition. But now let's say the bootcamp also offers an option to pay tuition up front, as App Academy now does (you choose between $28k if placed and $17k unconditional). Being willing to pay up-front is a costly signal of student ability. Bootcamps gain reputations based on the quality of their graduates but students go through the system once, which means only new bootcamps with something to prove benefit much from offering deferred tution. My expectation is that the bootcamp industry will move to fully up-front tuition and incentives for bootcamps get worse while ones for students get better. Incentives for students are already very high, though, and their up-front payment may be someone elses money, so mostly this will be a bad thing. Plus its much worse for people who can't afford the money up front.