Welche Programmiersprache für Anfänger?

Dazu gibts schon an anderen Orten ewig lange Diskussionen.. man kann tatsächlich immer wieder Bereiche finden wo das JIT bei Java imense Vorteile ggn C hat und dadurch tatsächlich JavaCode schneller ist als C. Auch bei mathematischen Berechnungen. Trotzdem wird in den meisten performance-kritischen Bereichen C/C++ eingesetzt und wahrscheinlich ist einfach hingeschriebener C(++) Code in der Regel auch schneller als Java..
Viel interessanter ist in der Regel ja auch die Software mit möglichst wenig Kosten (Entwicklungszeit & Wartungsaufwand) fertig zu stellen und nicht, dass sie möglichst performant läuft...
 
oldsqldma schrieb:
Die auch die auch ganz gut paßt.
http://shootout.alioth.debian.org/u32q/which-programming-languages-are-fastest.php
Egal welcher Benchmark mit welchem System, Java zieht nie an C vorbei.
Und dabei handelt es sich immer um den besten Code für die jewalige Sprache. ;)
(Hier zählt nur das Ergebnis)
ich kenne diese Benchmarks und halte rein gar nichts davon, absolut fern von der Realität. Java zu benchmarken ist schwer, warum? Bis die JVM optimierten Code für die Architektur erstellt hat, dauert dies definitiv länger als 20sec von daher vergleich wir einen hochoptimierten C++ code (gcc optimizations) mit einer Kompilierung mit gar keiner Optimierung (Java Start-Kompilierung).
Erst nach einigen Minuten, hat der JIT-Compiler ein wirklich gutes Kompilat erzeugt, deswegen kannst du diese Tests da leider nicht vergleichen :(
Also Java kann schneller sein als C(++), wenn das richtig gute Kompilat mal erzeugt wurde, ich würde es aber auf Grund des Language Designs in der Performance ~5% hinter C(++) einordnen. Bei C(++) führt ein Zugriff auf nicht definierte Array-Elemente zu einer Speicherverletzung, Java prüft vor dem Zugriff, ob dieses Element überhaupt existiert und schmeisst sonst eine Exception, das sind eben viele kleine Dinge die Java mehr macht als C(++) wodurch ich auf die ungefähre Schätzung von 5% komme.
Ich möchte hier auch kein "Java is lightning fast" rüberbringen, ich wollte nur sagen, dass es auf Grund bestimmter Annahmen schneller als C(++) sein kann, und ich noch keinen einzigen fairen Benchmark zwischen C(++) und Java gesehen habe, jedesmal war der Benchmark zugunsten einer anderen Plattform.

kuddlmuddl schrieb:
Trotzdem wird in den meisten performance-kritischen Bereichen C/C++ eingesetzt und wahrscheinlich ist einfach hingeschriebener C(++) Code in der Regel auch schneller als Java..
natürlich, C(++) ist in dem Punkt auch viel verlässlicher, es gibt keinen Garbage Collector, der irgendwann mal anspringt, keinen JIT-Compiler, der im Hintergrund mal das Programm weiter optimiert.
Wie gesagt, ich wollte nur sagen, dass Java nicht so langsam ist, wie der Ruf es sagt, und solche Benchmarks suggerieren.

kuddlmuddl schrieb:
Viel interessanter ist in der Regel ja auch die Software mit möglichst wenig Kosten (Entwicklungszeit & Wartungsaufwand) fertig zu stellen und nicht, dass sie möglichst performant läuft...
100% ack.
Denn bei 99% der Software ist es sowieso egal ob sie 5-10% schneller oder langsamer läuft, was ausbremst, sind dann eh nicht die CPU-Zyklen, die ich für eine Operation brauche sondern Algorithmen und vor allem IO-Zugriffe, wodurch die meisten Sprachen nachher bei so realem Workload wieder gleich sind.
Und die Entwicklungszeit sowie Wartungsaufwand wird somit viel relevanter als die simple CPU-Zeit, die eine Aufgabe benötigt.
 
Du wirst auch nie einen Benchmark finden, der sagt, daß eine Sprache wirklich schneller ist.
Bei Java reist der GC schon manchmal richtig tiefe, wenn auch verdammt kurze Performence einbrüche.
Das wirst du bei C(++) nicht haben.
Das Java nach einigen Minuten das beste Kompilat gefunden hat, ist m.E. einfach ein Problem von Java.
Java wurde halt nie als extrem schnelle Sprache gebaut, unddas braucht man im Java Einsatzgebiet, wo sich Erlang (wobei da eher minder, weil Erlang nun wirklich eine Sprache ist, bei der man nahezu null (hrhr) Programmierfehler machen kann), Pascal/Delphi, .. auch rum schleichen, und wo es nicht auf den letzten Quanten Performence ankommt.

Sogar COBOL könnte es eines Tages ersetzen.
Bei Fortran würde ich wiederrum nicht drauf wetten. ;)

