Software engineering Lessons after watching Asian jiu jitsu championship

I had a friend who was preparing for the jiu jitsu championship for Asia, he had hobbies with martial arts but never went to a championship nor he competed in the pro level before. he decided to compete, put in work everyday focused purely on training, I remember once we gathered some friends and went to eat wings that gosh it is a bulk of unhealthy fats & stuff, he stayed with us watched us eat, he did not bother, he had taken the process as a lifestyle.

He knew that the tournaments present pros and he needs to find ways to win, and he was putting extra effort in mastering submission techniques.

Then after months of super dedication, came the fight day, all of his opponents looked more experienced and more tougher. But each game in the middle of it he finds an opportunity to submit the hand, make an Kimura lock and the game is over.

Here is a shot of me and him after winning it all. Image description

It is crazy inspiring!

I related a lot of things in the software engineering world.

Specially when it comes to preparation, when you start working planning your daily tasks effectively, knowing what to do and needs to be delegated and what needed to be learned, with the ability to take care of your body, sleeping and exercising, this will make you happier, healthier and more productive that the 14 hours working like a junky, or spending social media hours everyday.

Another smart thing I got inspired from observing the fights, is that the great fighters have all 1 - 2 techniques that they are identified with. They adopt study them and perfect them. Meanwhile the amateur ones are lost between a lot of moves complicated techniques and having an identity crisis.

And this is what we are talking about now, some bad habits prevents you from getting to the senior level or beyond!

A lot Engineers try to add a lot of tech into their resume that will not make them better engineers, like if you are a front end engineer why learning Graph Database?? are we went from learning for the usefulness into learning to tweet and be cool? or if you're Java engineer why learning printing in console using GoLang?! Just stick to your tech master it, make it look better everyday, by focusing on the depth of what is in hand, but how?

Try to be a better engineer using what you got, after two years in react world, try to learn web standards or how to scale your project in terms of performance or in terms of number of engineers/ code splitting ownership, you would do the same things, your peers do but better, if you are in the Node.js world learning event loop would benefit you more than learning rails for example.

And when you start thinking in depth of the tech in hand and try to master it and take deep understanding, you would see that there is no ceiling to that, and learning becomes more practical, and personally more fun, I once experienced that when learning AST, this particular concept made me better engineer in the tech I used, simply by opening doors to me in learning EsLint, code standards and many things I can't remember. Learning the first http library will take you far, learning another one of the same won't help much, but learning dependable concepts would open the possibilities for you.

One topic that is related, I can recall other than technologies is software design patterns, you may go to refactoring guru and see that there are tens of template solutions of various problems, but you won't really understand the pattern that did not find the use case for. Here are some examples came into my mind If you work with web development you need to know proxy pattern. Meanwhile in gaming you need flyweight, backend engineers may need to learn about mediator, and last by not least compiler engineers must know visitor.

I hope my article was not too boring!