Coding Dojo - Clean Code Developer Akademie-Stefan Lieser

Coding Dojo

Function Katas

Write a function that tabulates CSV rows.

Weiterlesen »

Schreibe eine Funktion, die Römische Zahlen [1] in Dezimalzahlen übersetzt.

Weiterlesen »

Schreibe eine Funktion, die zwei ganze Zahlen mit dem Algorithmus „russische Bauernmultiplikation“ multipliziert.

Weiterlesen »

Implementiere eine Funktion zur Umformatierung eines Textes. Funktionssignatur:

Weiterlesen »

Entwickle eine Funktion, welche die Anzahl der in einem String vorkommenden Zeichen zählt.

Weiterlesen »

Entwickle eine Funktion, die die Lines of Code (LOC) in einem wohlgeformten C# Quelltext zählt.

Weiterlesen »

Schreibe eine Funktion, die die Zahlen von 1 bis 100 zurückgibt.

Weiterlesen »

Entwickle eine Funktion, die erkennt, ob eine Zahl „fröhlich“ ist oder nicht.

Weiterlesen »

Write a function to guarantee a file path to be absolute, e.g.

Weiterlesen »

Implementiere eine Funktion zum Übersetzen von Mail Followup Email Adressen in Datums- und Uhrzeitangaben.

Weiterlesen »

Schreibe eine Funktion, die einen Text mit dem Verfahren ROT-13 verschlüsselt.

Weiterlesen »

Schreibe eine Funktion, die einen Tannenbaum mit ASCII-Art „gezeichnet“ als Text zurückliefert.

Weiterlesen »

Schreibe eine Funktion, die einen speziell formatierten String in ein Dictionary wandelt.

Weiterlesen »

Class Katas

Schreibe eine Klasse Galgenmännchen. Über den Konstruktor erhält die Instanz das gesuchte Wort als String.

Weiterlesen »

Entwickle eine Warteschlangenklasse mit begrenzter Länge für die Kommunikation zwischen mehreren Threads.

Weiterlesen »

Entwickle eine Klasse zur Zählung von Bowling-Spielen.

Weiterlesen »

Erstelle ein grafisches Control, mit dem Box Plots angezeigt werden können.

Weiterlesen »

Entwickle den abstrakten Datentyp Liste in Form einer verketteten Liste.

Weiterlesen »

Entwickle eine Klasse, die einen Plan zur Abarbeitung untereinander abhängiger Jobs erstellt.

Weiterlesen »

Schreibe eine Klasse, die eine Warteschlange implementiert, bei der die Elemente mit einer Priorität versehen sind.

Weiterlesen »

Entwickle eine Klasse, die einen Ringbuffer [1, 2] implementiert.

Weiterlesen »

Implementiere den abstrakten Datentyp Stack.

Weiterlesen »

Library Katas

Entwickeln Sie eine Bibliothek, mit der Benutzeranmeldungen bei Websites verwaltet werden können.

Weiterlesen »

Entwickle eine Bibliothek, mit der man Dateidubletten in einem Verzeichnisbaum finden kann.

Weiterlesen »

Entwickle eine Bibliothek, mit der man den Umfang von Verzeichnisbäumen ermitteln kann.

Weiterlesen »

Implementiere eine Bibliothek, mit der überprüft werden kann, ob eine Klasse das Interface INotifyPropertyChanged korrekt implementiert.

Weiterlesen »

Implementiere eine Bibliothek, mit der ein Windows Service auf einfache Weise realisiert werden kann.

Weiterlesen »

Application Katas

Erstelle ein Programm zur Pflege eines Haushaltsbuches. Das Programm wird per Kommandozeile bedient.

Weiterlesen »

Schreiben Sie eine Anwendung, mit der Kinokarten online gekauft werden können.

Weiterlesen »

Schreibe eine Anwendung, mit der ein eingegebener Text an einer vorgegebenen Spaltenbreite umbrochen werden kann.

Weiterlesen »

Schreibe ein Konsolenprogramm, mit dem zwei Spieler [Tic Tac Toe] spielen können.

Weiterlesen »

Entwickle eine Anwendung, mit der man sich wecken lassen kann.

Weiterlesen »

Entwickle eine Anwendung, die die Lines of Code (LOC) der C# Quellcodedateien in einem Verzeichnisbaum ermittelt.

Weiterlesen »

Schreibe ein Programm, das Kontonummern in ASCII Dateien erkennt.

Weiterlesen »

Schreibe ein Programm, das einen Monatskalender auf der Konsole ausgibt.

Weiterlesen »

Die Verwendung von Schätzungen in der Softwareentwicklung.

Weiterlesen »

