1. Startseite
  2. Wissen kompakt
  3. Software Craftsmanship

Software Craftsmanship

Inhaltsverzeichnis: DefinitionZentrale AspekteCraftsmanship over CrapManifestoHandwerk oder IngenieursdiziplinHinweise

Wissen kompakt: Software Craftsmanship ist eine Bewegung, die Softwareentwicklung als Handwerk etabliert, Clean Code anstrebt und Wissen durch Mentoring teilt.

Software Craftsmanship – Softwareentwicklung als Handwerk

Software Craftsmanship – alternativ auch Software Crafting genannt – ist eine Bewegung, die Softwareentwicklung als professionelles Handwerk sieht. Ziel ist es, die Profession der Softwareentwicklung auf ein höheres Niveau zu heben, die Entwicklung von lesbaren, änderbaren, erweiterbaren und wartbaren Code voranzutreiben und den produktiven Austausch mit und zwischen Softwareentwicklern zu fördern.

Die Bewegung setzt auf den Prinzipien des Manifesto for Agile Software Development auf und erweitert diese, indem sie den Fokus auf Professionalität sowie die Fähigkeiten und Arbeitsweisen der Entwickler legt. Dabei steht beständige Verbesserung und das Schaffen von Mehrwerten jenseits von rein finanziellen Aspekten im Mittelpunkt.

Software Craftsmanship - Softwareentwicklung als Handwerk

Zentrale Aspekte von Software Craftsmanship

Software Craftsmanship legt großen Wert auf hohe Code-Qualität. Es geht darum, Clean Code zu schreiben, der sauber, wartbar und gut getestet ist. Dafür werden bewährte Praktiken wie bspw. Test-Driven Development (TDD), Pair Programming und Refactoring angewendet.

Ein weiterer wichtiger Aspekt ist kontinuierliches Lernen und Verbesserung. Software Crafters streben danach, ihre Fähigkeiten ständig zu verbessern und neue Techniken zu erlernen. Dazu gehört das Lesen von Fachliteratur, die Teilnahme an Konferenzen, Schulungen und der Austausch mit anderen Entwicklern.

Mentoring und Wissensaustausch spielen ebenfalls eine große Rolle. Erfahrene Entwickler unterstützen ihre weniger erfahrenen Kollegen und helfen ihnen dabei, ihre Fähigkeiten weiterzuentwickeln.

Auch die professionelle Verantwortung der Entwickler ist ein zentraler Aspekt von Software Craftsmanship. Sie tragen die Verantwortung für die Qualität ihrer Arbeit und sollten sich verpflichtet fühlen, Software zu liefern, die den Anforderungen entspricht und nachhaltig ist.

Darüber hinaus wird eine enge Zusammenarbeit mit Kunden gefördert. Ziel ist es, sicherzustellen, dass die entwickelten Lösungen den Bedürfnissen der Kunden entsprechen und einen echten Mehrwert bieten.

Software Craftsmanship ist also eine Herangehensweise, die auf Qualität, kontinuierliches Lernen, Wissensaustausch, professionelle Verantwortung und enge Zusammenarbeit mit Kunden setzt. Durch diese Prinzipien wird sichergestellt, dass Software von hoher Qualität entwickelt wird, die den Anforderungen der Kunden entspricht und nachhaltig ist.

Craftsmanship over Crap

Der Satz “Craftsmanship over Crap” ist eine prägnante und provokative Aussage, die die Wichtigkeit von Qualität und Sorgfalt in der Softwareentwicklung betont. Er stammt von Robert C. Martin, einem der 17 Erstunterzeichner des Agilen Manifests und sollte als 5. Werte in das Manifest aufgenommen werden.

Was sagt Craftsmanship over Crap – also Handwerk statt Schrott – aus?

  • Es geht darum, dass Software mit hoher Qualität entwickelt wird, anstatt sich auf die Menge oder Geschwindigkeit der Produktion zu konzentrieren. Statt schnell und nachlässig zu arbeiten, sollte der Fokus auf sorgfältig gestalteter, gut getesteter und wartbarer Software liegen.
  • Es geht darum, sorgfältig zu arbeiten und professionell zu handeln. Entwickler sollten sich als Handwerker sehen, die stolz auf ihre Arbeit sind und hohe Standards für sich selbst setzen.
  • “Crap” steht für schlechten, unstrukturierten und schwer wartbaren Code, der technische Schulden verursacht. Es wird dazu aufgefordert, bewährte Praktiken zu befolgen und technische Schulden zu minimieren, um langfristig stabile und wartbare Software zu schaffen.
  • Hochwertige Software ist nachhaltiger und leichter zu erweitern oder zu ändern. Es ist langfristig besser, mehr Zeit und Aufwand in die Qualität der Software zu investieren, anstatt kurzfristige Lösungen zu bevorzugen, die später mehr Probleme verursachen.
  • Qualität hat direkten Einfluss auf die Zufriedenheit der Nutzer. Gut entwickelte Software, die zuverlässig funktioniert und einfach zu bedienen ist, führt zu einer besseren Benutzererfahrung und somit zu zufriedeneren Kunden.

