Vom Problem zum Programm

Gawayn hat gesagt.:
In der Tat. Aber darum geht es ja nicht, denn alle schöne informatische Theorie nützt gar nichts, wenn es niemanden gibt, der in der Lage ist, das ganze auch effizient zu implementieren. Das beklagen doch auch die Firmen: Informatikabsolventen haben schlicht keine Ahnung von Computern. Statt dessen werden sie vollgestopft mit mathematischen Theorien, die für die Praxis entweder viel zu speziell oder viel zu allgemein sind -- je nachdem.

Nein Firmen die Individual Software schreiben (und das ist die grösste Zahl an Softwarefirmen) wollen Porgrammierer die keine Flausen im Kopf haben sondern eine gegebene Aufgabe kosteneffizient umsetzen.
Ob dieser ein Hardware-Crack ist oder nicht und wenn er wollte selber einen Prozessor planen
könnte, ist sowas von Zweitrangig ...

Gawayn hat gesagt.:
Was für ein Design denn? Die Anwendung selber wird sowieso auf dem Reißbrett entworfen, dafür brauche ich keine Programmiersprache.
Oh gott, da hat jemand die Entwicklung der letzten Jahre verschlafen.
Zudem rate mal was "Anwendung auf dem Reissbrett entworten" bedeutet. Genau Softwaredesign, Object Orientiertes Design, UML, MDA

Gawayn hat gesagt.:
Die ist lediglich für die Implementation gut. Ich lerne den Entwurf von Anwendungen nicht deswegen besser oder ich entwerfe meine Anwendungen nicht besser, weil meine Sprache keine Pointer verwendet (wie z.B. Java). Das Gegenteil ist der Fall, denn ich setze mich so über wichtige Hardwareeigenschaften hinweg. In der OOP kann jemand, der keine Ahnung von Hardware hat, schlimme Dinge tun, die nicht auffallen, weil sie immer noch OOP-konform sind.
Die schlimmen Dinge passieren zumeist mit C und C++ und anderen Hardwarenahen Sprachen.
Oder setze mal die Anzahl von BufferOverflows von IIS + Apache gegenüber den anzahl
von Bufferoverflows von Tomcat + Resign gegenüber.
Die Entwicklung von sicherer Software mit C / C++ extremen Masse Zeit & Kostenaufwendig da es sich mit diesen Sprachen viel einfacher in den Schuss schiessen lässt.
Wenn alle Programmierer sich top auskennen würden und keine Fehler machen würden, dann
sähe es anders aus, aber daran zu glauben ist das gleiche wie zu glauben das der Kommunismus
funktionieren kann, das scheitert an einem ganz wesentlichen Punkt, die Schwächen der Menschen.
Demnach ist eine Programmiersprache die einen zu sauberer Programmierung anhält, der richtige
Weg. Java verlangt im Vergleich zu C++ das eine Ausnahme die im aufgerufenen Code erfolgt behandelt wird, C++ überlässt das eher dem Zufall (bzw der Fehlerfreiheit der Programmierer).
Die IT wächst, während früher sich nur wenige Firmen individualsoftware Leisten konnten, geht es
heute in einen Bereich in dem dieser Weg vielen Firmen mehr offen steht. Durch niedrigere Softwarepreise, dank der starkenden Konkurrenz unter Softwareherrstellern, müssen Kosten gesenkt werden. Dies geschieht u.a dadurch das eine Software viel schneller einen Stabilen Grad erreicht. Unabhängige Studien und der Markt ansich bescheinigt Java im durchschitt 50% Entwicklungszeit senkung gegenüber C / C++.
Zumal sehe das auch aus einer anderen Richtung.
Wenn ich einen Logger brauche, so greife ich auf bestehnde Librarys zurück (z.b Commons Logging) denn weshalb sollte ich meine eigene Komponente entwickeln, anstatt diese zu nehmen die seid Jahren entwickelt, gedubbuged und produktiv eingesetzt wird?
Es gibt keinen Grund, ausser mann will sein Projekt aufblähen, oder mann macht es privat und hat Spass daran.
Genauso ist das mit dem Hardwarezugriff, wieso sollte ich selbst dafür verantwortlich sein meine Objecte im Heap zu hinterlegen und wenn nicht mehr benötigt den Destructor aufzurufen?
Nein da nehm ich doch lieber eine Software die dies seid mehr als 10 Jahren explizit weiterentwickelt, debugged und schon weiltweit produktiv mehrere millionen mal eingesetzt wird.
Hier heisst das Zauberwort mit dem mann kosten senken, und stabilere bessere Software schreiben kann, Wiederverwendung.

