Was ist Bertrandt Ingenieurbüro?
Bertrandt ist ein sehr großes Unternehmen, das überwiegend im Fahrzeugbereich als Dienstleister tätig ist. Das Unternehmen hatte in der Zeit, wo ich dort gearbeitet habe um die 13000 Mitarbeiter Weltweit. Bertrandt Ingenieurbüro ist ein Tochterunternehmen der Betrand AG, das unter anderem Softwareentwicklung angeboten hatte.
Welche Aufgabe hatte ich bei Bertrandt?
Ich wurde bei Bertrandt als Softwareentwickler im Bereich JavaScript und TypeScript Entwicklung angestellt.
Wie sah mein Alltag aus?
Der Alltag eines Entwicklers, ankommen und Kaffee trinken ist das erste, was man tut. Als nächstes kommt E-Mail checken und bearbeiten, seine Tagesordnung und die Notizen überprüfen, Dann kommt Daily Meeting und im Anschluss sich an die Tasks machen.
In welchen Projekten war ich tätig?
BMW – Connected Music Teil 1
Am Anfang der Anstellung war es nicht klar, was ich machen sollte. Mit einem anderen neuen Kollegen wurden wir dem Projekt Connected Music bei BMW zugeteilt. Die ersten Anforderungen waren: Es gibt 160 Bug Tickets in Jira und diese sollten weitestgehend gelöst werden.
Die App wurde in JS Ecma 5 (ja, ecma 5) geschrieben und lief auf der HMI (Head-Unit) der Generation 5 auch bekannt unter dem Namen ID5. Die App war außerdem eine sehr verwirrende Mischung von mehreren Weiterentwicklungen, die übereinandergestapelt waren, da die Entwickler die strikte Anforderung hatten, den Legacy Code zu nutzen. Mit anderen Worten war die App äußerst schwer lesbar, Teile des Codes war gar nicht mehr benutzt, man konnte den Code nicht lokal ausführen, man konnte die App dementsprechend nicht debuggen und es gab leider keine Dokumentation zu den Schnittstellen, von den die App abhängig war, um beispielsweise den Player oder die HMI-Front-End Komponenten zu nutzen. Nichtsdestotrotz haben wir es geschafft einige Bugs zu lösen. Unserem Abteilungsleiter war die Situation vollkommen klar und dies ist kein Arbeitszustand und so kommen wir nicht weiter.
BMW konzentrierte sich in der Zeit mehr in der Entwicklung neuer Generationen von Head-Units, die ID7 oder Generation 7. Daher 2 Monate danach wurden wir im selben Projekt mit 3 anderen Kollegen als ein neues Team für die Entwicklung von Spotify eingeteilt.
BMW – Connected Music Teil 2 – Spotify
Die Entwicklung von Spotify im BMW-Auto auf dem Infotainment System der Generation 7. Die Entwicklung von Spotify war ein sehr spannendes Projekt. Es ging um eine App, die auf einer NodeJS basierten Plattform lief. Die App war in TypeScript geschrieben.
Da wir in der Zeit im Taskforce Modus waren, musste die App einmal am Tag released werden. Dies Ziel wurde nicht jeden Tag eingehalten. Hier hatte ich meine erste Erfahrung mit TypeScript. TypeScript bietet sehr viele Vorteile im Vergleich zu reiner JS-Programmierung, da es in Teams von Junioren eine zusätzliche Sicherheit mit der Typisierung gibt. Das Transpiling (Übersetzen) des Codes sichert auch zu, dass die Datenmodelle passen und die Interfaces richtig benutzt werden. TypeScript zu nutzen macht nur Sinn, wenn man den Typen „Any“ vermeidet oder gar nicht nutzt. TypeScript ist umfangreich und bietet generische Typen, ermöglicht die Wiederverwendbarkeit von Code, Die Definition von Schnittstellen und in der Zeit auch ein Java ähnliche Syntax, die bei JS noch nicht fortgeschritten war.
Wie man die Daten von Spotify heruntergeladen und abgespielt wurden, wurde es von einem SDK erledigt, das von Spotify selbst zur Verfügung gestellt wurde. Unser Team hat das Front-End entwickelt.
BMW – Crowd Data Collector
- Nach einem Jahr wurde Spotify fast vollständig entwickelt und hat nicht mehr soviel Man-Power benötigt, daher wurden wir gefragt, ob welche von uns wechseln würden. Ich habe die Hand hochgehoben.
- Das Projekt CDC war ein äußerst interessantes und innovatives Projekt: Es ging darum für verschiedene Use-Cases Daten vom Fahrzeug zu sammeln und ans Backend schicken.
- Beispiel: der Staat bzw. die Stadt will nicht mehr manuell den Straßenzustand überprüfen lassen. Das Fahrzeug kann anhand von Sensoren Schlaglöcher erkennen, diese mit GPS-Koordinaten ans Backend schicken und daraus entsteht eine Karte! Genial, oder?
- Das Projekt war in verschiedenen Teilen aufgebaut. Ich war tätig als Script Entwickler. Diese Scripte sind in JS geschrieben und liefen auf einer App, die auch JS geschrieben war und diese wiederum lief auf der NodeJS basierten Plattform der Head Unit. Die App hatte keine GUI, daher konnte sie ein Nutzer nicht direkt benutzen.
- Skriptaufbau:
- Jedes Skript war in 3 Teilen aufgebaut: Input Signale, Prozess Logik, Output Signale
- Jedes Skript hatte ein klarer Prozess und wurde einem Anforderungsingenieur zugeteilt. Jede Anforderung wurde 3-mal jeweils mit Besteller (Anforderer), Anforderungsingenieur, Entwickler und Tester besprochen.
- Prozess war großgeschrieben, denn jeder Fehler oder jede Unstimmigkeit kostete viel Zeit und Geld, daher war die Weiterentwicklung der Prozesse nötig und erwartet von allen Stakeholdern.
- Die Entwicklung der Skripte in JS war sehr herausfordernd, da es keine Absicherung vor dem Test im Fahrzeug gab. Es lag daran, dass die Schnittstellen Definitionen nur in JS Doc vorhanden waren. Das war gut, um zumindest Syntax- oder Datenmodell-Fehler zu vermeiden, wenn man die Callbacks für die Input-Signale (SomeIP) registriert und die Daten konsumiert. Mit Hilfe von Unit-Tests war es trotzdem nicht ausreichend. Diese Situation hat Druck und Zweifel im Team erzeugt. Hier wurde ich gefragt, was meiner Meinung nach die Lösung ist und ich antwortete klar und deutlich:
- Simulationsumgebung
- Umstellung auf TypeScript
Was sind die technischen Highlights?
- Avro Serialisierung: Avro ist eine Technologie von Apache, die es ermöglicht Daten zwischen einem Client und einem Server zu serialisieren anhand eines Schemas. Dies hatte 2 große Vorteile: Daten können nicht interpretiert werden, wenn sie aufm Weg gestohlen werden.
- Die Benutzung von WebPack, um das Skript zu bundlen, bzw. um sie durch Uglify und Minify zu verkleinern
- Die Bus-Kommunikation und deren Protokolle im Fahrzeug zu lernen: CAN, FA-CAN, Flex-Ray, Ethernet, TCP, http, MQTT, SomeIP
- JavaScript Promisses: Die Erstellung von Asynchronen Prozesse in JS ist sehr einfach mit der Benutzung von den sog. Promisses. Man muss aber sehr vorsichtig sein, vor allem in Kombination mit setTimeout und setIntervall