Ende 2008 habe ich als Junior-Java-Entwickler in einem mittelständischen Unternehmen der Finanzbranche angefangen zu arbeiten. Ab Oktober 2022 werde ich bei Varengold arbeiten, aber insgesamt bin ich seit fast 14 Jahren als Entwickler (meist mit JVM-basierten Sprachen) tätig. Auf dieser Reise habe ich viele verschiedene Arten von Menschen, Organisationen, Kulturen und natürlich Software kennengelernt. In diesem Beitrag möchte ich die 5 (für mich) wertvollsten Dinge vorstellen, die ich in meiner über 10-jährigen Karriere gelernt habe. Schauen wir uns das mal an.
1. Emotionale Intelligenz
Viele junge Entwickler wollen besser im Programmieren werden. Aber rückblickend betrachtet, war das Programmieren die einfachere Aufgabe im Vergleich zum Umgang mit Konflikten, Menschen oder Problemen, die man lösen muss. An diesem Punkt ist die emotionale Intelligenz sehr nützlich. Du hast diesen Begriff wahrscheinlich schon einmal gehört. Aber was bedeutet er, wirst du dich fragen?

Im Grunde besteht sie aus 4 Teilen:
- Emotionen wahrnehmen: Die Fähigkeit, die Emotionen von Menschen zu erkennen. Dazu gehören Mimik, Gestik, Körperhaltung und Stimme.
- Emotionen nutzen: Die Fähigkeit oder das Wissen, eigene und fremde Emotionen zur Erleichterung kognitiver Aktivitäten zu nutzen, z. B. zur Problem- oder Konfliktlösung.
- Verstehen: Die Fähigkeit, Emotionen zu analysieren und zu verstehen, wie sie sich im Laufe der Zeit verändern können.
- Beherrschen: Die Fähigkeit, die eigenen Emotionen oder die anderer Menschen zu beeinflussen.
2. Denk über das „große Ganze“ nach
Das große Ganze kann viele Bedeutungen haben, je nachdem, wen du fragst. Bei der Arbeit an Projekten oder Produkten wird man in der Regel zum Experten für den Bereich des eigenen Teams. Viele Entwickler neigen dazu, die Bedeutung ihres eigenen Bereichs im System zu überschätzen.

Nehmen wir an, es gibt 3 Ansichten dazu:
- Geschäftlich: Wie kann man als Unternehmen erfolgreicher werden, und wie kann man das erreichen?
- Benutzer: Wie kannst du dem Endbenutzer oder Kunden mit dem von Ihnen geschriebenen Code einen Mehrwert bieten?
- Technologie: Wie kann man Software erstellen, die robust ist und lange hält (saubere und homogene Architektur, effizient, geringer Speicherverbrauch usw.)?
Wenn man mit der Arbeit an neuen Aufgaben beginnt, ist es immer hilfreich, die Antworten auf die Was-Warum-Wie-Fragen zu kennen. In der Regel haben mir diese Fragen immer geholfen, das große Ganze zu erfassen:
- das Ziel vor Augen haben (was?)
- die Anforderungen verstehen und hinterfragen (warum?)
- die Punkte miteinander verbinden (wie?)
3. Werde eine Person in T-Shirt-Form
Viele Leute streiten sich darüber, ob man in seiner Branche ein Spezialist oder ein Generalist werden sollte. Für mich ist die Antwort ein einfaches Ja und Nein. Doch zunächst müssen wir verstehen, was es bedeutet, ein T-förmiger Mensch zu sein:
Eine T-förmige Person verfügt über fundierte Kenntnisse/Fähigkeiten in einem Bereich und eine breite Basis an allgemeinen Kenntnissen/Fähigkeiten.

