Practice Makes Perfect

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: and Dayton: 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.





Welcome!  My name is Bruce Hubbard and this is my third time trying to blog.  I don’t expect to post too often (writing is not my passion) but I’m going to give it another shot.  Blogging is something I’ve never had enough personal discipline to make myself do but it’s very important in the software industry.  I have some opinions I’d like to share and they don’t all fit in 140 characters (for those follow me on twitter @brucehubbard).  These opinions are my own and in no way reflect the opinions of any company I work for or any client I work with.  I’m not an edgy divisive kind of guy so I don’t expect that to be an issue but had to get it out of the way.

More about me: I’m married to a wonderful woman (11 years) and have have 4 kids (5th is on the way).  I graduated from Miami University (OH) in 2003 with a bachelor’s degree in Computer Science.  I personally loved my CS experience in college and really soaked up the theoretical aspects of CS especially the algorithms class.  Despite being one of the best programmers coming out of Miami (IMO) that year I had a really hard time getting a job because I had no practical experience (this part of college sucks).  I had studied C++ for 4 years but the only jobs were for Java and .NET.  I eventually got a job at a consulting company after about 5 months of unemployment after college.

I started out doing Java (2003-2009) mostly as a consultant.  In 2008 I took a full-time job and in 2009 was semi-forced to switch by them to .NET (future blog post definitely coming about that!) and I’ve been doing .NET ever since.  I’ve mostly worked on web applications and I’m really loving the Javascript renaissance going on right now.  I don’t really consider myself a .NET developer.  I’m not defined by the technology stack I currently work with.  I am a professional problem solver of the software variety.  I’ve mostly worked in enterprise environments which is soul draining (future blog post).  I really get jealous of the Ruby/independent guys I hang out with and the environments they seem to work in.

I currently work for a small consulting company in Dayton.  I consider myself semi-independent (I’m hourly with no benefits).  When I left my full time job (see soul sucking above) I wanted to be an independent (corp to corp) but chickened out at the last minute and went the W2 route (mistake in hindsight).  When my current client contract is up I plan to switch to fully independent.  I have lots of thoughts around the area of independent consulting so I plan on putting those thoughts into some blog posts.

That’s a little about myself.  I hope you enjoy my future posts.