In the Code: Der moderne Programmierer

Ab sofort veröffentlichen wir in regelmässigen Abständen Gastbeiträge aus dem Herzen der Schweizer Software-Industrie. Netcetera-CTO Corsin Decurtins macht den Anfang: Über die Entwicklung der Software-Entwicklung.
 
Die Welt der Software-Entwicklung hat sich in den letzten Jahren in vielen Aspekten stark gewandelt. Wir haben grosse technologische Fortschritte gemacht. Entwicklerinnen und Entwickler verfügen über immer bessere Werkzeuge. Anforderungen und Erwartungen an Software und die Komplexität der Projekte sind allerdings auch stark gestiegen. Deshalb brauchen wir heute weniger Software-Entwickler und dafür mehr Software-Ingenieure.
 
Seit der Geburtsstunde der Informatik war die Welt der Software-Entwicklung lange durch technische Limitierungen und "das Machbare" bestimmt. Aus heutiger Sicht mussten damalige Entwicklerinnen und Entwickler mit rudimentären Werkzeugen arbeiten und mit begrenzt vorhandener, teurer Hardware zurechtkommen. Die Anforderungen an Softwaresysteme waren noch tief und die Benutzer sehr geduldig. Der grösste Aufwand eines Softwareprojektes floss in technische Abklärungen und die Programmierung der Applikationen. Die Kunden akzeptierten, dass Systeme und Applikationen komplex, schwer zu bedienen und sehr aufwändig in der Erstellung und im Betrieb waren.
 
Science Fiction wird Realität
In den letzten Jahren hat sich bei der Software-Entwicklung viel geändert. Die technologischen Fortschritte machen heute Dinge zur Selbstverständlichkeit, die wir noch vor wenigen Jahren nur aus Science-Fiction-Filmen kannten. Das Internet, mobile Geräte und stark gesteigerte Rechen- und Speicherkapazitäten haben die ganze Softwareherstellung auf den Kopf gestellt. Smartphones und Tablets haben komplexe Softwaresysteme in jede Hosentasche gebracht. Entwicklern stehen fantastische Werkzeuge zur Verfügung und es gibt kommerzielle und freie Komponenten en masse, die in Applikationen und Systemen integriert werden können. Die Anforderungen und Erwartungen an Software sind allerdings auch gestiegen. Applikationen müssen einfach bedienbar, effizient und elegant, immer und überall verfügbar sein. Heutzutage scheint fast alles machbar, was vorstellbar ist.
 
Die Kombination mächtigerer Werkzeuge und höherer Anforderungen haben in der Software-Entwicklung zu Verschiebungen geführt. Die technischen Herausforderungen von Softwareprojekten sind zwar immer noch sehr gross und nicht zu vernachlässigen. Über den ganzen Lebenszyklus eines Systems betrachtet, ist der relative Anteil solcher Aspekte gesunken. Das ist vor allem bei der Entwicklung von Individuallösungen spürbar. In solchen Projekten wird heute viel mehr Zeit in Faktoren investiert, die nur indirekt mit der eigentlichen Softwareprogrammierung zu tun haben.
 
Neue Job-Profile in der Software-Entwicklung
Bevor Entwicklerinnen und Entwickler mit der Programmierung beginnen können, müssen die Anforderungen und Wünsche an die Software zuerst aufgenommen, strukturiert und verstanden werden. Dafür gibt es Business-Analysten und Requirement-Engineers. Dann müssen User-Experience-Experten, Interaction-Designer, Business-Process-Ingenieure, System- und Softwarearchitekten Lösungen entwerfen, definieren und spezifizieren. Erst dann kommen die Programmierer zum Zug und schreiben die Software. Anschliessend folgen Qualitätssicherung und Testing und schliesslich der Betrieb.
 
