Die glorreichen Fünf - Rollen eines Embedded System Developers
Hallo und herzlich willkommen. Heute möchte ich dir fünf verschiedene Rollen vorstellen, die ein Entwickler in einem Embedded Product Development Team einnehmen kann.
Die Einstiegshürde in Embedded Systems ist wie eine riesige Mauer um eine versteckte Welt. Allerdings bin ich vor kurzem auf einen Beitrag von Maharajan Veerabahu gestoßen, der mir einen Spalt im Mauerwerk zeigt und einen Weg hindurch erlaubt. Nun muss ich diese Mauer nicht mehr überwinden, sondern kann zielgerichtet mit dem Erkunden beginnen.
Doch halt, stop!
Bevor ich Hals über Kopf losstürme, will ich dir zuvor die Zusammenhänge erklären. Maharajan ist Mitbegründer und Head of Embedded Software & Applications von e-con Systems. Auf seinem LinkedIn Profil berichtet er über seine Erfahrungen im Bereich Embedded Systems. Unter anderem findest du dort den Artikel 5 Roles played by an Embedded Software Engineer.
Darin beschreibt er die aus seiner Sicht fünf verschiedenen Rollen innerhalb von Embedded Product Entwicklungsteams. Mit Hilfe dieser Rollen ordnet er bestimmte Aufgabenbereiche und Wissensgebiete einzelnen Personen innerhalb der Gruppe zu. Damit lässt sich die unübersichtliche und schnell überfordernde Welt der eingebetteten Systeme besser überblicken. Um alle Aspekte ausreichend abdecken zu können, sollten bei der Teambildung immer mehrere Rollen vertreten sein.
Wie du merkst, bin ich davon sehr begeistert. Ich finde mich nun besser zurecht und möchte dir deshalb die Rollen vorstellen.
1. Microcontroller Firmware Developer
Die erste Rolle kann quasi als Paradebeispiel eines Embedded Entwicklers bezeichnet werden. Der Microcontroller Firmware Developer entspricht sicher dem Bild, das sich die meisten von einem Embedded Entwickler machen. Wie die Rollenbezeichnung vermuten lässt, arbeitet er hauptsächlich mit Mikrocontrollern und schreibt dafür die individuelle Firmware.
Dazu nutzt er sein ausgezeichnetes Wissen in der Programmiersprache C und setzt in harten Fällen Maschinenbefehle auch in Assembler um.
Zu seinen Kernkompetenzen gehören das Verbinden und Adressieren von Peripheriegeräten über Schnittstellen mit dem Controller. Denn was nützt die tollste Recheneinheit, wenn sie mit nichts interagieren kann.
Ihm geht es bei der Entwicklung um die typischen Embedded System Anforderungen: Größe, Geschwindigkeit und Energiebedarf. Daraus resultieren simple, aber höchst effektive Geräte.
2. Embedding Operating System Developer
Technologien entwickeln sich weiter, erfahren Evolutionen und das führt natürlich auch zu Veränderungen in den benötigten Fähigkeiten sowie der Arbeit der Entwickler. So ist z. B. die immer größer werdende Bedeutung von Betriebssystemen in aktuellen Embedded Geräten zu beobachten. Hauptverantwortlich ist der stark wachsende Einsatz von sogenannten SoC mit ihren ARM Prozessoren.
Jetzt gibt es in der Embedded Welt die Anforderung, Betriebssysteme einzusetzen. Dieser stellt sich der Embedding Operating System Developer. Zu seinen Aufgaben gehören das Entwickeln, Debuggen und die Portierung von Gerätetreibern für das eingesetzte Betriebssystem. Aus seinem Treiberpool baut und stellt er für die jeweiligen Embedded Produkte passende OS Board Support Packages zusammen.
Er kennt sich gut mit dem verwendeten OS aus, sodass er eigens konfigurierte, individualisierte und optimierte Images für die Produkte erstellen kann. Dabei liegt ein großer Fokus auf der Verbesserung der Bootzeit, der vollständigen Treiberliste und allen benötigten Softwarebibliotheken.
Zudem versteht er das Energiemanagement, die Sicherheit und hat die Netzwerkbasics des Betriebssystems drauf.
3. Embedded Networking Developer
Das Thema Netzwerk führt uns direkt zu einem eigenständigen Entwicklertyp: der Embedded Networking Developer.
Der Bedarf an Netzwerk-, Internet- und Wireless-Technologien wächst immens. Daraus resultiert eine gigantische Vielzahl an Netzwerkgeräten wie z.B. Switches, Router, Bridges, Access Points oder Backend-Geräten.
Der Entwickler dieser Produkte nutzt die übliche Hardware anderer Embedded Systeme kaum, sondern arbeitet mit speziellen Netzwerk-Prozessoren.
Seine Heimat nennt er die Network Layer L3 und L4 des OSI-Modells. Bridging, Muxing und das Optimieren des Datenpakettransfers gehören zu seinen Haupttätigkeiten. Er kennt die IEEE Standards 802.3 und 802.11 auswendig.
So richtig kreativ ausleben kann er sich beim Designen von VLANs und Implementieren passender Management Protokolle.
Seine Referenzgröße ist der Quality of Service. Dabei lässt er nie die Sicherheit außer Acht und nutzt dazu entsprechende Protokolle.
4. Embedded Application Developer
Zwischenfrage: Worum geht es bei Embedded Systems?
Wenn du ehrlich bist, dann denkst du wie fast alle, dass es um Hardware und Firmware geht. Der Gedanke ist nicht falsch und trifft sicher auch in den meisten Fällen zu. Doch wird oft vergessen, dass die Applikation auf dem System eine wichtige Rolle spielt.
Hier gewinnt die Komplexität der eingebetteten Anwendungssoftware mit leistungsfähigeren Mikroprozessoren und höherer RAM Verfügbarkeit zunehmend an Bedeutung. Doch keine Panik, denn als Spezialist für diesen Teil des Systems steht schon der Embedded Application Developer bereit.
Er fokussiert sich auf die Business-Logik und die Benutzerschnittstelle des Embedded Geräts. Sein primäres Ziel ist es, bei maximaler Leistung die Funktionalität möglichst optisch ansprechend zu gestalten. Dazu verwendet er Codecs, Grafikbeschleunigung und andere Funktionen von verschiedenen Embedded Software Frameworks wie Qt, .Net CF oder ähnlichen. Die Wiederverwendbarkeit ist ihm sehr wichtig, da er gerne auch auf Open Source Stacks oder Applikationen zurückgreift oder selbst daran mitwirkt.
Bei seiner Arbeit versucht er unterschiedlichste Ansätze für eine optimale Lösung miteinander zu kombinieren. Darum gehört sein breites Wissen in mehreren Programmiersprachen wie Embedded C, C++, Python, C#, etc. zu seinen wertvollsten Fähigkeiten. Zudem setzt er sich auch mit Datenbanken und Embedded Web Services auseinander.
Vielleicht sind dir die zahlreichen Parallelen zu einem normalen Anwendungsentwickler aufgefallen. Die starke Ähnlichkeit der Rolle ist unbestritten.
5. Embedded Technology Expert
Die letzte Rolle beschreibt ein Teammitglied ohne allgemein definierte Fähigkeiten oder Aufgabenbereiche. Der Embedded Technology Expert ist ein Entwickler, der sich in seiner Karriere auf einen Kernbereich spezialisiert hat. Es wäre schwierig, ihn auf eine der vorherigen Rollen aufzuteilen. Er macht alles, von der Systemebene über Anwendungen bis hin zur Mikrocontroller-Firmware, und übernimmt quasi jede der anderen Rollen. Der Unterschied ist aber, dass sein Fokus dabei nur auf einer Kerntechnologie liegt.
Damit du besser verstehst, was ich meine, nenne ich dir ein paar Beispiele:
- Der Camera & Imaging Experte arbeitet an Bildgebung und Kamera, Objektivbaugruppen, MIPI-Kameraschnittstellen, Farbraumkonvertierung, ISPs, usw.
- Ein USB-Experte arbeitet an einem Low-Level-USB-Protokoll für Controller und entwickelt USB-Client- und Host-Produkte.
- Image Processing Experten vertiefen sich in Bildverarbeitungsbibliotheken wie OpenCV, die DSPs zur Bildverarbeitung verwenden.
Nun kennst du die fünf Rollen innerhalb eines Embedded Product Development Teams. Mir persönlich hat diese Einteilung sehr dabei geholfen, meinen weiteren Weg im Embedded Umfeld zu finden. Ich weiß nun, in welche Richtung ich mich zunächst orientieren werde und welche Rolle ich erfüllen möchte.
Hoffentlich konnten dir die Beschreibungen ebenfalls weitere Erkenntnisse bringen. Welche Rolle gefällt dir am besten? Vielleicht hast du dich auch in einer wiedererkannt?
Ich wünsche dir maximalen Erfolg!