Thumbing through Amazon’s library of programming books, I couldn’t help but notice a curious trend: virtually all books cater to the instant gratification, ‘I’m in a rush’ crowd. Books promising ninja grade coding skills in 24 hours or 21 days are the norm, even without prior coding experience.
This isn’t a phenomenon unique to programming. Everything from the ‘Get Rich Quick’ scams to the ‘Learn to play the guitar in 3 days’ books headline their wares with similar claims. Few books talk about the long, hard road to excellence; most are more than happy to saddle you with a primer on the subject, leaving you to waddle in the deep end after you’ve done browsing through the books (and from experience, browsing is really what most of us end up doing).
But Why the Rush?
But this rule of 10,000 hours assumes that you actually want to be really good.
What if you want to be merely passable? How long does it take then?
In another time and another age, I nursed dreams of being a musician and a guitarist. Trouble was, I wasn’t any good. I didn’t suck at the guitar, but I was, maybe 8,000 deliberate hours of practice away from virtuoso status.
And that’s where I’ve been stuck ever since.
If you hear my play in a casual setting, you would be impressed. I don’t claim to be any good at guitar solos, but my rhythm playing is up to scratch. That doesn’t make me a good guitarist, but it does make me passable enough. If a band’s rhythm guitarist suddenly fell sick on stage, maybe I could fill in his shoes for the evening.
That’s where some 1,000 – 1,500 hours of practice got me: good enough to fill someone’s shoes temporarily.
Mediocrity is Just a Thousand Hours Away
So when you see a book promising insane guitar skills, Booker prize winning writing abilities, or coding skills to put ninjas to shame, all within a few weeks, you should keep in mind that unless you put in those additional 9,000 hours of practice, you will only remain merely good enough to fill someone’s shoes temporarily. You might impress friends and relatives in a casual setting, but it’ll be a long, long time before you can parade your wares before experts and expect to earn a nod of approval.
Nowhere has this rule been more apparent in my writing skills. I’ve been writing seriously since 2007, and whenever I thumb through stories and poems I’d written half a decade earlier, I have to physically suppress signs of embarrassment and even nausea. I don’t mean to exaggerate, but what I wrote then was abominable (which might be the case for what I write even now). It took several hundred hours of writing to come to a point where I didn’t detest every word I wrote. Now, in a moment of self-confidence, I might even describe myself as a decent writer.
I know I’m growing each year, but it has been made possible not by talent, but by hard work.
So in answer to the original question: how long does it take to learn programming (or any other skill for that matter) – 1,000 to 2,000 hours if you want to be merely passable. 5,000 to 8,000 hours if you want to approach expert status, and much more than 8,000 hours if you want to be a virtuoso.
And no, there really are no shortcuts to hard work.
1. Norvig.com has an excellent article on this topic. I encourage every would be coder to read it religiously.
2. Image credit: Oran Viriyincy