Wozu C Programmieren?

M

Mathwork

Gast
Hallo!

Ich studiere Wirtschaftsingenieur Elektrotechnik und werde im 2. Semester das Modul "C-Programmieren" haben, wo wir den Umgang mit der Programmiersprache C lernen werden.
Über den Informatikanteil kann ich mich eigentlich nicht beklagen. "Grundlagen der Informatik" fand ich im ersten Semester z.B. ziemlich spannend und das wird bestimmt irgendwann nochmal nützlich.
Nur kann ich mir absolut nicht vorstellen, wieso wir ausgerechnet C lernen sollen. Was denkt ihr? Warum nicht Java oder C++? Wäre das nicht sinnvoller?

Ich brauche aktuell noch eine Motivation, um mich auch wirklich auf das Lernen von C zu freuen. Was kann ich damit später machen? Was könnte ein Ingenieur damit anfangen? Kann ich auch auf meinem MacBook mit C programmieren (wenn ja, wie?)

Danke für eure Antworten! :)
 
Für die Basics. Es ist völlig irrelevant was du lernst. Wenn du weiter später programmieren willst lernst du eh verschiedene Sprachen. Meistens ändern sich kleine Details bei Objektorientierten Sprachen und die Syntax. Ob du jetzt Java oder C# programmierst macht kaum einen Unterschied.
C bringt dir die Basics und Pointer bei. Mehr als die minimalsten Basics lernst du sowieso nicht an der Uni.
Von C kannst du dann auf eine komfortablere Sprache umsteigen oder wie auch immer. C ist super um die Basics zu verstehen im Sinne von Programmierung und Hardware.
 
  • Gefällt mir
Reaktionen: W31z3n, foo_1337, JP-M und 7 andere
C brauchst Du z.B. um am Linux-Kernel mitzumachen, und auch im Embedded-Bereich ist es noch stark verbreitet. Außerdem ist C sehr nah an der Hardware, von daher macht es schon Sinn C zu kennen und nicht nur Java/C++.

Die Windows/Linux APIs sind auch alle in C geschrieben (COM kann man auch mit "purem" C verwenden.) Der Grund dafür ist, dass die C Calling Convention der kleinste gemeinsame Nenner aller Programmiersprachen ist. Quasi jede Programmiersprache erlaubt es irgendwie C Code aufzurufen, sei es Java, Python, oder C#.
 
  • Gefällt mir
Reaktionen: C:\Defuse_Kit, Mathwork und Revan1710
Ich hab damals auch E-Technik studiert. Die C Vorlesung war die Vorbereitung auf die Microcontroller-Vorlesung wo sehr Hardwarenah in C Programmiert wird. Die Vorteile von C++ oder Java bringen da einem nicht viel, zumal man viele Controller gar nicht in Java programmiern kann.
In den späteren Semestern kam dann aber C# dazu.
 
  • Gefällt mir
Reaktionen: DubZ, Hayda Ministral, konkretor und 4 andere
Und weil in Bezug auf Elektrotechnik C "ausreicht".

Normalerweise kommen dort, wo man mit Elektrotechnik zu tun hat, auch eher stark begrenzte Systeme (z.B. in Bezug auf ihren Speicher) zum Einsatz. Nimm Dinge wie Automobilbereich, und ich meine jetzt nicht das Infotainment, sondern eben spezielle Steuerungen.

Mitunter ist bei solchen Dingen jedes Byte entscheidend. Mit dynamischer Speicherverwaltung wird in Elektrotechnik nach meinem Kenntnistand nur sehr selten gearbeitet, weil alles was dynamisch ist eben automatisch unberechenbarer. Und in Bezug auf Anforderungen müssen die Systeme halt gewisse Dinge garantieren. Also vor allem wenn es sich um kritische Systeme handelt, lässt man oft genug die Finger von dynamischem Speicher.

(Bin selbst nicht von dem Gebiet, deshalb entschuldige ich mich für meine laienhafte Erklärung)
 
  • Gefällt mir
Reaktionen: Mathwork
Gerade für dich als Ingenieur ist C interessant. C abstrahiert wenig und bildet daher zusammen mit einem Grundverständnis von Assembler die Grundlage dafür zu verstehen, wie Software und Hardware zusammen spielen.
Wenn du Websites erstellen willst später kannst du besser Java lernen. Aber wenn du später mit Glühbirnen, Photovoltaik-Anlagen oder sonstiges zu tun haben könntest, dann ist es sinnvoller, dass du C lernst.
 
  • Gefällt mir
Reaktionen: Mathwork
Ich bin beispielweise an der Uni mit C++ gestartet und fand das alles andere als ideal. Wenn man vorher nur Schulinformatik hatte, kann einen die Fülle da mal direkt erschlagen, wenn man nach ~2 Monaten schon mit OOP anfängt, die Grundlagen aber eigentlich noch überhaupt nicht sitzen.

Kommt natürlich auch auf den Dozenten an.
 
  • Gefällt mir
Reaktionen: Mathwork
Mathwork schrieb:
Nur kann ich mir absolut nicht vorstellen, wieso wir ausgerechnet C lernen sollen. Was denkt ihr? Warum nicht Java oder C++? Wäre das nicht sinnvoller?
du lernst die Denkprozesse vom programmieren und nicht eine sprache.. Dinge die du dann auf andere Sprachen anwenden kannst.
das objektorientierte von c++ macht es auch nur unnötig komplizierter

es gibt auch noch genug das in c geschrieben wird.
https://www.toptal.com/c/after-all-these-years-the-world-is-still-powered-by-c-programming
 
Danke für eure zahlreichen Antworten!

