Hallo Peter,
vielen Dank für Deine Erfahrung, kommt mir sehr bekannt vor . Auch embedded, die ersten 15 Jahre eher HW und Treiber, seit ein paar Jahren eine über 20 Jahre gewachsene Steuerungs-Applikation von fast 1 Mio Zeilen.
Die Herausforderungen beider Bereiche sind m.E. sehr verschieden.
Auf der HAL-Seite ist ein tiefes Verständnis der HW, der Programmierumgebung (Compiler, Linker, Einbindung in IDE) und hunderte von Pattern verschiedenster Aufgaben (serielle Treiber, race conditions, RTOS -Architektur, IO-Behandlung, …). Also in der Regel komplizierte Realisierung von Modulen überschaubarer Komplexität (ein Printf z.B. ist auf wenigen Seiten fast vollständig beschreibbar, es gibt kaum „nichtlinearität“, es gibt nur einen sehr begrenzten „Kontext“, wengleich die Implementierung sehr aufwendig ist. Ein noch krasserers Beispiel wäre z.B. sin().
Auf der anderen Seite, bei einer Applikation mit Tausenden von I/O, Zuständen oder Ablaufwegen und der Vernetzung über den globalen Kontext (der realen HW und der Welt dahinter) ist ein tiefes Verständnis der Programmiersprache meist eher zweitrangig, das Fachvokabular sind die Funktionen oder Variablen (Token) und die Produktivität/Verlässlichkeit hängt m.E. eher davon ab, wie gut die Fachsprache (Architektur und Token des Sourcecodes) der Problembeschreibung gerecht wird.
Die Grundlegende Annahme „aller“ Manager und nicht-Softwerker ist dagegen, dass die Problembeschreibung nicht im Sourcecode erfolgen kann oder darf. Am Beispiel sin() ist das für jeden offensichtlich und wird dann auf komplexe, nichtlineare Applikationen extrapoliert.
Meine jüngste Erfahrung ist nun, dass Problembeschreibung bei komplexen autarken Steuerungs-Applikationen mit hoher Nichtlinearität kaum effektiver oder verständlicher erfolgen kann als in einer Programmiersprache, effektive Token und Architektur mal vorausgesetzt. Das also entsprechende Repräsentationen in UML, Word oder sonstwo einzelne Teilaspekte stark vereinfacht veranschaulichen können, für die tiefere umfassende Betrachtung aber meist von relativ geringem Wert sind und praktisch immer parallel und manuell erstellt und gepflegt sein müssen, meist noch getrennt nach Zielgruppe (Manager, Kunde, Prüfer, Kollegen, Zulasser).
Meines Erachtens entspricht (high-level) Quellcode dem Schaltplan einer HW. Niemand käme hier auf die Idee, die dort gezeichneten Verbindungen, Designatoren und Werte nochmal getrennt in Word oder sonstie zu beschreiben.
Bis auf einige Beiträge von Les Hatton finde ich wenig theoretische Überlegungen zur Entwicklung der „Fachsprache“ einer Applikation, zumindest im Vergleich zu den zahlreichen „Snake-Oil“ Versprechungen der UML & Co Anbieter.
Hast Du Dich mal intensiver mit der Architektur großer Projekt beschäftigt oder kennst dazu hilfreiche Literatur?
Gruß
achim