Schreibe eine Konsolenanwendung, mit der römische Zahlen konvertiert werden können.

Weiterlesen »

Entwickle eine Anwendung zur Fahrplanauskunft.

Weiterlesen »

Idea Flow Mapping ist eine von Jeanelle Klein erfundene Methode.

Weiterlesen »

Entwickle eine Anwendung zur Führung eines Kassenbuches für kleine Unternehmen.

Weiterlesen »

Schreibe ein Tool, mit dem sich Konflikte in Textdateien auflösen lassen.

Weiterlesen »

Entwickle eine Anwendung, mit der 2 bis 4 Personen das Leiterspiel spielen können.

Weiterlesen »

Schreibe ein Programm, das zu einem Minesweeper Spielfeld einen Mogelzettel erstellt.

Weiterlesen »

Schreibe eine Anwendung, die hilft, die Arbeit eines Teams beim MobProgramming „im Tomatentakt“ zu verrichten.

Weiterlesen »

Schreibe eine Konsolenanwendung, die den Inhalt einer Textdatei seitenweise ausgibt.

Weiterlesen »

Schreibe eine Anwendung, mit der Aktienkurse beobachtet werden können.

Weiterlesen »

Entwickle ein Programm, mit dem ein sog. [n-back Test] durchgeführt werden kann.

Weiterlesen »

Entwickle eine Anwendung zur Verwaltung von Empfängern von Email-Newslettern.

Weiterlesen »

Schreibe ein Programm, das alle falsch geschriebenen Wörter einer Eingabedatei auflistet.

Weiterlesen »

Schreibe eine Anwendung, die dich bei der Vorhersage von Softwareschätzungen unterstützt.

Weiterlesen »

Entwickeln Sie eine Anwendung, mit der eine (auch verteilte) Gruppe ihre Stimmung messen kann.

Weiterlesen »

Schreibe ein Konsolenprogramm, mit dem ein Spieler [Tic Tac Toe] gegen einen Bot spielen kann.

Weiterlesen »

Entwickle eine Anwendung zur elektronischen Einlasskontrolle bei Veranstaltungen.

Weiterlesen »

Entwickle eine Anwendung zur Pflege einer ToDo-Liste.

Weiterlesen »

Entwickle eine Anwendung, mit der man Übungen während Trainings zeitlich begrenzen kann.

Weiterlesen »

Entwickeln Sie eine Anwendung zur Bewertung von Vorträgen auf Konferenzen.

Weiterlesen »

Architecture Katas

Entwickle eine (Web-)Software, die ihrem Anwender Vorschläge macht, was er kochen könnte.

weiterlesen »

Entwickle ein Softwaresystem, mit dem DVD-Besitzer ihre Schätze mit anderen Teilen können.

weiterlesen »

Entwickle ein Softwaresystem, mit dem Zuhörer auf Entwicklerkonferenzen Referenten Fragen stellen bzw. ihnen Feedback geben können.

weiterlesen »

Entwickle eine Software, mit der eine Hotline Issues an ProductOwner melden kann.

weiterlesen »

Entwickle ein Softwaresystem, mit dem verteilte Teams an einem Kanban Board gemeinsam arbeiten können.

weiterlesen »

Entwickle eine Anwendung, mit der sich Mitarbeiter in einem Unternehmen darüber informieren können, wie der „Abfertigungsfluss“ in der Kantine ist.

weiterlesen »

Entwickle eine Anwendung zur Überwachung der Entwicklung der Lines of Code (LOC) in einem Verzeichnisbaum.

weiterlesen »

Entwickle einen Twitter-Service mit dem man Tweets senden kann, die länger als 140 Zeichen sind.

weiterlesen »

Entwickeln Sie eine Anwendung, die eine weitergeleitete Email automatisch zu einem vorgegebenen Zeitpunkt erneut zustellt.

weiterlesen »

Stabilität und Abstraktheit berechnen von Bibliotheken/Paketen/Komponenten.

weiterlesen »

Entwickle eine Anwendung, mit der Kunden online bei einem Pizza Bringdienst bestellen können.

weiterlesen »