Also macht es wirklich Sinn, erstmal C zu lernen, gerade in der E-Technik. Was kann ich denn dann nun konkret damit anfangen? Das erschließt sich mir immer noch nicht ganz. Mal davon ausgehend, dass ich keine weitere Programmiersprache lernen werde...




Nilson schrieb:
Ich hab damals auch E-Technik studiert. Die C Vorlesung war die Vorbereitung auf die Microcontroller-Vorlesung wo sehr Hardwarenah in C Programmiert wird.

Ja, das wird bei uns wohl ähnlich sein! Haben im 3. Semester ebenfalls "Mircocontroller", also wird das wohl die Vorbereitung dafür sein?

Was schätzt ihr ein, wie viel (Lern-)Aufwand und Zeit ich abseits der Vorlesungen und den Übungen investieren muss, um die Sprache so zu lernen, dass ich sie später im Berufsleben einsetzen kann?
 
und alles was du in C machen kannst, kannst du auch mit C++ machen.. und halt noch vieles mehr.

kommt drauf an, ob ihr in assembler schreibt oder in C dann der interpreter das auf assembler wandelt.
 
Du studierst Elektrotechnik, da muss man C einfach können. Wenn du Java und Javascript programmieren willst, hättest du dich für Informatik einschreiben müssen. Gerade im embedded Bereich ist C die Sprache der Wahl, denn da kommt es oft auf jedes Byte an. (Rust wäre besser, aber leider sind Rust binaries aktuell viel zu groß). Zumal ein Großteil der "Altsoftware" in C geschrieben ist und man sowas (leider) auch Warten muss.
 
  • Gefällt mir
Reaktionen: DubZ
Mathwork schrieb:
Das erschließt sich mir immer noch nicht ganz. Mal davon ausgehend, dass ich keine weitere Programmiersprache lernen werde...
Du wirst weitere Sprachen elrnen, nur eben nicht an der Uni, beziehungsweise mit nem extra Modul. Es kann aber sein, dass es in einer spaeteren veranstaltung etwas in Java zu programmieren gilt. Dem prof ist es herzlichst egal, dass du dazu keine Veranstaltung hattest, das musst du dir dann selbst beibringen.
 
Oma Erna schrieb:
C kann inzwischen Pointer?
Und da bist du dir sicher?
https://www.tutorialspoint.com/cprogramming/c_pointers.htm 🤔
oder meinst du irgendwelche Spezialfälle?

Java kann auch Pointer, aber nur bei Objekten 🤣

Mit C kann man schon viele Spielereien machen.

C++ hat auch seinen Platz im embedded Bereich, so ist es nicht, aber auch viel schwieriger zu erlernen und auch schwierig effizient damit zu arbeiten.
 
Zuletzt bearbeitet:
Wie schwer ist es denn, den Umstieg von C auf Java zu finden (sollte man sich Java mal selbst beibringen müssen)?

Und welche Möglichkeit gibt es, auf meinem MacBook mit C zu programmieren? Will mir dafür nicht extra noch ein Windows Gerät anschaffen...
 
C kann auch eine "Mehrheitsentscheidung" von den "Zuarbeitern" des Dozenten sein - Korrektoren+Übungsleiter zB.

Bestimmte Programmiersprachen / -konzepte eignen sich nicht so gut für den Elektronik-Bereich.

Die reine "Größe" spielt außerdem eine gewisse Rolle - obwohl sich das ändern kann.

Viele Anwendungen in der Elektronik sind eher Ressourcenbeschränkt - wie #5 :

Ein "Thermometer" kann prinzipiell eine Zahl ausgeben (Einfache Schaltung oder Mikrocontroller) - oder via Alexa-Integration eine Sprachausgabe als Antwort synthetisieren. Die Hardware ist extrem unterschiedlich - genauso wie der Programmieraufwand (verwendete Tools), Testen und Verifikation bei diesen Systemen sehr unterschiedlich sind .

Mathwork schrieb:
MacBook mit C zu programmieren
Stichwort "Toolchain" - Werkzeugkette - Bei Macs sind die Standard C-Compiler clang (llvm projekt) und gcc (GNU projekt) verfügbar, die C übersetzen können.
 
Mathwork schrieb:
Und welche Möglichkeit gibt es, auf meinem MacBook mit C zu programmieren? Will mir dafür nicht extra noch ein Windows Gerät anschaffen...
oh das geht, aber über Umwege, hatte mal ne Anleitung dazu.
War dann Eclipse mit C auf Mac 😅

xcode und da xcode cli tools solltest aber installieren als erstes

aber für einfache Dinge kannst es natürlich einfach mit nem einfachen Texteditor und von Hand compilieren und ausführen machen im Terminal. Oder alles Im Terminal.
Sobald Projekte aber größer werden, macht das keinen Spaß mehr.
 
Zuletzt bearbeitet:
Mathwork schrieb:
Wie schwer ist es denn, den Umstieg von C auf Java zu finden (sollte man sich Java mal selbst beibringen müssen)?

Und welche Möglichkeit gibt es, auf meinem MacBook mit C zu programmieren? Will mir dafür nicht extra noch ein Windows Gerät anschaffen...
Geht so, C ist prozedural, Java ist Objektorientiert das sind recht verschiedene Programmierparadigmen. Durch C versteht man viel vom Unterbau, der bei Java mal besser und mal schlechter "abstrahiert" ist.

C Programmierung ist überhaupt kein Problem auf einem Macbook. Geht z.B. wunderbar mit XCode.
 
Mathwork schrieb:
Wie schwer ist es denn, den Umstieg von C auf Java zu finden (sollte man sich Java mal selbst beibringen müssen)?
Sieh es nicht als Umstieg, sondern als was neues an.
Die Grundprinzipien aus C bleiben, Details fallen weg, aber da kommt sehr viel oben drauf.
 
Zurück
Oben