Seite 1 von 2

Gedanken zu Java

Verfasst: Samstag 22. April 2006, 11:52
von synopia
Edit (Leonidas): Diese Szene haben die Monteure aus dem Rohmaterial python vs. ruby (kein trolling) herausgeschnitten. Ab genau diesem Frame. SCNR wegen dem Filmslang.

Hiho...

was für ne Diskussion... wo ist der Sinn, sich über das ein oder andere Feature und den Vorteil selbiger einer Sprache zu streiten? Letztendlich ist das (fast) egal.

Viel wichtiger ist doch das "Drumherum". Damit meine ich, ob es genügend bestehende (nicht-alpha-versionen) von Libraries, Tools und Frameworks gibt. Was nützt die beste Sprache, mit den meisten und tollsten Features, wenn es keine vernünftige Library für Aufgabe XYZ gibt? Klar kann man nun sagen, selbst ist der Mann (die Frau), aber es wird wohl unbestreitbar einige (und nicht wenige) Leute davon abhalten diese neue Sprache zu verwenden. Wodurch eben die Verbreitung nicht so groß ist und nicht so viele Projekte rund um die Sprache entstehen (also ein Teufelskreis).

Hier punktet zweifellos Python.

Eine andere Sache ist die IDE. Ohne eine super IDE wird sich kaum eine Sprache im "Professionellen Umfeld" wirklich verbreiten. Ich kann hier aus eigner Erfahrung sprechen. Ich bin eigentlich ein Java Programmier, aber ich schau mich immer auch nach anderen Sprachen um (eigentlich weniger wegen der Sprachen, viel mehr wegen der teilweise genialen Frameworks, zb. turbogears oder Ruby on Rails). Meine Testprojekte scheitern aber zumeist daran, dass mir DIE perfekte IDE fehlt. Dann geh ich zurück zu Java (mit DER IDE: IntelliJ). Im übrigen sind die meisten der hier angebrachten Argumente für oder wider Python/Ruby völlig irrelevant, wenn man eine gute IDE nutzt. Z.B. die Keyword Argumente. Ja, das ist toll. Aber ne IDE zeigt mir an, welche Argumente die Methode möchte, wozu brauch ich das dann also? Also wozu brauch ich das UNBEDINGT? Am Ende isses einfach nur egal.
Oder das Einrücken. Jede gute IDE rückt den Code (ob nun mit oder ohne Klammern) korrekt ein. Wieso ist es nun besser, dass Einrücken als syntaktisches Element einzuführen? Ich hab mir so-oder-so angewöhnt, Python so zu schreiben:

Code: Alles auswählen

class Foo:
   def bar(self):
      return "xyz"
   # end bar
# end class Foo
Ne gute IDE würde den "end"-Kommentar automatisch setzen.

Ok, genug gelabert.

Achso, mein Fazit?
Es gibt für IntelliJ ein (halbfertiges) Pythonplugin. Deshalb ist Python (derzeit) besser als Ruby, kommt jedoch nicht annähernd an Java ran :-D

bb
ps @clython: was meinst du mit, Ruby ist zu sehr von Perl beeinflusst? Wieso sind Klammern mühsam oder mittelalterlich? (Man stelle sich ein größeres Projekt ohne Klammern vor) Ruby = unverständlich? Ruby = Flickwerk?? Gugg dir ma Ruby an, bevor du so qualifizierte Statements abgibst...

