Software Design & Engineering
Internet business development
mobile applications
Alan Partis
320 Ridgecreek Drive
Lexington, SC    29072
(803) 692-1101


Password Rules are Stupid
Common rules actually weaken security.

Best Practice ... Not!
This is one reason why "old" code can be touchy.

Wow! That was fast!
Making the right choices in your code can have huge payoffs in speed.

Ctors in Chains
Shrink your C++ code even more by chaining your constructors together.

Virtual Classes
Virtual base classes: what are they good for?!

Practice Makes Pretty Good
Become a master software engineer by practicing like a ninja warrior.

You Should Get Out More
Maintainability is the key to software success.

Why You Need Me
Seven reasons why I think you need me to work for you.

I Create Wealth
Or, why this is such a great business to be in.

Standards in Software
Software engineering standards are a necessary and good thing.

What is a Content Management System?
$10.5 billion will be spent on them this year (2003) alone, but what are they?

Top 10 Benefits of a Content Management System
So what good are they?

Do You Need a Blowfish?
What is a Blowfish? Does size matter? Is it right for me? Get your questions answered here.

Why Not Windows?
Don't just take my word for it ...

10 Attributes of a Professional Software Engineer
A truly professional software engineer stands out from the crowd. Here's what makes them different.

How to Score a Startup
Examine all these points of startup companies and see how they add up.

Practice Makes Pretty Good

June, 2013

My daughter has been taking martial arts classes for a couple years now.  At least 2 times each week she attends class and goes through the same routines over and over to ensure these basic moves become second nature.  These are the building blocks upon which future advanced techniques will be based.  Likewise, on Mondays, she gets a lesson on flute and then spends the week practicing new notes, tempos, and rhythm patterns.  When she encounters these notes and scales at faster tempos in performance, she'll be able to naturally recall her lessons and drills and free her mind to focus on making music on demand.  Tiger Woods, the #1 golfer in the World, still goes to the driving range and putting green for hours each day to maintain nearly flawless technique.

I could cite countless examples of people who engage in thoughtful directed practice to get better and better at their craft.  Practice makes "pretty good" (not necessarily perfect -- there's always room for improvement and ongoing skill maintenance), and "pretty good" probably elevates the practitioner to all-star status in most peer groups.

Before I examine what to practice, I want to define how to practice.  What do we, as software engineers, when we "go to the range"?  What is the programming equivalent to stepping up to the plate for batting practice and learning to consistently hit 'em out of the park?  How do I practice "major and minor scales" in C++ or Ruby?  Using the martial arts analogy, what constitutes a kata for programmers?

I've been thinking along these lines for a few years now; ever since I read Andy Hunt's Pragmatic Thinking & Learning.  More recently, I encountered an implementation of the martial arts metaphor with the establishment of a programming dojo and defined katas to improve basic skills and techniques.  I think this works very well.

I see a dojo as a type of school for learning and improving programming skills in a given language, or perhaps multiple languages.  I define a kata simply as a software pattern with a purpose.  As with the performance of any martial arts kata, eventually the student should be able to perform the kata effortlessly from memory (possibly with some style variations) under the watchful eye of a "sensei."  Though everyone will practice on their own, even more advanced practitioners will still benefit from working with a peer or coach, just as Tiger Woods still works with a coach (probably more than one).  A kata, then, will consist of a title, a description, a use case, an implementation (coded in the language of the dojo), and tests to validate the results.  Though some will disagree, I do think a kata should include code.  Katas are not meant to test knowledge, but rather to reinforce skills and fundamentals.

Some katas are very elementary, while others will incorporate more complex techniques taking a student or practitioner on a journey from novice to expert.  Some katas will apply to multiple programming languages, such as the implementations of "Hello World" that teach the minimum framework for a functioning program in any given language or platform.  Katas can then progress to implementing file I/O, data parsing from XML, CSV or YAML, database transactions, or network socket I/O.  There should also be katas for multi-threaded concurrency and synchronization, etc.

And that, is how practice makes pretty good.

"Thundernet" is a trademark of Thundernet Development Group, Inc.
a Florida corporation.
Copyright © Thundernet Development Group, Inc..
All rights reserved.