Zoom on Kata
by snonov
This page to give and not forget some references concerning coding kata.
Some history
Things seems to begin with Dave Thomas :
As he tells it in his blog post : http://codekata.com/kata/codekata-how-it-started/
What it is
Idea is to train through practice on given delimited exercices that let focus on your coding practises (refactoring, design, …), playing with constraints (primite obsession, …).
Other practises exist to improve your skills (or just having some fun and fresh time) :
- Coding platform like https://exercism.org/
- Coding contests like https://www.codingame.com/start/fr/ or more algorithm focus https://codeforces.com/
- Koan like https://github.com/matyb/java-koans/tree/master
- Or with higher project building step like https://app.codecrafters.io which is also great
But here we’ll focus on kata. Some thought about kata and what it is :
- About what it is http://codekata.com/kata/kata-kumite-koan-and-dreyfus/
- On doing Kata https://blog.ploeh.dk/2020/01/13/on-doing-katas/
- A constraint is a challenge during a kata https://blog.code-cop.org/2024/03/programming-with-nothing.html
- Remote Kata https://blog.ippon.fr/2021/03/26/faire-des-codings-dojo-a-distance/
- Code kata to become a better developer https://www.alexhyett.com/code-katas-better-developer/
- Dojo and Kata history https://github.com/dojo-developpement-paris/dojo-developpement-paris.github.io/blob/main/history.md
Books about Kata :
- The coding Dojo Handbook https://www.amazon.com/Coding-Dojo-Handbook-Emily-Bache/dp/919811803X
Kata usage
There is various way to practise depending of what you are looking for.
Group operating way to practise (source coding dojo, blog, book):
- Classic : pair with a driver and a navigator by turning
- Mob : 1 typist + other are navigators
- Randori : every one take keyboard 5 minutes
- Demo : one people doing a demo on a kata others are giving feedback
- Fishbowl : Definition of a method of discussion which aims to promote communication and exchange. This method is based on spatial layout.
- Orientation : We divide the session into several sub-sessions, and between each session we do a retro/orientation.
It can also be prepared with a facilitator but using operating mode you want.
Playing with adding one or more constraint to execute the kata :
- Immutable
- Primitive Obsession
- Blind navigator
- TCR (means Test AND Commit OR Revert) you can have a look at this feedback https://itortv.medium.com/i-implemented-the-mars-rover-kata-through-tcr-test-commit-revert-and-these-are-my-7e11c40983a6
- Make test list that are must have
- Keyboard only
- Use plain text editor
- Fix method lines (ex Java 4 lines per method)
- No flow control
- No conditionals
- No loops
- Object Calisthenics (grouping set of nine constraints)
Some tools may help to organize group sessions :
- https://cyber-dojo.org/creator/home
- Kata skeleton (or bootstrap) in various languages https://github.com/swkBerlin/kata-bootstraps
Kata List (or log)
There is huge numbers of kata so it will not be exhaustive
Some Katalogs
- https://kata-log.rocks/
- https://codingdojo.org/kata/
- https://github.com/gamontal/awesome-katas
- https://sammancoaching.org/kata_descriptions/index.html
- https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/code-katas
- https://github.com/dojo-developpement-paris/dojo-developpement-paris.github.io
- https://blog.ippon.fr/2021/04/12/mon-catalogue-de-katas/
Some Github repositories (and authors) that list interesting katas
- https://github.com/emilybache
- https://github.com/codecop
- https://github.com/sandromancuso
- https://github.com/BNYMellon/
- https://github.com/dlresende?tab=repositories&q=kata&type=&language=&sort=
Kata list (still to refine)
List of Katas :
- https://github.com/forax/kata-java17
- https://github.com/sandromancuso/testing_legacy_code
- https://github.com/sandromancuso/trip-service-kata
- https://github.com/sandromancuso/testing_legacy_code
- https://github.com/emilybache/Parrot-Refactoring-Kata/tree/main Code smell, polymorphism and refactoring
- https://github.com/emilybache/Email-Sender-Refactoring-Kata
- https://github.com/emilybache/GildedRose-Refactoring-Kata
- https://github.com/emilybache/SafeCalculator-TestDesign-Kata nice one
- https://github.com/emilybache/IceCreamScorer-Refactoring-Kata
- https://github.com/emilybache/DiamondKata
- https://github.com/emilybache/Email-Sender-Refactoring-Kata
- https://github.com/codecop/Book-Discounts-Refactoring-Kata
- https://github.com/codecop/golfed-game-of-tron
- https://github.com/aatwi/MarsRover-Refactoring-Kata
- https://github.com/c-guntur/java-katas
- https://github.com/BNYMellon/CodeKatas
- https://github.com/BNYMellon/CodeKatas/tree/master/coffee-shop-kata
- https://github.com/BNYMellon/graphql-kata
- Java Spring Kata : https://github.com/BNYMellon/spring-kata
- Java Kata : https://github.com/BNYMellon/CodeKatas
- https://github.com/cluePrints/java-threading-kata
- https://github.com/philou/concurrency-kata
- https://github.com/WildCodeSchool/java-katas
- https://github.com/aatwi/MarsRover-Refactoring-Kata
- https://github.com/HouariZegai/clean-code/tree/master/katas
- https://github.com/novoda/dojos
- https://www.youtube.com/watch?v=wW7uzc61tZ8
- https://github.com/pawelpluta/oop-kata
- https://github.com/JosePaumard/JosePaumard.github.io/tree/master/katas
- https://github.com/YDanot?tab=repositories&q=&type=&language=java&sort=
- https://github.com/Egga-zz/katas/tree/master/modules
- https://github.com/klaube/kata
- https://github.com/AnnaWeakclaw/refactoringGolf
- https://github.com/victorrentea/kata-trivia-java
- Refactoring legacy code https://github.com/jbrains/trivia, see Devoxx Video https://www.youtube.com/watch?v=xXvuBX1bVh8
- Kebab Kata
- SOLID kata https://github.com/AaryaZemoso/SOLID-Principle-Katas
- Zoom on Kata Trivia :
- Live coding part 1 : https://www.youtube.com/watch?v=iOYsxBvMkLk
- Live coding part 2 : https://www.youtube.com/watch?v=OVqnQ0xxx0I&t=469s
- Live coding Trivia : https://github.com/victorrentea/kata-trivia-java
- Another Trivia repo https://github.com/jbrains/trivia
- Refactoring kata : https://github.com/AnnaWeakclaw/refactoringGolf and IDE knowledge
- Java Kata : mutatio testing https://github.com/vmzakharov/mutate-test-kata
- Java refactoring Kata about untangling https://github.com/ythirion/untangled-conditionals-kata
- Kata refactoring list https://understandlegacycode.com/blog/5-coding-exercises-to-practice-refactoring-legacy-code/
- Extreme TDD money kata https://github.com/les-tontons-crafters/xtrem-tdd-money-kata
- Not a kata but could be one : https://github.com/jabrena/latency-problems
- Kata refactoring code sample (from Refactoring book of Martin Fowler, chapter 1 Refactoring: A First Example)
- Kata for calisthenics https://www.codurance.com/publications/2017/11/16/katas-for-functional-calisthenics and https://github.com/vilasmaciel/bank-kata-calisthenics
To go further
Idea to develop a kata :
https://fr.wikipedia.org/wiki/CHIP-8 to build a spec to create a kata
A TDD Chip-8 implementation https://github.com/secondsun/chip8
Architectural Kata
http://fundamentalsofsoftwarearchitecture.com/katas/list.html
https://nealford.com/katas/list.html
https://github.com/miyagis-forests/farmacy-food-kata