misu schrieb:
Im Übrigen lohnen sich gute C-Skills enorm. Weil C in vielen Anwendungen auch heute noch die einzige Sprache ist, die in Frage kommt, vor allem High-Performance Computing, Microcontroller.
Sry, wenn ich dir da widersprechen muss, aber was sich lohnt ist Erfahrung im Schreiben von Lowlevel-Code. Man muss, denke ich, zwischen verschiedenen Blickrichtungen unterscheiden:
In vielen Fällen von Anwendungsprogrammierung helfen Abstraktionen dabei den Code wartbar, leserlich, sicher usw usf. zu machen. Was man dabei aber in heutiger Zeit trotzdem nicht vergessen darf, ist dass der Code auf einer Maschine läuft und man durch das Verständnis des Vorgänge in der Hardware den Code noch performanter gestalten kann.
Auf der anderen Seite gibt es Sprachen, die so sehr abstrahieren, dass man nicht mehr an die Hardware kommt.
C-Code ist nicht direkt schnell. Da gibt es den berühmten Vergleich zwischen qsort bei C und sort bei C++, wo C die Größe eines Elementes, die Zahl der Elemente des Containers und ein indirekter Funktionsaufruf auf die Sortierfunktion übergeben wird. In solchen Fällen ist C langsamer als C++.
Was man beim Programmieren von C lernen muss, ist ordentlich zu programmieren. Kein Garbage Collector, der hinter einem aufräumt, die Möglichkeit über malloc, free und Zeiger direkt an die Maschine zu gehen und ganz primitiven Hardwarecode zu schreiben etc. pp.
Wenn man unter solchen Umständen lernt, sicheren Code zu schreiben, hat man einen Vorteil.
Was ich aber hier als bessere Alternative sehe, ist C++. Ein Gedanke, der bei der Entwicklung von C++ von Anfang an bis heute eine Rolle spielt, ist: "Unter C++ darf es nur noch Platz für Assembler geben". Mit C++ kannst du, genau wie in C, mit einem Codewort rohen Assembler in den Code schreiben, du kannst mit malloc und free rohe Speicherbereiche holen und primitiven Kernelcode schreiben (auch wenn bestimmte Kernel-VIPs anders denken

) usw. usf. Wenn du es aber nicht brauchst, hast du moderne Mechanismen, wie Templates, eine sicherere und bequemere Möglichkeit Objekte auf dem Heap zu erzeugen (new, delete) etc.
Da steht C++ C soweit ich weiß in absolut nichts nach. (Sofern du im C-Code keine Befehle wie new und delete benutzt, kannst du C-Code ja auch recht einfach durch nen C++-Compiler schicken.) Und wenn man Code als Template schreiben kann, dann kann der Code sogar schneller werden!
Was m.M.n. Sinn machen würde, wäre an der Uni nen ordentlichen Packen C++ unterrichten, wo man von Anfang an guten Stil lernt (auch kein Garbage Collector), und am Ende die Klappe aufmacht und direkt an die Hardware packt.
Sofern du dich mit High-Performance-Computing beschäftigst, solltest du dir vllt. mal diesen Artikel angucken:
http://www.codeproject.com/Articles/340797/Number-crunching-Why-you-should-never-ever-EVER-us
Ich bin mir grade nicht ganz sicher, ob C dynamische Arrays hat. Sofern es sie dort nicht gibt, ist es ein Vorteil von C++, da dynamische Arrays wesentlich schneller sind als eine doppeltgelinkte Liste. Das hat auch was mit dem Verständnis der Funktionsweise von moderner Hardware zu tun. Wenn du in dem Feld tätig bist, glaube ich, dass es mal ein Blick wert wäre.
Sofern du C# programmierst, ist es der gleiche Effekt, wie zwischen List (schnell) und LinkedList (langsam), da List in C# soweit ich weiß auch nichts anderes ist, als ein dynamisches Array.
In dem Fall waren die Väter von C# ganz clever, da List eher benutzt wird, als z.B. Vector (dynamisches Array in C++), da der Programmierer direkt skeptisch ist, wenn er vom primitiven Container "Liste" weggeht.
Sry, dass mein Post eher auf misu geantwortet hat, aber ich hoffe der TE kann auch etwas daraus ziehen.
