Clean Code Developer - Viel mehr als nur "schön" programmieren!

07.12.2017

Clean Code Developer
Eine Initiative für mehr Professionalität in der Softwareentwicklung.
 Professionalität = Bewusstheit + Prinzipien!


Diese Blogserie widmet sich dem Thema Clean Code Developer und der Möglichkeit diese Prinzipien und Praktiken schrittweise in die tägliche Arbeit eines Entwicklungsteams einzubinden. Ich werde in diesem Beitrag einen Ausblick auf die Themen von CCD geben und diese in den nachfolgenden Beiträgen im Detail betrachte. Dies werde ich anhand von drei Fragen durchführen, die meist am Anfang einer neuen Vorgehensweise auftreten:

• WARUM CCD?
• WAS ist CCD?
• WIE funktioniert CCD?


Als Grundlage dieser Entwicklungsmethode dient die Bewegung Clean Code Developer, die im deutschsprachigen Raum unter clean-code-developer.de zu finden ist. Die Möglichkeit durch das Werte-System schrittweise Fachwissen aufzubauen sowie die darin enthaltenen Fortschritts-Grade sind sehr hilfreich ein Wertegefühl für Code-Qualität zu entwickeln.

«WARUM CCD?»
Im nächsten Beitrag «WARUM CCD?» werden wir uns vertieft der Frage widmen, warum Clean Code Developer als agile Entwicklungsmethode im Zentrum einer Softwareentwicklung stehen sollte. Wir werden entdecken das CCD viel mehr als nur «schönes» Programmieren bedeutet und erfahren, das CCD unabhängig des gewählten Vorgehensmodells ein wichtiger Baustein in der Entwicklung qualitativ hochwertiger Systeme ist. Wir werden folgend auch die Frage beantworten, warum jeder Softwarearchitekt CCD als willkommenes Werkzeug für eine agile Code-Architektur betrachten sollte und warum eine granulare, modulare und stabile Architektur erst durch Clean Code korrekt umgesetzt werden kann.
Was «korrekte» Software bedeutet und warum Korrektheit nicht erst im Testbereich geprüft werden sollte ist ebenfalls Gegenstand des nächsten Beitrages.
Auch widmen wir uns der Frage in welcher Weise die folgenden Eigenschaften die Qualität einer Code-Architektur beschreiben und warum es eine Methode braucht diese zu erreichen und zu erhalten:

• Evolvierbarkeit bei stabiler Aufwandskurve
• Korrektheit
• Testbarkeit (Qualität)
• Robustheit (Neues Feature != Defekt)
• Lesbarkeit.

Daraus lassen sich Zielsetzungen für eine Entwicklungsmethode ableiten und wir werden prüfen, ob diese Ziele durch eine bestimmte Art der Entwicklung zu erreichen sind.

«WAS ist CCD?»
In einer weiteren Folge «WAS ist CCD?» werden wir uns die Frage stellen was denn nun genau das Clean Code Developer System ist. Ist es eine Sammlung von Design-Patterns, eine Schulungsmethode oder doch eine Entwicklungskultur?
Um zu wissen, warum wir etwas einsetzen wollen, müssen wir zuerst auch wissen WAS wir einsetzen wollen. Daher beleuchten wir die Ursprünge der Clean Code Developer Bewegung und werden erfahren, dass eine enge Verwandtschaft zwischen der agilen Entwicklung und Clean Code besteht. Man könnte fast sagen, das sie voneinander Abhängig sind.
Wir werden erfahren, warum das Handwerk des Softwareentwicklers wie jedes andere Handwerk eine Mischung aus Professionalität, Werte und Prinzipien ist. Doch während alte Handwerkskünste Jahrhunderte an Entwicklung und Erfahrung aufweisen können, ist das Handwerk des Softwareentwicklers eine noch sehr junge Tätigkeit.
Eigenverantwortung, Selbständigkeit und Bewusstsein für Qualität sind Eigenschaften die durch CCD in die tägliche Arbeit einbezogen werden und so zu ständigen Begleitern während der Entwicklung werden.
Wir werden versuchen den Begriff «Professionalität» in Bezug auf Softwareentwicklung einzuordnen und dem Begriff in unserer Tätigkeit als Entwickler gerecht werden können.
Wir werden uns auch der Frage zuwenden, warum Clean Code Developer vor allem im Zusammenspiel mit anderen Methoden wie Test Driven, Behavior Driven und Acceptance Driven Development von grossen Nutzen sein kann. Und warum CCD auch Paradigmen wie DevOps und Cross Functional Teams miteinbezieht.
Weiters werden wir uns die einzelnen Bausteine und ihren Platz im CCD-System genauer anschauen. Um diese Methode richtig einsetzen zu können werden wir Begriffe wie Prinzipien, Praktiken, Design, Pattern und Werte klären und aufzeigen wie wir sie in Bezug auf Clean Code einzuordnen sind.
Natürlich darf auch ein Überblick über die Grade des CCD-Systems nicht fehlen. Was sie bedeuten und wie wir uns ihnen iterativ annähern können ist ein weiteres Thema des Beitrags.

