Entwickler sind wunderbar: Kaffee rein – Code raus, richtig? Doch Softwareentickler haben ein Problem: ihr „Image“. Die Welt sieht uns als nahezu perfekte Denker, welche die Probleme dieser Welt mit wenigen Zeilen Code lösen. Als Personen welche „alle“ Probleme lösen können. Unser Handikap: Wir haben begonnen, diese Dummheit auch zu glauben.
Nicht unfehlbar …
Ja, es ist korrekt, dass viele Sofwareentwickler, welche ich kenne beeindruckende Denker sind. Viele von ihnen haben kein Problem mit einer Code-Basis von mehr als 200’000 Zeilen Code umzugehen und sich darin zurecht zufinden oder beeindruckend einfach Lösungen auf wirklich komplexe Anforderungen zu finden! Doch diese Fähigkeit macht uns nicht zur fleischgewordenen Turingmaschine. Wir sind vergesslich, wir sind oft kurzsichtig, wir sind oft zu sehr von unseren Ideen überzeugt – wir sind nicht perfekt, wir sind nicht unfehlbar!
Besonders stark äussert sich dies im Code den wir schreiben. Ich möchte nicht wissen, wie viele Bugs ich in meiner beruflichen Laufbahn schon zu verantworten habe – und ich werde es wohl (Gott sei Dank) auch nie! Doch so unausweichlich die Tatsache menschlichen Scheiterns auch für erfahrene und intelligente Softwareentickler ist, müssen wir uns doch mit der Gegebenheit unserer eigenen Fehlbarkeit auseinander setzen: Jeder Entwickler schuldet diese Konfrontation sich selbst, seiner Professionalität und seinen Berufskollegen.
Maschinenbauer wird Entwickler
Meine berufliche Laufbahn beginnt in einer kleinen Firma als Maschinenbauzeichner. Wir bauten komplette Robotersysteme, welche automatisiert Baugruppen montierten. Ein wichtiger Teil meiner Berufsausbildung bestand daraus, Modelle zu bauen und auf ihre Tauglichkeit hin zu testen. Als Lehrling prüfte mindestens ein weiterer erfahrener Konstrukteur meine Arbeit. Die Resultate dieser Revision konnten vernichtend sein. Ich lernte schnell und schmerzhaft, meine Arbeit zu prüfen – an den vielen tausenden von Normen des Maschinenbaus und am Können meiner Kollegen, welche allesamt mehr Erfahrung hatten als ich! Diese Kultur der Selbstkontrolle nahm ich dann mit ins Informatikstudium.
Jeder Entwickler weiss: Seinen eigenen Code zu prüfen ist wirklich alles andere als einfach. Wir bauen universale Lösungen auf eine fast unlimitierte Anzahl an Problemen möglicherweise sogar auf Problemen, welche in ihrem Umfang noch nicht einmal erfassbar sind. Wie funktioniert Selbstkontrolle in einer solchen Umgebung?
Testing for the Win …
Als junger Entwickler im 21. Jahrhundert kommt man um Begriffe wie TDD, UnitTesting etc. gar nicht mehr herum – die Frage ist jedoch, wischst du sie einfach bei Seite oder kniest du dich da rein? Ich hatte keine Ahnung, wie ich von einem Maschinenbauzeicher mit einer grösseren Leidenschaft für Code als Planzeichnungen, zu einem Entwickler mit einer Kultur der Selbstkontrolle werden sollte, bis ich mich mit Testing auseinander setzte. Seit diesem Zeitpunkt ist Testing (und insbesondere automatisiertes Testing) eine meiner grossen Leidenschaften als Softwareentwickler. Ich schreibe gerne Tests, weil sie mich dazu bringen, weiter, breiter und tiefer zu Fragen und zu denken. Sie zwingen mich dazu zu spezifizieren, bevor ich implementiere und sie helfen mir dadurch bessere Software zu schreiben. Ich kann es nicht lassen meine Kollegen in dieselbe Richtung zu schubsen, selbst wenn diese Versuche oft auf wenig Begeisterung treffen.
Zu Beginn dieses Jahren hatte ich dann die Möglichkeit eine neue Applikation von Grund auf zu bauen. Jedes Stück Code das ich schrieb, wird durch einen Test spezifiziert und automatisiert geprüft. Es gibt Unit- und Integrationtests, welche zusammen kombiniert eine Code-Abdeckung von über 80% ergeben. Diese Test laufen auf einem Entwicklernotebook innert weniger Sekunden vollständig durch und werden bei jedem Buildvorgang ausgeführt.
Obwohl das Projekt noch nicht sehr alt ist, konnten wir bereits dank dieser Tests Fehler im Voraus verhindern und wir haben seit seiner produktiven Einführung nicht einen Bugreport erhalten.
… denn den perfekten Entwickler gibt es nicht!
Was möchte ich aufzeigen? Wir Entwickler sollten unsere Superman-Kostüme in die Ecke stellen und uns mit den Gräben unserer eigenen Unzulänglichkeit auseinandersetzen. Eine Möglichkeit dazu sind automatisierte Tests, welche wir für uns, unser Team und die Zukunft und die Wartbarkeit unseres Produktes schreiben und pflegen. Wir müssen uns eingestehen, dass wir keine perfekten Entwickler sind und es den perfekten Entwickler garnicht gibt; aber dass wir jeden Tag etwas besser werden können und sollten!