Code Kata; way to become a better software developer

Japanese culture influenced a lot software and project management fields. Concepts like Lean, Kata, etc has come from Japan. And we should admit, that they have improved the existing processes, increasing efficiency and satisfaction overall. So, what is Kata? Or Code Kata? Or Kata programming?

Word Kata is a Japanese word. Kata originally was a detailed choreographed pattern of movements practiced either solo or in pairs. It is about teaching and training methods by which successful techniques were preserved and passed on. Nowadays it is implemented not only in martial arts, but in other industries as well.

What is Code Kata ?

For example, there is a term – Code Kata in software industry. It is an exercise in programming which helps software developers improve their skills through practice and repetition. A Code Kata term was coined by Dave Thomas, co-author of the book The Pragmatic Programmer, embracing Japanese concept of Kata in the martial arts.

The basic goal of Code Kata or Kata programming is to also to preserve and transmit working techniques and master them. By practicing in a repetitive manner, regardless of the industry, the learner develops the ability to execute those techniques in a natural, reflex-like manner. Here the idea is not only learn whatever concept and do it in an automatic way, here the idea is to learn the right concept, understand it and polish it. Be confident in what you are doing. Be a master in your field.

Code Kata is about learning, about learning by doing. After doing a Code Kata, developer should be able to execute and adapt learnt techniques under different circumstances, without thought or hesitation. This is the goal.

All great software developers that we know are as good as they are because they practice all the time. Code Kata is not just for Junior developers and recent graduates, it is for everyone, who wants to learn and practice new technique. Code Kata helps to know the theory, and to understand the mechanics, by actually applying it in practise.

Probably you faced this situation more than once in your life, when a software developer is assigned to the project with a good level of theory and zero practice, he is just thrown straight into the deep-end, working on the projects, which are new for him and he learns how to develop them by doing them. But do you think it is the right way to work? In my opinion it is not, it is the same as driving a car. First of all you need to pass the theory exam to be able to drive a car, yes! But then you also need to pass the practical exam to actually live the experience. Why do many companies skip this practical step? In our opinion Code Kata – is an awesome chance to learn by doing, not harming anyone. It is a way to get ready for the project, to know what to expect and how to handle it. Maybe you will say, that in software development, not everything is white and black and there are a lot of things that influence, you can’t actually practice everything you will do in your job, in your project. You are right, but again, this is the same as driving a car, once you did the basics, you are more prepared to overcome obstacles.

Code Kata is an attempt to bring this element of practice to software development. There are no specific rules for Code Katas, there can be Katas of 30 minutes or 3 hours, doesn’t matter, it all depends on the topic. The most important is to practice, practise and practise, be confident in what you are doing! Also, what I wanted to mention is that Code Kata is not just about programming, it is about thinking as well. It is about identifying issues behind programming and coming up with solutions to solve them.

Actually, I’m not alone in believing Code Katas are useful. Many TDD and BDD experts also share their opinion that these processes are best learnt by doing Code Kata. It is a mistake to think that TDD and BDD can be learnt only by doing live projects, because you put too much pressure on the learner, the pressure of having to deliver quality code using techniques they are not familiar with. It causes a lot of stress and anxiety. This stress results in developers becoming frustrated, making mistakes and potentially not putting into practice best practices at all. For example what happens a lot is that in order to get things done, developers write implementation and then tests, resulting in a very slow progress in terms of TDD learning, because first you need to write a test and then the code.

Mastering your skills shouldn’t be through competitive racing, live performances or deploying to production, these are the fruits of the labour. Before that comes hard work and practise.

I hope you found this article useful, because the final goal in software development is building working software! To be able to achieve it, you need to master best practices by practising them in a non-stressful environment, to think about them, to understand, to polish. Just doing without thinking is not sustainable, what is valuable is that developers understand what is behind the key practices, what are the advantages, disadvantages, solutions and consequences.