It happens every once in a while.
I waltz into the classroom looking forward to a new lesson and suddenly realize that today is the final exam. Everything I should have been preparing for is finally due. And I haven't done anything -- no flash cards, no notes, no readings, no late night, caffeine-infested sessions the night before. In fact, I can't remember if I have attended any of the prior classes.
As I begin to panic and look for an excuse to leave and make up the exam later, I wake up. It was all a dream - or a nightmare! It takes a few seconds, but I finally realize that nothing that I was experiencing is actually true. What a relief!
How About You?
But how many of us come to work unprepared each day?
I mean -- how well do we know our tools?
Do we know all of the ins and outs of our particular language, platform, tools, and techniques?
Or do we only know those parts that we had to use for our latest project?
Or do we only understand the basic "Hello, world" features that we learned from reading a blog, listening to a podcast, or attending a conference session?
Being a Passionate Programmer
This question came up in a book, The Passionate Programmer: Creating a Remarkable Career in Software Development (Pragmatic Life) by Chad Fowler.
In it, he suggests that,
Our industry tends to practice on the job.
He then relates our craft to the art of playing music, and,
Musicians are paid to perform in public—not to practice.
So why would we expect to do it differently in our profession?
It takes hours of practice in order to learn our craft and, unfortunately, too many are practicing on the job these days, because it is acceptable. You cannot learn everything that you ought to know as a software craftsman by merely writing code for production software. Focusing on certain aspects is needed in order to increase the quality and resilience of what we produce.
One of the areas that musicians focus on developing is physical/coordination or focusing on fundamental technical aspects of playing an instrument. They do this by playing scales in all of the range of the instrument, building the muscles in their lips or gaining callouses in their fingers, practicing dynamics with their diaphragms, etc. They cannot always be playing nice sounding music - they have to play simple, focused, seemingly monotonous exercises to focus on these fundamentals.
How To Practice
How can a software craftsman do the same?
They can practice the full range of functionality available to them within a certain language, platform, tool, or technique, using them in private exercises known as code katas or building a demo project.
And even though they may not prove expertise in a particular technology, I have found certification exams to be invaluable in forcing me to look at the full scope of functionality that a platform provides.
For even more accountability and support, you could start/join a coding dojo, getting involved with a community of like-minded people wanting to grow in their knowledge and skills as well.
So spend some time thinking about what tools you already know something about and start practicing coding in areas of that tool or technique that you are not familiar with. Get to know what is available and practice the full range of motion. You will be much more prepared the next time you need to use that toolset.
Feel free to comment below on other suggestions you have for practicing our craft.