Tuesday 7 July 2009

Practice, Practice, Practice and Practice with People Who Are Better Than You

Pairing with Jason Gorman a few days ago reminded me of something we all need to keep at the front of our minds. I still have a lot to learn about programming! I've spent quite a bit of time programming on my own recently and with my team but it wasn't until I sat down with someone more experienced that it really showed how much I have to learn. It reminded me of one of the core requirements of being a software craftsman and of becoming better at anything and that is to practice, practice, practice.

We also need to practice with people who are better than us. We don't get better at anything unless you practice and just practicing on our own or practicing with the same people all the time isn't enough. If we are only ever practicing with our seven year old brother who is learning Java then we feel like experts but we're simply a big fish in a little pond.

The idea of practicing is explicit in the Software Craftsmanship Manifesto as well as building a community of professionals. So from today I'm making a resolution to practice more, practice on my own, practice with members of my team and practice with people outside my team! So if you'd like to pair with me on anything please get in touch. I have also resolved to start running coding dojos for my team and to get people from outside of our department involved where it is appropriate.

Learning to develop software is quite like training for a competition and training to get fit.

I used to swim competitively and also became a qualified swimming coach. Think about members of your software engineering team while reading through the following paragraph.

When you train for a sporting event you train to be the best in the world. To be the best in the world we need to be able to compare yourself to others and to do this on a regular basis before the main event. Athletes do this in a number of ways. First we join a competitive team who we train with every day giving us the opportunity to compare ourselves to and practice with members of our team on a very regular basis. If you're lucky there will be members of your team who are better and faster than you and that will inspire you to become better at what you do. However, most people who are any good will find that there isn't anyone in their team with the same speciality who can keep up with them. That is why sporting teams hold many different events during the year. An athlete will attend 10-20+ competitions every year to practice and measure how good they currently are compared to athletes who are currently competing. These events are a great way to learn from each other and to highlight areas that we need to improve on.

Back to software engineering, one of the things that concerns me is that a lot developers are scared to show others their code in case it draws criticism. This causes an environment where developers are overly protective of their work and the parts of the code base that they have created. It can even lead to developers being unwilling to delete code they have written because a lot of effort went into creating that baby in the first place. We've got to get over this.

If you are a developer, like me, who wants to improve then we need to practice. We need to practice with people who are better than us and we need to practice with people outside of our teams. We also need to admit that we have a lot to learn and become very good at taking and giving constructive criticism.

So how about it? Want to put your money where your mouth is and show us your code?