Katas With A Programmer's Brain

bob.ts - Jan 24 '22 - - Dev Community

I've been asked a lot of questions about technical training recently. In one of the questions, I was recently asked ...

Can you recommend any particular online tools for practicing Algorithms and Data Structures? I've heard CodeWars practice helps, but don't have enough experience yet to attempt the coding challenges.

ORIGINAL POST HERE

Before I go any further, I want to point out that I am not recommending any product over another. I mention products in this article only to show my thought-processes.

Responses

I asked the community for their recommendations. I don't know much about CodeWars and couldn't gauge whether another site would be easier to work with, or not. I was hoping for someone more experienced with the various tools available.

We got many responses (I'll leave finding them in the thread above up to you ... it will change over time).

The question and the responses got me thinking.

I have been using some of the sites that got mentioned; in particular HackerRank. I realized that I am not sure that I have been using the site as effectively as I could for my purposes.

I consider myself a competent developer. I am a Senior Solutions Developer who has been solving particularly challenging problems over the last decade.

I originally joined HackerRank to see well I can solve the challenges that I occasionally saw posted. I never really considered it as a means of improving my coding abilities ...

Code Katas

Many years ago, I came across the concept of code katas. I believe I actually started with Codewars ... it looks like I still have an account there (member since May 2014).

The term kata comes from the Japanese and is used among other things in the martial art. Perfection through repetition of forms, attitudes, processes, and patterns is the focus of a kata.

A code kata is an exercise in which the focus is not on solving a task or problem, but on learning new skills and developing successful habits. For each code kata, several solutions have to be found in order to learn from mistakes, gain experience and develop even better solutions.

There are specific organization that have code katas and what they do is amazing. However, I was thinking a bit beyond what they provide.

Action

Thinking about the concept of code katas and sites like HackerRank, it would make sense for me to go back ...

  1. Taking one of the challenges and reworking my solution.
  2. Keeping track of the various solutions I came up with so that I could look at several factors in my coding processes.

I could ...

  • Code for readability.
  • Code for testability.
  • Code for speed and efficiency.
  • Code for smallest answer.
  • Find various use-cases where other functionality might improve one of the above cases.

As mentioned, doing this would entail tracking my various solutions over time. That can be done with a simple GitHub repository.

Additionally, I know that there are several versions of "correct" answers posted that would allow me to explore what other people "bring to the table."

Conclusion

The original question had to do with finding the right resource and I was curious what the community would bring.

At the same time, I got thinking about how I could personally improve my learning.

This led to the simple question: Is there more I could provide the individual that posted the original question than just resources?

I think so.

There are tons of these types of code challenges out there.

  • Who thinks to go back and try the challenges again a month later to see how they've improved?
  • Should we go back and try again as we learn more of the functionality of the languages we are exploring?

Code katas and documenting my solutions across these types of targeted challenges can give me (and others) insight into a variety of forms of code development. This allows for a level of growth and experience that I didn't see before.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .