6.1 Karriereleiter
Auch Programmierer haben Abstufungen, abhängig von ihrer Qualifikation. Früher wurden Begriffe wie „Coder“, „Programmierer“ und „Hacker“ verwendet, aber heute spricht man eher von Titeln aus dem amerikanischen IT-Bereich.
Für Entwickler gibt es 6 Hauptabstufungen:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- TechLead
- Principal Software Engineer
Von Land zu Land und sogar von Unternehmen zu Unternehmen können einige Parameter variieren, aber im Wesentlichen sieht es so aus:
Intern Software Engineer — das sind Praktikanten. Sie sind dabei, Programmierung zu lernen, haben weder kommerzielle Erfahrung noch Erfahrung in großen Projekten. Normalerweise arbeiten sie unter Aufsicht erfahrenerer Kollegen. Ihre Hauptaufgabe bei der Arbeit ist es, den Code-Basis und die Grundlagen der Softwareentwicklung zu lernen, indem sie einfache Codieraufgaben erledigen und an Tests teilnehmen.
Junior Software Engineer — das sind bereits Programmierer, jedoch ohne ernsthafte kommerzielle Erfahrung oder mit weniger als einem Jahr Erfahrung. Sie arbeiten unter der Aufsicht erfahrenerer Entwickler, um Teile von Projekten zu realisieren und an Code-Review-Zyklen teilzunehmen. Diese Karrierephase konzentriert sich auf das Vertiefen technischer Fähigkeiten und das Verstehen von Projektanforderungen.
Middle Software Engineer (oder einfach Software Engineer): haben mehr Autonomie bei der technischen Entscheidungsfindung, sind verantwortlich für bedeutende Projektbereiche, beginnen mit der Betreuung von weniger erfahrenen Kollegen und beteiligen sich aktiver an der Architektur-Diskussion. In der Regel haben sie 2–5 Jahre praktische Erfahrung.
Senior Software Engineer: sind verantwortlich für die Entwurf und Implementierung komplexer Systeme, bieten Mentoring und Führung innerhalb des Teams, nehmen an der strategischen Planung von Projekten teil und vertreten oft das Team in der Kommunikation mit Kunden und anderen Stakeholdern. Normalerweise haben sie 5–10 Jahre Erfahrung.
TechLead: trägt die Verantwortung für das endgültige technische Ergebnis des Projekts, leitet die Entwicklung, löst die schwierigsten Aufgaben, stellt die Einhaltung technischer Standards sicher und koordiniert die Aktivitäten der Entwickler.
Principal Software Engineer: arbeitet auf dem höchsten technischen Niveau, beteiligt sich oft an der Gestaltung der technischen Strategie des Unternehmens, der Entwicklung innovativer Lösungen und der Festlegung technischer Standards. Er dient als Hauptmentor für technische Führungskräfte und ist ein führender Experte in komplexen technischen Angelegenheiten.
Das ist interessant. Große Unternehmen können zusätzliche Rollen und Unterrollen haben. Zum Beispiel hat Google solche Rollen:
- Staff Software Engineer (L6): hat erheblichen Einfluss auf die technische Politik seiner Abteilung.
- Senior Staff Software Engineer (L7): arbeitet an großen und komplexen Projekten, definiert die strategische Ausrichtung der technologischen Entwicklung im Unternehmen.
6.2 Lego-Produkte
Vor langer Zeit (im Jahr 1975) schrieb Niklaus Wirth, der Schöpfer der Programmiersprache Pascal, ein Buch mit dem Titel „Algorithmen + Datenstrukturen = Programme“. Seitdem hat sich vieles verändert.
Ein modernes Softwareprodukt ist nicht das, was es vor 10 Jahren war, und schon gar nicht das, was vor 20 Jahren war. Über das Jahr 1975 müssen wir gar nicht sprechen — seitdem sind 50 Jahre vergangen.
Ein moderner Programmierer schreibt Programme nicht mehr von Hand. Er baut sie vielmehr aus fertigen Teilen (Bibliotheken) zusammen und schreibt Code, der diesen Teilen hilft zu interagieren.
Moderne Softwareprodukte können aus Dutzenden und Hunderten von Programmen bestehen. Einige davon laufen auf dem Computer des Benutzers, seinen mobilen Geräten, aber der Großteil läuft auf Servern in Rechenzentren.
Viele dieser Programme, wie ein Webserver oder eine Datenbank, sind bereits geschrieben. Man muss sie nur korrekt konfigurieren, damit sie wie gewünscht funktionieren. Obwohl der Prozess des Konfigurierens mit der Zeit so kompliziert werden kann, dass es praktisch eine Entwicklung ist. (*facepalm*)
Programmierer kämpfen ständig mit sich selbst. Anstatt ähnlichen Code in verschiedenen Programmen neu zu schreiben, schreiben sie Bibliotheken, die sich anpassen lassen (konfigurierbar), und fügen sie dann in alle erforderlichen Orte ein.
In den letzten 20 Jahren haben Programmierer sehr viele Bibliotheken, Frameworks und Open-Source-Repositories geschrieben. Es sind wirklich Millionen. Und nun gilt es als schlechter Stil, den gesamten Code von Grund auf neu zu schreiben. Stattdessen sollte das Programm aus qualitativ hochwertigen und bewährten Lösungen zusammengesetzt werden — Bibliotheken, Frameworks, Pakete und Module.
Doch auch dieser Ansatz altert. Der Trend der letzten 10 Jahre — ist der Umzug in die Cloud, große Rechenzentren, die Ihren Programmen alles bieten, was sie brauchen. Möchten Sie eine Datenbank? Wir haben Hunderte zur Auswahl. Einen seltenen einzigartigen Webserver gewünscht — auch den haben wir! Jeder Wunsch für Ihr Geld.
6.3 „Ich bin ein Ingenieur“ © Elon Musk
Es ist nicht mehr nötig, komplizierte und langweilige Dinge zu schreiben. Wenn du eine coole komplexe Funktionalität benötigst, gibt es dafür bereits eine Bibliothek. Du musst nur: a) wissen, dass es sie gibt, b) die richtige finden (es kann Dutzende von Varianten unterschiedlicher Qualität geben), c) herausfinden, wie man sie in dein Projekt integriert.
Die Arbeit mit diesem Ansatz ist nur interessanter geworden. Jetzt kannst du 10 Mal schneller neue Funktionalität zu einem Produkt hinzufügen. Vor 30 Jahren, wenn du einen Webserver brauchtest, musstest du ihn schreiben. Vor 20 Jahren – kaufen, installieren und konfigurieren. Und jetzt – einfach in die Admin-Konsole der „Cloud“ gehen und einschalten.
Das ist übrigens einer der Gründe, warum Python so populär ist. Es eignet sich sehr gut nicht für das Schreiben großer und komplexer Lösungen, sondern gerade für das „Zusammenfügen“ verschiedener Teile. Und angesichts seiner Popularität erfüllt es diese Aufgabe hervorragend.
Übrigens hat sich der Beruf des Python-Entwicklers zu einem Python Fullstack Software Engineer gewandelt. Ein moderner Python-Entwickler muss verstehen, wie eine Datenbank funktioniert, um richtig mit ihr zu arbeiten. Er muss HTML & JavaScript verstehen, um das Frontend mit dem Python-Backend zu verbinden. Und Docker ist erforderlich – das ist jetzt ein Branchenstandard.
Die moderne Entwicklung sieht insgesamt ganz anders aus als noch vor 20 Jahren. Ein moderner Programmierer verbringt nicht mehr als 50 % seiner Zeit mit dem Schreiben von Code. Die restliche Zeit verbringt er mit dem Lesen von Dokus, dem Erlernen neuer Technologien und an Meetings. Einzelkämpfer-Programmierer gehören längst der Vergangenheit an.
GO TO FULL VERSION