The Best Way to Learn Programming for Beginners
UPDATE: Check out a more recent post how to become a programmer in 2017.
What is the best way to learn programming for beginners? I've spent a lot of time over the past 12 months thinking about this question, and as our firm has grown steadily from 19 to 39 people, I've reflected on what makes the difference between the people who walk in the door and knock things out of the park and those who struggle. Since my blog post on How to Become a Web Developer I have a number of people who regularly ask me this very question, I'd like to share my thoughts and observations.
- A Test For Success?
- Time in the Saddle
- Better Tools (and Code)
- Catch 22
- Vocational White Collar School
A Test For Success?
There's quite a bit of controversy as to whether you can actually test for programming aptitude. It turns out people have actually been trying to do this for at least 45 years (here's a Programmer Aptitude test from IBM from 1969). And the verdict after all this time? No one has been able to create such a test. It's worth noting that less work has been done and even more confusion abounds regarding success in a career as a professional programmer.
Time in the Saddle
Much has been made of the 10,000 hours to mastery, widely popularized in Outliers by Malcom Gladwell. Let's substitute "mastery" with professional competency and at 40 hours per week 10,000 hours works out to around 4.8 years. You could interpret this as meaning given 4.8 years of working or training your programming skills, you'll be at a respectable level of competency in your craft. This certainly feels about right, but it's worth examining what your mastery is in. Is it programming in general? Java? PHP? Drupal? Or creating specialized Views within Drupal? There are definitely some significant differences with the speed of change within the web programming world vs. a timeless craft like playing piano (though even in piano specialization within a genre is the norm).
If you follow the implications of raw time being the answer to succeeding in the programming profession, it's easy to see putting in more time means faster uptake. Take the 40 hour example, and convert it to an 80 hour work week, and you've achieved mastery in just 2.4 years. Given what I have seen, there is a certain amount of truth to this; the people who achieve a meteoric rise not only put in more time, but manage to put in more time working on the right things.
Better Tools (and Code)
With his post on learnable programming, Bret Victor has called attention to some significant issues with how the industry is currently teaching programming and postulates some fantastic ideas on how our tools could be significantly improved to help people learn to program more readily. One core argument that can (and should) be brought to bear and applied with our current toolset is this: programming and code should be understandable by people.
This mindset is fundamental to bringing people into our industry and should have a significant impact on both how people approach writing code and comments. More lines of code and descriptive variable names are not the enemy - obtuse code that is difficult to parse by humans is.
The field of web development and programming more generally is huge and growing. The demand is increasing faster everyday as more establish companies realize the opportunities provided by the proliferation of mobile computing and an aging existing infrastructure, while at the same time startups are creating new markets - all with an insatiable demand for programming talent. Not only are the jobs available, but they are high paying and the benefits are great! All that anyone needs to start in this field is... experience.
This contradictory requirement for a successful track record before you are given a chance as a programmer, combined with the serious vacuum in modern programming education is the single biggest challenge facing both individuals who want to join this profession, as well as the industry itself.
Vocational White Collar School
While there is certainly a place for learning programming online, the current state of tools means that in-person learning can be significantly more effective. This is even more true because the specific skills needed in the professional world go beyond language fluency and stray into the realm of version control, self QA discipline and communication. Any programmer who's spent time programming should also be able to tell you the days or weeks of effort that can be saved with a few minutes of consultation with the right peer.
Enter the vocational white collar school. The model that I have seen getting more and more traction are 2 to 4 month in-person, full-time programs which gather classrooms of students together to learn the ropes of programming. This model is very similar to a vocational cooking school, though interestingly the cost and time for programming schools appears to be significantly less money. Given the average salary of a developer is almost twice the prevailing salary for a chef it makes for some very easy math (though if you love cooking go the chef route). Here in Portland, Oregon there are already two such schools: Portland Code School and Epicodus. Each has it's own curriculum and costs, and given the unstoppable movement in the industry, demand from potential students, plus the nuances in technical skills required even our little city would do well to have one or two more.
I am very excited about this option for learning and I'd love to hear about other people's experience in attending such a school or hiring people out of this kind of program.