Jeff Atwood blew up the Internet today by making the statement that not everyone should learn to program. I think maybe one of the biggest complaints here is that his arguments read as elitist, and exclusionary, whereas the real kernel of his argument is that not everyone needs to be able to program to be good at what they do. Truly, that's a good point. But I also think it's also a totally valid point that anyone who wants to take the time to learn how to program should have that opportunity, and not be driven out by harsh attitudes.

Alternately, learning to program should require some real learning by doing that isn't informed by some gold-star method or gamification. I am of the opinion that these approaches only develop a false sense of mastery among its users. This is the kind of pernicious marketing that Jeff Atwood is railing against. You're not suddenly a PHP expert because you spent ten hours on Codecademy.

Learning to program encapsulates a lot of different skills. It's an iterative process, and you should approach it as with any new skill of similar profundity: with care, interest, and a knowledge of your own limitations. Instead of assuming you can tackle any task related to your achievement badges, you should aim to constantly question whether what you're doing now is adequate, performant, scalable, and extensible. This is a great behavior to get into for any programmer, at any time. It's the reason why I look at diffs before ever committing code, and it's one reason why I get better at what I do as time goes on -- because I take the time to review my practices and look for better ones.

But this isn't just good advice for programming as a skill. There are plenty of great skills that you could do professionally that you can learn at home. Look at the vast array of talents required in home improvement. There are certified individuals who have the requisite education and experience to build you a house, set up your wiring, install insulation, or configure your home network. But that doesn't mean that we should leave all aspects of these skills exclusively to the pros. That's where Atwood oversteps his bounds with respect to programming as well. While it's not a good idea to wire your entire house if you don't know what you're doing, it's well worth knowing how to switch out your outlets, or to reset your router if it's acting up. Not everyone may need to have the programming chops to develop a database schema or roll their own MVC platform, sure. But that doesn't mean that they might not get good use out of some text processing that a basic education in regular expressions with a lightweight interpreted language could lend.

Most of the real bare-bolts stuff I've learned about software, I have learned on the job, by doing. I've probably aced more job interviews based on my knowledge of design patterns --which exclusively involved reading every design pattern listed on Wikipedia, and then trying to identify them in real code -- than talking about the technical aspects of my Master's thesis.

The availability of information on the Internet means that the empowerment of passionate amateurs is a trend in all skilled professions. It shouldn't be railed against; we should just be happy that it's easier for people who want to learn to find resources that get them adequately situated. Sure, you can watch a YouTube video about how to use a smoker, but you're not a pit master until you've made it a lifestyle. And there will always be that dichotomy for all hobbies or professions that require learning and practice.

I would even go so far as to say that some skilled professions such as law and medicine should start looking for ways to better incorporate this additional tier of semi-experts into the profession. The issue here, as programming has feared in the past, is that it is likely to drive down the low end of the market. But I think that software in general has become better for having people from different backgrounds with a passion in the practice, if not so much the college major, and the availability of new technology for these fields, as with programming, allows individuals to more easily sit on the shoulders of giants. But again, there will always be a difference between those who can identify the signs of a flu, and those who know what other symptoms symptoms to look for that could result in a more grave diagnosis.