Recently I stumbled across an interesting Stack Overflow question:

I don’t program in my spare time. Does that make me a bad developer?

The answer with the most up votes was from a user called red-dirt who makes a number of excellent points. One interesting point in particular is that a professional musician will practice a maximum of six hours day, so spending eight hours a day developing software should be plenty. This point makes sense to me. If you spend a long time doing something you should get better at it, right? By my calculations if you spend five to six years developing software you will hit the theoretical 10,000 hour mark required to become expert at something. But here’s my problem, most software developers with five to six years experience aren’t experts. I have more years experience that this and I don’t consider myself anywhere near an expert. The point I am trying to make is, while I absolutely do not think it makes you a bad software developer if you don’t program in your spare time, in my experience the best software developers I’ve worked with are the ones who have programmed in their spare time. Ultimately, I still think side projects are important.

Why aren’t all software developers experts?

So why aren’t all software developers experts? I have a few theories.

I suspect a big problem is attitude. Some developers don’t love their jobs and simply aren’t interested in learning. They are happy to repeat a single year of experience over and over.

Sometimes the work an employer gives you isn’t very interesting or challenging. Of course with a good attitude you can still learn, or failing that find a new job. But what if that aren’t many great jobs around? I live in the north east of England and while there are a lot of software development jobs, you could hardly compare it to major technology centres like London or San Francisco. There simply aren’t that many great companies to work for near where I live. Or maybe I just haven’t found them.

Perhaps your job is interesting and challenging, but is it interesting and challenging all the time? In my experience this isn’t the case. A significant percentage of work is quite mundane and doesn’t increase your skills. Again, you could argue that a new job would solve this problem, for a period of time at least.

Another problem could be training, on the job and formal. After finishing school I did a computing degree and got a software development job. University was mostly a waste of time and my first job didn’t provide me with a particularly strong set of skills. Don’t get me wrong, I enjoyed my first job and I learnt a lot, but neither the job or my degree made me a good software developer. In hindsight I feel like I stumbled around in the dark for the first four years of my career. Some might say I’m still doing that.

There are several factors that exacerbate the training problem. There is a huge amount to learn, a lot of misinformation and no clear path to becoming a good software developer. It’s not even clear what makes a good software developer! With all these problems I’m not surprised it’s difficult to become an expert in software development.

Conclusion

In conclusion, what I’m saying is that to be a really good software developer I think you need to either:

  1. Be very clever
  2. Land the perfect job with great mentors that consistently challenges you
  3. Supplement your knowledge by putting in hours out of your job

From my experience one and two are in short supply which means the majority of people are left with category three.