# Software Craftsmanship

Software Craftsmanship (englisch für etwa „Software-Handwerkskunst“ oder „Softwerkskunst“) ist eine Bewegung in der Softwareentwicklung, die sich mit der Arbeitsweise und Wahrnehmung des Berufsstandes der Softwareentwickler beschäftigt. Ziel der Bewegung ist es, die Softwareentwicklung als eigenständige Profession, als Handwerk (und nicht als Ingenieursdisziplin) wahrnehmbar zu machen und die Bewertung von Softwareprojekten nach Entwicklerverantwortlichkeiten und nicht nur unter rein finanziellen Gesichtspunkten vorzunehmen.

## Klassische Sicht der Softwareentwicklung

In der Vergangenheit wurden Programmierer vor allem als Praktiker eines statistisch und mathematisch basierten Engineering-Ansatzes gesehen, der mit Attributen wie Berechenbarkeit, Präzision, wenig Risiko und geringer Professionalität konnotiert war. Der Softwareentwickler wird gerne als Hobbyprogrammierer oder Entwicklungsingenieur gesehen, der von Projektleitern und Produktverantwortlichen gelenkt werden muss. Zum Sinnbild wurde die Figur des eher weltfremden Nerds. Auch ziehen sich manche Softwareentwickler gern auf diese Position zurück.

## Parallelen zu traditionellen Handwerksberufen

Die Mehrheit der Softwareentwickler erstellt Individualsoftware, von der der Auftraggeber einen Mehrwert erwartet. Der Beruf des Softwareentwicklers ist in den Anforderungen an das Ergebnis vergleichbar mit der Tätigkeit eines Handwerksmeisters, der auch mit Fachkompetenz individuelle Produkte herstellt, die beim Kunden einen gewissen Zweck erfüllen sollen.
Ein Beispiel ist der Elektriker, der die Stromversorgung einer Wohnung erstellt. Ein Elektriker muss zum Beispiel verschiedene Anforderungen beachten: Die Kabel müssen nachvollziehbar verlegt und ausreichend dimensioniert sein für zukünftig zu erwartende Energiebedarfe. Die Absicherung muss ordnungsgemäß ausgeführt sein, Elektroherd und Durchlauferhitzer sollen gleichzeitig betrieben werden können und darüber hinaus sollen Steckdosen in ausreichender Anzahl und an den richtigen Plätzen vorhanden sein. Der Elektriker kennt aktuelle Technologien und berät den Auftraggeber kompetent. Unter Umständen muss er dem Kunden aber auch unmissverständlich klarmachen, dass preisgünstigere Vorschläge (z. B. Kabel diagonal zu verlegen, um Kupfer zu sparen, oder weniger Absicherungen einzubauen) keine gangbare Lösung darstellen.
Genau wie der Elektriker soll auch der professionelle Softwareentwickler verantwortungsbewusst handeln und Aspekte wie Geschäftszweck, Wirtschaftlichkeit, Qualitätsanspruch, Machbarkeit und rechtliche Anforderungen berücksichtigen und vor allem auch gegenüber seinen Auftraggebern (Kunden, Projektmanagern, Vorgesetzten etc.) vertreten können. Vereinfacht gesagt, unterscheidet der professionell agierende Softwareentwickler sich von einem Amateurprogrammierer vor allem durch den Wertekodex, nach dem er handelt und entscheidet.

### Berufsethos der Softwareentwickler

Dieses Vorgehen lässt sich als Berufsethos der Softwareentwickler ansehen. Die Softwareentwicklung wird damit in den Stand einer Profession erhoben. Darüber hinaus ergeben sich Forderungen nach Standards, Zulassungskriterien, Zertifizierung, permanenter Weiterentwicklung und allgemeingültigen Wissensgrundlagen als Mechanismen für die Reifung der Disziplin.

### Das Agile Manifest als Grundlage

Bereits das Agile Manifest mit seiner Betonung auf „Individuen und Interaktionen über Prozessen und Werkzeugen“ hinterfragt einige der eingangs dargestellten Annahmen über den Beruf des Softwareentwicklers. Das Manifest des Software Craftsmanship erweitert die Annahmen des Agilen Manifestes und verweist in der Formulierung der Grundideen des Software Craftsmanship metaphorisch auf das Lehrmodell der mittelalterlichen Handwerkskünste in Europa.

## Entstehung der Idee

Die Bewegung basiert auf Ideen verschiedener Autoren. Die Bücher Der Pragmatische Programmierer von Andy Hunt und Dave Thomas sowie Software Craftsmanship von Pete McBreen stellen die Verbindung zwischen der Softwareentwicklung und den mittelalterlichen Handwerkskünsten her. Der Philosoph Richard Sennett beschrieb Softwareentwicklung als ein modernes Handwerk in seinem Buch The Craftsman. Freeman Dyson ergänzt den Begriff der Softwerkskunst um die Meisterschaft, Software als einen Treiber für wirtschaftlichen Erfolg einzusetzen:
    „Trotz des Aufstiegs von Microsoft und anderer großer Softwarefirmen bleibt die Softwareentwicklung in großen Teilen eine Handwerksindustrie. Aufgrund der enormen Fülle an spezialisierten Anwendungen bleibt immer noch Raum für den einzelnen, Software anhand seines einzigartigen Wissens zu schreiben. Es wird immer Nischenmärkte geben, in denen kleine Softwarefirmen überleben. Die Kunst, Software zu schreiben, wird nicht überflüssig werden. Und die Kunst, Software kreativ einzusetzen, gedeiht noch mehr als die Kunst, Software zu schreiben.“