Gawayn hat gesagt.:
Darum geht es ja nicht. Man soll nicht Assembler lernen, um damit zu programmieren, sondern um zu erfahren, wie ein Computer funktioniert. Genausowenig soll man C lernen, weil das "die beste Sprache" sei oder so.

Wer Assembler lernen will um zu wissen wie Computer funktionieren der soll das tun. Von nöten ist es nicht, es gab Rechner schon bevor es Assembler gab, die Konzepte dieser Rechner sind
zu einem beachtlichen Teil auch noch gültig.
Wer wissen will wie ein Motor funktioniert, wird das sicherlich erfahren wenn er eine Nockenwelle auswechselt, aber er wird genauso viel erfahren wenn er sich ein Buch nimmt, ins Technik Museum geht und sich ein Querschitt eines Motors anschaut und mal am Rädchen dreht was die Nockenwelle in bewegung setzt.
Genauso ist es mit Assembler, Assembler kann helfen zu verstehen wie ein Rechner funktioniert, von nöten ist es aber nicht und mann kommt weniger Aufwendig zu den selben Kentnissen.
Zumal diese Kentnisse nicht in diesem Masse wie ein altgedienter Assembler Programmierer sie kennt von nöten sind.

Gawayn hat gesagt.:
Die ganzen Diskussionen um die beste Programmiersprache sind unsinnig, weil der fähige Informatiker nicht danach fragt, welche Sprache er für einen Job können muss, sondern welchen Job er zu erledigen hat. Java ist eine wunderbare Sache -- aber nur, wenn man weiß, wie sie funktioniert. Sonst werden die nachfolgenden Kollegen u.U. die Hände über dem Kopf zusammenschlagen ob des Schundes, den man da verzapft hat. Dass dieser Schund objektorientiert ist, macht ihn nicht besser.

Richtig, mann muss wissen wie die VM sich verhält. Aber es ist wichtig unterscheiden zu können
ob mann eine Threadsichere Collection braucht oder aber dies nicht notwendig ist. Mann muss wissen das die VM bei:
String a = "ein String";
Strinb b = "ein String";
bei if(a==b) return false;
Mannchmal false und mannchmal true zurückgeben kann und das dies auch Sinn macht, aufgrund der Art wie die Referenzen auf Strings gecached werden.
Er muss wissen welche Vorteile (und wieso ein StringBuilder gegenüber den String hat).
Er muss absolut nicht wissen was ein AX / DX Datenregister ist. Das hat für ihn 0,0 Wert. Ausser er will es aufgrund von Interresse wissen.

Gawayn hat gesagt.:
Und warum das alles? Wem dieses Grundwissen fehlt, das man über Assembler etc. erlangt, der hat Probleme, sich schnell in neue Technologien einzuarbeiten. Und das ist Voraussetzung, um in der IT-Branche mithalten zu können.

Nein das Grundwissen was er benötigt um in der IT-Branche mitzuhalten ist ein ganz anderes. Es geht um Konzepte um Paradigmen wie MVC und MDA.
Es geht verständniss für GridComputing und allgemeine IT Konzepte, es geht um offenheit für neue Errungenenschaften TDD.

Gawayn hat gesagt.:
In der OOP brauche ich ebensoviel Wissen über die Hardware wie sonst auch. Sonst bin ich nicht in der Lage, einen Algorithmus effizient zu entwerfen und zu implementieren. Mathematisch elegante Theorien lassen sich noch lange nicht deswegen auf einem Mikroprozessor effizient implementieren, weil sie elegant sind.

Wieso sollte ich mich hinsetzen und einen Algorythmus schreiben der mir ein Array von Auto Objecten nach der breite sotiert, wenn ich den vorhandenen, massenhaft geprüften sort Algorythmus der J2SE nehmen kann und ihm einen Comporator gebe?
Ich habe damit meinen Algorythmus innerhalb von 20 sekunden implementiert während du dir noch gedanken machst wie er aussehen könnte.
Nachdem du deinen Algorythmus über lange Zeit implementiert und verbessert hast, geht deine
Sotierung 0.001 Sekdunden während meine Sotierung 3 mal langsamer ist und 0.003 Sekunden verschlingt.
Versuch aber mal deinem Chef klar zu machen das er 4 Stunden entwicklungszeit für 0.002 Sekunden Verbesserung bezahlt.

Gawayn hat gesagt.:
Man muss wissen, wie die Hardware funktioniert, um seine Algorithmen effizient entwerfen zu können. Und das ist auch -- oder vielleicht sogar gerade -- in der OOP ein wichtiges Thema, weil die OOP-Prinzipien so manche Performancebremse in die Entwicklung eingeführt haben.

Ja OOP kann hinderlich sein, wenn irgend ein Depp tausende von Objecte instanziert wo es auch
einfach ein Array von integer werten getan hätte. Das sind aber eher jene die sich anstatt damit zu beschäftigen wo Java Nachteile hat, sich lieber mit irgendwelchen Registern rumgeschlagen haben.
 
Die Sprachen

Ich seh das ganze so:

Grundlage ist das Design. Es hilft nix in Assembler einen O(n^2) Algorithmus wahnsinnig schnell zu implementieren wenn es auch einen O(n log n) Algorithmus gibt der das gleiche kann. Wenn ich den dann in Smalltalk (oder Java) implementiere bin ich immer noch schneller.
Also zuerst ein Design das gut wartbar ist, eine schnelle Klasse für die Ausführungsgeschwindigkeit hat und sich am besten noch einfach Refaktorieren läßt. Dieses wird sich während der Implementierung sicher noch ändern weil keiner eigentlich ein einigermaßen komplexes Programm in allen Details durchplanen kann - aber ein paar Grundlegende Gedanken am Anfang verhindern viel Spaghetti-Code.
Als Sprache nimmt man am besten etwas das Design und Refaktorierung gut unterstützt und möglichst viele Aufgaben schon wegnimmt (Räder muss man nicht neu erfinden wenn man keine besonderen braucht).
GUI-Unterstützung ist auch gut bis sehr gut - schliesslich will man ja auch User Ein/Ausgabe (zumindest in den meisten Fällen).
Jetzt lohnt es sich eine Abschätzung für die Geschwindigkeit zu machen (dabei evtl. updates beachten) und eine bzw. mehrere Sprachen wählen die für die jeweiligen (Teil-)Aufgaben die passende Geschwindigkeit besitzen.

ST bietet sich in vielen Programmen an, da es gute Refaktoring-Möglichkeiten besitzt, eine GUI-Bibliothek dabei ist und das Debuggen sensationelle Möglichkeiten besitzt (hab ich noch nirgendwo sonst gesehen - man kann echt alles anschauen/ändern - auch Methoden/Klassen zur Laufzeit).
Was nützt mir eine Applikation in ASM/C zu schreiben, wenn sich dadurch die Entwicklungszeit verdreifacht, die gewonnene Geschwindigkeit aber in der Langsamkeit der Usereingabe untergeht.
(Ähnliches gilt natürlich auch für JAVA)

Anders sieht das ganze dann wieder aus, wenn ein High-End-Produkt geschrieben wird (nein, keine Textverabeitung). Sobald schnell, viele Daten verarbeitet werden müssen, z.B. für 3D-Spiele, hat C sicher die Nase vorn, gespickt mit ein paar ASM-Befehlen (siehe z.B. der 3D-Shooter von Farbrausch in 96kbyte). Aber selbst moderne Blockbuster setzen in Bereichen die nichts mit der Graphik zu tun haben "höher" angesiedelte Programmiersprachen an, z.B. für die AI (>Far Cry mit Lua-Script, Quake mit QuakeC)

Alles hat seine Berechtigung (sieht man vielleicht von Sprachen wie Ugh ab). Aber zum Lernen sollte man erst einmal Versuchen eine Sprache zu lernen die den Blick für wesentliche Konzepte (OO, MVC, Laufzeit von Algorithmen usw.) frei läßt und bei der man sich nicht um low-level "Kram" kümmern muß. Wenn diese Konzepte erstmal verinnerlicht sind, kann man auch gut designte C-Programme schreiben die sich auch von einer anderen Person ohne Probleme lesen lassen und damit wartbar sind.
Assembler lernen ist kein muß mehr in der heutigen Welt, ich finde aber trotzdem man sollte es irgendwann mal anschauen. Man kann trotzdem noch von Assembler lernen.
 
Ich weiss es passt nicht zum Thema .
Aber es regt mich auf :
Sobald einer eine Frage stellt ,welche Progammier Sprache denn nun gelernt werden soll , "battlen" sich immer die gleichen Leute mit ihrer Lieblingsprache und verwirren (ich stelle mir auch die Frage der Sprache , und bei mir ist es so das ich verwirrt werde) Leute die keine Ahnung von der Sprache haben ,durch irgendwelche "(unbrauchbare)Fakten oder die Zukunft .." ,anstatt mal PRO und CONTRA aufzustellen und dann zu sagen "Jung , aufgrund dem was du gesagt hast würde ich dir blub empfehlen ,denn damit sind deine Wünsche erfüllt " .
Vielleicht gibt es mehrere Sprachen um das Themengebiet abzudecken ,das der Threadersteller haben will und sicher hat jeder seine Lieblingssprache , doch sollte man ,zumindest einigermassen,
bei der Sache bleiben und eben nicht das machen was ich oben beschrieben habe(Charakteriesiert durch ellenlange Zitate...).
Genau so schlimm ist es dem Threaderöffnerr davon zu erzählen womit weniger Buffer Overflows(=> Überflüssige Daten) kommen ,denn das war nicht die Absicht seiner Frage.
Denn sonst ,wie bei der Frage um C oder C++ und Java , geht der Threadanfänger verschollen und lässt sich überhaupt nichtmehr blicken.
Sicher kann man auch sehr kontrovers über so ein Thema diskutieren doch sollte man immer das „Ziel“ im Auge behalten.
Daher bitte ich euch es wie der Vorposter zu machen und am besten garnicht zu antworten ,wenn es eh nur darum geht seine Eigene Sprache zu „promoten“.

Wenn daran etwas grob falsch sein sollte ,sagt es mir bitte.
---
Geänderte Version .editiere gerne und alles was nötig ist (aufgrund der Netiquette ,) Bei Fehlern bitte eine PM an mich senden .
 
Im Grunde geht es eh nur um das eine. Jeder will "seine" Programmiersprache als die best hinstellen.

Hier ist zb. die Java-Fraktion recht groß. Dass Java viele viele Nachteile hat bleibt immer verschwiegen bzw. wird durch das Stellen von Gegenfragen schöngeredet.

Dass Assembler mit Java/C# und Co nichts zu tun hat bzw. in eine ganz andere Kategorie fällt ist wieder eine andere Geschichte. Wer Assembler machen will, der soll - Hut ab.

Dass C# nicht plattformunabhängig ist wissen viele. Dass dies aber auch zu 99% nicht notwendig ist streiten viele gerne ab, denn 94% der Rechner laufen unter Windows.

Dass es auch weitere Programmiersprachen gibt, mit denen Software erstellt werden kann, ist auch wieder so eine Geschichte.

Im Grunde kann ich nur sagen, dass jeder das Tool verwenden sollte, mit dem seine Anforderungen abgedeckt werden. Auf einen bestimmten Hype zu hören ist ein Fehler, weil dadurch meist erhöhter Lernaufwand entsteht und der Nutzen nicht im gleichen Masse steigt.

Informieren kann sich jeder selber. So wie Christian immer Java sagen wird, werde ich immer C# sagen. Nicht weil Java schlecht ist, sondern einfach weil mir das großkotzige Getue der Java-Leut auf den Nerv geht. Ich selbst setze Java auch ein, aber nur dort wo es notwendig ist. In einer reinen WIndowsumgebung hat Java nichts zu suchen, weil es gegen C# nicht ankommt. Es ist alles eine Frage der Kosten und des Nutzens.
 
So wie Christian immer Java sagen wird, werde ich immer C# sagen. Nicht weil Java schlecht ist, sondern einfach weil mir das großkotzige Getue der Java-Leut auf den Nerv geht. Ich selbst setze Java auch ein, aber nur dort wo es notwendig ist. In einer reinen WIndowsumgebung hat Java nichts zu suchen, weil es gegen C# nicht ankommt. Es ist alles eine Frage der Kosten und des Nutzens.
Nicht nur eine Frage des Nutzens, sondern auch eine Frage der Aufgabe. Gerade die Plattformunabhängigkeit spricht doch für Java, und wenn eine Anwendung speziell auf diese Plattformunabhängigkeit ausgelegt ist, wieso sollte man diese dann nicht auch auf Windows-Systemen nutzen können?
Andersrum ist es mit .net genauso, nur dass MS sich gegen eine plattformunabhängige Technik aus ihrem Hause sträuben wird.
Warum ist C# besser für Windows? Weil es eine auf Windows zugeschnittene Java-Kopie ist.

Dass Java viele viele Nachteile hat bleibt immer verschwiegen bzw. wird durch das Stellen von Gegenfragen schöngeredet.
Jede Sprache hat einen ganzen Haufen Nachteile, wenn man mal genauer hinsieht. Ob das nun Assembler ist, oder C, oder Java, C# oder PHP oder Ruby oder was auch immer. Je nach Einsatzgebiet hat jede Sprache auch Vorteile. Java ist plattformunabhängig, dafür ist .net sinnvoller für Anwendungen, die nur für Windows gemacht sind. Da tut sich nichts.

Dass dies aber auch zu 99% nicht notwendig ist streiten viele gerne ab, denn 94% der Rechner laufen unter Windows.
Soviel zum Thema "Schönreden von Nachteilen". ;)
Aber 94% sind doch etwas übertrieben, oder?
 
Original geschrieben von KristophS
anstatt mal PRO und CONTRA aufzustellen und dann zu sagen "Jung , aufgrund dem was du gesagt hast würde ich dir blub empfehlen.

Und genau das ist der Punkt der einfach nicht funktioniert.
Denn was der A) als pro sieht, sieht der andere als Contra.

Ich bring jetzt nur mal eines von hunderten Beispielen wie es aussehen könnte, und was noch
mehr verwirrren würde (keine wirklichen Zitate, nur wie es aussehen könnte):

Frage: Java oder C#.net

Norbert Eder: ....
Ein weiterer Vorteil von C# ist das mann nicht gezwungen wird die Exceptions abzufangen.

....

Christian Fein:
Ein weiterer Vorteil von Java ist das mann gezwungen wird aufkommende Exceptions abzufangen, weil ....


Es würden Punkte bei C# negativ stehen was andere wieder zu C# positiv schreiben würden, genauso bei Java. In einer solchen "Streitdiskussion" werden solche Themen irgendwo immer beleuchtet, weil im Endeffekt überschneiden sich Java und C# (um nur diese als Beispiel zu nehmen) so stark in ihrem Einsatzzweck das das es nicht so ist wie bei der Frage ob Perl oder Java bei der mann oft schnell beim Einsatzweck unterscheiden kann.
 
Original geschrieben von Norbert Eder
Im Grunde geht es eh nur um das eine. Jeder will "seine" Programmiersprache als die best hinstellen.

Hier ist zb. die Java-Fraktion recht groß. Dass Java viele viele Nachteile hat bleibt immer verschwiegen bzw. wird durch das Stellen von Gegenfragen schöngeredet.

