Top 10 Things Software Developers Can Learn from Martial Arts


Practicing martial arts and working in software development has more in common than you may think.

The following list is a collection of my personal lessons learned from training martial arts.

Years of Hard Training

Leaning martial arts is nothing you can do within a weekend seminar and the same is true for software development, but this is not the point.

You'll need several years or maybe decades to get a kind of mastery. And even then you can improve some aspects with hard training.

Martial arts and software development have in common that you probably never be good enough to stop learning new things. Actually it is vice versa: “The more you learn - the more you find out what to improve next.”

Train Real World Situations

In martial arts it is important that you train and/or simulate real world situations, e.g. more than one attacker, unusual weapons, street clothes, darkness, surprise attacks. Usually in real world situations you have less success than in standard training situations. In most of the cases the real situation is fast, dirty and messy. So you should be prepared. For software development this means: train with large legacy software. I have met graduates from universities who learned ten languages in four years, but never worked with more than 2000 lines of code in a single project. If you are still at university try to work in large open source projects and/or as student employee in companies with large enterprise software code base, etc. Real world software development is more complex than student projects.

Playing Means Learning

Drill is an important aspect of martial arts to lean basic techniques, but free training with a good training partner helps you to find your own best practices. Everybody´s physical and mental health is different, so the things we are good at are different. This free training should be like playing.

As software developer we learn a lot from playing with new technologies, tools and design. Playing with a difficult task can improve you problem solving skills. And playing is fun. You know the feeling: “The test says you are a looser, a looser, … and then the test says you are God!” Spend some time with playing, there will be a payoff someday.

Good Training Partners Have to Look Stupid

Most training settings need a training partner who is careful and considerate. To train in a slow way helps. The trick is a kind of slow motion attack and this looks stupid. Your body leans better with the right attitude of your training partner.

I spend a lot time with training and coaching young software developers. In these situations it is important to be not too clever and swank with skills. Look stupid and be a better training partner.

Learn More Than One Approach

Let’s assume you are perfect at kicking. Great! Nobody can harm you in a kicking situation, but unfortunately this won’t work in the subway, in a crowded pub or other situations where you don’t have the right distance for a kick. So, you should lean kicking, striking, groundwork, clinching, weapons, and a lot of more things.

The same is true in software development. Maybe you are an expert in “Android Mobile with Java”. This is good, but you should also understand other disciplines, programming paradigms and technologies. You never know when and what you need in a future situation.

Strive For Perfection

Training martial arts for years will bring no real progress, if the intention is not the relentless pursuit of perfection. The moment you think you know everything you need - is the moment you stop to lean and evolve.

Just have a look at the code you wrote 1 year ago. If you don’t find something to improve, you stopped to learn new things.

Don't Compare Your Self with Others

Comparing yourself with others is – dependent on the others – quite often frustrating. In martial arts you always find somebody who is better than you, at least in some aspects. There is no benefit in competing with others just because the differences of humans are so big. The key question should be “How good is my personal progress and what can I improve?”

In software development you can’t – like in martial arts – be perfect in each technique or discipline. Think about what you like to improve and assess your personal progress. This is more motivating than comparing with others.

Control Your Emotions - Keep Calm!

In martial art the control of the own emotions is a very important aspect which has to be trained. To control own stress in training as well as in real world situation is very important to avoid harm to yourself and/or others. Breathing calmly and staying in motion helps to reduce your stress hormones.

As a software developer you have a lot to do with humans. Also here there are situations where stress happens. Keeping calm in difficult situations helps to be more successful.

Sport is Not Necessarily An Effective Self-Defense

Some disciplines of martial arts evolved in the direction of pure sport. This evolution is good, but not everything that happens in sport is also an effective self-defense. Street fights have no rules and no referees.

In software engineering we see academic approaches, which are like sport. It works fine at university, but not necessarily in real world projects.

Increase Your Awareness

The training of martial arts helps you to be more aware of your surroundings. Don’t be distracted by head phones and/or your smart phone. You lean to be alert and read the body language of people in your surroundings.

In software development this increased awareness helps you to have a better perception of what happens in meetings with customers and peers.