Verfasst: Samstag 22. April 2006, 14:15
von Leonidas
synopia hat geschrieben:was für ne Diskussion... wo ist der Sinn, sich über das ein oder andere Feature und den Vorteil selbiger einer Sprache zu streiten? Letztendlich ist das (fast) egal.
Also ich würde nicht sagen dass es fast egal ist. So wird Python durch die Features die es zum Beispiel gegenüber C hat erst interessant.
synopia hat geschrieben:Viel wichtiger ist doch das "Drumherum". Damit meine ich, ob es genügend bestehende (nicht-alpha-versionen) von Libraries, Tools und Frameworks gibt. Was nützt die beste Sprache, mit den meisten und tollsten Features, wenn es keine vernünftige Library für Aufgabe XYZ gibt? Klar kann man nun sagen, selbst ist der Mann (die Frau), aber es wird wohl unbestreitbar einige (und nicht wenige) Leute davon abhalten diese neue Sprache zu verwenden. Wodurch eben die Verbreitung nicht so groß ist und nicht so viele Projekte rund um die Sprache entstehen (also ein Teufelskreis).
Wie wahr! Jedoch ist es manchmal, manchmal notwendig dass man eine Sprach nutzt die noch nicht viele Bibliotheken hat, damit sie endlich welche bekommt. Sonst würden wir alle C nutzen, welches wirklich eine große, große Menge Bibliotheken hat.
synopia hat geschrieben:Hier punktet zweifellos Python.
Ja, wobei auch Ruby nachzieht. Oder es gibt gleich Hybrid-Libs wie Syck oder BeautifulSoup.
synopia hat geschrieben:Eine andere Sache ist die IDE. Ohne eine super IDE wird sich kaum eine Sprache im "Professionellen Umfeld" wirklich verbreiten. Ich kann hier aus eigner Erfahrung sprechen. Ich bin eigentlich ein Java Programmier, aber ich schau mich immer auch nach anderen Sprachen um (eigentlich weniger wegen der Sprachen, viel mehr wegen der teilweise genialen Frameworks, zb. turbogears oder Ruby on Rails). Meine Testprojekte scheitern aber zumeist daran, dass mir DIE perfekte IDE fehlt.
Ich habe (wirklich) versucht in Python eine IDE zu nutzen. Habe Komodo versucht, habe Wing IDE versucht, habe auch Eclipse versucht. Nur waren alle diese IDEs einfach nur Ballast für mich. Ich brauch den ganzen Kram meist nicht, weil Python so schön einfach ist, dass mit ein flinkter Python-Editor genügt, mit Syntax Highlighting und Einrückung (nichtmal ein Shell-Fenster brauche ich, hab ja meine Konsole, die ich lieber habe). Kein Intellisense, keine Calltips (obwohl mein SciTE diese in kleinem Umfang bietet nutze ich sie nie). Ahcja, Projektmanagement war auch unnötig.
synopia hat geschrieben:Z.B. die Keyword Argumente. Ja, das ist toll. Aber ne IDE zeigt mir an, welche Argumente die Methode möchte, wozu brauch ich das dann also?
Um nicht alle Argumente übergeben zu müssen? Um sie in einer beliebigen reihenfolge uübergeben zu müssen? Wenn ich das habe, wofür brauche ich dann eine IDE? Drehen wir die Frage doch mal so hin.
Wenn ich eine Sprache entwerfe, dann mache ich es doch so, dass ich damit mit einem Editor programmieren kann und nicht eine extra IDE brauche (oder ich mache das wie in Smalltalk). Selbst das Java-SKD von Sun hatte lange keine IDE dabei und auch jetzt gibt es das noch optional ohne IDE.
synopia hat geschrieben:Also wozu brauch ich das UNBEDINGT? Am Ende isses einfach nur egal.
Unbedingt nicht, aber es ist praktisch. Wofür brauche ich Klassen? C hat keine, warum sollte man dann welche brauchen? Oder Funktionen? Assembler hat keine, wofür dann Funktionen? Oder eine angenehme Syntax? Brainfuck hat keine, warum sollten Python oder Ruby dann eine haben?
Es geht doch darum, dass man sich das Entwickelt so gut wie möglich vereinfacht!
synopia hat geschrieben:Oder das Einrücken. Jede gute IDE rückt den Code (ob nun mit oder ohne Klammern) korrekt ein.
Stimmt.. wobei auch nur teilweise. In Java und C kannst du die Klammern ja auch verschieden setzen, also die öffnende zum Beispiel in der gleiche Zeile oder eben darunter. Oder auch ganz anders. Was ist nun korrekt? Insofern hat Ruby auch gut daran getan end zu nutzen und nicht {}, weil man sich den Klammer-Glaubenskrieg spart.
synopia hat geschrieben:Wieso ist es nun besser, dass Einrücken als syntaktisches Element einzuführen?
Wenn die IDE (um mal bei deiner Argumentation zu bleiben) das sowieso schon korrekt einrückt, warum dann noch zusätzlich igendwelche "Begrenzer" a la } oder end einsetzen? Setzt du strichpunkte an das Ende deiner Zeilen, blos weil es geht?
synopia hat geschrieben:Ich hab mir so-oder-so angewöhnt, Python so zu schreiben:

Code: Alles auswählen

class Foo:
   def bar(self):
      return "xyz"
   # end bar
# end class Foo
Warum? Man sieht doch wo die Klasse oder die Funktion endet. Warum beschreibst du denn offensichtliche Sachen?
synopia hat geschrieben:Es gibt für IntelliJ ein (halbfertiges) Pythonplugin. Deshalb ist Python (derzeit) besser als Ruby, kommt jedoch nicht annähernd an Java ran :-D
Womit du nicht Java mit Python oder Python mit Ruby vergleichen hättest, sondern nur die Java-Unterstützung von IntelliJ mit der Python-Unterstützung von IntelleJ mit der (fehlenden) Ruby-Unterstützung von IntelliJ.
synopia hat geschrieben:Wieso sind Klammern mühsam oder mittelalterlich?
Wenn man korrekt einrückt sind Klammern schlicht und einfach unnötig. Der Computer versteht das ohne Klammern und der Mensch hat kein Problem mit vergessenen Klammern (oder IDEs die es gibt oder nicht gibt).
synopia hat geschrieben:(Man stelle sich ein größeres Projekt ohne Klammern vor)
Okay. Stellen wir uns mal was vor. Denken wir an Zope, oder an den Zope-Rewrite Zope 3. Oder an Mailman. Oder Django. Oder Turbogears mit allen seinen "Unterprojekten". Was soll man dann machen, wenn man sich das vorstellt und feststellt, dass es durchaus machbar ist?
synopia hat geschrieben:Ruby = unverständlich? Ruby = Flickwerk??
Ich finde die Syntax von Python klarer, eben There is only one way to do it. Die Ruby-Philosophie ist anders und da werfe ich persönlich Ruby auch gar nicht vor. Es gibt Leute denen das mehr zusagt, und das ist auch gut so.
synopia hat geschrieben:Gugg dir ma Ruby an, bevor du so qualifizierte Statements abgibst...
Schreib mal ein großes Projekt in Python bevor du solche mit vielen Klammer-Vorurteilten gefärbten Behauptungen schreibst. Das meine ich nicht bsöse, aber ich habe die ganze Zeit das Gefühl gehabt, dass du diese häufige Klammer-sind-das-Nonplusultra Einstellung hast. Hatte ich anfangs auch, bis ich gemerkt habe, wie praktisch die Einückungssache war. Allerdings habe ich viel Code geschreiben, bis ich die Genialität davon erfasst habe. Dein einziges Argument im ganzen Post ist: Java ist basser als Ruby/Python weil es Klammern hat. Da ist das Keyword-Argument mindestens genausogut.