Dass Assembler mit Java/C# und Co nichts zu tun hat bzw. in eine ganz andere Kategorie fällt ist wieder eine andere Geschichte. Wer Assembler machen will, der soll - Hut ab.

Dass C# nicht plattformunabhängig ist wissen viele. Dass dies aber auch zu 99% nicht notwendig ist streiten viele gerne ab, denn 94% der Rechner laufen unter Windows.

Java und .net sind Middleware Sprachen. Wo laufen Middleware Sprachen zum grössten Teil?
Auf Servern, welches ist das führende Betriebssystem auf dem Server? Mit 60 % UNIX. Dazu kommt noch viel Linux und der Rest ist Windows.
Also ganz klarer Punkt: pro Plattformunabhängigkeit.

Original geschrieben von Norbert Eder

Dass es auch weitere Programmiersprachen gibt, mit denen Software erstellt werden kann, ist auch wieder so eine Geschichte.

Gibt es bei Java genauso. JPython, Bytecode C++ , JRuby und und und. Bei Java hat sich
einfach durchgesetzt das Java die Sprache der Wahl ist für die JVM. Wenn es nicht soviele
VB Programmierer gäb, wäre das selbe bei .net. Denn C++ mit Managed Extensions ist nicht wirklich stark in benutzung, und JScript auch nicht. .net teilt sich doch bei 90% der Projekte
zwischen C# und VB.net auf.

Original geschrieben von Norbert Eder

Informieren kann sich jeder selber. So wie Christian immer Java sagen wird, werde ich immer C# sagen. Nicht weil Java schlecht ist, sondern einfach weil mir das großkotzige Getue der Java-Leut auf den Nerv geht. Ich selbst setze Java auch ein, aber nur dort wo es notwendig ist. In einer reinen WIndowsumgebung hat Java nichts zu suchen, weil es gegen C# nicht ankommt. Es ist alles eine Frage der Kosten und des Nutzens.
Nein weil ich spreche gegen C# an, weil du konsequeter Weise falsche Argumente lieferst, wie eben das die Plattformunabhängigkeit nicht zählt weil (94%) auf Windows laufen. Das ist einerseits falsch weil allein Apple 5% marktaneil besitzt, Linux vor kurzem Apple überholt hat und auf 6% kommt. Wenn mann noch 2 % BSD und UNIX Workstations mit einberechnet kommt mann auf 89% prozent. Dazu berechnet mann noch das es eben nicht nur PCs gibt, sondern es gibt auch noch Handys auf denen Java auf 80% der Mobiltelefone integriert ist, und auch auf sämmtlichen Palms, welche einen höheren Marktanteil haben als Pocket PCs.
Zuästzlich embedded Systeme, ich kann meine Software auf dem PC entwickeln und auf embedded Systems einsetzen, wo der grosse Vorteil von Plattformunabhängigkeit sich zeigt.
Nur weil du eine sehr beschränkte Sicht (PC only) hast, heisst das noch lange nicht das Plattformunabhängigkeit zweitrangig ist.
 
Ein weiterer Vorteil von C# ist das mann nicht gezwungen wird die Exceptions abzufangen.
Ein weiterer Vorteil von Java ist das mann gezwungen wird aufkommende Exceptions abzufangen, weil
Das sind keine Vorteile, sondern bloße Eigenschaften. Programmiersprachen haben keine "Vor-" oder "Nachteile", sondern nur Eigenschaften. Es kommt immer auf den Job an, den man zu erledigen hat, und die Ressourcen, die zur Verfügung stehen.

In der Praxis heißt das: Dass ein 3D-Shooter in Java langsamer läuft als in C, ist kein Nachteil von Java. Es ist aber auch kein Vorteil von Java, dass es plattformunabhängig ist.

(Wer übrigens behauptet, Plattformunabhängigkeit sei ein anzustrebendes Ziel, übersieht, dass das eine Frage der wirtschaftlichen Strategie ist und keine Frage der Informatik. Allein deswegen ist es schon, Entschuldigung, Quatsch, zu behaupten, das sei ein "Vorteil" von Java.)

