Programmiersprachen Vor-/Nachteile & Vorurteile

  • Themenstarter Themenstarter Schlaflos
  • Beginndatum Beginndatum
Hi pi(), also du darfst diese Zahlen mit dem Faktor nicht zu kritisch sehen. Ich denke, dass dieser Faktor 25 eher im Realzeitbereich zu Stande gekommen ist. Beim Stichwort Realzeit fällt mir noch etwas ein. Ein Blick in die Java RT Extensions lohnt sich. Mit den RT Erweiterungen kann man Embedded Java praktizieren. Die Erweiterungen bieten alles, was der RT Betrieb benötigt, bis hin zur Vermeidung von Prioritäteniversion und dem Zugriff auf HW, ohne dabei auf JNI und C-Code zurückzugreifen. Die RTler, wissen, was ich meine.

pi(), wenn du C++ lernen möchtest, dann ist es als Java Programmierer nicht so das Problem, wobei ich es eben umgekehrt kennen gelernt habe, also erst C dann C++ und dann Java. Die Syntax ist doch angenehm ähnlich aber die Konzepte unterscheiden sich.

Bedenke jedoch, falls du die Visualisierung deiner Ergebnisse mit einer schönen Oberfläche anstrebst und keine Lust hast, Oberflächenprogrammierung mit C++ zu lernen (sehr komplex), dann würde ich bei Java bleiben und du kannst deine Programme auch gleich als Applets coden und die Ergebnisse mit Diagrammen über das Web präsentieren (nur so als kleine Idee).

LG
 
Hey!Hab mich für C entschieden.Hab heute begonnen es zu lernen.Bin voll davon überzeugt-

Compiliert
Schnell

-einfach klasse
Kein Vergleich mit Java(in Sachen Geschwindigkeit).Werd jetzt alle komplizierteren Berechnungen in C und alles andere in Java machen.C ist einfach sauschnell und Java einfach sehr Entwricklerfreundlich.

Danke an alle, die geholfen haben.

pi()
 
Ich hab vor fünf Jahren den Umstieg von QuickBasic 4.5 / Windows 95 (ja, ich weiß, bitte...) nach C / Linux gemacht. Das war zwar hart, aber letztendlich die richtige Entscheidung. Zu C und Konsorten ist denke ich alles gesagt, deshalb fasse ich mal meine Meinung zu Java und anderen VM Sprachen zusammen:

Wir kennen Moore's Gesetz, das besagt, dass sich die Geschwindigkeit von Computern alle 18 Monate verdoppelt. Das ist mehr oder weniger richtig, wenn man von Größen wie Anweisungen pro Sekunde ausgeht. Tatsächlich ist es doch aber so, dass die Ausführungsgeschwindigkeit von Programmen stagniert. Beispiel: Ohne es ausprobiert zu haben, ist ein DOS-Texteditor auf einem 386
DX wohl genauso schnell wie ein Java-Editor auf Windows Vista, wenn nicht sogar schneller (ein schlechtes Beispiel, was meine Idee aber gut verdeutlicht). Möglicherweise sind wir irgendwann an dem Punkt angelangt, wo wir aufwendige Computerspiele in VMs fahren können. Damit haben wir aber in Sachen Geschwindigkeit nichts gewonnen. Der einzige Vorteil liegt dann wohl beim Programmierer, denn die Entwicklung in Java ist wohl einfacher als in C oder einer anderen Sprache, die direkt in Maschinencode übersetzt wird.

Das ist der Grund, warum ich Java oder .NET Sprachen nicht besonders mag. Es wird einfach ein unheimlicher Overhead erzeugt, der letztendlich keine Vorteile bringt. Auf die Weise werden wir einfach nie in den Genuss von z.B. 2.4 GHz mit 4096 MB RAM kommen, weil blöde 60 MHz mit 16 MB RAM letztendlich das gleiche liefern.
 
Will auch mal meinen Senf dazugeben. Also....

... was mich doch immer wieder erstaunt, ist, dass es bei sowas immer um C++, Java, C# und weiß der Geier was geht (Delphi, VB usw...). All diesen Sprachen liegen dieselben Prinzipien zugrunde. Es geht nicht so sehr darum ob jetzt jemand in C++ oder Java programmiert, es geht vielmehr darum, dass er die Konzepte der modernen Programmierung, z.B. OOP, Design Patterns, oder auch viele andere Dinge beherrscht. Es geht darum dass man weiß wie man komplexe Softwareprogramme aufbaut. Die Sprache ist da nur Mittel zum Zweck. Java bietet halt meinetwegen sowas wie einen Garbage-Collector was einem die Speicherverwaltung abnimmt. C++ eben nicht. Das macht Java z.B. zu einer einfach benutzbareren Sprache. Aber ist das wirklich so eiin großer Unterschied? (Übrigens: es gibt auch sowas wie GrabageCollectoren für C++). Gibt natürlich noch einige weitere Unterschiede, aber wirklich groß sind die letztendlich nicht.
Wenn ich ein Softwareprojekt realisieren muss, dann schaue ich eben, was für dieses Projekt besonders wichtig ist. Soll es z.B. nur ein kleines Tool mit einer GUI sein, dann werde ich wohl eher etwas wie Java nehmen, da mir da schon viel bereit gestellt wird, so dass ich im Prinzip doch schneller zum Ziel komme. Will ich aber z.B. etwas im Bildverabeitungsbereich entwickeln, dann werde ich wohl eher zu C++ tendieren, da ich hier mit C++ eher besser fahre, als z.B. Java (fängt ja schon mit den Datentypen an, Java kennt z.B. kein unsigned int oder sowas).

Und zum Thema Performanz: Es gab auch schon Benchmarks in der c't, wonach Visual Basic schneller als C++ war/ist. Das lag z.B. einfach auch daran dass bei VB alles per Referenz an funktionen weitergegeben wird, während bei C++ alles standardmäßig per Value weitergegeben wird. Hängt also immer vom Programmierer selbst ab und wie sehr er die verwendetet Sprache beherrscht. Und um auf den Punkt zu kommen: Ungeachtet diverser Benchmarks wird Java bestimmt nie schneller als C++ sein, das ist im Prinzip unmöglich. Von der gefühlten Geschwindigkeiten von tatsächlichen Anwendungen wollen wir erst mal gar nicht reden. Das heißt aber genausowenig dass Java unbedingt viel langsamer ist als C++. Das ist es heutzutage nämlich ganz bestimmt nicht. Mittlerweile sind Sprachen wie C#/Java (nahezu) gleich performant wie C++. Aber performanter als C++ ist sicherlich nicht drinnen. Die JVM ist ja z.B. auch in C++ geschrieben.

Fazit: Nicht die Programmiersprache spielt eine Rolle, sondern der Programmierer selbst und das Anwendungsgebiet macht die Musik. Jeder Sprache hat für bestimmte Anwendungsgebietet ihre Vor- aber auch Nachteile.

Und warum werden hier eigentlich nie Sprachen wie z.B. Prolog oder Lisp erwähnt? Das sind Sprachen die sich auch prinzipiell von den "normalen" prozedualen/objektorientierten unterscheiden.
 
Zum Thema Perfomancevergleich allgemein: meine Birnen sind besser als die Äpfel meines Nachbars.

Zumindest macht dieser Vergleich genausoviel Sinn. Man kann sich höchstens Fragen, ob eine bestimmte Sprache aufgrund ihrer Eigenschaften perfomant(er) umgesetzt werden kann oder grundsätzlich einen höheren Speicherverbraucht hat - Compilervergleiche (und nichts anderes findet hier größtenteils statt) sollte man aber außen vor lassen. Schließlich könnte man ja auch auf die Idee kommen, einen Madelbrot C-Code mit einem alten C 16-Bit Compiler zu kompilieren und eine C++ Version mit Intels Compiler (alternativ: gar einen alten C Interpreter VS. z.B C#) und - erstaunt wird man feststellen, dass C++/C# um Faktor 20 schneller ist :rolleyes:

Zum anderen:
Genausowenig wird man inzwischen auch als Anfänger/Fortgeschrittener mit Assembly herauskitzelln können - z.B mit einer 1:1 Umsetzung des Algorithmus (von C++ nach Asm) wohl kaum den Intel C++ Compiler schlagen. Die doch immer noch recht oft anzutreffende Aussage "schreibs in Assembler, dann ist's automatisch schneller" stimmt in dem Sinne schon lange nicht mehr. Es kommt - wie immer (und mehrmals erwähnt) auf die Erfahrung an.
Kenntnisse der Stärken und Schwächen einzelner Sprachen bringen viel mehr "Optimierung" als "ich schreibs mal in Asm". Kenntnisse in Low-Level können sinnvoll sein, um dem Compiler bei der Optimierung keine Steine in den Weg zu legen oder gar mitzuhelfen. Und oft bringt die Wahl der richtigen Algorithmen für bestimmte Aufgaben sowieso 100x mehr ;)



PS: imho sind JITs die "beste" Lösung
Die aktuelle HotSpot-Technologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abhängig von der verwendeten Plattform. Diese Optimierung findet dabei nach und nach statt, so dass der Effekt auftritt, dass Programmteile nach mehrmaliger Abarbeitung schneller werden.
. Auch wenn es heute noch nicht ganz klappen sollte - ein auf einen bestimmten Prozessor abgestimmter Code wird immer schneller sein, als eine "Standardversion". Wobei auch nicht alles, was als "neu" angepriesen wird, wirklich so neu sein muss (bzgl. JIT - siehe AS 400 http://en.wikipedia.org/wiki/AS/400#Instruction_set).
 
Und warum werden hier eigentlich nie Sprachen wie z.B. Prolog oder Lisp erwähnt? Das sind Sprachen die sich auch prinzipiell von den "normalen" prozedualen/objektorientierten unterscheiden.

Weil sie nicht anspruchsvoll genug sind, um erwähnt zu werden :)

Wirklich, kann jeder innerhalb von zweich Wochen extrem gut beherrschen, der auf dem Anwendungsgebiet für Pro/Lisp Programme arbeiten muss. Nach einem Monat Selbsstudium ist jeder in der Lage, medizinische Programme zu schreiben, die an Hand von Merkmalen, die passende Krankheit ermitteln und ähnliche Projekte (Biologie, Psychologie usw.).
 
Das sind halt sehr abstrakte Sprachen, die in ihrem jeweiligen Einsatzgebiet wirklich Spitze sind, weil halt auch mehr oder weniger einfach.
Bei vielen anderen Sprachen bräuchte man viele Schleifen. Auch bei Lex und Yacc zum Beispiel kann man ganz einfach Parser etc schreiben. Diese spucken C-Code aus. Wenn man sich den mal anschaut, fasst man sich auch nur an den Kopf....
Und genau für solche Zwecke gibt es extra Sprachen, die halt wie schon erwähnt sehr abstrakt sind und nicht wirklich zu diesem Thema passen, da man sie nur in bestimmten Zwecken einsetzen kann und nicht allgemein.
 
Original von Dr.Arp
Und warum werden hier eigentlich nie Sprachen wie z.B. Prolog oder Lisp erwähnt? Das sind Sprachen die sich auch prinzipiell von den "normalen" prozedualen/objektorientierten unterscheiden.

Weil sie nicht anspruchsvoll genug sind, um erwähnt zu werden :)

Wirklich, kann jeder innerhalb von zweich Wochen extrem gut beherrschen, der auf dem Anwendungsgebiet für Pro/Lisp Programme arbeiten muss. Nach einem Monat Selbsstudium ist jeder in der Lage, medizinische Programme zu schreiben, die an Hand von Merkmalen, die passende Krankheit ermitteln und ähnliche Projekte (Biologie, Psychologie usw.).

Na wenn du meinst... :rolleyes:
Ich musste mich auch schon mit Prolog befassen und als soo einfach empfand ich es jetzt nicht gerade, aber egal. Kommt natürlich auch drauf an was man machen muss.