Verfasst: Samstag 22. April 2006, 14:37
von mitsuhiko
Nur mal was zur Sache mit der IDE. Ich hab mir gestern wieder Eclipse installiert und mit Freude festgestellt, dass im ubuntu repository ein pydev paket liegt. Also schnell installiert und gestartet.

Ich muss zugeben. Ich war begeistert. er hat automatisch schließende klammern gemacht, from imports automatisch vervollständigt, listen neu eingerückt, textmate ähnliche smarttags, und natürlich eine code autocompletion. Und weißt du was? Ich hab mir sofort wieder meinen vim gestartet. Weil mir nämlich eclipse 107MB RAM reserviert (das zeigt es sogar ganz nett in der taskbar an, da gibs einen knopf für den garbage collector im ubuntu paket) und weil mich die automatische vervollstädnigung genervt hat.
Wenn man self. getippt hat hat er schonmal 0.3 sek gebraucht um mir ein autocompletion feld anzuzeigen, was ich überhaupt nicht wollte.

Jedem das seine, ich liebe eclipse für java. Aber ich verstehe den Sinn hinter einer python ide nicht wirklich.

Verfasst: Samstag 22. April 2006, 14:38
von mq
Übrigens ist Java Müll, weil eric3 Python besser unterstützt.

SCNR

Verfasst: Samstag 22. April 2006, 15:35
von modelnine
synopia hat geschrieben:wo ist der Sinn, sich über das ein oder andere Feature und den Vorteil selbiger einer Sprache zu streiten? Letztendlich ist das (fast) egal. Viel wichtiger ist doch das "Drumherum".
Nein. Das "Drumherum" ist nie wichtiger als die Sprache selbst. Ich kann kaum glauben, dass Du in Brainfuck programmieren wollen würdest, wenn man für Brainfuck die ultimative zahlentheoretische Bibliothek geschrieben hätte. Oder, dass Du in Shell-Skripting programmieren wollen würdest, wenn's für Shell-Skripte die ultimative Bibliothek für P3P-Applikationen gäbe. Oder, dass Du die Mathematica Skript-Sprache dazu benutzen wollen würdest, um die ultimative Anwendung zur Steuerung eines virtuellen Servers zu schreiben. Und das könnte man beliebig fortsetzen mit anderen Sprachen.

Jede Sprache hat, allein schon ohne die Bibliotheken, eine gewisse Ausrichtung und Spezialisierung. Das kommt mit den Paradigmen, für die sich eine Sprache entscheidet, das kommt mit den syntaktischen Konstrukten, für die sich eine Sprache entscheidet, das kommt mit sehr viel mehr als der Bibliothek die dahinter steht. So ist zum Beispiel die Mathematica-Skript-Sprache darauf ausgerichtet, mathematische Formeln/Berechnungen einfach darzustellen, während Shell-Skriptsprachen darauf ausgerichtet sind, eine schier unerschöpfliche Anzahl von möglichen Verknüpfungsmöglichkeiten "primitiver" Programme anzubieten, und mit einigen einfachen Kontrollflußmöglichkeiten zu kombinieren. Genauso hat Brainfuck seinen "Sinn und Zweck," über den wir hier nicht diskutieren müssen.

Python hat viele Paradigmen und syntaktische Konstrukte aus anderen Sprachen übernommen, und diese so gemischt, dass daraus etwas einmaliges herausgekommen ist. (ist außerdem gestern ein halbwegs interessanter Thread auf c.l.p draus geworden aus genau dieser Diskussion) Das ist mit ein Grund, warum man Python (genauso wie andere Sprachen) als eine Allround-Sprache beschreiben kann, aber nichtsdestotrotz auch hier wieder aufpassen muß, in welcher Gewichtung welches Paradigma eingeführt wurde; genau das macht eine Programmiersprache nämlich einmalig.

Nachdem die Syntax und Struktur einer Programmiersprache dem Aufgabenfeld angepasst ist, kann man dann über Bibliotheken reden. Zum Beispiel wäre Mathematica ohne die mathematischen Bibliotheken dahinter sicherlich keinen Pfifferling wert, aber erst durch die Syntax der Skriptsprache wird die Bibliothek brauchbar. Das bedingt sich immer gegenseitig.
synopia hat geschrieben:Damit meine ich, ob es genügend bestehende (nicht-alpha-versionen) von Libraries, Tools und Frameworks gibt. Was nützt die beste Sprache, mit den meisten und tollsten Features, wenn es keine vernünftige Library für Aufgabe XYZ gibt? Klar kann man nun sagen, selbst ist der Mann (die Frau), aber es wird wohl unbestreitbar einige (und nicht wenige) Leute davon abhalten diese neue Sprache zu verwenden. Wodurch eben die Verbreitung nicht so groß ist und nicht so viele Projekte rund um die Sprache entstehen (also ein Teufelskreis).
Auch das ist ehrlich gesagt nicht nachvollziehbar für mich. Eine Sprache ist (und bleibt) nur solange gut, wie intelligente und vor allen Dingen eigenverantwortlich denkende Köpfe diese benutzen. Wenn jemand eine Sprache aufgrund Ihres Paradigmas auswählt (was zum Beispiel in meinem Fall bei Python geschehen ist), dann wird er auch bereit sein, sich die Arbeit zu machen, Dinge die nicht standardmäßig mit Python mitkommen zu implementieren, und in der heutigen Zeit von OSS diese auch als OSS zu veröffentlichen.

Eine Sprache wählt man wegen des Paradigmas aus, weil man sich eben jene Entwicklungsarbeit sparen will, die mit schwierigen Konstrukten, niedriger Ebene, umständlicher Implementierung (schon mal einen Top-Down-Parser von Hand in Python geschrieben? Prolog ist da viel toller), oder ähnlichen Dingen einherkommt. Und, ehrlich gesagt, war das für mich in jedem Auftrag den ich bearbeitet hab, wichtiger, als mich anzupassen und meinen Kopf auszuschalten. Selbst wenn ich in Python etwas mehr implementieren mußte (in den seltensten Fällen), so hatte ich immer doch noch den Vorteil, dass der Code den ich geschrieben hatte mit meinen internen Paradigmen kompatibel war, und ich mich nicht auf etwas einschießen musste, was meinem inneren Denken völlig orthogonal läuft. Und, seltsamerweise, ist meißtens Code den ich schreibe auch mit den inneren Paradigmen von anderen Menschen die Python einsetzen kompatibel. Ich kann mich noch stark dran erinnern, dass genau das während meiner Zeit als CPAN-Contributor eigentlich nie der Fall war. (kann es sein, dass das eine sprachinhärente Eigenschaft ist? Für mich ein deutliches ja)

Den Teufelskreis, den Du beschreibst, ergibt sich nur bei den Programmiersprachen, zu denen Programmierer gezwungen werden. Wenn ich Java schreiben müsste und xyz nicht implementiert ist, wäre es für mich ein Gräuel, diese Funktionalität nachzuimplementieren. Ich gehe lieber als Chef los, kaufe eine halbwegs bescheiden programmierte Fassung einer Classlib irgendwo, benutze die, verstehe nicht was da läuft, kann Fehler nicht korrigieren, und komme so in einen Teufelskreis. Warum wird Java dann so gepusht? Weil's ein marketing hype ist. Sonst wegen nichts. Man muß Java können, selbst wenn die Standardbibliothek scheiße und eingeschränkt ist (hier schon mal ein kleiner Verweis auf das IntelliJ, aber dazu später), man kauft andere Dinge hinzu, die genauso von Programmierern geschrieben ist die eigentlich keinen Bock haben, aber leben müssen, und wurstelt vor sich hin.

Dieses Phänomen hab ich mit Python noch nie gesehen. Python macht Spaß, zumindest einem Menschen, der halbwegs gerne intelligent denken mag, und Programmieren auch ein bisschen als Hobby, und nicht nur als Geldscheisserle ansieht. Auch hier wieder: das hat nix mit der Standardbibliothek zu tun, sondern mit dem Gefühl, dass die Sprache mir vermittelt. Muß es inhärent eklig und schwer sein zu programmieren?

Genau dieses Gefühl (eklig und schwer) wird über die Paradigmen und die Syntax mitvermittelt, sogar zum großen Teil. Zum Beispiel Perl: sieht aus wie Line-Noise, liest sich wie Line-Noise, verkauft sich wie Line-Noise. Hatte genauso wie Java einen marketing-hype unter Webentwicklern in den 90-ern, und wurstelt mittlerweilen, nachdem viele halb-intelligente Entwickler abgezogen sind (zu Rails, was genauso ein marketing hype ist), nur noch vor sich hin, oder wird von frustrierten System-Betreuern irgendwie gewartet, die sich wohl oder übel damit auseinandersetzen müssen.
Eine andere Sache ist die IDE. Ohne eine super IDE wird sich kaum eine Sprache im "Professionellen Umfeld" wirklich verbreiten. Ich kann hier aus eigner Erfahrung sprechen. Ich bin eigentlich ein Java Programmier, aber ich schau mich immer auch nach anderen Sprachen um (eigentlich weniger wegen der Sprachen, viel mehr wegen der teilweise genialen Frameworks, zb. turbogears oder Ruby on Rails). Meine Testprojekte scheitern aber zumeist daran, dass mir DIE perfekte IDE fehlt. Dann geh ich zurück zu Java (mit DER IDE: IntelliJ). Im übrigen sind die meisten der hier angebrachten Argumente für oder wider Python/Ruby völlig irrelevant, wenn man eine gute IDE nutzt. Z.B. die Keyword Argumente. Ja, das ist toll. Aber ne IDE zeigt mir an, welche Argumente die Methode möchte, wozu brauch ich das dann also? Also wozu brauch ich das UNBEDINGT? Am Ende isses einfach nur egal.
Ich hab vorhin schon gesagt, dass ich hierzu umbedingt noch was sagen wollte: warum braucht man bei Java oder irgendeiner anderen Sprache sowas wie IntelliJ, damit man überhaupt irgendwie produktiv arbeiten kann? Viele der verfügbaren Bibliotheken verfolgen keine Standardparadigmen, und da (Basis-)Java eben nicht über High-Level-Datentypen verfügt, kocht hier wirklich jeder sein absolut eigenes Süppchen.

Ich denk da zum Beispiel an den Fall einer Liste von Vorname-Nachname Paaren. Wie übergebe ich das? Eine Funktion benutzt dazu einen Vektor von Vektoren, eine andere zwei Vektoren, eine dritte was ganz anderes (wie zum Beispiel einen Zeiger auf das erste Element, und die Länge, oder was auch immer). Java hat eben, dadurch dass sich die Syntax und Semantik der Grundsprache nicht mehr oder weniger direkt ergeben, eine unüberschaubare Vielfalt von Konventionen entwickelt, gerade bei Erweiterungsmodulen. Ohne, dass ich da irgendwie nachgucken kann welche Methode jetzt was von mir erwartet, und wie die Methode heißt (ich hab noch gar nicht darüber gesprochen, dass sich auch keiner an Namenskonventionen hält, und sowas wie Introspektion in Java immer noch verdammt neu ist), kann ich einen Scheißdreck mit dem vorprogrammierten Etwas anfangen. Also brauche ich eine Krücke wie IntelliJ, um mir die Arbeit einfacher zu machen.

Nimm Python: um die obige Datenstruktur darzustellen gibts in Python genau eine vernünftige Sache: eine Liste von Tupeln, oder auch eine Liste von Listen. Beide verhalten sich als iterierbare Container (die die Methode die aufgerufen wird ausliest) verdammt gleich; sprich, wenn irgendwo draufsteht dass eine Methode eine Liste von Vornamen und Nachnamen erwartet, kann ich davon ausgehen, dass diese Methode als Datum genau jene Datenstruktur nimmt, die ich erstellen wollte. Ohne, dass ich IntelliJ bemühen müsste um mir zu sagen, wie genau jetzt die Methode die Parameter erwartet. Das kann mir nämlich auch die integrierte Dokumentation sagen. Oder aber der interaktive Interpreter über Introspektion. Oder ein kurzer Blick in die Quellen, wenn's denn sein muß. Denn die hab ich bei Python im Normalfall immer dabei, bei Java in den seltensten Fällen.

Um jetzt auf dein letztes Argument zu kommen:
Jede gute IDE rückt den Code (ob nun mit oder ohne Klammern) korrekt ein. Wieso ist es nun besser, dass Einrücken als syntaktisches Element einzuführen?
Diese Diskussion brauchen wir nicht zu führen. Einrückung als stilistisches Mittel zur Formatierung von Code kennt mittlerweilen jeder, denke und hoffe ich. Einrückung als Mittel zur Blockformatierung gibts prinzipiell nur in Python (was die größeren Sprachen angeht). Sag mir mal bitte, was da der große Unterschied ist. Einrückung wird sowieso bei jedem selbstrespektierenden Programmierer gemacht (und zwar, man höre und staune, blockweise!), warum soll die Programmiersprache meine Einrückung nicht auswerten? Und, wenn Du jetzt mit dem Argument kommst, dass es nach zwei Seiten Code nicht mehr nachzuvollziehen ist wo ein Block anfängt und wo er aufhört, dann kann ich dazu nur sagen: überleg Dir, ob Du in Python wirklich Funktionen schreiben willst, die zwei Seiten lang sind. Dass man das in Java muß ist mir klar, denn die Programmiersprache erlaubt nichts kürzeres, wenn die Funktion tatsächlich etwas machen soll. In Python kann ich meinen Code aber, wenn ich denn ein bisschen Ahnung von Software-Design habe, immer in vernünftig große Blöcke aufteilen, die eben auf eine Bildschirmseite passen, und ich so (im Sinne der Einrückung) visuell nachvollziehen kann, wie der Kontrollfluß meiner Methode ist. Genauso wie's sein soll. Genauso, was mir Einrückung sagen soll.

So. Das reicht erst mal wieder.

Bevor mir irgendwer Überheblichkeit (wegen meines gebrauchs der Worte intelligent und halb-intelligent) vorwirft, so will ich einfach nur in den Raum werfen, dass es wirklich so ist, dass es sehr, sehr viele Leute gibt, die eine Programmiersprache nicht lernen weil diese sie anspricht, sondern weil die Programmiersprache ein erzwungenes Kriterium ist um einen Job zu bekommen. Und diese Leute programmieren nicht intelligent. Dazu braucht man nur ab und an mal auf "The Daily WTF" zu gucken. Und: wer zu dieser Klasse gehört, kann sich auch ruhig angesprochen fühlen wenn ich sage, dass er nicht intelligent programmiert.

Verfasst: Samstag 22. April 2006, 21:29
von modelnine
Bevor irgendjemand sagt, dass ich eine Einzelmeinung vertrete: bereits Ende 2004 hat ein (in Python-Kreisen ziemlich bekannter) Philip J. Eby einen Blog-Artikel über genau das geschrieben, was ich auch in meinem Monsterbeitrag geschrieben habe:

http://dirtsimple.org/2004/12/python-is-not-java.html

Lustig. Ich kannte seine Meinung nicht, er meine sicherlich nicht (weil ich die heute zum ersten mal so deutlich geschrieben habe), aber irgendwie sind wir uns relativ nah im Geiste (zumindest was diesen Artikelinhalt angeht, mit seinem anderen Artikel unter http://dirtsimple.org/2004/12/java-is-n ... ither.html habe ich ehrlich gesagt einige Probleme). Das ist aber auf jeden Fall ein Beispiel dafür, was ich mit dem "impliziten" Verständnis unter Python-Programmierern meinte.

Und: bevor mir irgendjemand Einseitigkeit vorwirft: natürlich tendiere ich massiv zu Python. Und natürlich mache ich Java in einigen Dingen ungerechterweise nieder.

Nur, unabhängig davon was Java kann oder auch nicht, bleibe ich für mich persönlich dabei, dass Java einfach ein absolut unnötiger Kropf ist, der in den 90'ern bei Sun nicht entwickelt wurde weil sie eine Sprache schreiben wollten die toll ist und die Menschheit weiterbringt, sondern weil sie eine Monopolstellung auf eine VM und eine Programmierumgebung entwickeln wollten (siehe Microsoft mit .NET; das ist mit Sicherheit auch nicht aus Gutmütigkeit oder Wohlwollen gegenüber Anwendern anderer Plattformen entstanden).

Weiterhin: die Sprachfeatures die Java anbietet sind nicht neu (alles andere als das, wurde Java nicht auch damit beworben, dass es eine "Ähnlichkeit" zur C++-Syntax hat?).

Die (relative) Plattformunabhängigkeit ist nicht neu (alles andere als das, schon Lisp-Code aus den 60-ern war plattformunabhängig einsetzbar, von den vielen ML-Dialekten aus den 80-ern ganz zu schweigen, und auch C ist [mit gewissen Einschränkungen] plattformunabhängig, außer man heißt Microsoft, und baut seine eigene massiv abweichende Version der POSIX-Spezifikation).

Die vielgerühmten Standards, die Java bereitstellt, sind in den allermeißten Fällen nicht neu oder an Java gebunden.

Was hat Java also geschafft, was zum Beispiel C++ nicht geschafft hätte?

In meinen Augen gar nichts, außer dass eine ganze Menge Geld in Optimierungstechniken (siehe JIT-compiling) gesteckt wurde, die auch für andere Sprachen sinnvoll gewesen wären, nur dass diese Sprachen nicht so gehyped wurden, und dementsprechend nicht das Geld geflossen ist um weitergehende Analysemethoden für den "Zwischencode" der aus diesen Sprachen erzeugt wird zu entwickeln (ja, auch C++/C wird immer in Zwischencode compiliert, der dann erst in Maschinencode vom Compiler übersetzt wird; dieser Zwischencode ist zum Beispiel beim gcc ziemlich plattformunabhängig, deswegen gibts auch so viele Optimierungen die auf fast allen Plattformen angewendet werden können, da sie auf dem Zwischencode arbeiten, und nicht auf dem produzierten Maschinencode).

Dementsprechend mein ganz persönliches Fazit: Java-Paradigmen sind sicherlich für gewisse Arten von Problemen sehr sinnvoll und nützlich (auch wenn sie in den allermeißten Fällen keine Java-Entwicklung sind, auch wenn das alle Java-Verfechter glauben). Aber hätte es deswegen gleich eine neue Sprache sein müssen die da entwickelt wurde, um gewisse Features in eine C++-artige Sprache zu integrieren? Definitiv nicht. Aber, vielleicht bin ich auch einfach nur zu dumm um die Genialität von Java zu verstehen.

PS: wie wärs, wenn ein op mal diesen Thread ins OT transportiert? Mittlerweilen ist er relativ off-topic... ;-)

Verfasst: Samstag 22. April 2006, 23:38
von synopia
Heho, find ich Klasse das hier so ne geniale Diskussion entstanden ist ;)

Ich glaube wir reden hier von 2 verschiedenen Sachen. Mit meiner Antwort wollte ich eigentlich nur sagen, dass die Frage, ob Ruby oder Python besser ist, keinesfalls mit Ruby oder Python beantwortet werden kann. Denn es fehlt einfach das Umfeld.

So muss ich (wegen meiner Ernährung usw ;-)) ein Webprojekt realisieren. Nix dolles, bisschen Kundenverwaltung, bisschen Dokumentenverwaltung und es soll Briefe drucken können. Ich komme wie gesagt aus der Javaecke und hab mir da mal die ganzen Websachen dort Mal zu Gemüte geführt... Furchtbar.. einfach nur stressig.

Also bin ich durch Zufall auf Ruby on Rails und damit auf Ruby gestoßen. Das Ding hat mir auch sehr zugesagt, aber nach einer Weile Arbeit, die ich in einen Prototypen gesteckt habe, bin ich irgendwie nicht wirklich überzeugt gewesen. Mir hat es einfach keinen Spass gemacht, Rubycode zu schreiben.
Darauf bin ich auf Turbogears gestoßen (hab vorher schon einige Pythonskriptchen geschrieben). Auch hier sagt mir das ziemlich zu (bin grad dabei den Prototypen zu turbogearen ;-)). Aber ich vermisse meine IDE. Ich möchte beim Schreiben, in die Klasse, die ich gerade (codetechnisch) benutzte reingucken können. Damit spare ich mir den nervigen Blick in die Dokumentation. So macht man das halt bei Java ;-), denn bei der Arbeit mit irgendwelchen Frameworks gehts halt primär darum, dessen API zu verstehen und zu nutzen.