«WIE funktioniert CCD?»
Im Beitrag «WIE funktioniert CCD?» sehen wir uns dann im Detail an wie Clean Code Developer funktioniert und welche Möglichkeiten es gibt es in einem Entwicklungsteam zu etablieren. Wir werden mehr über die Iteration der verschiedenen Grade erfahren und so mehr Verständnis für die Praktiken und Prinzipien von CCD bekommen. Es wird klarer warum die einzelnen Bausteine von CCD erst nach und nach ein zusammenhängendes Bild einer agilen Code-Architektur ermöglichen. Wir werden auf verschiedene Ausgangssituationen und Umgebungsbedingungen eines Entwicklungsteams Rücksicht nehmen und passende Vorgehensmodelle für die Umsetzung von CCD ergründen. Es wird aufgezeigt das CCD nur sehr selten auf organisatorische Massnahmen ausserhalb des Entwicklungsteams angewiesen ist und warum CCD mehr positiven Einfluss auf die Qualität einer Software nimmt, als dies mit theoretischen Schulungen der Fall ist. Unser Interesse sollte auch von dem Umstand geweckt werden das CCD nur sehr wenig an Zeit neben der täglichen Arbeit benötigt und am besten durch «learning by doing» angewendet wird.
Der Beitrag wird somit eine Starthilfe für interessierte Entwickler und Entwicklungsverantwortliche sowie Softwarearchitekten die nach einer Methode suchen, gemeinsam eine hohe Qualität der Code-Architektur zu erreichen und zu bewahren. Erst jetzt werden wir bereit sein die einzelnen Grade tiefer zu betrachten um in weiteren Beiträgen gezielt auf die Praktiken und Prinzipien von CCD eingehen zu können.

Technisch interessierte Entwickler und Architekten werden in den nachfolgenden Beiträgen auf ihre Kosten kommen. Dann werden wir uns im Detail um Prinzipien und ihre Auswirkung auf die Code-Architektur kümmern. Hier einige Beispiele:

• Don´t Repeat Yourself (DRY)
• Favour Composition over Inheritance (FCoI)
• Integration Operation Segregation Principle (IOSP)
• Single Level of Abstraction (SLA)
• Single Responsibility Principle (SRP)
• Separation of Concerns (SoC)
• Interface Segregation Principle (ISP)
• Dependency Inversion Principle
• Liskov Substitution Principle
• Open Closed Principle


Aber auch die Praktiken, von denen ich hier einige aufzählen darf, werden nicht zu kurz kommen. Wir werden sehen wie CCD nicht nur Entwickler betrifft, sondern in Zeiten wie BDD, TDD und DevOps auch andere Rollen in der Softwareentwicklung von Clean Code Developer profitieren können:

• Issue Tracking
• Automatisierte Integrationstests
• Continuous Integration
• Statische Codeanalyse (Metriken)
• Inversion of Control Container
• Continuous Delivery
• Iterative Entwicklung
• Komponentenorientierung
• Test first


Ich freue mich schon auf eine gemeinsame Reise durch die Methode Clean Code Developer und wünsche euch bei den nachfolgenden Beiträgen viel Spaß und Spannung!


Markus Wagner

FollowMe