Ich hatte immer den Ehrgeiz, ein breites Wissen zu haben. Ich wollte mehr wissen als nur die Programmiersprache und das Framework, das ich zum Schreiben meines Codes verwendete. Außerdem habe ich gelernt und versucht, neue Sprachen, Konzepte und (Web-)Technologien in einfachen Lieblingsprojekten einzusetzen. Das Gegenteil einer T-Shirt-förmigen Person ist eine I-förmige Person, die nur ein tiefes Wissen in einem Bereich und kein allgemeines Wissen hat. Es gibt auch die strichförmige Person, die nur über allgemeines Wissen und kein tiefes Wissen über ein Thema verfügt.
Aber warum solltest du dieses Ziel anstreben?
- Die Zusammenarbeit mit anderen Menschen ist einfacher, weil man zumindest ein Grundwissen über andere Themen hat.
- Du bleibst interessiert daran, neue Dinge zu lernen.
- Du kannst das Eis mit neuen Kollegen leichter brechen.
- Je mehr du dich mit Konzepten außerhalb Ihres Wissensstandes vertraut machen, desto immuner wirst du gegen das Paradoxon des Fachwissens.
- Du erhälst von Ihrem Arbeitgeber Aufgaben mit mehr Verantwortung.
4. Lerne etwas über Software-Architektur (wie man externe Systeme integriert: Dateiübertragung, Remote-Prozedur, Messaging)
Viele Entwickler lieben es, zu programmieren. Entwurfsmuster werden auf dem Weg zum Entwickler mit Sicherheit auftauchen. Patterns wie MVC, Strategy, Bridge, Adapter, Singleton sind für Entwickler fast schon Allgemeingut. Aber es gibt noch viel mehr in der Softwarearchitektur. In der modernen Softwarearchitektur muss man zum Beispiel viele externe Dienste integrieren, anstatt sie selbst zu implementieren. Dafür gibt es viele Möglichkeiten (z.B. Webservice-basierte Lösungen, dateibasierte Integrationen, und mehr findest du z.B. in diesem Buch).

Die Wahl der richtigen (auch technischen) Lösung oder des richtigen Musters kann von vielen Faktoren abhängen. Einer der größten Einflüsse auf Ihre Entscheidung basiert auf dem Zweck und der Größe der Software. Es gibt große Unterschiede zwischen B2B-, B2C-, B2G- oder C2C-Anwendungen. Jede bringt ihre eigenen Regeln und Fallstricke mit sich. Dies können sein:
- Verkehrsbelastung (B2C)
- hohe Komplexität (B2B)
- Verpflichtung zu speziellen Gesetzen (B2G)
- Transaktions-/Vertriebsstrategie (C2C)
Die Dokumentation von Entscheidungen wird sehr wichtig und ist eine Säule einer effektiven und robusten Architektur für die fernere Zukunft. Wenn du deine Entscheidungen dokumentieren (einschließlich der Argumente für/gegen andere Optionen sowie der Annahmen), werden sie zukünftige Entscheidungen und Ihr System robuster machen.
5. Sei aufgeschlossen
In all den Jahren, in denen du für verschiedene Unternehmen gearbeitet hast, wirst du immer wieder über eines stolpern – Diskussionen und Meinungsverschiedenheiten. Jeder Entwickler hat eine Menge Wissen und glaubt, dass seine Entscheidung oder Meinung die richtige ist. Und der Entwickler versucht, nicht nachzugeben, da ihm sein Stolz im Weg steht.
Ich würde lügen, wenn ich behaupten würde, dass mir das nie passiert ist. Irgendwann habe ich einen Artikel gelesen, in dem es nicht nur darum ging, aufgeschlossen zu sein, sondern vielmehr darum, wie man es sein sollte. Wenn ich ihn in kurzen und prägnanten Stichpunkten zusammenfassen müsste, würde ich ihn folgendermaßen beschreiben:
- Geh Meinungsverschiedenheiten immer mit Neugierde an.
- Habe immer Angst, dass du falsch liegen könntest, egal wie sicher du bist, dass du Recht hast.
- Versuche die Argumente anderer zuerst vollständig zu verstehen (und nicht nur zu hören), und lehne diese Argumente dann ab oder akzeptiere sie. Versuch außerdem zu verstehen, was die Leute sagen und was sie damit begründen wollen.
- Suchen Sie nach der besten Antwort, nicht nach der besten Antwort, die Sie allein finden können, sondern als Team.
Ausblick
Natürlich gibt es noch eine Menge anderer Themen, die für die tägliche Arbeit eines Entwicklers nicht weniger wichtig sind. Sauberer Code, viele Hard Skills, der Umgang mit Git, Test Driven Development, Refactoring… die Liste ist sehr lang. Ich habe versucht, die Dinge auszuwählen, die ich für mich selbst als sehr wertvoll empfinde.
Ich bin gespannt, was ich in den nächsten 10 Jahren lernen werde. Ein Entwickler in einer sich schnell verändernden Welt zu sein, bedeutet auch lebenslanges Lernen.