Was ich damit eigentlich nur sagen willl, ist, dass die Sprachen die ständig verglichen werden (C++,Java,C#,...) dieselben Paradigmen und Prinzipien benutzen. Natürlich hat jede Sprache ihre eigenen Stärken und Schwächen, aber sie unterscheiden sich eigentlich nicht so grundlegend. Wenn jemand nur C# kann, dann wird ihn das nicht wirklich voran bringen in der heutigen Arbeitswelt...
 
Original von FreeCastle
Wenn jemand nur C# kann, dann wird ihn das nicht wirklich voran bringen in der heutigen Arbeitswelt...
Wobei der Sprung von C# auf Java, relativ gering ist.
In der Arbeitswelt als FIA ist allgemein schlecht wenn man nur eine Sprache kann, meist werden 2-3 oder in extrem fällen gar mehr verlangt.
 
Original von Oi!Alex
Original von FreeCastle
Wenn jemand nur C# kann, dann wird ihn das nicht wirklich voran bringen in der heutigen Arbeitswelt...
Wobei der Sprung von C# auf Java, relativ gering ist.
In der Arbeitswelt als FIA ist allgemein schlecht wenn man nur eine Sprache kann, meist werden 2-3 oder in extrem fällen gar mehr verlangt.

Warum sollte das jemanden nicht in der heutigen Arbeitswelt voran bringen? Wie Oi!Alex schon schrieb, man sollte sowie so mehrere Sprachen können und flexibel sein. Du hättest Deinen Satz besser so formulieren sollen, "Wenn jemand nur eine Sprache kann, dann wird Ihn das nicht wirklich voran bringen....". Wir programmieren unsere Anwendungen nur mit C#.

"Nicht die Sprache muss man können, sondern programmieren!"
 
Original von Oi!Alex
Original von FreeCastle
Wenn jemand nur C# kann, dann wird ihn das nicht wirklich voran bringen in der heutigen Arbeitswelt...
Wobei der Sprung von C# auf Java, relativ gering ist.
.

Ja, das stimmt allerdings. Wer C# kann wird auch mit Java keine Probleme haben, C# ist ja, wenn man so will, erst mal ein Java-Klon. Wobei man aber auch aus einigen Fehlern von Java gelernt hat, und diese gleich vermieden hat.

Naja ich denke man kann grob folgendes zu Sprachen wie C++,Java usw.. sagen:

C++
Vorteile:
- Hohe Flexibilität und Erweiterbarkeit
- Performanz/Effizienz. Für Echtzeitanwendungen gut geeignet. Man hat alles selbst in der Hand (z.B. Speicherverwaltung)
- Etabliert: Viele Programme sind in C/C++ geschrieben. Viele Compiler usw verfügbar
- Hardwarenahe Programmierung gut möglich

Viele Vorteile sind aber gleichzeitig auch Nachteile
Nachteile:
- Vergleichsweise schwerer erlernbar als z.B. Java
- Man muss sich um vieles selbst kümmern, z.B. Speicherverwaltung
- Man ist im Prinzip immer auf Third Party Libraries angewiesen(z.B. GUI), was einem das Leben deutlich erschwert und man nicht so schnell zum Ziel kommt. Jede Bibliothek kocht oft ihr eigenes Süppchen (z.B. bringt fast jede Bibliothek ihre eigene String Klasse mit)
- Standardbibliothek ist zwar vorhanden (STL), aber weitaus weniger umfangreich und ausgereift wie z.b. das JDK

Java
Vorteile:
- Vergleichsweise leicht(er) erlernbar
- Automatische Speicherverwaltung (wobei man das auch als Nachteil empfinden kann)
- Mit dem JDK liegt eine umfangreiche und sehr gute Bibliothek vor. Man hat somit alles aus einem Guss, was maßgeblich zum Erfolg von Java beigetragen hat
- Einfache(re) Fehlerfindung
- Plattformunabhängigkeit (auch wenns da trotzdem mal zu Problemen kommen kann)
- Man kommt allgemein schnell zum Ziel, da man sich durch viele leistungsfähge Frameworks oft auf das Wesentliche konzentrieren kann

Nachteile:
- Vergleichsweise weniger Sprachmittel/Flexibilität als C++, wobei sich das doch sehr in Grenzen hält. Nichts desto Trotz eher ein Nach- als ein Vorteil
- Letztendlich ist man abhängig von einer Firma (Sun)
- Es wird eine Virtuelle Maschine benötigt um Programme ablaufen zu lassen (ok geht auch ohne, aber in der Regel nicht)
- Hardwarenahe Programmierung ist (im Moment) nicht wirklich ein Thema

C#/.NET
Hier gilt im Prinzip dasselbe wie bei Java. Wenn man als Zielsystem Windows für seine Programme anpeilt fährt man hier evtl. besser, da man eine bessere (nativere) Integration erreicht. Dafür erreicht man aber keine wirkliche Plattformunabhängigkeit wie bei Java (ich weiß, dass es so etwas wie Mono gibt, aber das kann man IMHO nicht mit Java vergleichen). Ausserdem würde ich persönlich noch als eher nachteilig empfinden, dass es von MS kommt, und MS IMHO noch unberechenbarer als andere Firmen sind


Was vergessen?
 
Original von dietox
- Man muss sich um vieles selbst kümmern, z.B. Speicherverwaltung
Nicht ganz - Es gibt da noch die Vektor-Typen, die kümmern sich selbst darum :)