Haben es heutige Software-Entwickler einfacher?
Auf den ersten Blick könnte man nun meinen, dass diese neue Art der Software-Entwicklung die Arbeit der Entwickler einfacher macht. Viele Experten sind in den Prozess involviert und die Entwickler können sich auf das konzentrieren, was sie am besten können: Programmieren. Dieses Bild entspricht allerdings überhaupt nicht der Realität. Auch wenn der Prozess auf dem Papier schön linear aussieht, ist viel Interaktion in alle möglichen Richtungen gefragt, zwischen den verschiedenen Prozessschritten und den Experten. Technische Limitierungen, die es auch heute noch immer gibt, haben Einfluss auf die Anforderungen und Prioritäten; Testing-Aspekte müssen bei Architekturentscheidungen berücksichtigt werden; Betriebsaspekte haben Einfluss auf die User Experience. Software-Entwickler stehen dabei mittendrin. Sie sind häufig Schlüsselpersonen, die zwischen den verschiedenen Parteien übersetzen und vermitteln. Selbst wenn sie auf vielen Themen keine Experten sind, müssen sie dennoch grundlegendes Verständnis und Wissen dafür aufbringen.
 
Software-Entwicklung ist demnach nicht mehr nur die reine Programmierung und technische Umsetzung von Anforderungen und Spezifikationen. Entwickler brauchen technisches Wissen und Erfahrung. Das allein reicht aber heutzutage nicht mehr aus. Softwareprojekte sind viel zu komplex und die Abhängigkeiten zwischen den involvierten Parteien viel zu verzahnt, als dass sich Entwickler einfach nur auf die Programmierung konzentrieren könnten.
 
Software-Ingenieure bringen Ordnung ins Chaos
Was heute gebraucht wird, sind Software-Ingenieure, die neben technischem Know-how weitere Eigenschaften mitbringen. Eine davon ist analytisches und strukturiertes Denken. Ein Softwareprojekt kann unglaublich chaotisch und unstrukturiert sein, wenn viele verschiedene Parteien mit unterschiedlichen Erfahrungswelten, Wünschen, Prioritäten, Zielen und mehr oder weniger technischem Verständnis involviert sind. Von den Software-Ingenieuren wird erwartet, dass sie mit all diesen Parteien umgehen und Ordnung ins Chaos bringen. Ihre Aufgabe ist, Wünsche, Anforderungen, Architekturen und Designs, die in allerlei Detaillierungsgraden, formell oder informell und in den verschiedensten Nomenklaturen daherkommen, in eine kompakte, konsistente, effiziente, effektive, nachvollziehbare und technisch realisierbare Form zu bringen. Nur so ist allen beteiligten Parteien möglich, Entscheidungen zu treffen, die verschiedene Expertisen benötigen und Lösungen zu finden, die technisch umsetzbar sind und den Anforderungen und Wünschen entsprechen. Ein Software-Ingenieur von heute muss also Zusammenhänge erkennen, Aspekte verallgemeinern und vereinfachen, Randfälle berücksichtigen, Komplexität identifizieren, usw.
 
Natürlich werden Software-Ingenieure von vielen Experten unterstützt. Dennoch müssen sie ein Softwaresystem auf einer viel detaillierteren Ebene verstehen, als alle anderen Beteiligten. Stellen Sie sich vor, dass ein Software-Ingenieur eine Anwendung und alles, was damit verbunden ist, dem dümmsten Mitarbeiter einer Firma begreiflich machen muss. Jemandem, der nichts weiss; dem man alles erklären muss; der keinen gesunden Menschenverstand besitzt und hinterhältig jede Lücke und Mehrdeutigkeit ausnutzt. Die Rede ist vom Computer. Auch wenn Computer unglaublich fleissige und ausdauernde Mitarbeiter sind, letztlich sind sie sehr dumm. Die Intelligenz wird ihnen erst von Software-Ingenieuren eingepflanzt.
 