Nach den ersten Diskussionen wurden Konferenzen in London und Chicago abgehalten und ein Manifest wurde erstellt. Dieses ist online verfügbar, um Unterzeichner zu sammeln.

## Geschichte

1992 veröffentlichte Jack W. Reeves seinen Aufsatz What Is Software Design? (Was ist Software-Design?), in dem er postuliert, dass die Softwareentwicklung eher ein Handwerk sei als eine Ingenieursdisziplin.
1999 erschien Der Pragmatische Programmierer. Der Untertitel der englischen Originalausgabe, From Journeyman to Master, unterstellt, dass Programmierer während ihrer beruflichen Entwicklung mehrere Stufen vom Lehrling bis zum Meister durchlaufen, ein Prozess, der sich so auch in den Handwerkskünsten im mittelalterlichen Europa findet.
2001 veröffentlichte Pete McBreen sein Buch Software Craftsmanship. McBreen stellt ebenfalls klar, dass Softwareentwickler sich nicht als Ingenieure sehen sollten, sondern dass eine andere Metapher passender wäre.
Im August 2008 schlug Robert C. Martin, auch bekannt als „Uncle Bob“, einen fünften Wert für das Agile Manifesto vor: Craftsmanship over Crap (wörtlich: „Handwerkskunst anstelle von Mist“). Er änderte seinen Vorschlag später in Craftsmanship over Execution („Handwerkskunst anstelle von Ausführung“).
Im Dezember 2008 trafen sich die ersten engagierten Softwerker in Libertyville, Illinois mit der Absicht, die Grundsätze des Software Craftsmanship zu formulieren.
Im März 2009 wurde das Gründungsmanifest verabschiedet. Es ist öffentlich verfügbar und kann von jedem, der mit den Ideen übereinstimmt, unterzeichnet werden.
Im April 2009 experimentierten zwei der Bewegung angeschlossene Unternehmen, 8th Light und Obtiva, mit einem ‚Softwerkeraustausch‘, vergleichbar mit den Wanderjahren der Handwerksgesellen. Der Chicago Tribune war dies am 15. Juni 2009 sogar einen Artikel wert.
Im Januar 2010 gab es einen zweiten Softwerkertausch zwischen den Unternehmen Obtiva und Relevance.
Auch die Clean-Code-Bewegung beruft sich auf die Software Craftsmanship.

## Softwerkskammer

Die Softwerkskammer als deutschsprachiges Organ der Bewegung wurde im Jahr 2011 gegründet. Die Organisationen kümmern sich vor allem um das unternehmens- und fachübergreifende Zusammentreffen von Softwareexperten und die Förderung des Austausches.
Derzeit gibt es 21 regionale Organisationen in Deutschland (davon allein 4 in Nordrhein-Westfalen), 2 in Österreich und eine in der Schweiz.

## Konferenzen

* SoCraTes: Jährliches Zusammentreffen der lokalen Softwerkskammern aus Deutschland, Österreich und der Schweiz.

## Kritik

Der Software-Craftsmanship-Ansatz, insbesondere die Positionierung in der Nähe des Handwerks, wird von verschiedenen Seiten in Frage gestellt.
Der Programmierer und Berater Dan North postuliert in seinem Artikel Programming is not a craft, dass Softwareentwicklung oder Programmierung keine dem Handwerk verwandte Tätigkeit sei. Die Zugangsbeschränkungen sind seiner Ansicht nach zu niedrig (jeder kann Programmierer werden), der Industriezweig ist zu jung und die erstellten Produkte tragen nicht die Schönheit von Handwerksprodukten. North vermisst im Software Craftsmanship Manifesto zudem Formulierungen wie „Ergebnisse erzielen“ und „Kunden erfreuen“.
Permanentes Ändern ist billig, da kein Material verschwendet wird, der Software Code muss lediglich neu geschrieben werden. Es bleibt also zu fragen, ob Handwerker Methoden der Softwareentwicklung, insbesondere eine agile Vorgehensweise, so leicht für ihre Gewerke einsetzen können wie das bei Software der Fall ist.

## Bücher und Artikel

* Dave Hoover, Adewale Oshineye, Foreword by Ward Cunningham: Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman. O’Reilly, ISBN 0-596-51838-2.
* Robert C. Martin: Clean Code: A Handbook of Agile Software Craftsmanship. Addison-Wesley, 2008, ISBN 0-13-235088-2.
* Pete McBreen: Software Craftsmanship: The New Imperative. Addison-Wesley, 2001, ISBN 0-201-73386-2.
* Richard Sennett: The Craftsman. Yale University Press, 2008, ISBN 0-300-11909-7.
* Sandro Mancuso: The Software Craftsman: Professionalism, Pragmatism, Pride. Prentice Hall, 2014, ISBN 0-13-405250-1.
* Bill Pyritz: Craftsmanship versus engineering: Computer programming - An art or a science? In: Bell Labs Technical Journal. 2003.