hallo
frage deine frage 3 verschiedene „profis“ und du wirst mindestens 4 völlig verschiedene antworten bekommen. und jeder ist überzeugt, dass seine antwort die einzig seeligmachende ist.
zunächst einmal: du hast vier teilweise massiv unterschiedliche sprachen aufgezählt, die unterschiedliche einsatzzwecke haben. ist so ähnlich wie die frage, ob du dir lieber einen sattelschlepper oder einen sportwagen kaufen sollst. die richtige antwort „hängt eben davon ab…“.
C ist eine schöne, klassische, prozedurale sprache, die den vorteil hat, relativ maschinennah zu sein und dabei doch (korrekter programmierung vorausgesetzt) relativ plattformunabhängig zu sein (im sinne von: der code lässt sich auf mehreren plattformen kompilieren). C-Compiler gibt es vermutlich für alles, was nullen und einsen kennt. grundsätzlich gibt es fast nichts, was du mit C nicht programmieren kannst. bei manchen problemstellungen bietet es sich halt eher an als bei anderen. vor allem, wenn es um schnelligkeit und ressourcenschonung geht, kommt man mit C ganz gut weiter.
C++ ist eine objektorientierte sprache. sie leht sich von der syntax extrem stark an C-programme an und ist daher für C-programmierer relativ leicht zu erlernen. tatsächlich kann man ein c-programm mit einem c+±compiler compilieren (kleinere änderungen vorausgesetzt) - nur dass man dann halt nicht die vorteile der sprache nutzt. objektorientierung ist ein völlig anderer programmieransatz als prozedurale programmierung. manche probleme lassen sich objektorientiert viel besser lösen, bei anderen problemen hilft es nicht viel. C++ ist sehr weit verbreitet (fast so gut wie C).
Java ist ebenfalls eine objektorientierte sprache, hat allerdings einen völlig anderen anspruch als C++. hauptaugenmerk von java war schon immer die plattformunabhängigkeit: der java-compiler übersetzt den sourcecode nicht direkt in vom prozessor ausführbaren maschinencode sondern in einen sogenannten bytecode, der dann von einer sogenannten virtual machine zur laufzeit in maschinencode umgesetzt wird. der vorteil dieser methode: du schreibst ein java-programm auf einer windows-maschine und kannst den erzeugten code sowohl auf linux oder am mac einsetzen - oder auf jedem sonstigem system, dass eine virtual machine bereitstellt. inzwischen ist java derart weit verbreitet, dass es für alle gängigen betriebssysteme eine virtual machine gibt. die plattformunabhängigkeit erkauft man sich aber mit zusätzlichen overhead, der die programme zwangsläufig langsamer macht.
C# ist die antwort von microsoft auf den erfolg von java. eigentlich wollte microsoft ja ein eigenes java entwerfen (das berüchtigte J++) dass aber mit derart vielen microsoft-spezifischen sonderheiten gespickt war, dass die plattformunabhängigkeit flöten gegangen wäre. nachdem sich sun erfolgreich dagegen gewehrt hat und es microsoft verboten wurde, eine nicht standard-konforme java-plattform aufzubauen, haben sie eben ein konkurenzprodukt entwicklet. grundsätzlich basiert C# auf .NET, einem allgemeinen framework für anwendungen. ähnlich wie java erzeugt man mit C# auch nur bytecode, der dann von einer virtual machine interpretiert wird. nur ist das ganze viel microsoft-lastiger. C# und java ähneln einander sehr stark (weitaus mehr als C# und C++). unter linux gibt es das mono-framework, dass versucht, eine art plattformunabhängiges .NET zu sein. es gibt auch C#-compiler für linux. allerdings ist mono noch nicht ganz so ausgereift und macht manchmal problemchen.
was soll man dir also empfehlen? nicht einfach. wenn du unbedingt unter linux entwickeln willst, würde ich von C# mal abraten. es ist zwar grundsätzlich plattformunabhängig ausgerichtet, zielt aber trotzdem viel zu start auf die microsoft-plattform ab. da wirst du nicht glücklich.
ich selber entwickle in java und halte es für eine einfach zu erlernende und trotzdem ziemlich mächtige sprache. mit eclipse gibt es eine sehr ausgereifte entwicklungsumgebung, die noch dazu völlig gratis ist. mit maven hat man sehr unkomplizierten zugriff auf einen riesigen fundus an vorgefertigten bibliotheken. gerade im web-bereich gibt es viele fertige lösungen, die einem das programmieren sehr erleichtern. wenn aber hohe performance oder ressourcenschonung gefragt sind, wirst du eher die finger von java lassen müssen.
C und C++ kenne ich nicht so gut, als dass ich dazu eine wirklich fundierte aussage treffen könnte. strebt dir der sinn nach sehr hardwarenaher programmierung (z.b. treiber entwickeln), wirst du eher bei C bleiben. ansonsten gleich mit C++ beginnen - die objektorientierung bringt in den meisten fällen leichter wartbaren und stabileren code.
lg
erwin