Welche hardwarenahe Programmiersprache für den Anfang lernen?

...komplette Frage anzeigen

5 Antworten

Wenn Du hardwarenah programmieren willst, dann gibt es nur Assembler. Allerdings reicht Assembler nicht alleine, denn dazu fehlen dann immer noch die Kenntnisse über die jeweilige Prozessor-Architektur und die musst Du dann nochmal für jeden Einzelnen Controller und Prozessor dazu lernen. Das ist dann aber der Praxisteil.

Im Weiteren kannst Du dann C lernen, was dann eher zwischen Hardware und OS angesiedelt ist, und darauf aufbauend dann C++, was aber dann schon nicht mehr wirklich hardwarenah ist, sondern eher OS-nah.

Alles Andere ist Makro.

Danke für deine Antwort.

Wie gesagt, das Thema rund um Assembler ist mir vertraut, damit kommt man abseits von Controllern sehr schnell an seine Grenzen. Dafür fallen mir noch einige wenige Sonderfälle ein, für die diese Sprache wirklich sinnvoll ist. In diesem Bereich wird ja mittlerweise auch in C-verwandten Sprachen geschrieben (Arduino beispielsweise). Ich lese bei dir raus, dass das klassische C als Basis auch heute noch Sinn macht. Liege ich da richtig?

Im Studium wurde bei mir auch viel mit Makros gemacht - sagt mir aber nicht so recht zu, weil ich nicht so recht weiß, was im Hintergrund abläuft.

0
@Korkie

Die Arduino-Sprache ist ein Sonderfall, die auch extra für Arduino-Hardware entwickelt wurde und dennoch an C/C++ angelehnt ist. Falls Du mal mit Arduino-Systemen arbeiten willst, wirst Du es dann damit nicht so schwer haben, wenn Du C/C++ bereits beherrschst. Wenn Du nichts damit zu tun hast, dann musst Du das auch nicht unbedingt lernen. Im Übrigen ist Arduino auch nur wieder eine Makro-Sprache, die aber sehr viel näher an der Hardware arbeitet.

Letztlich kommt man nie an Assembler und C vorbei, wenn man nah an der Hardware arbeiten will oder muss. Es gibt einfach nichts Anderes. Das ist wie mit dem Rad: das muss nicht neu erfunden werden ;) Dabei ist Assembler das Rad selbst und C der Reifen mit dem es weicher läuft. Letztlich ist C auch nur ein Assembler-Makro, was aber unmittelbar aus Assembler aufsetzt und damit fast keinen großen Unterschied macht, zumindest auf gängigen Systemen bei denen zeitkritische Prozesse nicht eine tragende Rolle spielen.

Das Handycap bei Assembler und dann auch bei C ist einfach, dass man jeden Sch3iß immer wieder und wieder neu schreiben muss. Bei komplexeren Systemen kommt man dann mit Assembler nicht mehr sehr weit, weil man einfach den Überblick komplett verliert. Dann beginnen Makros ihre Arbeit und die Programmstruktur wird auch übersichtlicher alleine durch die Makronamen und auch Kommentare, wenn diese dann aussagekräftig sind. Kommentare gibt es zwar auch in Assembler, aber aus den Befehlen wird niemand auf einen Blick schlau. Hast Du beispielsweise mal eine einfache C-Funktion wie "strcpy" in Assembler gesehen? Das ist dann – im Gesamtcode integriert – gar nicht mehr leicht zu erkennen. Aber mit "strcpy" kann man was anfangen. Und wenn Du dann mal eine Windows-C-Funktion wie GetPrivateProfileStr nimmst, und die in Assembler anschaust, dann bist Du bereits ein alter Mann, wenn Du alles gelesen hast. xD … und es nützt Dir auf keinem anderen System was, weil dort noch andere weitere System-spezifische Makros dahinter stecken.

Deshalb sind Makros nicht schlecht und sogar unerlässlich, denn ohne kommst Du kaum weiter. Allerdings kann man ja bei Bedarf auch den Code Disassemblieren und dann auch optimieren. Das Disassemblieren findet übrigens nur Microsoft böse >:) Aber für die Arbeit ist es unablässig.

Na, ja, lange Rede, kurzer Sinn:

Die Sprache, die Du lernen musst ist immer vom Aufgabengebiet abhängig. Wenn Du ein Anwenderprogramm erstellen willst, kannst Du Assembler vergessen. Wenn Du einen Radiowecker programmieren willst, dann kannst Du Java, Python oder auch C# und C++ komplett vergessen. Ob Du da auch mit C weiter kommen wirst, ist dann auch wieder geräteabhängig.

So gesehen ist Assembler mindestens immer noch die Hilfskrücke, um das Programmieren RICHTIG zu verstehen. Für Deine Ziel aber ist es unablässig. Und C/C++ ist dann auch universell für komplexere Systeme einsetzbar. Das schöne an C ist aber, dass man Assembler-Codes integrieren kann, wenn C mal zu mächtig für kleine spezielle Aufgaben ist.

Ich hoffe, das Dir das irgendwie weiter helfen kann.

2
@MarkusGenervt

Vielen Dank für deine Mühe! Damit hast du mir wirklich weitergeholfen. Danke :)

0

Die meisten embedded Systeme werden immer noch mit C programmiert.

Für Windows/Linux/Desktop kommste damit allerdings nicht mehr weit.

Das sind zwei grundverschiedene Baustellen.

Assembler ist nur noch in ganz wenigen Bereichen sinnvoll. Zu sehr ist man dabei auf einen einzelnen Prozessor fixiert. Zwar haben Prozessorreihen oft die gleiche Sprache, aber dann doch teilweise stark unterschiedliche Ergänzungen. Weil man Code wiederverwenden möchte und Menschen schneller in Hochsprachen programmieren, werden auch Embedded-Geräte normalerweise (wenn nicht das letzte Quentchen Geschwindigkeit oder Speicher wichtig ist) in einer höheren Sprache als Assembler programmiert. CAD und Desktop benutzen eh kein Assembler.

Letztendlich ist die Sprache zweitrangig, wenn Du die Programmierkonzepte dahinter verstehst. Als ich jünger war, hatte ich ein Dutzend Sprachen beherrscht und musste z.B. nur nach längeren Pausen mal nachschauen, ob ein Vergleich in Sprache X nun mit "=", "==" oder "equ" geschrieben wurde, weil C, Basic, Pascal, Modula etc. alle fast das gleiche können.

Je nach Gerät gibt es bestimmte "bevorzugte" Sprachen, die z.B. vom Hersteller aktiv unterstützt werden. Und da hattest Du ja schon konkrete Geräte (die ich aber nicht kenne) genannt, d.h. das sollte eine Suchmaschine Ergebnisse liefern zu "GerätX" und "programmieren".

Mit C bist du eigentlich gut und breit aufgestellt. Es gibt viele Möglichkeiten es praktisch auf Einsteigerniveau anzuwenden und zu üben.

Mit Python  kannst du das sehr gut erweitern und komplett neue Anwendungsfälle erschließen!

Da du erfahrung mit Cpp hast würde ich diese aufjedenfall vertiefen! Was besseres gibts nicht. Interessant für dich könnte Python und vorallem Java sein, kannst du die 3 kannst auch fast auf allen Plattformen programmieren

LG, AK!:)

Was möchtest Du wissen?