Rosige Zukunft für C++ Entwickler?!



  • Bei Fachkräftemangel (in Medien) geht um den Lohn zu dumpen 😣



  • asc schrieb:

    Bezüglich den Einstiegsanforderungen bin ich noch bei dir, die Anforderungen für erfahrene Entwickler sollten sich aber wiederum nichts nehmen. Da brauchen beide viel Wissen, wenn auch vielleicht anderes Wissen.

    Man mag schneller in die Anwendungsentwicklung einsteigen können, um aber bei Projekten langfristig den Anforderungen gerecht zu werden muss man auch viel Wissen über Pattern, Prinzipien, Methoden sowie auch externes Fachwissen aneignen (zumindest wenn die Projekte langfristig wartbar bleiben sollen). Ich kenne im gegenzug Embedded-Programmierer die zwar viel technisches Verständnis der Plattform benötigen, aber für die aufgrund der eher verhältnismäßig kleinen Programmgrößen beispielsweise bestimmte Anforderungen an die Strukturierung von Anwendungen etc. keine oder nur eine begrenzte Rolle spielen.

    Hi,

    hier muss ich ein klein wenig widersprechen. Die Embedded Welt befindet sich seit einiger Zeit im Wandel. Design-Patterns und moderne Architekturen sind hier keine Seltenheit mehr, ganz im Gegenteil. Eine typische Embedded-Anwendung ist bei uns heute komplett von Entwurfsmustern und gängigen Architekturen durchzogen.

    Die Hintergründe liegen darin begründet, dass sehr günstige µC immer mehr Performance haben und die Resourcenanforderungen für eine saubere Objektorientierte Implementierung gar nicht so viel höher liegen, als wenn man das "Plain" in C runter schreibt.

    Die Anforderungen sowohl an die Funktionalität (Komplexität) als auch an die Wartbarkeit / Plattformen sind hier mittlerweile auch groß und wachsen weiter (Stichwort: Time-To-Market). Wenn es auch mit den richtig großen Anwendungen im PC Umfeld natürlich nicht mithalten kann.

    Der (nicht zu Unrecht) etwas schlechte Ruf von embedded kommt meines Erachtens daher, dass bis vor nicht allzu langer Zeit die E-Techniker Fraktion auf µC losgegangen ist und im besten C ohne Rücksicht auf Verluste darauf losgehackt hat. (Die aktuelle "make-Welle" macht das auch nicht unbedingt besser...)

    Ich kenne ungelogen eine einzige Funktion in der Legacy-Code-Basis, die mehrere Tausend Zeilen lang ist und in der die tiefste Verschachtelung an geschweiften Klammern 17 ist! (Das man diese Funktion eigentlich nur noch wegwerfen kann, ist denke ich jedem klar...)

    Unterschiede liegen hauptsächlich in der Speicherverwaltung (Heap). Hier wird im embedded Umfeld wo immer es geht statisch (also nicht auf dem Heap) gearbeitet, und wenn man den Heap benutzen muss. weil es gar nicht anders geht, dann nur einmalig während des Hochlaufs (Stichwort: Fragmentierung).

    Wo es stark divergiert ist tatsächlich, wie von dir bereits erwähnt, das "Außenrum" um die Anwendung. Der Embedded Entwickler kennt sich z.b. mit PWM aus, wo sich der Anwendungsentwickler mit SQL auskennt (usw.usf.). Der eine Sitzt hier eben öfter mit dem Oszilloskop am Schreibtisch, der andere mit dem Datenbank-Analyse-Tool. Beides anspruchsvolle Dinge 🙂

    Viele Grüße



  • starseed84 schrieb:

    hier muss ich ein klein wenig widersprechen. Die Embedded Welt befindet sich seit einiger Zeit im Wandel. Design-Patterns und moderne Architekturen sind hier keine Seltenheit mehr, ganz im Gegenteil. Eine typische Embedded-Anwendung ist bei uns heute komplett von Entwurfsmustern und gängigen Architekturen durchzogen.

    Gut, ich hinke was embedded angeht der Zeit etwas zurück, bzw. kenne nur sehr wenige Embedded-Programmierer (und die stammen zumeist aus der von dir genannten E-Techniker Fraktion) bei denen sich die Anforderungen noch weit von denen eines Anwendungsprogrammierers unterscheiden.

    starseed84 schrieb:

    Wo es stark divergiert ist tatsächlich, wie von dir bereits erwähnt, das "Außenrum" um die Anwendung. Der Embedded Entwickler kennt sich z.b. mit PWM aus, wo sich der Anwendungsentwickler mit SQL auskennt (usw.usf.). Der eine Sitzt hier eben öfter mit dem Oszilloskop am Schreibtisch, der andere mit dem Datenbank-Analyse-Tool. Beides anspruchsvolle Dinge 🙂

    Aber wenn ich es richtig heraus höre, sind die Unterschiede inzwischen weitaus geringer geworden, als noch vor ein paar Jahren. Könnte bedeuten das die Hürde für den gegenseitigen Wechsel des Bereiches niedriger ist (bzw. man es vielleicht überhaupt in Erwägung ziehen könnte*).

    * Wenn nicht andere Kriterien dagegen sprechen. Die Firmen im Embedded-Bereich, die ich noch einigermaßen aktuell kenne, sind sehr Außendienstlastig. Sprich man muss schon Spaß daran haben regelmäßig lange strecken zu fahren.



  • Ich denke auch, dass man Embedded zumindest nicht kategorisch ausschließen sollte 🙂 wobei ich schon acht geben würde, nicht in so eine Legacy-Firma zu kommen, in der man (hauptsächlich) die Sünden anderer ausbaden darf...

    Wegen der Außeneinsätze:
    Ich fahre ein paar mal im Jahr zu Workshops und zu Kundenterminen und empfinde das sogar als ganz angenehme Abwechslung zum Büroalltag. (Sagen wir mal 20 Tage im Jahr, ganz grob).

    Ein ehemaliger Studienkollege, seines Zeichens Anwendungsentwickler für C++, der ist fast ausschließlich unterwegs, weil er an einem System für Fertigungsstraßen mit entwickelt.

    Kann man also auch nicht pauschalisieren 🙂 da hilft nur, Augen auf bei der Job-Suche 🙂



  • starseed84 schrieb:

    ...Ich fahre ein paar mal im Jahr zu Workshops und zu Kundenterminen und empfinde das sogar als ganz angenehme Abwechslung zum Büroalltag.

    Es mag eine angenehme Abwechslung sein, aber nicht wenn man sich hinter dem Steuer verkrampft - Und leider tendieren Kunden und Firmen nicht dazu, immer an einem Bahnhof zu liegen 😉 Und das selbstfahrende Auto gibt es leider noch nicht.



  • asc schrieb:

    Und das selbstfahrende Auto gibt es leider noch nicht.

    Jetzt überlege nochmal was Automobil wohl heißt ... SCNR

    Im Moment sehe ich eigentlich einen kleinen aber stabilen Markt für C++.



  • Tyrdal schrieb:

    asc schrieb:

    Und das selbstfahrende Auto gibt es leider noch nicht.

    Jetzt überlege nochmal was Automobil wohl heißt ... SCNR

    Wie bitte?



  • Tyrdal schrieb:

    asc schrieb:

    Und das selbstfahrende Auto gibt es leider noch nicht.

    Jetzt überlege nochmal was Automobil wohl heißt ... SCNR

    LOL! Automobil seht für sich selbst bewegend. Also das kein Pferd vorne das Ding bewegen muss.

    Mit selbstständig fahren (autonom) hat das nichts zu tun. 🙂



  • Artchi schrieb:

    Mit selbstständig fahren (autonom) hat das nichts zu tun. 🙂

    Jajaja... Man kann ein Haar längs als auch quer spalten. Im Kontext sollte mein Fehler dennoch verstanden wurden sein 😉



  • Na ich weiß nicht ob intelligente Haushaltsgeräte den Bedarf an C++ Entwicklern in die Höhe treiben wird.
    Software für Mikrocontroller braucht man nicht erst seit neuem. Auch eine altmodische Kaffemaschine die nicht über Wlan mit dem Internet kommuniziert hat programmierte Mikrocontroller.
    Die Leute in den Unternehmen die bisher diese Chips altmodisch programmiert haben werden auch die neuen Varianten programmieren. Ich glaube nicht dass der Bedarf an neuen Arbeitskräften großartig steigen wird. Es wird wohl einfacher sein die bestehenden Fachkräfte bei Bedarf auf Seminare zu schicken.

    Hinzu kommt dass vieles davon immer noch Fiktion ist. Ob dann in einigen Jahren wirklich fast jedes Haushalt intelligente Kühlschränke, Kaffeemaschinen und Waschmaschinen haben wird ist durchaus fragwürdig.

    Außerdem sollte man nicht vergessen dass viele Elektrogeräte in Asien produziert werden. Nach Möglichkeit werden auch westliche Unternehmen versuchen die Software in Asien billiger entwickel zu lassen.

    Und was Industrie 4.0 angeht würde ich da auch in Frage stellen ob man damit mehr C++ Programme braucht als vorher.
    Auch ohne Industrie 4.0 Trend musste man Software für die Maschinen entwickeln, in der Branche sitzen also auch schon die notwendigen Leute.
    Und Industrie 4.0 bedeutet auch klassische Anwendungsentwicklung. Oft geht es da um Netzwerke eine hohe Abstraktion der Produktionslogik. Im Kern der Maschinen werden weiterhin C/C++ artige Programme laufen aber der ganze Netzwerkkram, die Logik kann man bedenkenlos weiterhin auch mit Java und C# umsetzen.
    Man will dafür sogar Web und App Anwendungen entwickeln. Dann sieht der Chef Zuhause über sein Tablet ob und wie die Produktion läuft. Für diese Anwendungen braucht man App und Web Entwickler.

    Auch für für die intelligenten Hausgeräte braucht man oft Apps und Webanwendungen.

    So gesehen werden die Hersteller eher Programmierer suchen die Apps und Weboberflächen entwickeln können, statt ihre bereits vorhandenen Embedded Entwickler zu ersetzen.

    Man wird weiter C++ brauchen aber eine neue goldene Zeit sehe ich nicht wirklich. Zu viele Faktoren relativieren die Sache.

    Im schlimmsten Fall nimmt die Leistungsfähigkeit der Chips immer drastischer zu bei sinkenden Stückkosten. So dass der Einsatz effektiver Sprachen wie C und C++ immer weniger zwingend wird.
    Gut möglich dass man in Zukunft fast in jeden Mikrocontroller ein fertiges Embedded OS installiert und dann mit einfachen und extrem komfortablen Scriptsprachen arbeitet.



  • wenn Computer nicht mehr so zügig schneller werden wie früher, aber die Ansprüche der Software an Geschwindigkeit weiter zunehmen - könnte dann nicht irgendwann eine Zeit anbrechen, in der man für jedes Quäntchen mehr an Tempo dankbar sein wird und aus diesem Grund hardwarenahe Sprachen wie C/C++ oder sogar Assembler in der Library- und Anwendungsprogrammierung aufblühen?



  • Der Massenmarkt der Computer Nutzer wäre mit der heutigen Rechenleistung eigentlich für lange Zeit bedient.
    Im Internet surfen, Musik und Videos konsumieren, Texte bearbeiten. Diese Aufgaben benötigen nicht so schnell immer mehr Leistung.
    Man kann diese Aufgaben auch auf einem 10 Jahre alten Rechner erledigen oder auf einem noch älteren.
    Viele tun dass mit ihren Smartphones und deren Leistung ist im Vergleich zu aktueller Computer Hardware deutlich niedriger.

    Es gibt aber einen Bereich der nicht satt wird: Spiele. Trotz allem Fortschritt und auch wenn Grafikwelten heute schöner aussehen als jemals zuvor.
    Es ist extrem viel Luft nach oben offen. Man kann heute locker ein Spiel entwickeln dass auch die beste Grafikkarte vollkommen überlastet.
    Deswegen müssen Spiele immer noch sehr viele Einschränkungen und Tricks anwenden um spielbar zu bleiben.

    Das rührt daher dass Spiele oft eine Modellierung unserer Realität ist. Man will idealerweise dass ein Spiel so fein, glaubwürdig und fotorealistisch wird dass es von der Wirklichkeit nicht zu unterscheiden ist.
    Und dafür braucht man neben dem Entwicklungsaufwand Unmengen an Rechenpower.

    Deswegen ist der Spielemarkt die Branche die bisher jede aktuelle Hardware ausreizt.
    Und oh Wunder die Spieleengines sind dominiert von C/C++/Assembler.



  • @User8383484

    Der Massenmarkt der Computer Nutzer wäre mit der heutigen Rechenleistung eigentlich für lange Zeit bedient.
    Im Internet surfen, Musik und Videos konsumieren, Texte bearbeiten. Diese Aufgaben benötigen nicht so schnell immer mehr Leistung

    das ist gerade der Bereich der am meisten von C/C++ profitiert und der ständig mehr Geschwindigkeit fordert - Chrome z.B. besteht aus ein paar Mio Zeilen C++ und ganze Video-Decoding auch, die Javascript-Engines sind auch in C++ geschrieben, das wäre ohne C/C++ und die granulare Verwaltung von Resourcen wie es C/C++ erzwingt gar nicht machbar oder viel weniger performant

    bei Spielen geben ich dir 100% recht - aber der Internet-Bereich ist definitiv die anderen 50% - auch wenn das die meisten gar nicht wahr nehmen



  • Vieles wird heute in ASICs implementiert, besonders auf mobilen Geräten (inkl. Notebooks) um Performance in Chips und nicht Software auszulagern. Deshalb sehe ich den Bedarf auf Consumer-Software gar nicht, das schnellster Code wichtig werden soll. Es wird nur noch gescriptet, den Rest macht ein ASIC (Cryptographie, 3D, Bild-Manipulation, Spracherkennung, Sprachausgabe usw.).

    Und mit dem ganzen Cloud-Gedöns wird C++ auf Consumer-Geräten noch unwichtiger.
    Jetzt könnte man sagen, auf Cloud-Seite wäre C++ ja dann wichtig. Nur komisch das die ganzen Cloud-Anbieter (AWS, Google, Azure usw.) immer nur VM-Sprachen bewerben. Weil die dann einfach nur ein paar Server mehr hinstellen, ist billiger als C++-Code zu optimieren.



  • Vieles wird heute in ASICs implementiert

    einiges - vor allem das was es schon als ASIC gibt sonst ist die
    Entwicklung viel zu teuer

    Bild-Manipulation, Spracherkennung, Sprachausgabe usw

    die wohl eher nicht

    es ist noch erstaunlich viel auf Software basierend - oder warum denkst du
    das die heutigen Handys Dualcores usw. mit GHz fahren? Weil alles so schön mit ASICs abgedeckt wird?



  • Asics sind außerdem so schlecht zu updaten ...



  • Asics sind außerdem so schlecht zu updaten ...

    danke für DAS Hauptargument

    sorry Artchi damit schrumpft der Anteil an ASICs und dein Erfahrungswisse
    noch weiter

    mehr als die Mobilkommunikation, GPS, Lagesensoren, Display-Steuerung usw. wird wohl nicht in Hardware erledigt



  • und so allgemeint - wir benutzen doch kaum Software die NICHT in C++ geschrieben ist

    Java/.Net-VMs
    SQL-Server und viele andere DBs
    VStudio
    Office
    so gut wie alle Spiele am Markt
    Windows und fast alle Default-Tools (ausser Kernel)
    Chrome
    Firefox
    Skype
    TeamViewer
    TeamSpeak

    und das sind nicht alles alte Tools oder welche die nicht weiter entwickelt werden sondern Bedarf an C++ Features haben



  • Es gibt aber auch FPGAs. Die sind konfigurierbar. Sie sind noch nicht so klein und schnell wie ASICS aber die Entwicklung geht immer weiter.

    Manche erwarten dass eine Art FPGA Technologie in Zukunft den Weg in die Prozessoren findet. Ein Prozessor soll dann bekannte Algorithmen oder häufige Aufgaben dann automatisch oder über Libs auf den FPGA Teil der CPU verlagern können.

    Aber noch sind leistungsfähige FPGAs teuer. Aber könnte sich ja ändern. Ich denke flexible nicht fix verbundene Transistoren werden in der Zukunft sicher noch eine große Rolle spielen. Auch im Bereich der KI Forschung und neuronalen Algorithmen.



  • klar gibt es FPGAs (und kleinere werden kommen)

    aber die sind wieder viel schwieriger zu programmieren - und von imperativ/functional/Software zu Hardware ist keine trivial Transformation

    deswegen machen das auch nur wenige in sehr speziellen Bereichen, vergleichbar mit GPU Programmierung - da bekommst du auch nicht mal eben Performanz mit eine bisschen Aufwand geschenkt (wenn dein Algorithmus nicht sowiso schon trivial parallelisierbar ist)

    ich glaube nicht das dort die Zukunft liegt - FPGAs sind ja auch nicht erst ein paar Jahre alt

    und die trotzdem werden die Software-Anforderungen weiter steigen - auch wenn dann kleinere FPGAs oder ASICs die ganz grossen Aufgaben machen, die Anforderungen steigen und steigen immer weiter bis das Handy dann ein Holodeck erschaffen kann - es gibt keine jetzt-reicht-es-Grenze nach oben

    solange keiner einen Super-Mini-Rechner baut der kaum Strom braucht und unberegrenzte Leistung wird es bedarf an Sprachen geben die schnellen/kleinen/Resourcen sparenden Code erzeugen können


Anmelden zum Antworten