Sunday, April 3, 2011

Agile Developer Skills und Software Craftsmanship

Im JavaMagazin 01/2011 ist ein Artikel zum Thema Agile Developer Skills. Welche Fähigkeiten gehören zu einem Agile Software Developer? Der Autor wird auch in Kürze ein gleichnamiges Buch veröffentlichen, das schon in Amazon vorbestellt werden kann.

Skill Stufen

Es werden verschiedene Skill-Stufen unterschieden, angelehnt an die japanische Metapher Shu-Ha-Ri. Das ist vergleichbar mit den Lehrling-Geselle-Meister Stufen.
"Shu: Lernen der Grundlagen, Regeln und Heuristiken. In dieser Stufe gibt es einen Meister und vorgegebene Regeln, die der Lehrling lernt, anzuwenden.
Ha: Die Regeln sind in Fleisch und Blut übergegangen, man konzentriert sich auf die Ausnahmen, hinterfragt die Regeln und entwickelt seinen eigenen Stil.
Ri: Es gibt keine isolierten Regeln mehr, alles ordnet sich in einen natürlichen Fluss ein."
Ich hatte in der Vergangenheit immer folgendermaßen unterschieden:



Stufe 1 (Lehrling): Ausführung nur unter mehr oder weniger intensiver Anleitung (vergleichbar mit "Shu").
Stufe 2 (Geselle): Ausführung eigenständig; gemäß Lehrbuch (oben noch "Shu"). Man kann halt schon programmieren, aber "nur" genau so, wie man es gelernt hat. Es ist sehr wichtig lange genug genau so zu programmieren, wie man es im Lehrbuch gelesen hat! Dazu ein Zitat von Ron Jeffries: "My advice is to do it by the book, get good at the practices, then do as you will. Many people want to skip to step three. How do they know?"
Stufe 3 (erfahrener Geselle): Ausführung eigenständig; pragmatische, effiziente Arbeitsweise (oben "Ha"). Nach jahrelanger Praxis, kann man (das was man erlernt hat) nun selber bewerten. Man verwendet viele wiederverwendbare Bibliotheken zur Effizienzsteigerung und bricht auch mal (kontrolliert) Regeln, weil man vielleicht ein anderes Ziel erreichen möchte (Beispiel: Anpassbarkeit vs. Performance) oder weil die Rahmenbedingungen nicht idealtypisch sind (Beispiel: es gibt keine fachlichen Anforderungen).
Stufe 4 (Meister): Man kann andere anleiten (oben "Ri").

In dem Artikel wird weiter zwischen harten und weichen (sozialen) Skills unterschieden.

Harte Skills

Zu den wichtigsten technischen Fähigkeiten eines agilen Entwicklers gehören laut den Autoren:
Nicht berücksichtigt in der Auflistung ist all das Basiswissen, das ein Entwickler (agil oder nicht agil) beherschen sollte: OO Prinzipien, Architekturmuster, Datenbanken, Betriebssysteme, Applikationsserver, Entwicklungsumgebung, Netzwerke, Middleware etc. Die Auflistung bezieht sich also auf zusätzliche spezielle Fähigkeiten von Entwicklern in agilen Teams. Ich würde hier z.B. folgende Punkte ergänzen, die als Grundlage im Bereich OO Anwendungsdesign dienen:

Soft Skills

Im Artikel werden vor allem folgende Soft-Skills betont:
  • Fähigkeit zur Teamarbeit
  • Aktives Zuhören (den anderen durch nachfragen verstehen wollen)
  • Fragen (vor allem: nach Hilfe und Hilfeleistung)
  • Argumentieren (seine eigene Sicht in die Diskussion einbringen und vertreten)
  • Respekt: die Meinung des anderen ist auch legitim ...
  • Vertrauen untereinander (nicht: Fehler nur kritisieren, Schuldzuweisungen)
  • Phasen der Gruppenarbeit kennen und durchleben wollen (Forming, Storming, Performing)
Ich würde folgende praktischen Ratgeber empfehlen:
Ich finde auch die Werte von Extreme Programming als Leitlinien sehr gut. Die XP Werte sind: Einfachheit, Kommunikation, Feedback, Mut und Respekt.

Skills entwickeln

Das geht gemäß Artikel wie folgt:
  • Bücher lesen
  • Wikis, Communities, und Blogs besuchen und gestalten
  • Konferenzen besuchen
  • Eigene Blogs schreiben
  • Lernen in Retrospektiven im eigenen Team
  • Pair Programming
Das war eine knappe aber runde Einführung in das Thema agile Skills. Das ist eine Menge Holz, aber es ist ja bekanntlich noch kein Meister vom Himmel gefallen und: täglich dazu lernen ist in unserem Geschäft normal. Einen guten Ansatz finde ich (als Ergänzung zum agilen Manifesto) die Idee des Software Craftsmanship: unsere Disziplin (Programmierung) als Handwerkskunst zu verstehen und "ehrenwürdig" zu vertreten.

No comments:

Post a Comment