Softwareentwicklung und Programmierung

Software entwicklen ist eine schwierige Aufgabe. Für mich ist ein ständiges anpassen an die aktuellen Gegebenheiten der Umgebung ein wichtiges Vorgehen bei meiner täglichen Arbeit an Softwarelösungen. Ich versuche, angemessene Lösungen die auf Erfahrungen beruhen anzubieten. Für mich ist ein flexibles anpassen meines Vorgehens an die zu erarbeitende Lösungen ein kontinuierlicher projektbegleitender Prozess. Ein tiefes Verständnis der Softwareentwicklung im Ganzen ist mir dabei besonders wichtig. Es unterstützt mich bei meinem Ziel, verständliche, produktive, korrekte und möglichst wartungsfreie Software zu schreiben.

Bei der Programmierung innovativer Softwarelösung versuche ich durch mein Gespür für neue Technologien und Techniken diese früh aufzugreifen und kreativ anzuwenden. Ich probiere gern Neues aus und baue dieses in mein bisheriges Wissen ein. Durch meine Neugierde und meine Begeisterung für Softwaresysteme versuche ich gepaart mit meinem kritischen Denken und einer gehörigen Portion Realismus auf die täglichen Fragen passende Antworten zu finden. Das Gefühl wie kompliziert dabei ein Problem ist und wieviel Zeit für die Lösung benötigt wird gibt mir das nötige Durchhaltevermögen für meine Arbeit. Das breite Spektrum an Wissen ermöglicht es mir, mich neuen Aufgaben und Herausforderungen zu stellen und ich versuche diese aktiv zu Gestalten.

Domänen-getriebene Entwicklung

Domain-Driven-Development (DDD) ist nichts Neues. Es sind bewährte Praktiken, Sammlungen und Strategien, um bestehende Probleme in der Softwareentwicklung zu lösen. DDD vereint eine Vielzahl von Techniken, wie Anforderungsanalyse und Anforderungsspezifikation, modellieren von Modellen, minimieren und teilen von komplexen Abhängigkeiten, Festlegen und Verwenden einer gemeinsamen Fachterminologie, die konsequente Nutzung allgemeinverständlicher Design Pattern, das definieren von Verträgen (Schnittstellen) vor der Implementierung, das Implementieren von Tests als Teil der Anforderungsspezifikation, das konsequente Nutzen von Konventionen als Teil der Entwicklung, formale Semantik zur Reduzierung der Komplexität und zur Steigerung des Verständnisses.

Test- und Verhaltens-getriebene Entwicklung

Der Einsatz von Test-getriebener Entwicklung (TDD, Test-Driven-Development) beschreibt einen Programmiertechnik der das Nachdenken und Spezifizieren vor der Implementierung beschreibt. Hierbei wird der Test vor der Implementierung geschrieben und schrittweise umgesetzt. Die konsequente Umsetzung dieser Programmiertechnik fördert bei mir zum einen die angesproche inhaltliche Bewertung und Korrektheit meiner derzeitigen kleinen Aufgabe innerhalb des Gesamtsystems und zum anderen dessen technische Umsetzung. Zudem ist meine Arbeit an der Programmieraufgabe (der Test-Case) immer ziel- und ergebnisorientiert und somit innerhalb eines nachhaltigen Entwicklungsprozesses produktiver.

Der Einsatz von Spezifikations-getriebenen Entwicklungen (BDD, Behavior Driven Development) bezieht im Gegensatz zu TDD den expliziten Gedanken ein, dass alle im Entwicklungsteam die gleiche Fachsprache zur Lösungen einer Aufgabe in der Domäne verwenden sollen. Anhand softwaretechnischer Sprach-Konstrukte und API's werden hier Anforderungen mit der Fachterminologie der Domäne durch Unit-und Integrations-Tests automatisch Testbar. Ich finde diese Entwicklungstechnik vor allem beim programmieren von Softwarelösungen interessant, die zum großen Teil gemeinsam mit nicht-technischen Personen, Geschäftsleuten oder Geschäftsanalytikern erarbeitet werden. In der agilen Softwareentwicklung ist der Gebrauch von eindeutiger, von allen verstandener Sprache existentiell. Das gilt noch expliziter beim Einsatz von BDD als Konzept zur Optimierung von Code- und Spezifikationsqualität.