CodeGym /Kurse /C++ SELF /Der Weg des Programmierers

Der Weg des Programmierers

C++ SELF
Level 7, Lektion 6
Verfügbar

Der Weg des Programmierers

1. Karriereleiter

Programmierer haben ebenfalls Abstufungen, die von ihrer Qualifikation abhängen. Früher wurden Begriffe wie „Coder“, „Programmierer“ und „Hacker“ verwendet, heute verwendet man meist englische Bezeichnungen aus der US‑IT.

Für Entwickler gibt es sechs grundlegende Abstufungen:

  • 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 das Wesentliche sieht in etwa so aus:

🌱 Intern Software Engineer — das sind Praktikanten. Sie befinden sich im Lernprozess der Programmierung, haben weder kommerzielle Erfahrung noch Erfahrung in großen Projekten. Meist arbeiten sie unter Anleitung erfahrener Kollegen. Ihre Hauptaufgabe besteht darin, die Codebasis und Grundlagen der Softwareentwicklung kennenzulernen, einfache Coding‑Aufgaben zu erledigen und beim Testen zu helfen.

🐣 Junior Software Engineer — das sind bereits Entwickler, jedoch ohne nennenswerte kommerzielle Erfahrung oder mit weniger als einem Jahr Erfahrung. Sie arbeiten unter der Leitung erfahrenerer Entwickler, implementieren Teile von Projekten und nehmen an Code‑Reviews teil. Diese Karrierestufe konzentriert sich auf die Vertiefung technischer Fähigkeiten und das Verständnis von Projektaufgaben.

🦾 Middle Software Engineer (oder einfach Software Engineer): haben mehr Autonomie bei technischen Entscheidungen, sind für bedeutende Bereiche des Projekts verantwortlich, beginnen damit, weniger erfahrene Kollegen zu mentorieren, und beteiligen sich intensiver an Architektur‑Diskussionen. In der Regel haben sie 2–5 Jahre praktische Erfahrung.

🧑‍🔬 Senior Software Engineer: sind verantwortlich für das Design und die Umsetzung komplexer Systeme, bieten Mentoring und Führung innerhalb des Teams, beteiligen sich an der strategischen Projektplanung und vertreten das Team häufig gegenüber Kunden und anderen Stakeholdern. In der Regel 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 Entwickleraktivitäten.

🏆 Principal Software Engineer: arbeitet auf dem höchsten technischen Niveau, ist oft an der Formulierung der technischen Strategie des Unternehmens beteiligt, entwickelt innovative Lösungen und setzt technische Standards, dient als Hauptmentor für technische Leiter und ist ein zentraler Experte in komplexen technischen Fragen.

Interessant. Große Unternehmen können zusätzliche Rollen und Unterrollen haben. Bei Google gibt es zum Beispiel Rollen wie:

  • 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 und bestimmt die strategische Ausrichtung der technologischen Entwicklung im Unternehmen.

2. Lego‑Produkte

Vor langer Zeit (1975) schrieb Niklaus Wirth, der Schöpfer der Sprache Pascal, das Buch „Algorithms + Data Structures = Programs“. Seitdem hat sich viel verändert. Ein modernes Softwareprodukt ist nicht mehr das, was es vor 10 Jahren war, und erst recht nicht das von vor 20 Jahren. An 1975 muss man gar nicht erst erinnern — seitdem sind 50 Jahre vergangen ⏳

Ein moderner Programmierer schreibt Programme nicht mehr manuell. Vielmehr setzt er sie aus fertigen Teilen (Libraries) zusammen und schreibt Code, der diesen Teilen hilft, miteinander zu interagieren 🧩. Moderne Softwareprodukte können aus Dutzenden oder Hunderten von Programmen bestehen. Einige laufen auf den Computern der Nutzer oder deren mobilen Geräten, die meisten jedoch auf Servern in einem Rechenzentrum.

Viele dieser Programme, wie Webserver oder Datenbanken, sind bereits implementiert. Man muss sie nur korrekt konfigurieren, damit sie wie gewünscht arbeiten. Im Laufe der Zeit kann der Konfigurationsprozess jedoch so komplex werden, dass er faktisch zur Entwicklung wird. 🤦‍♂️

Programmierer kämpfen ständig mit sich selbst. Anstatt denselben Code in verschiedenen Programmen erneut zu schreiben, erstellen sie Libraries, die konfigurierbar sind, und binden diese dann an allen erforderlichen Stellen ein.

In den letzten 20 Jahren wurden sehr viele Libraries, Frameworks und Open‑Source‑Repos geschrieben. Es sind tatsächlich Millionen. Und heute gilt es als unangebracht, gesamten Code von Grund auf neu zu schreiben. Stattdessen sollte man ein Programm aus hochwertigen und erprobten Lösungen zusammenstellen — Libraries, Frameworks, Pakete und Module 🧱

Doch auch dieser Ansatz veraltet langsam. Der Trend der letzten 10 Jahre ist die Migration in die Cloud — große Rechenzentren, die Ihren Programmen alles bereitstellen, was sie benötigen. Sie wollen eine Datenbank? Es gibt Hunderte zur Auswahl. Sie brauchen einen speziellen Webserver — den gibt es auch! Jeder Wunsch gegen Bezahlung.

3. „Ich bin Ingenieur“ © Elon Musk

img

Es ist nicht mehr nötig, komplexe und langweilige Dinge selbst zu programmieren. Wenn Sie eine Funktionalität benötigen, gibt es bereits fertige Libraries und Frameworks. Ihre Aufgabe ist: a) von deren Existenz zu wissen, b) eine passende Option zu finden (es gibt oft mehrere Alternativen mit unterschiedlicher Qualität und Nuancen), c) zu verstehen, wie man sie in das eigene Projekt integriert 🎓

Die Arbeit ist dadurch nur interessanter geworden. Jetzt können Sie neue Funktionalität im Produkt bis zu zehnmal schneller hinzufügen. Vor 30 Jahren schrieb man einen Webserver noch von Grund auf. Vor 20 Jahren kaufte, installierte und konfigurierte man ihn. Heute loggt man sich einfach ins Cloud‑Portal von Azure oder AWS ein und aktiviert den benötigten Dienst 🌐

Das ist übrigens einer der Gründe für die Beliebtheit der Sprache C++. Sie eignet sich hervorragend für Aufgaben, bei denen Leistung entscheidend ist: Systemprogrammierung, Spieleentwicklung, eingebettete Systeme und hochbelastbare Dienste. Gleichzeitig verfügt C++ über ein reiches Ökosystem an Bibliotheken und Tools — es gibt fertige Lösungen für Netzwerke, Datenbanken, Grafiken, paralleles Rechnen und vieles mehr.

Dementsprechend umfasst der Beruf des C++ Software Engineer im Laufe der Zeit einen immer breiteren Stack. Für einen modernen Entwickler ist es wichtig zu verstehen, wie eine Datenbank funktioniert, um die Interaktion mit ihr richtig aufzubauen. Man muss die Architektur verteilter Systeme und die Netzwerkkommunikation verstehen. Und natürlich geht heute nichts mehr ohne Docker — Containerisierung ist längst zum Branchenstandard geworden 🐳.

Moderne Entwicklung unterscheidet sich stark von dem, was vor 20 Jahren war. Ein Entwickler verbringt weniger als 50 % seiner Zeit mit eigentlichem Coden — der Rest geht für Dokumentation, Einarbeitung in neue Technologien, Design und Teamarbeit in Meetings drauf. Einzelkämpfer sind mittlerweile eher die Ausnahme.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION