Seite 1 von 2

Verfasst: Sonntag 23. April 2006, 13:25
von Leonidas
icepacker hat geschrieben:Trotzdem muss man sagen, dass Java in der Anwendungsentwicklung atm sehr populär ist. Es werden viele große Projekte in Java realisiert, welche Sprache also statt Java benutzen?
Was gibt es denn für große Java-Projekte? Ich meine jetzt so Desktop-Programme. Bis auf Eclipse, welches eher für Entwickler ist und Azureus fallen mir wirklich keine großen Sachen ein. Deswegen war es auch nicht nötig, dass ich eine Java VM installiert habe.

icepacker hat geschrieben:C++ oder Python? Ich frage deshalb, weil ich in Python noch nichts Großes geschrieben habe und so auch noch keine Probleme mit Geschwindigkeit (und so etwas) hatte.
Ich nutze Python seit inzwischen 3 Jahren und hatte keine Probleme mit der Performance. Aber die Frage ist eher: was genau willst du machen? Ein Shooter? Eine Warenwirtschaft?
icepacker hat geschrieben:Könnte mir aber vorstellen, dass Java schneller als Python ist!?
Möglich. Hängt aber auch von der benutzten VM ab. Wobei wir aber nicht vergessen sollten, das sowohl Java als auch Python ständig optimiert werden. So wird Python mit jedem Major Release schneller, wenn man den angegebenen Zahlen glauben will.
icepacker hat geschrieben:Auch ist es für mich verwirrend, weil viele Programme die man früher in C++ gemacht hätte jetzt in Java sind, was finden die Leute also an Java, dass sie denken das es die richtige Sprache für ihr Programm wäre?
  1. ich will ein Programm schreiben
  2. mal was anderes als C++ nehmen
  3. was hat eine ähnliche Syntax damit ich mich ja nicht umgewöhnen muss und ist einfacher zu benutzen als C++?
  4. Java
synopia hat geschrieben:@modelnine: Was ist eine VHL-Sprache?
Very High Level.
synopia hat geschrieben:Universitäten, die bisher C++, Pascal oder Modula (ja wirklich, wäre ich ein Jahr jünger, hätte ich Modula an der Uni lernen müssen...) als Programmiersprache gelehrt haben, sind auf Java umgestiegen. Gerade weil es viel der klassischen Programmierparadigmen ziemlich klar umsetzt (OOP).
Viele Leute definieren OOP als genau das, was Java da veranstaltet. Jedoch finde ich, dass Java seine Eigene, teilweise sehr umständliche Version von OOP anzieht.
synopia hat geschrieben:Zudem ist Java getypt, was einige Vorteile mit sich bringt
Python ist auch getypt. Und zwar dynamisch. In Python hat jeder 'Name' einen 'Typ'. Im Gegensatz zu Java kann sich dieser Typ auch zur Laufzeit ändern und es gibt keine explizite Typüberprüfung.
Wobei Typüberprüfung aber kein Duck-Typing ermöglicht, was aber ein tolles Feature von OOP ist, wie ich finde.

Edit: Quote-Autoren korrigiert.

Verfasst: Sonntag 23. April 2006, 13:54
von icepacker
Leonidas hat geschrieben: Was gibt es denn für große Java-Projekte? Ich meine jetzt so Desktop-Programme.
Ok, dann war das vielleicht mein Fehler, ich hatte einfach von Popularität darauf
geschlossen. Quelle: http://www.tiobe.com/tpci.htm
Wenn das nicht der Fall ist, freut es mich um so mehr :wink:
Leonidas hat geschrieben:So wird Python mit jedem Major Release schneller, wenn man den angegebenen Zahlen glauben will.
Das ist natürlich erfreulich zu hören :D

Und, Leonidas, ändere bitte deine letzten beiden Quotes die sind nicht von mir!

lg icepacker

Verfasst: Sonntag 23. April 2006, 15:58
von mq
synopia hat geschrieben:Dazu kommt, das hinter Java eine kommerzielle Firma (Sun) steht. Für Softwarehäuser ist es eben recht riskant, sich auf reine OpenSource Projekte zu stützen. Sie haben keinerlei Garantien, dass es auch in 5 Jahren noch zumindest Securityfixes für z.B. Python geben wird.
Das kann man auch andersrum sehen. Vielleicht nicht unbedingt auf Java bezogen, aber auf Open Source/Closed Source im Allgemeinen. Garantiert eine kommerzielle Firma, dass es in mehreren Jahren noch Bugfixes für ihre Produkte gibt? Was ist, wenn die Firma in ein paar Jahren vielleicht nichtmal mehr besteht? Okay, im Falle Sun ist das nicht wahrscheinlich, aber ich habe oft genug gelesen, dass Leute dieses Argument allgemein gegen Open-Source benutzen, auch wenn hinter dem jeweiligen Closed Source-Konkurrenz-Produkt nur eine sehr kleine Firma steht.
Wenn ein Open Source-Projekt eingestellt wird, kann eine Firma, die die Software benutzt, immer noch den Code nehmen und selber Bugfixes machen. Bei einem Closed Source-Projekt ist das nicht möglich.

Verfasst: Montag 24. April 2006, 08:12
von BlackJack
modelnine hat geschrieben:
BlackJack hat geschrieben:Du must das nicht aus der Sicht sehen, was Java von C++ übernommen hat, sondern wieviel Komplexität es weggelassen hat.
Ich seh's eher aus der Sicht, wieviel Komplexität Java von C++ aus gesehen mitgenommen hat, oder einfach ersatzlos gestrichen hat (siehe zum Beispiel Templates, die durchaus auf der Sprach- und Abstraktionsebene von Java und auch C++ massiv Sinn machen. Java kriegt nur langsam die Funktionalität über allgemeinere Container, die C++ schon lange über Templates hatte, wenn auch Javas Container massivst umständlicher, und ohne die vielgerühmte Typsicherheit zur Compilierzeit auskommen müssen [ändert sich das eigentlich noch irgendwann mal? Das war der Stand von Java 1.4, ich hab keine Ahnung, inwiefern da was anderes geplant ist, besonders um mit C#, was bessere Container-Typen hat, gleichzuziehen]).
Java 1.5 hat jetzt "Generics", d.h. man kann getypte Container benutzen und erstellen. Also zum Beispiel:

Code: Alles auswählen

List<String> names = new ArrayList<String>();
Und dann braucht man nicht mehr explizit casten und hat mehr Typsicherheit.
Sicherlich, automatisches Speichermanagement ist toll (auch wenn's nix neues oder innovatives ist oder war zu der Zeit wo Java entwickelt wurde), alles ist eine Referenz auch (und dieses Paradigma ebensowenig neu oder innovativ war, man siehe nur die vielen ML-Dialekte aus den 80-ern). Aber: wenn ich schon dabei bin eine Sprache auf ein "höheres" Level zu heben (was spätestens dann passiert wenn eine VM dazwischengeschaltet wird, weil auch in C++ kann ich mehr oder weniger automatisches Speichermanagement programmieren), brauch ich nicht bei diesen zwei Dingen aufhören. Dann kann ich sehr viel weitergehen, und die Sprache wirklich zu einer VHL-Sprache machen, siehe Python, siehe Perl, siehe Shell-Skripting, siehe eine ganze Menge andere Sprachen die zu der Zeit entstanden sind wo Java entstanden ist, oder sogar weit davor.
Dann hätte man die Sprache aber nicht mehr "verkaufen" können. Ein Problem war zumindest damals, das alles so ähnlich und nicht viel langsamer als C++ sein musste, damit die C++ Programmierer das überhaupt annehmen. Ich denke das ist auch ein Grund des Verbreitungsgrades von Java, man hat sich an die vorherrschende OOP Sprache gehalten, diese nicht so stark verändert, das C++ Programmierer einen Schreck bekommen, dabei aber viel Komplexität und Fehlerquellen von C++ weggelassen. Das war/ist ein gutes "Verkaufsargument". Wenn ich die Wahl zwischen C++ und Java habe, dann nehme ich Java. Das ist IMHO das kleinere Übel.

Die Java Entwickler wollten halt nicht nur eine bessere OOP Sprache bauen, sondern auch eine die von den Entwicklern und vom Management angenommen wird. Bessere Sprachen gab's natürlich auch damals schon. Nur wollte niemand so etwas "esoterisches" oder akademisches wie SmallTalk oder Eiffel verwenden.

Ausserdem ist Java IMHO ziemlich stark darauf ausgelegt von Werkzeugen bearbeitet zu werden. GUI-Builder, IDEs usw. können die Sprache/den Quelltext sehr gut analysieren und viele automatische Transformationen anbieten. Natürlich zu dem Preis, das die Sprache sehr "gesprächig" und redundant ist. Aber das bekommt man dann auch wieder mit einer IDE in den Griff, die den ganzen Boilerplate-Code generiert. Ich komme bei Python ganz prima mit einem einfachen Texteditor zurecht, aber in Java ist man mit einer entsprechenden IDE einfach viel produktiver.

Ein letzter Vorteil von Java gegenüber C++: Man kann einfacher "Codemonkeys" heranzüchten -- irgendwelche Programmierer, die ohne viel nachzudenken mit einer IDE Standardcode runterhacken können. C++ Programmierer sind in der Ausbildung und im Unterhalt wesentlich kostenintensiver. Die relative Einfachheit und die "Zwangsjacke" in die Java einen steckt, lassen den "Codemonkeys" nicht so viel Freiraum für Fehler.
Darum geht's mir. Und deswegen ist und wird Java für mich auch immer eine der absolut unnötigsten Sprachen bleiben die entwickelt wurden.
Ich denke immer noch es war ein wichtiger Schritt in der Entwicklung und der Akzeptanz. Den Schritt von C++ nach Python hätten nicht so viele gemacht. Zum Beispiel mit dem "Performance"-Argument. Heute sind viele an JVMs gewöhnt und wissen, das die nicht so viel langsamer sind. Das ist mit ein Verdienst von Java.

Verfasst: Montag 24. April 2006, 20:55
von Leonidas
Ohne jetzt groß in die C++ vs Java Diskussion einzugreifen (die ich aber sehr interessant finde und mich freue das es hier sowas gibt), habe ich heute public static Integer foo(Collection<Integer> c) gefunden. Ich habe das Gefühl, dass ich inzwischen ähnliche Probleme mit Java hätte (mit C++ sowieso).

Verfasst: Freitag 5. Mai 2006, 22:32
von solexx
Leonidas hat geschrieben:Python ist auch getypt. Und zwar dynamisch. In Python hat jeder 'Name' einen 'Typ'. Im Gegensatz zu Java kann sich dieser Typ auch zur Laufzeit ändern und es gibt keine explizite Typüberprüfung.
<Nitpick>Naja fast. Die Namen haben nie einen Typ, nur die Objekte. Und der Typ der Objekte ändert sich nicht, aber an einen Namen können Objekte unterschiedlichen Typs gebunden werden.</>
Leonidas hat geschrieben:Wobei Typüberprüfung aber kein Duck-Typing ermöglicht, was aber ein tolles Feature von OOP ist, wie ich finde.
ACK.

Verfasst: Samstag 6. Mai 2006, 12:20
von Leonidas
solexx hat geschrieben:<Nitpick>Naja fast. Die Namen haben nie einen Typ, nur die Objekte. Und der Typ der Objekte ändert sich nicht, aber an einen Namen können Objekte unterschiedlichen Typs gebunden werden.</>
Okay, erwischt ;)

BlackJack hat mal ein hübsches PDF für d.c.l.p gemacht: http://bj.spline.de/download/names'n'objects.pdf (achung, phpBB schrottet den Link).