Saturday, December 29, 2007

Kung Fu Coding?



I've never been asked, "what does kung fu have and software engineering have in common?" Which is a shame, because I actually have something to say about it.

The essence of kung fu is not flashy kicks, or lots of screaming, or old men in silk pajamas. The essence of kung fu is hard work. In fact, the literal translation of kung fu is "hard work." In the context it is normally used in Chinese, it means skill achieved through hard work. It goes way beyond martial arts. A chef can have kung fu. An calligrapher can have kung fu. Any athelete has kung fu. When someone complements you for having "good kung fu", it is a very meaningful complement. It means that not only do you have skill in whatever you're doing, you also have the character to put in the hard work required to achieve such skill. And that's the essence of it. What you get out is what you put in.

So what does it have to do with software engineering? Well, the best software engineers that I have encountered in my career, without exception, has put in the kung fu. These people are sharp. They think fast, they know what they're talking about, and they know what you're talking about, often better than you do. And every engineer that I have been impressed with, without fail, puts in a far more effort in improving his or her craft than their peers. Whereas their peers are satisfied with simply getting the job done, these people go the extra several hundred miles constantly trying to get the job done better. And the only way they can do that is that they seek to learn, constantly. These people work on personal projects, they read avidly (books, AND trade magazines, AND web articles), they will choose to do something a novel way, even if it would have been easier to stick with what they were familiar with, just for the sake of learning. These people think nothing of sacrificing evenings and weekends in the pursuit of knowledge. What's obvious to most people are how bright these people are. What's less obvious to people is how much kung fu they put in to get there.

So the lesson here is simple really. If you want to be a top notch engineer, or top notch anything really, you have to put in the extra kung fu. If you are unable or unwilling to do so, and your peers are willing to, don't be surprised when they shoot past you along the career path.

I want to leave you a quote from my kung fu teacher. I'm paraphrasing, but whatever. He says that you can come up all the reasons in the world not to practice kung fu. Time, family, work, etc.. If you need to find an excuse, you will find it. But there is only one single reason to actually do it. And the reason is that you love it enough to want to get better at it. The decision you make as to whether or not to read that book or work on that side project isn't simply a decision of whether or not to do it. It's a decision of whether or not you care enough about your craft to get better.