Coding Dojo
Saubere Softwareentwicklung will geübt werden. Dafür braucht es Übungsaufgaben. Im Coding Dojo sammelt die Clean Code Developer School solche Aufgaben unter der etablierten Bezeichnung “Kata”. Die Katas haben verschiedenen Umfang, um für jeden Geschmack, jedes Niveau und jedes Zeitbudget etwas zu bieten:
- Function Katas/Code Katas sind kleine Aufgaben, deren Problemstellung ein Algorithmus ist. Ihre Lösung besteht aus einer Funktion – vorbehaltlich eventueller Refaktorisierungen.
- Class Katas sind Aufgaben, deren Problem sich mittels einer Klasse und mehrerer Funktionen lösen lässt – wieder vorbehaltlich eventueller Refaktorisierungen. Hier geht es eher um Abstrakte Datentypen oder Adapter.
- Library Katas stehen für Probleme, deren Lösung mehrere Klassen erfordern, die dann in einer Bibliothek zusammengefasst werden können. Das können umfangreichere Adapter oder auch kleine Prozesse sein.
- Application Katas stellen als Aufgabe die Entwicklung einer kompletten Anwendung. D.h. es geht nicht nur um irgendeine Logik, sondern um alles von der Benutzerschnittstelle über die Domäne bis zum Ressourcenzugriff. Die Herausforderung liegt hier jedoch weniger beim Technologieeinsatz, sondern im Zusammenspiel der Aspekte.
- Architecture Katas sind größere Application Katas. Sie erfordern eine verteilte Implementation oder sind sogar so groß, dass eine Implementation unrealistisch ist. Dann geht es um den Architekturentwurf.
- Agility Katas sind Application Katas, bei denen der Fokus auf inkrementeller-iterativer Entwicklung liegt. Jede Kata wird daher in mehreren Teilen geliefert.
Was Sie mit den Katas üben können, ist unterschiedlich. Bei Functions und Classes geht es eher um TDD, die Anwendung von CCD Prinzipien und Testtechniken wie Attrappen, Gold Master usw. Bei Libraries und Applications kommen dann weitere Techniken hinzu wie Dependency Injection oder Praktiken wie Versionskontrolle. Vor allem gewinnt dann jedoch ein expliziter Entwurf Gewicht. Bei den Architecture Katas ist der dann womöglich sogar das einzige zu produzierende Ergebnis – allerdings auf einem anderen Abstraktionsniveau wie bei den Application Katas.
Für Library, Application und Architecture Kata ist auch das Vorgehen übenswürdig. Es soll nämlich inkrementell im Sinne der Agilität sein. Die Katas geben dann Hinweise, in welchen Ausbaustufen Sie vorgehen sollten. Versuchen Sie dann, sich wirklich immer nur auf die aktuelle zu konzentrieren, ohne Informationen der weiteren hinzuzuziehen.
Wenn Sie sich automatisch über neue Katas informieren lassen wollen, abonnieren Sie den RSS-Feed dieser Seite.
Function Katas
- CSV tabellieren [] – Nützlich für Konsolenprogramme
- FizzBuzz [] – Ein Spiel nicht nur für Biertrinker
- From Roman Numerals [] – Herausforderung Parsing
- Fröhliche Zahlen [] – Wenn man sonst schon nichts zu lachen hat…
- LOC [] – Dem Quellcode zu Leibe rücken
- File Path Helper – Make file paths absolute again
- Mail Followup [] – Email-Adressen für Termine
- ROT [] – Streng vertraulich!
- Russische Bauernmultiplikation [] – Bauernschläue mal anders
- Tannenbaum [] – Eine Kata nicht nur für die Weihnachtszeit
- Textumbruch – Bekannt auch als „Kata WordWrap“
- ToDictionary []
- To Roman Numerals [] – Wie die alten Römer
- Zeichen zählen []
Class Katas
- Bounded Queue [] – Herausforderung Multithreading
- Bowling [] – (K)Eine ruhige Kugel schieben
- Box Plot [] – Herausforderung graphische Anzeige
- Galgenmännchen – Wer errät das Wort?
- Linked List []
- Ordered Jobs [] – Abhängigkeiten auf die Reihe kriegen
- Priority Queue []
- Ringbuffer []
- Stack []
Library Katas
- Benutzeranmeldung [] – Nützlich für jeden Website
- Dateidubletten aufspüren [] – Clean Code für Clean Harddisk
- Folder Stats [] – Clean Code für Clean Hard Disk
- INotify Tester [] – Testhilfe für Datenklassen
- Windows Service [] – Funktionalität in den Hintergrund bringen
Application Katas
- BankOCR [] – “Scan” as “scan” can
- Cal [] – Wem der Monat schlägt…
- Comparative Estimation – Relativ statt absolut
- Convert roman [] – Stay in touch with the ancients
- Fahrplanauskunft – Pünktlichkeit nicht nur für Könige
- Haushaltsbuch – Das bisschen Haushalt…
- Idea Flow Mapping – Löst du noch Konflikte oder arbeitest du schon?
- Kassenbuch [] – Geld regiert doch die Welt
- Kinokasse – Dafür werden Filme gemacht
- Konfliktlöser – Ein Tool für Harmonie im Team
- Leiterspiel – Snakes and Ladders selbstgebaut (download sample data)
- LOC Count [] – Metrik Tool im Selbstbau
- Minesweeper [] – Information hiding der anderen Art
- MobTimer – Dem programmierenden Mob einen Takt geben
- More [] – Die Mutter aller eReader
- n-back [] – Die Konzentration steigern
- Newsletterverteiler [] – Leichter weitersagen
- Rechtschreibprüfung [] – Vertrauen ist gut, Kontrolle ist besser
- Software Forecasting – Vorhersagen ist besser als Schätzen
- Stimmungsbarometer – Da geht der Stimmung ab durch der Decke…
- Taschenrechner – Dem Windows Standardprogramm Konkurrenz machen
- Textumbruch [] – Ein Herz für lesbares Layout
- Tic Tac Toe [] – Ein Game kann jeder programmieren
- Tic Tac Toe Bot – Mensch gegen Maschine
- Ticket Scanner – Wolle´mer se reinlasse?
- ToDo [] – Wissen, was zu tun ist
- Übungstimer – Training im Takt
- Vortragsbewertung [] – Keinen Referenten ohne Feedback zurücklassen
- Wecker [] – Guten Morgen, liebe Sorgen…?
Architecture Katas
- Aktives Kochbuch – Gesunde Ernährung leichter gemacht
- Dropbox Workflows – Routinemäßig zusammenarbeiten im Fluss
- DVDs teilen [] – Videotheken können einpacken
- Financial Risk System – von Simon Brown aus seinem Buch “Software Architecture for Developers”
- Heckle Service [] – Zwischenrufe erwünscht!
- Issue Triage [] – Stets im Dienste des Anwenders
- Kanban Board [] – Mit Zug zum Erfolg!
- Kantinenstaumelder [] – Flüssig essen gehen
- LOC Stat [] – Endlich sehen, dass es voran geht
- Long Tweets [] – Freiheit für die Twitter-Nachrichten
- Mail Followup [] – Nachhaken nicht vergessen
- Pizza Online [] – Mmmmh, lecker!
- Quizduell [] – Herausforderung Wissen
- Sammelbestellung [] – Gemeinsam günstiger einkaufen
- Sicherer Taschenrechner [] – Gefährliche Divisionen nicht für jedermann
- Stadt – Land – Fluss – Spielerisch die Welt kennenlernen
- Taxi [] – Nachfrage mit Angebot verbinden
- Terminvereinbarung [] – doodle dir einen
- Tomatentimer [] – Zeitmanagement mit der Pomodoro Technique
- URL Shortener [] – Was bit.ly kann…
- Vokabel des Tages [] – Nebenbei eine Sprache lernen
- Vokabelquiz [] – Spielend lernen
Refactoring Katas
- CSV Viewer – Page through CSV data in a terminal window
- Hexdump (Source code ) – Ein Tool um Freunde und Verwandte zu beeindrucken :-) (Quelle: C# von Kopf bis Fuß)
Agility Katas
Achtung: Wenn Sie den vollen Spaß der Agility Katas genießen wollen, lesen Sie die Beschreibung der Anforderungen von Folgeiterationen erst nach der Implementation der vorherigen. Nur so setzen Sie sich der vollen Überraschung aus und erfahren, ob Ihr Code wirklich evolvierbar ist.
- CSV Viewer – Be surprised how challenging a simple text file browser can become
- Questionnaire – Roll your own market research tool
- Word count – Start small, then grow…
Weitere Code Kata Sammlungen
- Das Coding-Dojo von Stefan Lieser in der dotnetpro: jeden Monat eine Aufgabe und eine Lösung. Seit 2010 ein Fundus an Challenges ganz unterschiedlicher Größenordnung.
- Brian P. Hogan, Exercises for Programmers: 57 Challenges to Develop Your Coding Skills
- codewars.com – Online Katas durchführen
- codingdojo.org
- Garora’s TDD Katas
- Mega Project List
- Project Euler
- Rosetta Code
- Ruby Quiz
- cyber-dojo.org – Online Katas durchführen
- Kata Log
- LeetCode – Problems from easy to hard
Als kleine Hilfestellung für das Herangehen an die Aufgaben mit Flow Design & Co gibt es noch eine Quick Reference: das Flow-Design Cheat Sheet.