Zudem appelliert die Aussage an den Berufsstolz und das Ethos der Entwickler. Entwickler sollten stolz auf ihren Code sein und ihre Arbeit als Ausdruck ihres handwerklichen Könnens betrachten.

Zusammenfassend lässt sich sagen, dass “Craftsmanship over Crap” die Kernidee des Software Craftsmanship zusammenfasst: Entwickler sollten bestrebt sein, hochwertige, gut gestaltete Software zu erstellen, anstatt schnell und nachlässig Lösungen zu produzieren, die auf lange Sicht mehr Schaden als Nutzen bringen.

Manifesto for Software Craftsmanship

Der Vorschlag von Robert C. Martin, das Agile Manifest um einen 5. Wert zu ergänzen, wurde nicht erhöht.¹ Stattdessen erblickte 2009 das Manifesto for Software Craftsmanship das Licht der Welt. Es ist in 13 Sprachen übersetzt² und wurde inzwischen von mehr als 36.000 Menschen weltweit unterzeichnet³.

Es lautet wie folgt:

Manifesto for Software Craftsmanship

Die Messlatte anheben.

Als engagierte Software-Handwerker heben wir die Messlatte für professionelle Softwareentwicklung an, indem wir üben und anderen dabei helfen, das Handwerk zu erlernen. Durch diese Tätigkeit haben wir diese Werte zu schätzen gelernt:

Nicht nur funktionierende Software, sondern auch gut gefertigte Software.

Nicht nur auf Veränderung zu reagieren, sondern stets Mehrwert zu schaffen.

Nicht nur Individuen und Interaktionen, sondern auch eine Gemeinschaft aus Experten.

Nicht nur Zusammenarbeit mit dem Kunden, sondern auch produktive Partnerschaften.

Das heißt, beim Streben nach den Werten auf der linken Seite halten wir die Werte auf der rechten Seite für unverzichtbar.

Zusammenfassend betont das Manifest also, dass es nicht ausreicht, einfach nur funktionierende Software zu liefern. Vielmehr soll die Software gut gestaltet und qualitativ hochwertig sein. Auch die kontinuierliche Verbesserung und das Schaffen von Mehrwert stehen im Vordergrund. Darüber hinaus hebt es die Bedeutung einer professionellen Gemeinschaft und produktiver Partnerschaften hervor.

Warum ist Softwareentwicklung ein Handwerk?

Softwareentwicklung lässt sich aus folgenden Gründen als Handwerk betrachten:

Ähnlich wie bei traditionellen Handwerken erfordert Softwareentwicklung kontinuierliches Feilen an den eigenen Fähigkeiten. Entwickler müssen ihr Wissen und ihre Techniken ständig verbessern, um qualitativ hochwertige Software zu erstellen.

Softwareentwicklung erfordert kreatives Denken und die Fähigkeit, komplexe Probleme zu lösen. Entwickler müssen innovative Lösungen entwerfen und umsetzen, ähnlich wie Handwerker, die individuelle und oft einzigartige Werke schaffen. Oft werden in der Softwareentwicklung maßgeschneiderte Lösungen entwickelt, die auf die spezifischen Bedürfnisse und Anforderungen der Kunden zugeschnitten sind. Dies ähnelt der Arbeit eines Handwerkers, der individuelle Stücke herstellt, die den spezifischen Wünschen seiner Kunden entsprechen. Softwareentwickler werden wie Handewert zu Meistern durch ständige Übung und wiederholte Anwendung ihrer Techniken, sowie durch kontinuierliches Lernen und Ausprobieren neuer Methoden.

Gute Software erfordert Sorgfalt und ein Auge für Details. Entwickler müssen darauf achten, sauberen, wartbaren und gut strukturierten Code zu schreiben, ähnlich wie Handwerker, die Wert auf Präzision und Qualität in ihrer Arbeit legen. Dazu nutzen Softwareentwickler eine Vielzahl von Werkzeugen und Techniken, die sie beherrschen müssen, um effektiv zu arbeiten. Ähnlich wie Handwerker spezialisierte Werkzeuge und Methoden anwenden, verwenden Entwickler verschiedene Programmiersprachen, Frameworks, Entwicklungsumgebungen und bewährte Verfahren.

Und zu guter Letzt wird in vielen Handwerken Wissen durch direkte Anleitung und Mentoring weitergegeben. Erfahrene Entwickler fungieren oft als Mentoren für weniger erfahrene Kollegen, teilen ihr Wissen und helfen ihnen, ihre Fähigkeiten zu entwickeln.

Diese Aspekte verdeutlichen, dass Softwareentwicklung mehr ist als nur das Schreiben von Code. Sie erfordert Hingabe, Leidenschaft für Qualität, kontinuierliche Weiterbildung und ein tiefes Verständnis für das Handwerk selbst. Softwareentwicklung ist ein kreativer Prozess, der sowohl technisches Können als auch handwerkliches Geschick erfordert.

Und warum ist Softwareentwicklung (auch) eine Ingenieursdisziplin?

Bei aller Begeisterung für Softwareentwicklung als Handwerk gibt es auch einige Argumente, die für eine Betrachtung als Ingenieursdisziplin sprechen:

