Egal ob es darum geht ein Kundenproblem zu erfassen – zu verstehen, wie jemand arbeitet, was damit erreicht werden soll und wo helfend eingegriffen werden kann; einen Fehler ausfindig zu machen – die Zusammenhänge verschiedener Systeme zu verstehen, in den Source abzutauchen, um schließlich mit meist wenigen Zeichen ein Programm wieder in die Bahn zu lenken; oder neue Technologien kennenzulernen – sich in fremde System einzudenken, deren Vor- und Nachteile abzuwägen, um die Technologien ggf. nutzbringend einzusetzen. Hervorragende Softwareentwickler sind neugierig und wollen die Welt verstehen. Ist ihr Verständnis umfassend genug, können sie dank ihres Vorstellungsvermögens Modelle abstrahieren und diese in Systeme gießen, die wiederum den Input der realen Welt einen Mehrwert für diese verwandelt.
Obwohl Kreativität ebenfalls ein großer Vorteil ist, ist Bequemlichkeit – Pardon, Effizienz – die wohl wichtigste Eigenschaft! Softwareentwickler sind eine der wenigen Berufsgattungen, die sich ihre Werkzeuge selbst bauen könnten. Von dieser Fähigkeit machen großartige Softwareentwickler ausgiebig Gebrauch. Bevor sie eine Tätigkeit zum n+1‑ten Mal wiederholen, überlegen sie, wie sich diese automatisieren lässt. Aber halt! Wer schon viel gesehen hat, muss das Rad nicht immer neu erfinden. Ein breiter Erfahrungsschatz mit Wissen zu und Erfahrungen mit Technologie helfen hier. Wenn dann noch die Fähigkeit Dinge zu vereinfachen und Wesentliches zu erkennen dazu kommt ist der Mix schon fast komplett – könnte man meinen.
Aber vorbei sind die Zeiten, in denen ein Hero im stillen Kämmerlein sein Meisterwerk geschaffen hat. Heutzutage ist Softwareentwicklung Teamwork! Frontend, Backend, Data-Warehouse, Cloud-Systeme, Virtualisierung, Build-Chain u.v.m. Wer soll da den Überblick bewahren? Genau hier kommt die Kommunikation ins Spiel. Die Vielfalt zur Umsetzung ist heutzutage gigantisch. Hinzu kommt der oft nötige Systemmix. Der ganze einfache Kram wurde ja schon erfolgreich automatisiert. Es gilt also, Anforderungen zu verstehen (die richtigen Fragen zu stellen), den nötigen Rahmen zu klären, Lösungsansätze und die dazugehörigen Technologien zu diskutieren und schließlich die ganzen Aufgaben und Arbeiten zu koordinieren.
Off-topic: Moment mal, macht das nicht normal ein Projektleiter? Zum einen ist man gut beraten, immer Projektleiter einzusetzen, die sowohl die Domäne (Branche, Märkte, Kunden, …) kennen, wie auch etwas von der Durchführung von Softwareprojekten verstehen. Zum anderen ist die Komplexität von Softwareprojekten dafür verantwortlich, dass Aufgaben nicht mehr komplett durchgeplant werden (Agilität) und Leitungsaufgaben auf mehrere Schultern verteilt werden (Vorgehensmodelle wie Scrum). Natürlich wäre es ideal, wenn die Entwickler ebenfalls bereits über Domänenwissen verfügen. Die angesprochene Neugierde sollte ihnen sonst beim Erlangen helfen.
Die Kür der Kommunikation ist wohl Kritikfähigkeit. Besonders Code-Reviews sind für Junior-Entwickler anfangs nichts Angenehmes. Die hart erarbeiteten Code-Fragmente und Klassen werden oftmals akribisch zerpflückt. Es scheint, als hätte man einfach alles falsch gemacht. An dieser Stelle ist nicht nur der Junior gefragt, der seine Persönlichkeit von seinem Werk trennen muss. Nicht er wird diskutiert, sondern der erstellte Code. Auch die erfahrenen Entwickler müssen ihren Teil beitragen. Ihre Expertise fußt schließlich selbst auf einem jahrelangen, oft schmerzvollen Reifungsprozess mit Fehlersuche, Refactoring und Diskussionen. Beim Code-Review kann daher der vorhandene Source als Grundlage für die Wissensvermittlung dienen. Kritikfähigkeit bedeutet letztlich auch, Rückmeldungen so zu formulieren, dass andere dadurch lernen und wachsen können. Generell ist es wichtig, sowohl anderen im Alltag zu helfen, wie auch selbst um Hilfe bitten zu können.