BY MARKUS SPRUNCK
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.
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.”
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.
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.
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.
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.
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.
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.
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.
In software development this increased awareness helps you to have a better perception of what happens in meetings with customers and peers.
In software engineering we see academic approaches, which are like sport. It works fine at university, but not necessarily in real world projects.