Wenn ich einen Treiber schreiben will, bleibt mir allerdings keine andere Wahl, da hab ich "kaum" Auswahl.
C, C++, D und einige Randsprachen, wofür es kaum Experten gibt.

PS: Schrecklichstes Java Performence ist wohl das Spiel "Minecraft", was nur so mit Ressourcen um sich schmeißt, total unnötig. Das ganze mit XNA z.B. würde kaum Performence Probleme ergeben.
 
oldsqldma schrieb:
Du wirst auch nie einen Benchmark finden, der sagt, daß eine Sprache wirklich schneller ist.
wie auch, mit jedem Anwendungsfall, kann es anders aussehen.
Ich meine viel mehr einen fairen Benchmark, der verschiedene Szenarien testet und dort auch auf die Eigenheiten der Sprache eingeht. Wenn eine Sprache nunmal erst nach einigen Minuten sich richtig gut und sinnvoll kompiliert hat, kann ich einen Test nicht nach 20 Sekunden beenden lssen.


oldsqldma schrieb:
Bei Java reist der GC schon manchmal richtig tiefe, wenn auch verdammt kurze Performence einbrüche.
Das wirst du bei C(++) nicht haben.
teilweise ja, aber da kann mit manuellem Tuning des Garbage Collectors und der richtigen Wahl (es gibt verschiedene) wirklich es sehr stark den eigenen Anforderungen anpassen. Also für ne Server-Software haben wir 2 Tage investiert und eine verdammt gute Konfiguration entwickelt womit die Performance so gut wie gar nicht einbricht (immermal ganz kurze GC-Operationen und wenig Daten in der Old-Generation)


oldsqldma schrieb:
Das Java nach einigen Minuten das beste Kompilat gefunden hat, ist m.E. einfach ein Problem von Java.
Java wurde halt nie als extrem schnelle Sprache gebaut
wie ich vorher gesagt habe, würde ich es nicht als Problem sondern als Designentscheidung beschreiben. Ein C(++)-Programm muss jeweils für die CPU-Architektur und ggf. Betriebssystem neu kompiliert werden, bei Java ging man eben einen anderen Weg, dass der Bytecode erstmal ganz schnell in Maschinencode kompiliert wird (ähnlich gcc -O0) und dann immerwieder während der Laufzeit optimiert und der Anführung angepasst wird (dynamische Optimierung).
Im Grunde ist das, was als "nicht schnell" bezeichnet wird, also die Cross-Platform-Designenscheidung, würde man die Sprache Java (nicht die Platform ;)) so nativ kompilieren wie C(++) wären die Unterschiede wahrscheinlich geringer.


oldsqldma schrieb:
Wenn ich einen Treiber schreiben will, bleibt mir allerdings keine andere Wahl, da hab ich "kaum" Auswahl.
C, C++, D und einige Randsprachen, wofür es kaum Experten gibt.
natürlich, da wird dir auch keiner wiedersprechen, auf Grund des Low-Levels sind dies eben "General Purpose"-Sprachen mit denen man alles machen kann, ohne Frage.


oldsqldma schrieb:
PS: Schrecklichstes Java Performence ist wohl das Spiel "Minecraft", was nur so mit Ressourcen um sich schmeißt, total unnötig. Das ganze mit XNA z.B. würde kaum Performence Probleme ergeben.
Joa, und aus solchen Gründen (und Vuze) hat Java dieses miserabele Bild. Schlampig programmierte Software, die Ressourcen ohne Ende nutzt und somit auf Java abfärbt.
Genauso muss man aber auch sagen, dass diese Entwickler in einer anderen Sprache genau den gleichen Mist gebaut hätten und es immernoch ineffizient wäre.
Die Programmierer sind i.R. an sowas Schuld, nicht die Plattform.
Das Einstiegslevel in Sprachen wie Java, PHP, Python usw ist eben so gering, wodurch jeder schnelle Erfolge zielen können, egal ob die Software gut oder schlecht ist.
 
