Hi,
vielleicht hilft diese Sicht. Es gibt immer "low-level" und "mainstream" Programmmierung. "low-level" programmiert man, wenn man hardwarenah programmieren muss (Treiber z.B.) oder besondere Geschwindigkeitsanforderungen bestehen. "mainstream" seien der große Haufen an Applikationssoftware, der so tagtäglich geschrieben wird.
Über die Zeit wird das, was mal "mainstream" war, zur "low-level"-Programmierung, d.h. die Kategorien ändern sich über die Zeit. C war eine lange Zeit lang die Standardsprache, die auch zur Programmierung von normalen Applikationen eingesetzt wurde, und zwar hauptsächlich aus Geschwindigkeits- und Platzgründen. Eine Effizienz eines Bytecodeinterpreters (java virtual machine) von selbst 50% im Vergleich zu C wäre vor noch 10 Jahren für viele Applikationen nicht akzeptabel gewesen. Und erst eine Java Virtual Machine für ein kleines Kommandozeilentool laden zu müssen, hätte bedeutet, dass niemand dieses Tool benutzt.
Deswegen hat man "normale Applikationen" früher in C geschrieben, hat sich damit natürlich aber auch die ganzen C-spezifischen Probleme eingehandelt, speziell das Speichermanagement war lange Zeit ein echtes Problem. Dieses Problem taucht bei Java nicht auf (automatische Freigabe von Speicher), wie auch diverse andere Probleme nicht, weshalb Java viel sicherer zu programmieren ist. Für "mainstream"-Programme ist Java daher momentan die Sprache der Wahl.
C ist deshalb inzwischen zur "low-level"-Sprache "degradiert", und hat die Rolle, die früher Assembler hatte. Es wird also dort eingesetzt, wo hardwarenah programmiert werden muss oder besondere Geschwindigkeitsanforderungen bestehen, und denk dabei nicht nur an Treiber oder Videocodecs, denk auch an langsamere Chips in Handys, PDAs etc.
Ich persönlich glaube, dass C diese Rolle auch weiterhin beibehalten wird, weil es unter den "low level"-Sprachen diejenige ist, für die es für jede Prozessor/Betriebssystem-Kombination einen Compiler gibt. Assembler hingegen programmiert man heutzutage eigentlich gar nicht mehr, auch weil es relativ einfach ist, einen C Compiler (die "toolchain") für einen neuen Prozessor zu schreiben, weil nur noch das sog. "backend" angepasst werden muss.
Die Zukunft? Java wird "low level", und Web 2.0 zum Mainstream. Oder ich täusche mich komplett und Java stirbt einfach aus.
Grüße,
Wolfram