Want to up your game? Want to bridge that gap between good programmer and great but wonder how to do it? If you think you’ll get there by reading books and blogs you’re wrong. Don’t get me wrong I think books and blogs are invaluable at exposing us to new techniques to make us better but it only benefits us if we practice those techniques! Why do I think practice is the key? I’d like to go through an example of one of my favorite sports: baseball. MLB players are the best at what they do in the world but despite that fact they still practice. Why? I bet they could skip practice and still be good so why do they do it?
Practice provides a safe environment where it is OK to fail.
Miss a groundball in a game and you’ll get boo’ed and maybe benched. Do it during practice and what happens? You get to try again. There is no (or very little) penalty for failure during practice. The low cost of failure provides the perfect medium for trying new things. Want to learn a new language or framework but can’t do it at work because every single application is mission critical, understaffed, under-budgeted, and constantly in fire fighting mode? Practice!
Practice helps prepare you for scenarios you’ll face during a game
MLB players practice bunting even though a vast majority of games they play in won’t require them to bunt. Why practice it then? Usually in a bunt scenario the price of failure is a lot higher than in a normal play so you want to minimize the chances of failure. You do this by practicing! Practice allows us to focus on aspects of our game that do not come up in the everyday but be prepared for them when they do come up. It helps us face the unexpected prepared and ready to go.
Practice develops muscle memory
Listen to baseball enough and you’ll hear the term “routine ground ball”. It’s called routine because most of those players have been practicing fielding groundballs since they were little. Through repetition their bodies get to the point to where they just react without much mental process.
Development is not a physical task so I’m not talking about taking the thinking out of programming but rather establishing helpful mental patterns permanently. Know that you should do TDD but having trouble ingraining it into your normal process? PRACTICE IT! Taking all of those groundballs in practice is what helps MLB players go from good to elite.
So how can I practice?
It’s your craft, practice it! Practice is absolutely critical in our profession but between life, family and work it’s tough for me to find the time to do it other than at work. Finding a place where you can practice, preferably with other developers, in a safe environment where failure is OK is INVALUABLE!
Try a User Group
I attend a lot of user groups and I’ve noticed most fall into two categories: presentational and hands-on. If you are only attending user groups that have a presentation and you’re not coding then you’re really missing out. I’ve grown the most as a developer by sitting down with people I’ve never worked with before and working through exercises and by seeing how they work. IT IS IMPERATIVE THAT YOU STRETCH YOUR NORMAL!
I’m lucky that we have two local “Clean Code” user groups (Cincy: http://cincycleancoders.com and Dayton: http://daytoncleancoders.com) where the focus is on improving at our craft in a safe environment. The premise of the group centers around code katas which are problems that are really simple to implement so you can focus on another facet of the problem or approach. Want to try TDD, Jasmine, a different language, etc.? You now have a perfect opportunity. The groups also stress pairing which I fought at first but it really has been helpful.
Don’t have a user group around you that fits this description? Start one! A good resource for Kata’s is the Coding Dojo.
Try an open source project
If you don’t have a user group around you and don’t feel like starting one then another avenue to practice is by working on open source software. You can get the same benefits as a user group but produce something that is actually useful to other human beings (most katas get thrown away after completion). If you’re interested in contributing to open source but you’re unsure where to start then check out this excellent article by Scott Hanselman: Get involved in Open Source today.
Just do it
There are a million other ways to practice and I’m not going to enumerate them all. At the end of the day it’s your career and if you’re serious about getting better then it’s on you to take the actions necessary to do so. If you work for a company that provides the hours and environment described above then consider yourself lucky. For the rest of us practice is crucially important to getting better at our craft. I challenge you to take one step on your own this week to better yourself and your craft.