Was macht ein Embedded-Entwickler?

Embedded – ein Begriff, den viele schon einmal im Zusammenhang mit Software-Entwicklung gehört haben. Aber was bedeutet er eigentlich? Was macht ein Embedded-Entwickler und womit arbeitet er? Und wie zeichnet sich ein guter Embedded-Entwickler aus? Diese Fragen beantworten wir in diesem Artikel.

Definition: Was ist ein Embedded-Entwickler?

Ein Embedded-Entwickler (oder auch Embedded-Engineer oder Embedded-Systems-Engineer) entwickelt Software, die in Hardware eingebettet wird und sie damit funktionsfähig macht. 

In deinem modernen Alltag begegnen dir viele Produkte, an denen ein Embedded-Entwickler mitgewirkt hat. Wenn du bspw. morgens die Kaffeemaschine bedienst, sorgt ein kleines Programm dafür, dass der Kaffee auf Knopfdruck fließt oder auch, dass dir angezeigt wird, ob der Wasserstand noch für einen weiteren Kaffee reicht. Dieses Programm hat ein Embedded-Entwickler programmiert. Setzt du dich ins Auto, bist du von einer Vielzahl von Programmen umgeben, die embedded sind. So z. B. die Betätigung des Scheibenwischers. Wer sagt dem Auto, dass der Scheibenwischer wischen soll? Und in welcher Intensität? Mit welchem Hebel? Das macht der Embedded-Entwickler. Gleiches gilt für jeden einzelnen Knopf, den du im Auto finden kannst. Und wenn dein Auto dann noch automatisch erkennt, dass es regnet, wie weit du von einem anderen parkenden Auto entfernt stehst oder du den Tempomat einstellst, erkennst du die Komplexität und Weite der Embedded-Entwicklung.

Embedded: Eingliederung in die Softwareentwicklung

Durch den speziellen Einsatz von Software in Hardware stellt die Embedded-Entwicklung bzw. Embedded Software Development einen ganz eigenen Kosmos in der Softwareentwicklung dar. In der Embedded-Entwicklung geht es insbesondere um physikalische Grenzen, die das Spielfeld vorgeben. Deshalb sind Leistung, Effizienz und Kontrolle die entscheidenden Faktoren. Das äußert sich in der Realität dadurch, dass z. B. nur begrenzter Speicher zur Verfügung steht und/oder die Rechenleistung des Prozessors deutlich geringer ist als bspw. in einem Desktop-Computer bzw. PC oder Smartphone. Diese Nähe zur Hardware ist einer der Gründe, warum Entwickler in der Embedded-Entwicklung häufig einen Hintergrund in Elektrotechnik oder auch Maschinenbau haben.

Der Umgang mit beschränkten Ressourcen, ein optimaler Stromverbrauch, eine hohe Leistung und die Anforderungen an die Architektur gestalten die Embedded-Entwicklung als sehr herausfordernd. Embedded-Entwicklung erfordert daher viel Wissen rund um Hardware- und Software-Themen. 

Welches Tech-Stack nutzen Embedded-Entwickler?

Durch die hohen Anforderungen an Leistung und Effizienz kommen in der Embedded-Entwicklung vor allem Low-Level-Sprachen wie C++, C oder auch Assembly zum Einsatz. Low-Level-Sprachen zeichnen sich dadurch aus, dass sie sehr nah an der Maschine arbeiten. Das bedeutet, dass sie direkten Zugriff auf die Hardware haben und keine spezielle Umgebung benötigen, damit die Software ausgeführt werden kann. Dadurch sind sie deutlich schneller als bspw. High-Level-Sprachen wie JavaScript, Python oder Java. Dennoch kommen in Embedded-Entwicklung auch Sprachen wie Java und Python zum Einsatz, wenn z. B. die Anforderungen an Leistung und Speicherplatz nicht sonderlich hoch sind wie bei der Steuerung der Waschprogramme einer Waschmaschine.

Vereinfacht bedeutet das: geht es um Leistung, Speicherplatz und Effizienz, dann werden insbesondere Low-Level-Sprachen wie C++ oder C eingesetzt. Sind Leistung, Speicherplatz und Effizienz weniger entscheidend, dann kann auf Sprachen wie Java und Python zurückgegriffen werden, weil diese eine höhere Fehlertoleranz haben und somit die Produktivität des Entwicklers erhöhen können.