Genau das ist auto-completion. Ich z.B. tipp "turbogears." und ein Fenster zeigt mir, was dort alles so drin ist, wähl was aus und drück Space. Danach seh ich, was die ausgewählte Methode für Parameter möchte.
Dazu noch ein Syntax-Fehler-Check, der mich im Stile der Rechtsschreibprüfung von OpenOffice auf Fehler direkt beim Tippen hinweist.
Danach drück ich Run und das Progamm startet (fast garantiert ohne lästige Syntaxfehler).

Mein derzeitiger (Python oder Ruby)Arbeitsablauf ist, im Browser/kpdf API lesen, im Editor schreiben (vim ist bisher der beste IMHO!), auf der Commandozeile Pfeil auf drücken, Exception, lesen, Doku...
Find ich irgendwie total stressig...

Naja is halt meine ganz persönliche Meinung.

Damit will ich aber nicht sagen, dass Java nun pauschal besser ist als Ruby oder Python. Sonst wäre ich nicht hier. So gibt es einfach (noch?) keine schicke API für Webanwendungen für Java. Möglicherweise liegt das auch an Schwachstellen in der Sprache selbst.

Naja, ich bleib erstmal am turbogear und damit am python dranne...

Re: Gedanken zu Java

Verfasst: Sonntag 23. April 2006, 01:29
von Clython
synopia hat geschrieben: ps @clython: was meinst du mit, Ruby ist zu sehr von Perl beeinflusst?
Auf die Frage welche Sprache Matz mehr beeinflusst hat, war Perl die Antwort. Das merkt man schon allein an der Auswahl von gewissen syntaktischen Konstrukten.
synopia hat geschrieben:Wieso sind Klammern mühsam oder mittelalterlich? (Man stelle sich ein größeres Projekt ohne Klammern vor)
Die Tatsache, dass man diese eintippen muss und die Blöcke trotzdem noch einrückt (== Zeitverschwendung)? Ich kann mir sehr gut ein Projekt ohne Klammern vorstellen :D
synopia hat geschrieben:Ruby = unverständlich?
Den Satz hast du verhackt. Lies den nochmal genau.
synopia hat geschrieben:Ruby = Flickwerk??
Sorry mein Fehler. Ruby ist ja auch sauber konzipiert worden. Der Kommentar sollte eigentlich gegen Perl gerichtet sein. Missverständliche Wortwahl :oops:

synopia hat geschrieben:Gugg dir ma Ruby an, bevor du so qualifizierte Statements abgibst...
Nachdem ich die ersten 5 Minuten mit Kopfschütteln verbracht habe, hab ichs aufgegeben. Die Sprache ist für mich fast so unbrauchbar wie Perl.

Verfasst: Sonntag 23. April 2006, 07:04
von gerold
synopia hat geschrieben:Aber ich vermisse meine IDE. Ich möchte beim Schreiben, in die Klasse, die ich gerade (codetechnisch) benutzte reingucken können. Damit spare ich mir den nervigen Blick in die Dokumentation.
Hi synopia!

Nimm dir mal einen Tag Zeit und sieh dir WingIDE http://wingware.com/ an. Das ist genau das was du suchst. Das ist derzeit die Python-IDE mit der besten Code-Vervollständigung und einem wunderbaren Source-Assistent, der dir immer die aktuell erwarteten Parameter und Docstrings anzeigt. (Ja, es gibt extreme Unterschiede bei der Qualität der Code-Vervollständigung der einzelnen IDEs.)

Ansonsten verweise ich dich noch auf den Thread http://www.python-forum.de/topic-3544.html in dem einige Editoren und IDEs aufgezeigt werden.

mfg
Gerold
:-)

Verfasst: Sonntag 23. April 2006, 07:39
von BlackJack
modelnine hat geschrieben: Nur, unabhängig davon was Java kann oder auch nicht, bleibe ich für mich persönlich dabei, dass Java einfach ein absolut unnötiger Kropf ist, [...]

Weiterhin: die Sprachfeatures die Java anbietet sind nicht neu (alles andere als das, wurde Java nicht auch damit beworben, dass es eine "Ähnlichkeit" zur C++-Syntax hat?).

[...]

Was hat Java also geschafft, was zum Beispiel C++ nicht geschafft hätte?
Ich mag Java auch nicht (mehr) besonders, aber ich fand/finde es absolut nicht unnötig. Es war IMHO ein guter Schritt von C++ aus gesehen. Du must das nicht aus der Sicht sehen, was Java von C++ übernommen hat, sondern wieviel Komplexität es weggelassen hat. Alleine "alles ist Referenz" und die automatische Speicherverwaltung beseitigen eine ganze Menge Probleme und Fehlerquellen die man mit C++ hatte, um die man sich bei Java keine Gedanken mehr machen muss und sich statt dessen mehr auf das Lösen des eigentlichen Problems konzentrieren kann.