Entwickle eine Anwendung, die das Spiel „Quizduell“ (https://www.quizduell-game.de/) auf den Desktop bringt.

weiterlesen »

Entwickle einen Web-Anwendung, mit der sich Interessenten für eine Sammelbestellung zusammenfinden können.

weiterlesen »

Entwickle eine Taschenrechneranwendung, bei der einzelne Operationen nur bestimmten Benutzern zur Verfügung stehen.

weiterlesen »

Schreibe ein Programm, mit dem mehrere Spieler Stadt-Land-Fluss spielen können.

weiterlesen »

Entwickle eine Anwendung, mit der Kunden Taxifahrten bestellen können (siehe http://mytaxi.com).

weiterlesen »

Entwickle einen Dienst, mit dem Termine elektronisch vereinbart werden können. Vorbild ist natürlich http://doodle.com.

weiterlesen »

Entwickeln Sie eine Anwendung, mit der Teammitglieder nach der „Pomodoro Technique“ arbeiten können.

weiterlesen »

Entwickle einen Internetdienst zu Kürzung von URLs wie bit.ly, TinyURL oder Google url shortener.

weiterlesen »

Entwickle einen Internetdienst, mit dem man sich täglich eine Vokabel zuschicken lassen kann.

weiterlesen »

Entwickle eine App, mit der man nach dem Schema 1-von-4 Vokabeln lernen kann.

weiterlesen »

Workflows legen fest, welche Arbeitsschritte zu durchlaufen sind, um auf ein Ereignis zu reagieren.

weiterlesen »

Agility Katas

Achtung: Wenn Sie den vollen Spaß der Agility Katas genießen wollen, absolvieren Sie die Übungen Stück für Stück in der vorgegebenen Reihenfolge. Nur so setzen Sie sich der vollen Überraschung aus und erfahren, ob Ihr Code wirklich evolvierbar ist.

CSV Viewer – Seitenweise Blättern in CSV Dateien

Write an application that displays CSV files to the console.

weiterlesen »

Extend the CSV Viewer application as follows:

weiterlesen »

Erweitern Sie die CSV-Viewer-Anwendung wie folgt: Fügen Sie einen zusätzlichen Menüpunkt hinzu.

weiterlesen »

Machen Sie den CSV-Viewer fähig, riesige CSV-Dateien anzuzeigen

weiterlesen »

Erweitern Sie den CSV-Viewer, sodass beim erneuten Öffnen der Anwendung eine bereits verarbeitete CSV-Datei dargestellt wird.

weiterlesen »

Stellen Sie schließlich eine GUI [1] vor die Anwendung, die so aussieht:

weiterlesen »

Questionnaire – Ein Programm zum Ausfüllen von Fragebögen

Schreiben Sie eine Anwendung, um einen Fragebogen auszufüllen.

weiterlesen »

Erweitern Sie die Fragebogenanwendung in folgenden Punkten:

weiterlesen »

Fügen Sie der Fragebogenanwendung die folgenden Funktionen hinzu:

weiterlesen »

Verbessern Sie die Fragebogenanwendung mit den folgenden Funktionen:

weiterlesen »

Word Count – Einfach anfangen und dann steigern…

Schreiben Sie eine Anwendung, um die Anzahl der Wörter in einem Text zu zählen.

weiterlesen »

Nicht alle Wörter sind für das Zählen relevant….

weiterlesen »

Die Anwendung kann mit einem Dateinamen gestartet werden, um den Text auszulesen.

weiterlesen »

Die Anwendung zeigt nicht nur die Anzahl der Wörter, sondern auch die Anzahl der eindeutigen Wörter an.

weiterlesen »

Wörter mit Bindestrich werden nicht mehr getrennt.

weiterlesen »

Die durchschnittliche Wortlänge der gezählten Wörter wird berechnet und ausgegeben.

weiterlesen »

Optional wird ein Index aller gezählten Wörter gedruckt.

weiterlesen »

Optional kann der Text mit einem Wörterbuch bekannter Wörter verglichen werden.

weiterlesen »

Erlauben Sie dem Benutzer, mehrere Texte einzugeben und analysieren zu lassen.

weiterlesen »

Saubere Softwareentwicklung will geübt werden. Dafür braucht es Übungsaufgaben. Im Coding Dojo sammeln wir 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.
  • Library Katas stehen für Probleme, deren Lösung mehrere Klassen erfordern, die dann in einer Bibliothek zusammengefasst werden können. Diese Aufgaben sind schon etwas umfangreicher.
  • 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 der iterativen und inkrementellen 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 Test-First, die Anwendung von CCD Prinzipien und Testtechniken wie Attrappen, Gold Master usw. Bei Libraries und Applications kommen dann weitere Techniken hinzu 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 als bei den Application Katas.

Für Agility Katas ist auch das Vorgehen übenswürdig. Es soll nämlich inkrementell im Sinne der Agilität vorgegangen werden. Die Katas geben Hinweise, in welchen Ausbaustufen Sie vorgehen sollten. Versuchen Sie, sich wirklich immer nur auf die aktuelle Iteration zu konzentrieren, ohne Informationen der weiteren hinzuzuziehen.

en_USEnglish