Ingenieure nutzen systematische Ansätze und bewährte Methoden, um Probleme zu lösen. In der Softwareentwicklung werden ähnliche Prinzipien angewendet, wie zum Beispiel Requirements Engineering, Design Patterns und Architekturstile, um Software systematisch und strukturiert zu entwickeln.

Ingenieurdisziplinen basieren zudem auf wissenschaftlichen Prinzipien und Theorien. Die Softwareentwicklung verwendet Konzepte aus der Informatik, wie Algorithmentheorie, Datenstrukturen und Komplexitätstheorie, um fundierte Entscheidungen zu treffen und effiziente Lösungen zu entwerfen.

Softwareprojekte erfordern detaillierte Planung und effektives Projektmanagement, ähnlich wie Ingenieurprojekte. Techniken wie das Wasserfallmodell, agile Ansätze wie Kanban oder Scrum sind Beispiele für Ansätze, um Projekte erfolgreich zu gestalten und abzuschließen.

In Ingenieurdisziplinen spielen Qualitätskontrolle und die Einhaltung von Standards eine zentrale Rolle. In der Softwareentwicklung gibt es Standards und Best Practices, wie Code Reviews, Unit Testing und Continuous Integration, um die Qualität der Software sicherzustellen.

Ingenieure entwerfen Systeme, die skalierbar und wartbar sind. In der Softwareentwicklung ist dies ebenfalls von großer Bedeutung, insbesondere bei großen und komplexen Systemen. Architekturprinzipien und Design Patterns helfen dabei, Software so zu gestalten, dass sie leicht erweiterbar und wartbar ist.

Ingenieurprojekte erfordern oft auch die Zusammenarbeit verschiedener Fachrichtungen. Softwareentwicklungsprojekte beinhalten häufig die Zusammenarbeit von Entwicklern, Designern, Testern, Systemarchitekten und anderen Stakeholdern, um ein erfolgreiches Produkt zu liefern.

Ingenieure müssen Risiken identifizieren, bewerten und managen. In der Softwareentwicklung wird dies durch Techniken wie Risikoanalyse, Fehlermöglichkeits- und Einflussanalyse (FMEA) und Bug-Tracking erreicht, um potenzielle Probleme frühzeitig zu erkennen und zu beheben.

Detaillierte Dokumentation und Nachvollziehbarkeit sind in Ingenieurprojekten essenziell. In der Softwareentwicklung ist die Dokumentation von Anforderungen, Designentscheidungen, Code und Tests von großer Bedeutung, um die Wartung und Weiterentwicklung der Software zu erleichtern.

Diese Aspekte zeigen, dass die Softwareentwicklung viele Eigenschaften und Prinzipien des klassischen Ingenieurwesens teilt. Durch die Anwendung wissenschaftlicher Methoden, systematischer Ansätze und standardisierter Verfahren wird sichergestellt, dass Software robust, effizient und wartbar ist. Daher kann die Softwareentwicklung sowohl als Ingenieursdisziplin als auch als Handwerk betrachtet werden, je nach Perspektive und Schwerpunkt.

Impuls zum Diskutieren:

Ist Softwareentwicklung vielleicht sogar eher Kunst als Handwerk oder Ingenieursdisziplin?

Hinweise:

Die Inhalte auf dieser Seite dürfen Sie gerne teilen oder verlinken. Und falls Sie sich für Tipps aus der Praxis interessieren, dann testen Sie gerne unseren wöchentlichen Newsletter mit neuen Beiträgen, Downloads, Empfehlungen und aktuellem Wissen. Vielleicht wird er auch Ihr Lieblings-Newsletter!

[1] Bevor Robert C. Martin “Craftsmanship over Crap” formulierte, veröffentlichte Jack W. Reeves 1992 What is Software Design und verordnete Softwareentwicklung als Handwerk und nicht als Ingenieursdisziplin.

1999 folgte The Programatic Programmer, From Journeyman to Master von Andrew Hunt und David Thomas. Sie beschrieben, dass Programmierer während ihrer Karriere verschiedene Stufen vom Lehrling bis zum Meister durchlaufen, ähnlich wie Handwerker im mittelalterlichen Europa. 

Und 2001 veröffentlichte Pete McBreen das Buch Software Craftsmanship, The New Imperative, indem er ebenfalls den Ansatz des Handwerks herausarbeitete.

[2] Manifesto for Software Craftsmanship. Raising the bar.

[3] Grafische Darstellung der Anzahl der Unterschriften des Manifests.

Hier finden Sie ein kurzes Videointerview über die Bedeutung der Aussage Raising the bar bzw. die Messlatte hochlegen.

Im deutschsprachigen Raum wird manchmal neben Software Crafting auch der Begriff Softwerker benutzt.

Und hier finden Sie ergänzende Informationen aus unserer Rubrik Wissen kompakt:

Wissen kompakt: Wie funktioniert Pair Programming?

Wie funktioniert Pair Programming?

Wissen kompakt: Was ist Clean Code?

Was ist Clean Code?

Wissen kompakt: Wie funktioniert Softwaremodernisierung?

Wie funktioniert Softwaremodernisierung?