Hallo und herzlich willkommen zu einem weiteren Blogeintrag. Heute greife ich eine Frage auf, deren Beantwortung oft zu hitzigen Diskussionen darüber führt, wer der bessere wäre.

Worin unterscheiden sich überhaupt ein Embedded Software Developer und ein IT-Software Developer?

Im Wesentlichen entwirft ein Software Entwickler Konzepte, designt Programme und schreibt am Ende den Quellcode in einer Programmiersprache. Diese Aufgaben sind völlig unabhängig von der Plattform, auf der die Software nachher laufen soll. Natürlich hat jede Plattform ihre spezifischen Eigenschaften und Tools, die verwendet werden müssen, doch sind die generelle Arbeitsweise und die benötigten Fähigkeiten nicht überall gleich?

Wenn ich so frage, ist dir sofort klar: „Die Antwort ist Nein.“ Doch warum und wo genau die wesentlichen Unterschiede aus meiner Sicht liegen, das möchte ich dir in den folgenden Abschnitten zeigen.

Die „harte Ware”

Der erste große Unterschied ergibt sich aus dem nötigen Wissen über Hardware. Ein Entwickler im Embedded Bereich sollte die verwendete Hardware gut kennen. Schließlich schreibt er seinen Quellcode, um diese zu kontrollieren oder sie für einen bestimmten Zweck zu verwenden. Er muss mit ihr interagieren können und auf einer viel tieferen Abstraktionsebene kommunizieren.

Der IT-Softwareentwickler hingegen fokussiert sich ausschließlich auf seine Applikation. Ihn interessiert die Hardware kaum, da sie sich auf allen Endgeräten nicht wesentlich unterscheidet.

Masse = Klasse?

Darum wird von Letzterem meist der Aufwand, die Hardware zum Laufen zu bringen, unterschätzt. Da sind wir auch schon beim nächsten Unterschied. IT Softwareentwickler beurteilen ihre Arbeit häufig nach der Länge ihres Quellcodes. Sie schreiben im direkten Vergleich auch mehr Zeilen. Das liegt daran, dass sie ihr Produkt ausschließlich virtuell als Code erstellen können.

Ein Embedded Entwickler lässt das physikalische Gerät mit seiner Software arbeiten. Die Komplexität ergibt sich dabei weniger aus dem Umfang des Quellcodes, sondern aus der Konfiguration und dem Verhalten bei z. B. Sensor- oder Tasteneingaben.

Die Nähe zur Hardware ist auch beim Debugging gut zu erkennen. Entwickler für Embedded Systems nutzen dazu häufig Oszilloskope, Analyzer und Multimeter. Fehler sind oft nicht im Quellcode zu finden, da erst die Umsetzung des Codes das falsche Verhalten offenbart.

Dem gegenüber stehen die von der Integrated Development Environment bereitgestellten Optionen zum Debugging oder Profiling des Programmcodes, die bei der Applikations-Software Entwicklung in der Regel zum Einsatz kommen.

Achtung, Kontrolle!

Generell lässt sich sagen, dass ein IT Software Programm entweder unter Verwendung von Algorithmen irgendwelche Berechnungen vornimmt oder Daten verarbeitet, speichert, bewegt, löscht, darstellt. Daraus resultieren auch die beiden Kernfelder der Computerwissenschaften, Algorithmen und Datenstrukturen.

Natürlich setzt sich der Embedded Software Entwickler ebenfalls mit diesen Themen auseinander, aber in einem viel geringeren Ausmaß. Er konzentriert sich mehr darauf, das gesamte System zu managen und zu kontrollieren. Sein Ziel ist es, das volle Potenzial der Hardware zu entlocken und daraus dem Nutzer einen Vorteil zu verschaffen.

Nein, PCB ist kein Rauschmittel!

Zur Softwareentwicklung nutzt er zwar genauso einen Desktop-PC wie jeder andere Software Developer, doch laufen die Programme später auf PCB Platinen mit Mikrocontrollern oder Mikroprozessoren. Er verwendet spezielle Cross Development Toolchains und hardwareabhängige Compiler, um seine Applikation für ein eingebettetes System zu erstellen und zu übertragen.

Diese Umwege kennt ein IT-Software Entwickler nicht. Ganz egal, was für eine Anwendung er schreibt, das Zielsystem ist ein Desktop PC.

Jetzt wirst du bestimmt einwerfen: „Halt stop! Und was ist mit mobilen Geräten wie Smartphones oder Tablets? Da muss ich mich auch nicht mit hardwarespezifischen Eigenheiten auseinandersetzen!” Prinzipiell ist der Einwurf berechtigt, nur sind aus der Sicht eines Embedded Developers die mobilen Plattformen für den allgemeinen Einsatz konzipiert. Es stehen genügend ausgereifte Tools zur Verfügung, dass sie heute vergleichbar mit einem Desktop-PC sind.

Ein Kräftevergleich…

Einen Kräftevergleich möchte ich abschließend nicht veranstalten. Das wäre beiden Entwicklertypen gegenüber nicht fair. Jeder von ihnen hat in bestimmten Feldern Expertisen und ist dort dem anderen überlegen.

Ich finde den bildlichen Vergleich von einer Axt mit einer Säge gut zur Veranschaulichung. Beide Werkzeuge sind für die Bearbeitung von Holz geeignet, doch ist das Fällen eines Baumes mit der Axt einfacher und geht schneller. So würde ich um Brennholz zu machen, jederzeit die Axt bevorzugen. Die Säge hinterlässt dafür eine saubere Schnittfläche, die lässt glatte und gleichmäßige Bretter aus dem Holz schneiden.

Hier kommt es am Ende, genauso wie bei Software, auf den angedachten Verwendungszweck an.

Jetzt kennst du meine Vorstellungen, worin sich Software Entwickler in den beiden Technologiefeldern unterscheiden. Wie siehst du das? Hast du ähnliche Ansichten oder sollte ich etwas übersehen haben?

Schreib einfach einen Kommentar. Es würde mich sehr freuen, und ich hoffe, du schaust dir auch meinen nächsten Blogeintrag an. Da möchte ich dir die verschiedenen Rollen zeigen, die ein Entwickler in einem Embedded Product Team einnehmen kann.

Bis dahin wünsche ich dir maximalen Erfolg!