Software Kung Fu

OK, so maybe the title is a little misleading here. As fun as it would be to spend the little while talking about the typical software hacker stereotype a-la matrix or Ghost in the Shell, I’m not. Or am I…?

No. Not really, however it does provide me with a nice link.

"This is my Kung Fu. And it is strong"

For those who don’t know, Kung Fu comes most notably from a number of cities in China. In these cities, it wasn’t uncommon for a martial arts schools to be on every corner each teaching their own brand of the art and competing for both students and renown by duelling other schools to prove their superiority and strength. It is easy to believe that the origin of a phrase like this could have come from here.

Why is any of this relevance? Well I’m a solutions architect. But more importantly, I’m a software engineer. I have been ever since I started in this industry in 2004 and, as of 2012, also an avid Wing Chun kung fu practitioner. Now that I’m older and wiser, I’ve starting to draw a number of comparisons between the two that I believe have been significantly influential on all aspects of my life both professional and personal.

Much like the Kung Fu schools of old, the modern world of software development is a constant battle between emerging and established technologies all trying to refine, re-invent or simplify those that have come before it. C#, .NetCore, VB, KnockoutJS, AngularJS. ReactJS, MeteorJS, BackboneJS, NodeJS… The list is ever growing and in some cases the decision of which technology to use to achieve a goal in can be just as heated as a duel and can often be influenced by factors that really shouldn’t play a part in this process.

Software engineering, regardless of the technology being used is complex. It requires knowledge, ability and ultimately an understanding of the tools you’re using and how they apply to the problem at hand. This in many ways is not unlike kung fu. As martial arts go, it is highly technical and requires just as much, if not more, understanding of the theory behind it as it does the practice. My instructor likes to say, “you wouldn’t punch someone in the foot, so why would you try to kick someone in the head?” Sure, it’s entirely possible however it’s also overly complex, prone to error and more than likely won’t have the desired effect. The key is the correct understanding (and application) of the appropriate techniques at the right time divided over five, largely universally translatable areas. Timing, Position, Power, Distance and Speed. All of these dynamics are interconnected, and you can’t have one without the others all in balance. The same can be said for any programming issue. You can’t fix a problem if your timing is lousy and you’re trying too early or too late. You can’t fix it in the wrong place or in a sloppy or slow (or hastly botch fix) way or if you’re too far away from the problem either in terms of understanding of the issue or in terms of location in the sofware. Everything has to connect and work together as a whole for a system to function at its best.

More holistically than that though, it’s about balance. One thing pushes, the other pulls. One goes up, the other down. Same with software. You can’t have all the focus in one area without suffering in others. Software engineering and beyond that, solution architecture is a constant dynamic juggling act where you are trying to way out the benefits of change to one area with support from others. Be this feature development, addressing technical debt and planning, accounting and encouraging for change. All whilst continuing to ensure that balance is maintained within the system.

A phrase that has always stuck with me is “Be like water” it’s part of a larger quote from Bruce Lee. This is a video I made of it whilst trying to teach myself after effects many years ago. Sorry for the poor quality, I no longer have the original!

Water is shapeless, formless, yet it has the power to change shape and to mould, control, adapt, penetrate or erode everything it touches. The more I explore these thoughts the more I believe the best way to keep a level head above the choppy waters of our industry is to be exactly this. Like water. Without the ability to change, adapt or shape yourself to an ever changing environment, what is left beyond being stuck applying the same solution to every problem. A commonly used phrase along these lines is “everything is a nail if the only tool you have is a hammer”

This is my Kung Fu. And it is strong.