Gawayn
 
Zuletzt bearbeitet:
Original geschrieben von Gawayn
Das sind keine Vorteile, sondern bloße Eigenschaften. Programmiersprachen haben keine "Vor-" oder "Nachteile", sondern nur Eigenschaften. Es kommt immer auf den Job an, den man zu erledigen hat, und die Ressourcen, die zur Verfügung stehen.

In der Praxis heißt das: Dass ein 3D-Shooter in Java langsamer läuft als in C, ist kein Nachteil von Java. Es ist aber auch kein Vorteil von Java, dass es plattformunabhängig ist.

(Wer übrigens behauptet, Plattformunabhängigkeit sei ein anzustrebendes Ziel, übersieht, dass das eine Frage der wirtschaftlichen Strategie ist und keine Frage der Informatik. Allein deswegen ist es schon, Entschuldigung, Quatsch, zu behaupten, das sei ein "Vorteil" von Java.)

Es geht um den Post von Kristioph der genre Pro und Contra hören will. Ich habe ihm schon gesagt das es wohl nicht möglich ist eine eindeutige definition von Pro und Contra gibt.

Bei Java und C# sieht das anders aus, da wir hier um 2 technologien Sprechen die soziemlich
den selben Einsatzbereich abdecken.
Hier ergeben die Eigenschafften nunmal greifbare Vor und Nachteile.
 
Das sind keine Vorteile, sondern bloße Eigenschaften. Programmiersprachen haben keine "Vor-" oder "Nachteile", sondern nur Eigenschaften. Es kommt immer auf den Job an, den man zu erledigen hat, und die Ressourcen, die zur Verfügung stehen.
Du widersprichst dir damit selbst. Jede Programmiersprache hat im Grunde nur Eigenschaften, das ist soweit schon klar. Allerdings werden daraus durch die jeweilige Aufgabenstellung positive und negative Eigenschaften, wodurch man die Sprache für den Zweck beurteilen kann. Und wenn eine Sprache positive und negative Eigenschaften hat, sind das ganz klar Vor- und Nachteile.

Folgendes Beispiel hast du ja schon selbst geliefert:
In der Praxis heißt das: Dass ein 3D-Shooter in Java langsamer läuft als in C, ist kein Nachteil von Java. Es ist aber auch kein Vorteil von Java, dass es plattformunabhängig ist.
Wer einen 3D-Shooter entwickeln will, wird während der Wahl der Sprache bei Java mehr negative Eigenschaften und Nachteile finden, als bei C. Wenn es darum geht, eine plattformunabhängige Webanwendung zu entwickeln, steht Java besser da.

(Wer übrigens behauptet, Plattformunabhängigkeit sei ein anzustrebendes Ziel, übersieht, dass das eine Frage der wirtschaftlichen Strategie ist und keine Frage der Informatik. Allein deswegen ist es schon, Entschuldigung, Quatsch, zu behaupten, das sei ein "Vorteil" von Java.)
Das kommt auf die Zielsetzung der Anwendung an. Wenn bei der Planung schon feststeht, dass die Anwendung nicht nur für ein System verfügbar sein soll, ist eine Plattformunabhängigkeit definitiv ein anzustrebendes Ziel. Und da Java nunmal eine plattformunabhängige Sprache ist, wird man für plattformunabhängige Anwendungen wahrscheinlich auch zu Java greifen, weil es von sich aus schon die entsprechenden Eigenschaften mitliefert.
Außerdem kann Plattformunabhängigkeit auch in anderen Bereichen sinnvoll sein, da es eine weitere Abstraktionsschicht zwischen Anwender und Hardware setzt und dadurch unter Umständen wirklich böse Fehler vermeiden kann. Dass die Anwendung von einer dazwischengeschalteten VM und nicht von der Hardware ausgeführt wird, kapselt eine Anwendung in einem sicheren Umfeld, in dem ein Benutzer i.d.R. nichts kaputtmachen kann.

Grüße, Dario
 

Neue Beiträge

Zurück