Eine weitere wichtige Eigenschaft, die Software-Ingenieure heute brauchen, sind gute Kommunikationsfähigkeiten. Software-Ingenieure haben mit Parteien zu tun, die sehr unterschiedliche Sprachen sprechen. Sie müssen es verstehen, auf dem tiefsten, detailliertesten technischen Level zu kommunizieren, d.h. programmieren oder technische Fehler analysieren. Sie müssen aber auch Menschen technische Aspekte erklären können, die Experten auf einem anderen Gebiet sind und wenig Informatikwissen, wohl aber Bedürfnisse haben. Neben guten Kommunikationsfähigkeiten ist auch eine hohe Sozialkompetenz gefordert. Mit dem einstigen Stereotyp des Software-Entwicklers als nerdigem Mann mit ungepflegtem Bart, dicker Brille, langen Haaren und wenig Begabung im sozialen Umgang, hat das überhaupt nichts mehr zu tun.
 
Näher am Auftraggeber sein
In der Softwarebranche geistert immer wieder einmal der Mythos des "10x-Entwicklers" herum. Das ist ein Entwickler oder eine Entwicklerin, die 10 Mal effizienter und effektiver ist als ihre Kollegen. Dass diese Person eine solche Produktivität über geniale technische Fähigkeiten erreicht, ist natürlich möglich. Viel wahrscheinlicher ist jedoch, dass ein Software-Ingenieur um Faktoren effizienter und effektiver ist als andere, weil er oder sie besser kommuniziert, besser mit Experten aus anderen Domänen zusammen arbeitet, komplexe und chaotische Zusammenhänge besser strukturiert, verallgemeinert und vereinfacht und noch ein bisschen besser, eleganter und nachhaltiger programmieren kann. Gute Software-Ingenieure brauchen gutes und tiefes technisches Wissen, aber auch breit abgestützte Fähigkeiten in nicht-technischen Bereichen.
 
An dieser Stelle muss erwähnt werden, dass der Unterschied zwischen Software-Entwicklern und –Ingenieuren nichts mit den akademischen Qualifikationen zu tun hat. Die genannten Fähigkeiten erlernt man nicht zwingend in einem Universitätsstudium oder an der Hochschule. Gute Software-Ingenieure entstehen auch über eine Lehre oder den Quereinstieg.
 
Um heutzutage in der Softwarebranche erfolgreich zu sein, braucht es die erwähnten Eigenschaften zwingend. In Zukunft werden sie noch viel wichtiger, gerade für Software-Ingenieure in der Schweiz. Die Konkurrenz aus Ländern mit einem tieferen Lohnniveau ist gross und ihre Ausbildung und technischen Fähigkeiten verbessern sich stetig. Demzufolge können reine Programmierarbeiten, ob einfach oder kompliziert, gut an beliebige Standorte auf der ganzen Welt ausgelagert werden. Wir als Software-Ingenieure in der Schweiz haben hingegen nach wie vor grosse Vorteile zu bieten. Zwar sind wir nicht grundsätzlich besser, aber rein geografisch, kulturell und sozial sind wir viel näher an den Auftraggebern und Benutzern dran. Näher dran sein heisst besser verstehen und gerade bei den nicht-technischen Aspekten macht das den grossen Unterschied aus. (Corsin Decurtins)
 
Über den Autor
Corsin Decurtins ist Chief Technology Officer beim Zürcher Softwarehersteller Netcetera. Er ist zuständig für Technologiestrategie und Entwicklungsmethodiken, berät Kunden und interne Teams und arbeitet als Softwarearchitekt, -Ingenieur und technischer Projektleiter. Seine 15-jährige Erfahrung hat er hauptsächlich im Bereich von Java-EE-basierten Informations- und Transaktionssystemen für sichere und geschäftskritische Umgebungen gesammelt. Corsin Decurtins hat an der ETH Zürich Informatik studiert und einige Jahre als Forschungsassistent gearbeitet.
 
(Interessenbindung: Netcetera ist Technologie-Partner unseres Verlags.)