Dennoch sind Programmiersprachen nur ein Teil des Tech-Stacks, die von Embedded-Entwicklern genutzt werden. Durch die Nähe zur Hardware werden sowohl Tools für Hardware als auch für Software genutzt.

Echtzeitbetriebssysteme (RTOS)

Bei der Programmierung von Mikrocontrollern oder Mikroprozessoren (Hardware) geht es häufig um Milli- und Nanosekunden, da diese in kritischen Umgebungen wie Autos, Flugzeugen oder medizinischen Geräten zum Einsatz kommen. Dabei kommen Echtzeitbetriebssysteme bzw. Real-time Operating Systems (RTOS) zum Einsatz, die dafür verantwortlich sind, dass bestimmte Aufgaben einer Software zeitgenau und/oder gleichzeitig ausgeführt werden. Ein Herzschrittmacher bspw. muss das Herz zeitgenau zum Schlagen bringen – und zwar immer. Das erklärt auch, warum die Wahl der Programmiersprache entscheidend ist.

Zu diesen RTOS zählen unter anderem FreeRTOS, VxWorks, QNX, Micrium uC/OS oder ThreadX.

Entwicklungsumgebung (IDE)

Da die Embedded-Entwicklung besondere Anforderungen hat, nutzen Embedded-Entwickler eine dafür ausgelegte Entwicklungsumgebung wie Eclipse, IAR Embedded Workbench oder Keil µVision, um ihre Arbeit zu erleichtern.

Debugger

Da bei der Entwicklung von Software immer Fehler entstehen können, greifen Embedded-Entwickler auf eigens dafür entwickelte Debugger, also sozusagen “Fehler-Behebungs-Software”, zurück. Diese unterstützt den Embedded-Entwickler dabei, den zeitlichen Ablauf eines Programms bzw. einer Software nachvollziehen zu können oder die Leistung bzw. Effizienz der Embedded-Software zu messen. Zu diesen Debuggern zählen GDB, IAR C-SPY, Arm DS-5 Debugger oder auch Lauterbach TRACE32.

Compiler

Jede Programmiersprache ist eine Schnittstelle, damit Menschen mit Maschinen, also Mikroprozessoren, Computern und Co, kommunizieren können. Programmiersprachen ermöglichen uns also, der Maschine Anweisungen in einer für uns verständlichen Sprache zu geben. Doch diese Anweisungen müssen für die Maschine übersetzt werden, damit diese auch tatsächlich ausgeführt werden können. Dies wird über sogenannte Compiler erreicht, die den Quellcode (z. B. C, C++, Python oder Java) in einen ausführbaren Maschinencode (i. d. R. Binärcode) übersetzen. Auch hier gibt es unterschiedliche Compiler, die je nach Umgebung, Programmiersprache oder Leistungsanforderung eingesetzt werden. Dazu zählen die Open-Source-Compiler der GNU Compiler Collection (GCC) (z. B. gcc, g++ oder gfortran) aber auch kommerzielle Compiler wie IAR C/C++, ARM Compiler oder Green Hills Compiler.

Zusammenfassend orientiert sich das Tech-Stack eines Embedded-Entwicklers an den Anforderungen an Leistung, Effizienz und Kontrolle einer Embedded-Software. Als letzte Anmerkung: in der Embedded-Entwicklung wird meist das Betriebssystem Linux als Gegenspieler zu Microsoft’s Windows oder Apple’s iOS bzw. macOS verwendet.

Was macht einen guten Embedded-Entwickler aus?

Da Embedded-Software in Hardware zum Einsatz kommt, sind solide Kenntnisse sowohl in Software als auch Hardware unerlässlich. Je nach Einsatzgebiet bedeutet das hardwareseitig ein gutes Wissen über Mikrocontroller (MCU), Sensoren oder auch Displays und Speicher.

Aus den Anforderungen an die Embedded-Software ergeben sich auch die Anforderungen an den Embedded-Entwickler.

Kommt es auf die Leistungsfähigkeit und die zeitgenaue Ausführung an, sind Kenntnisse in Low-Level-Sprachen, RTOS und Compilern relevant. Liegt der Fokus hingegen weniger bei der isolierten Leistung, sondern dem Zusammenspiel mit anderen Geräten per Bluetooth oder WiFi (WLAN), wie es im Internet-of-Things oft der Fall ist (z. B. smarte Waschmaschinen oder Kaffeemaschinen), werden meist High-Level-Sprachen eingesetzt und der Entwickler sollte sich vor allem mit den notwendigen Kommunikationsstandards und -protokollen auskennen.