Ich würd ja c# empfehlen ist wie ich finde am verständlichsten und ist schnell zu erlernen.( Hab vor 1 Woche damit angefangen un klappt supa:D)
 
Auch wenn C# wirklich gut ist, kann ein Programmieranfänger nach 1 Woche doch keine Empfehlung aussprechen :rolleyes:
Du hast mit der Zeit ja noch nicht einmal an der Oberfläche der Sprache gekratzt.
 
Na dann wärs aber auch hilfreich gewesen zu verraten, womit du C# lernst! Link doch ein besonders empfehlenswertes Tutorial/Buch/Skript.
Gerade wenn man komplett neu ist in dem Bereich ist, ist es nicht leicht irgendwas zu finden, womit man die Sprache wirklich gut von 0 auf lernen kann
 
Wenn man wirklich ernsthaft programmieren will (also nicht mal kurz mit VB mal schnell ne GUI zusammen klicken) gibt's als erste Programmiersprache nur eine: C

Warum?

Von C stammen fast alle modernen Sprachen ab (C++, C#, Java, PHP, Perl, ...) dadurch, wenn man mal die Grundzüge von C erlernt hat kommt man in "höheren" Programmiersprachen sehr leicht rein.
C wird gerne als "High-Level-Asembler" verspottet, nicht ganz zu unrecht. Da aber in C vieles "von Hand" erledigt werden muss und C viel näher am System dran ist als neue Sprachen lernt man sehr viel. (Was sind Heap und Stack? Wie sind Gleitkommazahlen aufgebaut, usw, usw).
Ich meine jetzt nicht das man gleich zum C-Guru mutiert, aber ein gesunder Grundstock an C-Wissen ist IMHO DIE Basis um sich ernsthaft mit Programmierung zu beschäftigen.

Allerdings ist die Motivation sich mit C (gerade für Anfänger) zu beschäftigen nicht besonders hoch. Der Anfänger will ja gleich eine hübsche Windows-Fenster haben, aber GUI-Programmierung mit C tun sich heutzutage aber glaube ich nur masochistisch veranlagte Personen an ;).
 
http://openbook.galileocomputing.de/visual_csharp/ das ist eig. ganz passabel, wie die meisten Bücher von Galileo Press... vom kauf rat ich aber ab. Ein gedrucktes Buch releichtert das lernen im gegnsatz zu on line tutorials, also empfehle ich das hier: http://www.galileocomputing.de/1783?GPP=opcsharp

zum Thema:

Ich setzte auf die C Sprachen, da man licht zwischen ihnen 'hin und her springen' kann;
ich hab auch mi C++ angefanngen und später zu C# gewechselt, da man damit viel besser unter .NET arbeiten kann als C++. Außerdem ist C# etwas übersichtlicher und der Fackt, dass alles über Klassen erarbeitet wird erleichtert es ungemein ... im Gegensatz zu C++, welches unter .NET zur qual werden kann, auch Visual C++

cheers
 
Marius schrieb:
C++ ist auch sehr leicht, konnte ich mal vor 20 Jahren ganz passabel
:)


Machst Du Witze? ;) Nur um das klarzustellen, C++ ist eine sehr mächtige Sprache und, obwohl ich's eigentlich besser wissen müßte, noch immer mein persönlicher Favorit, aber eins ist es ganz gewiss nicht ... "sehr leicht". Ganz besonders nicht für Einsteiger.

C++ bietet selbst relativ erfahrenen Programmierern unheimlich viele Möglichkeiten, sich selbst in den Fuß zu schießen. Nach 10 Jahren Erfahrung mit C++ halte ich es für nahezu ausgeschlossen, daß ein Neuling auch nur annähernd in der Lage ist, ein halbwegs fehlerfreies Programm in C++ zu schreiben.
 
Zurück
Oben