Coding Dojo
Function Katas
Write a function that tabulates CSV rows.
Write a function that translates Roman numerals, such as IV, into decimal numbers.
Write a function that multiplies two integers using the "Russian peasant multiplication" algorithm.
Implement a function to reformat a text. Function signature:
Develop a function that counts the number of characters in a string.
Develop a function that recognizes whether a number is "happy" or not.
Write a function to guarantee a file path to be absolute, e.g.
Implement a function to translate mail followup email addresses into dates and times.
Write a function that returns a christmas tree with ASCII type "drawn" as text.
Write a function that converts a specially formatted string into a dictionary.
Clean Code Developer Postcards
One postcard per grade, with all the principles and practices of the Clean Code Developer Initiative.
Class Katas
Develop the abstract data type list in the form of a linked list.
Develop a class that creates a plan for processing interdependent jobs.
Write a class that implements a queue in which the elements are assigned a priority.
Develop a class that implements a ring buffer.
Library Katas
Develop a library that can be used to manage user logins to websites.
Develop a library that can be used to find file duplicates in a directory tree.
Develop a library that can be used to determine the size of directory trees.
Implement a library that can be used to check whether a class correctly implements the INotifyPropertyChanged interface.
Implement a library with which a Windows service can be realized in a simple way.
Clean Code Developer playing cards
A playing card for each principle and practice of the Clean Code Developer Initiative.
Application Katas
Create a program to maintain a budget book. The program is operated via the command line.
Write an application that can be used to buy movie tickets online.
Write an application with which an entered text can be wrapped at a given column width.
Write a console program that allows two players to play [Tic Tac Toe].
Develop an application with which you can be woken up.
Develop an application that determines the lines of code (LOC) of the C# source code files in a directory tree.
The use of estimates in software development.
Write a console application that can be used to convert Roman numerals.
Develop an application for timetable information.
Idea Flow Mapping is a method invented by Jeanelle Klein.
Write a tool to resolve conflicts in text files.
Develop an application that allows 2 to 4 people to play the ladder game.
Write a program that creates a cheat sheet for a Minesweeper game field.
Write an application that helps to do the work of a team in MobProgramming "in tomato time".
Develop an application to manage recipients of email newsletters.
Write a program that lists all misspelled words in an input file.
Write an application that supports you in predicting software estimates.
Develop an application with which a group (including a distributed group) can measure its mood.
Write a console program that allows a player to play [Tic Tac Toe] against a bot.
Develop an application for electronic admission control at events.
Develop an application that can be used to time exercises during training sessions.
Develop an application for evaluating presentations at conferences.
Clean Code Developer Poster
DIN A0 poster with all the principles and practices of the Clean Code Developer Initiative.
Architecture Katas
Develop (web) software that makes suggestions to the user about what to cook.
Develop a software system that allows DVD owners to share their treasures with others.
Develop a software system that allows the audience at developer conferences to ask speakers questions or give them feedback.
Develop a software with which a hotline can report issues to ProductOwner.
Develop a software system that allows distributed teams to work together on a Kanban board.
Develop a software system that allows you to send tweets at a defined time.
Develop an application with which employees in a company can find out how the "check-in flow" is in the canteen.
Develop an application to monitor the development of the Lines of Code (LOC) in a directory tree.
Develop a Twitter service that allows you to send tweets longer than 140 characters.
Develop an application that automatically redelivers a forwarded email at a specified time.
Calculate stability and abstractness of libraries/packages/components.
Develop an application that allows customers to order online from a pizza delivery service.
Develop an application that brings the game "Quizduell" (https://www.quizduell-game.de/) to the desktop.
Develop a web application with which interested parties can come together for a collective order.
Develop a calculator application in which individual operations are only available to certain users.
Write a program that allows several players to play Stadt-Land-Fluss.
Develop an application that customers can use to order cab rides (see http://mytaxi.com).
Develop a service with which appointments can be arranged electronically. The model is, of course, http://doodle.com.
Develop an application with which team members can work according to the "Pomodoro Technique".
Develop an internet service for shortening URLs such as bit.ly, TinyURL or Google url shortener.
Develop an Internet service with which you can have a vocabulary word sent to you every day.
Develop an app with which you can learn vocabulary according to the 1-out-of-4 scheme.
Workflows define which steps are to be carried out in order to react to an event.
Agility Katas
Attention: If you want to enjoy the full fun of the Agility Katas, complete the exercises piece by piece in the given order. This is the only way to expose yourself to the full surprise and find out whether your code is really changeable.
CSV Viewer - Browse CSV files page by page
Questionnaire - A program for filling out questionnaires
With flow design to clean code
Learn how to use flow design to achieve clean code with this book.
Word Count - Just start and then increase...
Explanations
Clean software development needs to be practiced. This requires exercises. In the Coding Dojo, we collect such exercises under the established term "Kata". The kata have different scopes in order to offer something for every taste, every level and every time budget:
- Function Katas/Code Katas are small tasks whose problem definition is an algorithm. Their solution consists of a function - subject to any refactorings.
- Class Katas are tasks whose problem can be solved using a class and several functions - again, subject to any refactoring. This is more about abstract data types.
- Library Katas stand for problems whose solution requires several classes, which can then be combined in a library. These tasks are somewhat more extensive.
- Application Katas The task is to develop a complete application. In other words, it is not just about any logic, but about everything from the user interface to the domain and resource access. However, the challenge here is not so much the use of technology, but rather the interaction of aspects.
- Architecture Katas are larger application catas. They require a distributed implementation or are even so large that an implementation is unrealistic. Then it's about the architecture design.
- Agility Katas are application katas that focus on iterative and incremental development. Each kata is therefore delivered in several parts.
What you can practise with the katas is different. Functions and classes are more about test-first, the application of CCD principles and test techniques such as dummies, Gold Master, etc. With libraries and applications, other techniques are added, such as dependency injection or practices like version control. Above all, however, an explicit design gains weight. With the Architecture Katas, this may even be the only result to be produced - albeit at a different level of abstraction than with the Application Katas.
The procedure is also worth practicing for agility katas. The approach should be incremental in terms of agility. The katas provide information on the expansion stages in which you should proceed. Try to really concentrate only on the current iteration, without consulting information from other iterations.