Linux ist das am häufigsten verwendete Betriebssystem in der Embedded-Entwicklung, weswegen Linux-Kenntnisse als Grundvoraussetzung genannt werden können.

Die Anforderungen an die rein technischen Voraussetzungen werden durch Soft-Skills wie Problemlösungskompetenz, Troubleshooting und eine gute Dokumentation ergänzt. Da Embedded-Systeme häufig schnell und sicher sein müssen, ist es wichtig, dass gute Embedded-Entwickler ihre entwickelte Software ausreichend testen, gut dokumentieren und Sonderfälle in der Entwicklung berücksichtigen.

Worauf solltet du als Tech-Recruiter achten?

Embedded-Entwicklung umfasst diverse Tätigkeiten in verschiedenen Branchen. Die Zusammensetzung aus Hardware, Software, Firmware, PCB Design, etc. lässt Entwicklern einigen Freiraum, sich zu spezialisieren. Wie in jedem anderen Thema auch, gibt es immer einen Bereich, in dem jemand seine Stärken und Interessen stärker ausspielen kann als in anderen. So könnte der eine stärker im Hardware-Bereich, ein anderer stärker im Software-Bereich sein. Eine klare Kommunikation mit deinem Fachbereich vorab, welche Fähigkeiten gesucht werden, ist daher unabdingbar. 

Ein weiterer Faktor ist die Projekt-Historie des Entwicklers. Mit welchen Systemen hat er gearbeitet? Und in welchem Bereich? Waschmaschinen und Kaffeemaschinen haben andere Anforderungen als Autos und Flugzeuge. Geht es eher um Sicherheit oder um Geschwindigkeit (Real-time) bzw. Leistung oder soll die Software gut mit anderer Software zusammenarbeiten? Jeder Bereich erfordert sein eigenes Know-how, das sich der Entwickler lange erarbeitet.

Eine Einordnung an die Leistungsanforderungen bzw. Effizienz der Software ergibt sich bereits aus der Wahl der Programmiersprache (Low-Level vs. High-Level). Weitere Anforderungen sollten durch den Austausch mit dem Fachbereich erörtert werden:

  • Welche Rolle spielt Sicherheit? Wird hierbei eine bestimmte Umgebung oder ein bestimmter Kommunikationsstandard/-protokoll (z. B. Bluetooth oder MQTT) eingesetzt?
  • Welche Relevanz haben Compiler? Muss der Entwickler sich tiefgehender damit auskennen?
  • Was ist der entscheidende Faktor in der Entwicklung? Leistung, Effizienz, Kontrolle oder Sicherheit? Wie äußert sich das in den Anforderungen?
  • Ist spezifisches Fachwissen notwendig, z. B. in Datenkompression?
  • Interagiert die Software bzw. Hardware mit anderen Geräten? Wie findet dieser Austausch statt? Werden bestimmte Standards oder Protokolle verwendet?

Durch den Austausch mit dem Fachbereich erfährst du, was die besonderen Anforderungen an den Embedded-Entwickler sind und kannst sie gewichten. Dabei sollte dir der Fachbereich am besten helfen, damit du verstehst, welche Kenntnisse und Fähigkeiten entscheidend und welche zur Not vernachlässigbar sind.

Diese Anforderungen und deren Gewichtung kannst du dann im Gespräch mit den potenziellen Kandidaten spiegeln, indem du nach den Erfahrungen und den Kenntnissen fragst.


Was macht ein Embedded-Entwickler?

FAQ

Was macht man als Embedded-Entwickler?

Ein Embedded-Entwickler (oder auch Embedded-Engineer oder Embedded-Systems-Engineer) entwickelt Software, die in Hardware eingebettet wird und sie damit funktionsfähig macht. 

Wie viel verdient ein Embedded-Entwickler?

Ein Embedded-Entwickler verdient im Schnitt 70.000 € pro Jahr.

Welche Programmiersprachen nutzt man im Embedded?

In der Embedded-Entwicklung werden sowohl Low-Level-Sprachen wie C++ oder C, aber auch High-Level-Sprachen wie Python oder Java genutzt.