Klar, es gibt schon vorgefertigte Container in der STL, wie eben z.B. den Vektor. Aber wenn du z.B. nur ein Objekt einer Klasse dynamisch erstellen willst, dann musst du dich ja trotzdem um das korrekte Löschen vom Heap selbst kümmern. In Java nicht.
Wobei es aber eben auch so Geschichten wie Smart Pointer gibt, so das man auch da drum herum kommt. Wie gesagt, in C++ ist halt sehr viel möglich ;)
 
Original von FreeCastle
Original von Oi!Alex
Original von FreeCastle
Wenn jemand nur C# kann, dann wird ihn das nicht wirklich voran bringen in der heutigen Arbeitswelt...
Wobei der Sprung von C# auf Java, relativ gering ist.
.

Ja, das stimmt allerdings. Wer C# kann wird auch mit Java keine Probleme haben, C# ist ja, wenn man so will, erst mal ein Java-Klon. Wobei man aber auch aus einigen Fehlern von Java gelernt hat, und diese gleich vermieden hat.

Naja ich denke man kann grob folgendes zu Sprachen wie C++,Java usw.. sagen:

C++
Vorteile:
- Hohe Flexibilität und Erweiterbarkeit
- Performanz/Effizienz. Für Echtzeitanwendungen gut geeignet. Man hat alles selbst in der Hand (z.B. Speicherverwaltung)
- Etabliert: Viele Programme sind in C/C++ geschrieben. Viele Compiler usw verfügbar
- Hardwarenahe Programmierung gut möglich

Viele Vorteile sind aber gleichzeitig auch Nachteile
Nachteile:
- Vergleichsweise schwerer erlernbar als z.B. Java
- Man muss sich um vieles selbst kümmern, z.B. Speicherverwaltung
- Man ist im Prinzip immer auf Third Party Libraries angewiesen(z.B. GUI), was einem das Leben deutlich erschwert und man nicht so schnell zum Ziel kommt. Jede Bibliothek kocht oft ihr eigenes Süppchen (z.B. bringt fast jede Bibliothek ihre eigene String Klasse mit)
- Standardbibliothek ist zwar vorhanden (STL), aber weitaus weniger umfangreich und ausgereift wie z.b. das JDK

Java
Vorteile:
- Vergleichsweise leicht(er) erlernbar
- Automatische Speicherverwaltung (wobei man das auch als Nachteil empfinden kann)
- Mit dem JDK liegt eine umfangreiche und sehr gute Bibliothek vor. Man hat somit alles aus einem Guss, was maßgeblich zum Erfolg von Java beigetragen hat
- Einfache(re) Fehlerfindung
- Plattformunabhängigkeit (auch wenns da trotzdem mal zu Problemen kommen kann)
- Man kommt allgemein schnell zum Ziel, da man sich durch viele leistungsfähge Frameworks oft auf das Wesentliche konzentrieren kann

Nachteile:
- Vergleichsweise weniger Sprachmittel/Flexibilität als C++, wobei sich das doch sehr in Grenzen hält. Nichts desto Trotz eher ein Nach- als ein Vorteil
- Letztendlich ist man abhängig von einer Firma (Sun)
- Es wird eine Virtuelle Maschine benötigt um Programme ablaufen zu lassen (ok geht auch ohne, aber in der Regel nicht)
- Hardwarenahe Programmierung ist (im Moment) nicht wirklich ein Thema

