Practice, practice, practice. Don't forget the tools. Edition 1 - Server.

Post date: Apr 29, 2012 7:12:57 PM

Echoing the rage around katas and dojos, it is very important to practice. When practicing, you should be challenging yourself. Pushing the limits of current knowledge is the only way to grow it. If you know you're slow or inefficient at something, or have an area you're unfamiliar with and want to learn, it's "Hello, world." time all over again. When you venture into this practice, keep the tools in mind.

For those new to the terms dojo and kata, I'll provide a brief intro. If you know the terms, skip the next two paragraphs.

The terms are based in martial arts. Katas (from http://en.wikipedia.org/wiki/Kata) are "detailed choreographed patterns of movements practised either

solo or in pairs"; when applied to coding, the concept shifts a bit. A code kata is writing a portion of code that challenges your skill-set. When it is complete, evaluate the results, and then throw it away, only to repeat the process. When practicing, it should be understood that you will make mistakes. The goal is to increase efficiency and reduce mistakes.

Practicing in a dojo (Wikipedia version: "the formal gathering place for students of any Japanese martial arts style to conduct training, examinations and other related encounters") enhances your collaboration skills as well as whatever specific skill you're honing. Gather a group of peers, decide on a target to practice, and let it rip. Peer review and collaboration drastically improve quality and performance in the industry. It also helps when applied to practice and exercise. A peer can spot something you may be missing, and you both can grow from the mistake or missed opportunity.

Martial arts training often involves mock tools such as bokken, and software practice should be no different. Sometimes a text editor is all you want for the practice. Honing the art of editing without an IDE can definitely improve your knowledge of language behavior. Other times you want to focus on exercising the IDE itself, and rely as little on your own actions as possible. Another valuable tool that may be overlooked for katas and dojos, something specific to client/server development, is a dedicated server.

There are many ways to make a server available to your practice, including virtualized workstations, using spare workstations or server hardware, or getting a virtual private server. The value is you can simulate working with the real tool, a separate box on which your software written locally will be deployed. When you work with single instance development, where your debugger can hook into the server with almost no configuration, you lose the opportunity to hone some skills.

A server may have differing versions of libraries from your workstation, or even be a different platform all together. Troubleshooting your code's behavior to isolate these issues is a skill that is often allowed to get rusty because once a server environment is established and stabilized, the issues are rarely recurring. Go through the process to set up the server (or have someone do it for you) before the code is prepared. If the code has dependencies that the server should provide, and the server doesn't have it configured, you will have the opportunity to learn how to isolate the issue.

In my recent experience, I've found that the troubleshooting part of development is often rusty or underdeveloped. If you don't know why it's breaking and you don't know where to look to find out, I feel you may not even know how the code should behave in the first place. Or, you just don't know how the server is communicating the answers to you. Log files, stack traces, on-screen error messages are all at your disposal. The errors you encounter on a dedicated server, rather than single instance, may also differ significantly. Take the time to push the limits of your knowledge and abilities. Your skills will improve.

Martial Arts Practice