Nachdem ich mich durch die Sprachen hochgearbeitet habe, zuerst C auf Unix, dann C++ mit MFC und dann C# (beginnend mit 1.0), denke ich, dass es ein bisschen wie Latein lernen ist, wenn man zu früheren Inkarnationen der Sprache zurückgeht. Oh, wahrscheinlich habe ich da gerade etwas von Paul Graham geklaut, aber ich würde dem zustimmen.
C ist sehr gut, wenn man eine minimale Objektcodegröße haben muss, sehr gut für eingebettete Sachen, wo es einen Schritt weiter ist als die Assemblersprache. Ich denke da an Dinge wie einen Microchip PIC usw., wo man vielleicht nur 1K Wort Programmplatz hat.
C++ ist sehr gut geeignet, wenn man größere Objekte haben kann, aber trotzdem in der Lage sein muss, direkt auf das Metall zu hämmern - also Dinge wie Gerätetreiber, Netzwerkstapel usw. usw. Die Art von Klebeprogramm, das unter allem sitzt.
Ein Betriebssystem könnte in einem dieser beiden Bereiche landen - oder eher in einer Mischung aus beiden, je nach Programmierer, Alter des Codes, den benötigten Schnittstellen und der Schneehöhe draußen (nur noch ein Durchlauf, dann schreibe ich die Methode!)
C# eignet sich sehr gut für Anwendungen auf höherer Ebene, bei denen der Schwerpunkt auf der Benutzerschicht liegt. Sie können webbasiert, clientbasiert oder eine Mischung aus beidem sein - das ist eigentlich egal. Das Schöne an der .net-Familie ist, dass es für diese wichtige Schicht eine umfangreiche Bibliothek gibt, die laufend weiterentwickelt wird.
Da die Computer immer leistungsfähiger werden, überwiegen die Kosten für den Entwickler die Kosten für den Prozessor oder den Speicher.
Verwenden Sie C#, ignorieren Sie C und C++. Wenn Sie mit C# zufrieden sind, werden Sie keine Notwendigkeit mehr haben, in einer niedrigeren Sprache zu programmieren, um die Geschwindigkeit zu erhöhen.