Bei Python geht das dann noch ein bisschen besser als bei Java. :-)

@synopia:

Mit "umständlichen Klammern" ist normalerweise gemeint, das geschweifte und eckige Klammern auf deutschen Tastaturen ziemlich umständlich zu erreichen sind. Zumindest im Vergleich zu Englischen.

Verfasst: Sonntag 23. April 2006, 10:58
von modelnine
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]).

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.

Java hat irgendwo ganz am Anfang beim Redesign aufgehört, und keine mächtige neue Sprache, sondern eine Sprache, die ein bisschen der neuen Zeit angehört, aber möglichst Paradigmen-kompatibel zu den alten Sprachen sein soll, geschaffen. Das ist keine Innovation, das ist aus meiner Sicht, wie ich auch schon sagte, mit Sicherheit von Sun darauf ausgelegt gewesen, Leute an Ihre Umgebung zu binden (man siehe nur die Termini der SCDL unter denen der Java-Quellcode zur Verfügung gestellt wird), da der Code dann eben nur noch mit der Java-IDE/Compiler von ihnen funktioniert.

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.

Verfasst: Sonntag 23. April 2006, 11:13
von Clython
Danke modelnine! :D

Verfasst: Sonntag 23. April 2006, 11:28
von icepacker
modelnine hat geschrieben: 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.
Eigentlich sehe ich das auch so und Java mag ich genauso wenig.

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? 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. Könnte mir
aber vorstellen, dass Java schneller als Python ist!?
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?

lg icepacker

Verfasst: Sonntag 23. April 2006, 12:18
von synopia
@gerold: Danke für den Tipp mit der WingIDE. Sieht vielversprechend aus!
@blackjack: Deswegen nutz ich eine englische Tastatur und Linux, damit komm ich auch an die doofen Umlaute ran, mittels Alt Gr+A/O/U/S
@modelnine: Java5 kennt Generics (sowas wie die C++ Templates), Annotations (Metainformationen an Sprachkonstrukte hängen), einfachere Schleifenkontrukte (foreach item:myList{item.doIt()}, und noch einiges mehr
@modelnine: Was ist eine VHL-Sprache?

Warum so viele Menschen Java nutzen? Java wurde von Sun massiv gehypt. 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). Zudem ist Java getypt, was einige Vorteile mit sich bringt (Compile-time-Fehlermeldungen oder erwartungsgemäß höhere Ausführgeschwindigkeit gegenüber reiner OO-Sprachen (was aber nicht wirklich zutrifft)). So war es für viele Professoren höchstwahrscheinlich recht einfach, von C++ auf Java umzusteigen, da Java im Grunde wie C++ ist, nur eben einfacher und insgesamt besser (zumindest was die Theorie betrifft).

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.

Thema Geschwindigkeit:
Meine bescheidene Meinung dazu ist, es ist für den normalen Anwendungsentwickler (fast) völlig egal, ob "seine" Sprache 10% schneller ist als eine andere Sprache. In einer klassischen Anwendung wartet die Software so oder so 80% der Zeit auf Benutzereingaben. Zudem ist Geschwindigkeit in letzer Zeit ziemlich billig geworden und die meisten Sprachen nutzen VM's oder Interpreter, die sich recht einfach skalieren lassen (auf mehrere Rechner verteilen, etc). Bei Anwendungen, die sehr viel rechnen müssen, lohnt es sich oftmals, nur die Algorithmen in einer "schnellen" Sprache (z.B. C) umzusetzen und das an die eigentliche Software, die mit Java/Python/Ruby/XYZ geschrieben wird, anzubinden.

Entscheidender ist die Entwicklungsgeschwindigkeit. Also wie lange dauert es, Feature XY einzubauen?

Achso, und wenn du modelnine, sagts, dass Java eine der unnötigsten Sprachen ist, die entwickelt wurden, verschließt du dich da nicht etwas der Realität? Immerhin ist es eine der aktuell- verbreitetsten Sprachen...

edit:
Natürlich liegt die Verbreitung von Java nicht ausschliesslich darin begründet, dass dahinter Sun steht. Es war sicherlich auch einfach sehr viel "Glück" (Zufall, was auch immer) dabei. Der richtige Zeitpunkt eben ;-)

Wäre Smalltalk 20 Jahre später erschienen, würden viele Leute wahrscheinlich viel mehr smalltalken.. :-D

Verfasst: Sonntag 23. April 2006, 13:19
von modelnine
Achso, und wenn du modelnine, sagts, dass Java eine der unnötigsten Sprachen ist, die entwickelt wurden, verschließt du dich da nicht etwas der Realität? Immerhin ist es eine der aktuell- verbreitetsten Sprachen...
Nö. Ich verschließe mich der Realität keineswegs, denn ich habe nur gesagt, dass ich Java für eine unnötige Sprache halte, ich habe nicht gesagt, dass es unnötig ist (um eine Anstellung zu finden) Java zu kennen. Das sind zwei völlig verschiedene Welten. Meine Einstellung zu Java hat sozusagen nix mit Ihrer Verbreitung zu tun (wenn sie das hätte gäbs heute mit Sicherheit schon mindestens einen Python-Compiler, und mehr ;-)).

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).