Coding skills are often compared with martial arts and developers are often called by the name of the ones who master those. "Ninja" is a commonly used name to recognize someone who masters one or more skills and/or one or more languages.
But to master something, doesn't come easy, it requires hard work, hours and hours of study, practice, practice, and even more practice. Often years of trial and error forge those skills into this so called "Ninjas" and, despite all the martial arts, what else are Ninjas recognized for? No I'm not talking about fancy clothing and shoes, I was thinking about cool sharpen blades. I'm not a Ninja, but I bet they don't send their blades to "Sharp'r'us" to get it done. I've read that this "Masters" use the sharpening of their blades as a meditation and it keeps them focused and better on every day. So, we could be talking about the Bushido all day long but, where does this fit my job as a developer.
We the developers, also need to sharpen our blades, I don't mean Server Rack blades, or Azure Portal Blades, but, our skillset, the skills and languages that we "keep on our utility belt". Personally, I spend a lot of my time, reading, training on places such as Microsoft Virtual Academy, Pluralsight, Codeschool and others. But despite what you can read or watch this days, without practice the skills just won't flow. What do I mean by that, sometimes you know you read, saw, heard about something but you can't just close your eyes and type that. Stack Overflow and Bing or Google to the rescue in those cases to refresh our mind, can be a solution but there's also other solution, practice.
There are a couple of tools in the wild that you might use to practice your skills, and one of them is Code Wars, you can access a huge list of "Katas" (here we go again with the Martial Arts), small coding challenges that you have to solve, putting into practice your skills, helping you to become a better developer, either by practicing or thinking about the problems and possible solutions. On the end of each Kata, you can watch solutions by other developers and compare with yours, it's awesome to see the infinite possible solutions, combinations and variations which I think that also enables you a great way to learn, you can also learn, a lot, by reading someone else's code.
Code Wars Katas are online, so you can virtually access and do them anywhere (as long as you have internet access), also, all Katas have a set of unit tests already written so you can test your solution, you can also write more, or edit those if you want, so, you can also train your TDD skills.
If you're into TDD, one great tool that I've come across is Cyber Dojo, here you'll find also some katas, and you can do them on yourself or with a team, or class, with your archenemy, etc. and have great fun!
As you're writing code and testing, a "traffic sign" will show on each test the result following the Red, Green, Refactor mantra, you'll get your way to the solution of the Kata, and getting a master in the ways of the TDD.
So, to all you warriors out there, keep your blades sharp and hopefully, this post can help you a bit on that.
Jedis also have great blades, but I don't think they sharpen those...
If you know any other tools, have some tips and tricks, feel free to share.