Saturday 19 December 2015

On side projects...again

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.

2 comments:

  1. Interesting piece Phil, and one I mostly agree with.

    Your point about attitude is the key. You have to want to learn and improve. In a fast-changing industry awash with inexperienced devs, the need to learn and improve has never been more important or under-estimated.

    The apparent lack of opportunities to work with good mentors is something I can identify with. In a previous role, one of my team actually commented that having a lead that was happy to discuss and explain some implementation detail was a new experience; in his previous role the more experienced guys guarded their knowledge, or simply wouldn't take the time. I'm not claiming to be a good mentor, it just saddens me to think that there are companies where this happens.

    For myself, I rarely do side projects and I never had mentors. I wake up most days firmly convinced that I actually don't know what I'm doing. So I read, I listen to podcasts, I dive into other people's code. I look at what I wrote last week in horror. It drives me forward to learn more, in case someone else comes to the same conclusion. I fit this in as best I can: in the car, in the office or sometimes at home - I'm lucky enough that I can afford option three. I'm not an expert. I don't believe I ever will be: there's simply too much to learn.

    I guess what I'm really saying is to be a good developer, first you have to want to learn, then you have to learn how to learn in a way that fits your situation. While not everyone can or wants to take the time out of work, you must find a way to evolve an environment that allows you to grow, either through side projects at home or turning your day job into its own challenge. Sadly in our industry there aren't enough employers able or willing to do it for you.

    And yes, the irony of commenting on a blog post about putting in hours outside of your job while sitting on my couch on the first day of my xmas holidays is not lost on me!

    ReplyDelete
    Replies
    1. I can totally identify with all your points. I agree wanting to learn is key. My focus on side projects is simply because I feel I learn best when I've applied what I've learned to a problem. Sometimes I can do that at work, but sometimes I can't or want to play with something without any pressure.

      Delete