C#/.NET
Hier gilt im Prinzip dasselbe wie bei Java. Wenn man als Zielsystem Windows für seine Programme anpeilt fährt man hier evtl. besser, da man eine bessere (nativere) Integration erreicht. Dafür erreicht man aber keine wirkliche Plattformunabhängigkeit wie bei Java (ich weiß, dass es so etwas wie Mono gibt, aber das kann man IMHO nicht mit Java vergleichen). Ausserdem würde ich persönlich noch als eher nachteilig empfinden, dass es von MS kommt, und MS IMHO noch unberechenbarer als andere Firmen sind


Was vergessen?

D vll? Is ja recht neu ;D

Kann schon wer was drüber sagen? :P
 
Und noch eine kleine Anmerkung an alle Themainteressierten:
Im aktuellen iX Juni 2007 ist das Hauptthema die Programmierung von heute, d.h. die Untertitel lauten: "Von C über C++ nach D" und "Die Zukunft von C++". Könnte eventl. interessant sein :)
Persönlich hab ich den Artikel aus Zeitgründen noch nicht gelesen, werde mich aber denke ich mal heute Abend noch dran setzten.
 
Ich persönlich halte D für nichts Besonderes - Werde so schnell nicht darauf umsteigen.
Wobei dies jedoch etwas anderes ist als der Sprung von C zu C++, den ja auch so manch einer gemieden hat. D gibt's schon seit 1999 bloß jetzt ist der große Hype darum.
Die Versprechungen sind immer dieselben "Nachteile von C++ weg, Vorteile hervorheben, neues dazu" - Doch wenn man beispielsweise die Mehrfachvererbung nimmt und sie "entfernt", dann ist das für mich eine "Beschneidung der Möglichkeiten" :)
Ich finde C++ so wie es jetzt ist, natürlich hat die Sprache Schwächen wie "komplizierte" Pointer-Arithmetik/Allgemein Pointer; Speicherverwaltung, doch das alles lässt sich nunmal lösen - Wilde Zeiger lassen sich vermeiden und das delete Keyword gibt's nicht umsonst :P
 
Original von dietox
Ich persönlich halte D für nichts Besonderes - Werde so schnell nicht darauf umsteigen.
Wobei dies jedoch etwas anderes ist als der Sprung von C zu C++, den ja auch so manch einer gemieden hat. D gibt's schon seit 1999 bloß jetzt ist der große Hype darum.
Die Versprechungen sind immer dieselben "Nachteile von C++ weg, Vorteile hervorheben, neues dazu" - Doch wenn man beispielsweise die Mehrfachvererbung nimmt und sie "entfernt", dann ist das für mich eine "Beschneidung der Möglichkeiten" :)
Ich finde C++ so wie es jetzt ist, natürlich hat die Sprache Schwächen wie "komplizierte" Pointer-Arithmetik/Allgemein Pointer; Speicherverwaltung, doch das alles lässt sich nunmal lösen - Wilde Zeiger lassen sich vermeiden und das delete Keyword gibt's nicht umsonst :P

Seh ich ähnlich. Ich würde zudem nicht sagen, dass es einen "Hype" darum gibt, ganz im Gegenteil. Von den offiziellen Entwicklern wird D natürlich in den Himmel gepriesen, aber ansonsten kriegt D eigentlich nicht sonderlich viel Beachtung. Warum auch... Ist, wenn man so will, ein etwas "verbessertes" C++ mit Garbage Collection. Wobei man da drüber streiten kann. Soll halt im Prinzip so ein Mittelding zwischen C++ und Java sein: D.h. ohne virtuelle Maschine, daher nativ, aber dafür z.B. mit Garbage Collection und sonstigen Vereinfachungen.
Ist sicherlich auch nicht uninteressant, aber ich denke nicht dass es sich so richtig durchsetzen wird, da es eben auch an einer richtig guten Bibliohtek wie bei Java mit dem JDK fehlt und Java auf der virtuellen Maschine mitlerweile eben auch sehr performant ist. Ich denke wenn D früher gekommen wäre, hätte es durchaus mehr Potenzial gehabt, aber jetzt wohl nicht mehr.
 
Zurück
Oben