Tiobe-Index, Java, Scala & Co

@Falk : Welche „aktuellen Herausforderungen“ meinst du? (Ich könnte mir einige vorstellen. Und ich finde auch, dass Java einige schmerzhafte Schwächen hat. Aber will jetzt nicht ranten oder spekulieren ;))
@ButAlive : Die Aussagen wie „Java ist das neue COBOL“ liest man immer wieder mal. Ich denke, das ist schwer vergleichbar. In manchen Bereichen hat Java immernoch einen „schlechten Ruf“. („Java? Das ist doch diese langsame, interpretierte Sprache, mit der Studenten lernen, (cr)applets zu entwickeln“).

Allgemein denke ich, dass die Sprache Java schon wegen der Menge des vorhandenen Codes noch eine Weile mitspielen wird. Einen moderneren Nachfolger auszumachen (wie konkret Scala) ist schwierig. Das hängt wohl auch stark davon ab, wie sich die Sprache Java in Zukunft entwickelt. Erste Funktionale häppchen kamen jetzt dazu, das sind erste Schritte. (Manchen geht das zu langsam. Ich finde das aber besser, als das Gegenteil. Wenn mir heute jemand ein Programm gibt, das mit Java 1.1 geschrieben wurde, dann starte ich Eclipse, füge den Code ein, und compiliere das ganze. Die Frage, ob ich es compilieren kann stellt sich gar nicht).

Viel wichtiger als die Sprache Java ist aber das, was man auch meint (oder meinen kann) wenn man von „Java“ redet. Java auch eine Plattform.

Im speziellen wird die Java Virtual Machine sicher die aktivste Zeit der Sprache Java überdauern. Es mag etwas abschweifen, aber: Ich bin fest davon überzeugt, dass es in 3-4 Jahren schon „etwas rückständig“ und in 6-8 Jahren vollkommen antiquiert wirken wird, auf einem Desktop/Server Programmcode für die reale Machine zu übersetzen. Dinge wie GitHub - KhronosGroup/SPIR oder The LLVM Compiler Infrastructure Project zeigen ja, in welche Richtung es geht: Man übersetzt von einer Sprache in eine „intermediate representation“ (IR) und von dieser IR dann für die eigentliche Zielmaschine. (Der Ansatz, von 10 Sprachen für 10 reale Maschinen compilieren zu wollen, und dafür 1010 compiler bauen zu müssen, wirkt für mich heute schon absurd. Warum gibt es nur 2, 3 „richtige“ C-Compiler? Ja, weil es sch***-aufwändig ist, einen optimierenden Compiler zu schreiben. Wenn man stattdessen 10 Compiler baut, die von der Sprache in die IR übersetzen, und 10 Compiler, die von der IR für die Zielmaschine übersetzen, umgeht man das Problem der quadratischen Komplexität, und kann über beide teile getrennt argumentieren)

Tja. Und die einzige „IR“, die heute schon eine wirkliche Marktdurchdringung hat ist: tadaa Der Java Virtual Machine Bytecode.

EDIT: Sicher, die JVM ist in diesem Sinne „veraltet“. Sie hat immerhin schon >20 Jahre auf dem Buckel. Heute würde man vieles anders machen (Array-Indizes auf 32 bit beschränkt? Autsch! Das ist ein echtes Problem!). Aber sie hat einen Vorteil, den andere IRs nicht haben, und die sie (prinzipbedingt) erst in vielen Jahren haben werden: Sie ist time-tested :wink:

Ich meine nicht, dass Java schlecht ist, aber irgendwann wird sie von etwas Neuem überholt. Klar hast du recht mit den Vorteilen der JVM, es ist ein super Stück Software, auch heute noch.

Wenn man überlegt wieso sich Java gegenüber .NET so stark durchsetzten konnte, ist für mich der Grund recht klar - “Write once, run anywhere”. Damit meine ich nicht dass es cool ist, das ich unter Linux ein Swing-Programm schreibe und dann auf Windows ausführe. Sondern damals war es einfach so, dass .NET nur auf Windows lief, Windows nur auf x86-Prozessoren und x86-Prozessoren konnten bis 2002 max. 3 GB RAM adressieren, bisschen wenig so manche Server-Anwendungen.

Java hat auf dem Desktop schon lange verloren, ich denke auch nicht, dass sich daran mit JavaFX groß was ändert. Ob Oracle es schafft auf den Zug “Internet of things” mit JavaME aufzuspringen, weiß ich nicht.

Android hat mit Java als Plattform nichts zu tun. Ich glaube auch ehrlich gesagt nicht, dass google noch lange an Java als Sprache festhalten wird. Ich denke Java wird durch Dart oder etwas ganz neuem abgelöst.

Bleibt also noch der Server-Bereich, und da halte ich es für denkbar, dass in 10 Jahren die Hardware-Architektur vollkommend anders aussieht. Die von Neumann-Architektur wird dieses Jahr 70, da darf sie bald mal in Rente gehen ;). Ob dann die JVM noch passt oder nicht kann keiner sagen.

gegenüber wem? .net?
mit Quellcode a la

        public static int GetSampleSizeInBytes(TimeSpan duration, int sampleRate, AudioChannels channels)
        {
            if (sampleRate < 8000 || sampleRate > 48000)
                throw new ArgumentOutOfRangeException();

            // Reference: http://social.msdn.microsoft.com/Forums/windows/en-US/5a92be69-3b4e-4d92-b1d2-141ef0a50c91/how-to-calculate-duration-of-wave-file-from-its-size?forum=winforms

            var numChannels = (int)channels;

            var sizeInBytes = duration.TotalSeconds * (sampleRate * numChannels * 16f / 8f);

            return (int)sizeInBytes;
        }

ja ziemlich ähnlich, fast eine Marken-Frage :wink:

passiert sowas eigentlich öfters? sollten Entwickler für 10.000de Apps umschulen?
wieviel Macht hat da google eigentlich, wie frei ist das Android-Betriebssystem,
könnten die Leute auch sagen dass sie ihre Tools haben und weitermachen?
sind zentrale Marketplaces betroffen, diese notfalls alternativ betreibbar?

ein Link noch mit paar ähnlichen Statistiken, Stand Februar:
What’s the Best Programming Language to Learn in 2015?

unter Windows sicherlich verbreitet, aber ich dachte eher an Qt und so. Mein letztes Java-Desktop-Programm das ich installiert habe war Intellij außerhalb der Entwickler-Tools schauts schon mau aus, Browser, Office-Programme, Editor, Video-Player, Config-Tools etc. hab ich schon lange nichts mehr gesehen, das in Java programmiert ist.

Ja, Apple macht es doch gerade mit Swift vor.

Wird sicherlich kein harter Cut sein, wenn es kommt.

Google hat sicherlich eine gewisse „Macht“ bei Android. Wenn die eine neue Sprache rausbringen würden, die coole Features hätte, einen kompletten Toolstack dazu und alte Sachen eingebunden werden können, wäre es doch überhaupt kein Problem. Wieso dann bei Java bleiben? Aus Idealismus?

Sehe ich alles ähnlich, ist jedenfalls ein witziges Thema. Irgendwo bei Stackexchange erklärt Odersky auch mal ziemlich genau, wie die sperrigen Teile zustandekommen

  • erst wollte man nur Sachen anreichern, s"…" und “”"…""" und f"…" und “…”.r dann auch noch den “richtigen Rückgabetyp trotz Generics”, etwa in “…”.head, “…”.tail => unter der Haube alles viel komplizierter als es sein müsste

  • dazu die unglaublich schöne totale Verwirrung namens sbt => simple und man braucht Wochen/Monate bis man den internen Aufbau auch nur erahnt. Trotzdem ein tolles Tool, man denke an ~test oder ~run

  • man wollte kein java.util.Date, also hat man in der Evolution manchmal die Rückwärtskompatiblität gebrochen, zwar böse - aber auch “richtig”

Bezüglich Java ist es natürlich so, dass

  • es das neue COBOL schon ist (nicht wird) - wer’s nicht glaubt soll mal eine J2EE 2.1, XDoclet + damals neue Webservices Anwendung pflegen

  • es unglaublich stabil, ausgetestet, reichhaltig und und und. Es gibt viele kompetente Entwickler, Know-How, Libraries, Schnittstellen, Ökosystem (CI, Tests, Jenkins,…). Community und Hilfen im Netz. Support von IBM, Oracle, … Als Entscheider bei der Allianz, Audi, Bosch, Siemens etc. für ein neues Projekt würde ich auf jeden Fall Java wählen. Wie sonst mit SAP reden, verteilte Transaktionen über mehrere Systeme abwickeln usw.? Das alte GUI Problem (Swing, SWT, FX,…) ist von diesem Standpunkt aus nicht so wichtig.

  • bei Android gibt es keinen Weg zurück und weg von Java (Matthäus-Effekt, bereits zu groß)

  • habe kürzlich gelesen, dass die neuen JITs bereits gar nicht mehr nur just-in-time-compilen, sondern ein zentrales Element das on the fly Ent-optimieren zwecks besserer totaler Performance ist. Ist einen weiten Weg gegangen die JVM, das wird bleiben.

Und was die Mitspieler betrifft

Microsoft muss sich echt mal überlegen was sein soll: erst in die Tonne mit C-native, COM, DCOM - nur noch .NET, plötzlich ein Schritt zurück weg RT (was zu Recht gefloppt ist) und mobile: was ist eigentlich jetzt im Moment los, was soll werden? Mit LINQ hätte man schon einen gewaltigen Vorsprung, und F# passt besser zu C# als Scala zu Java. Bin gespannt.

Apple - da kann ich mir keinen Reim drauf machen. Swift ist - erster Eindruck - echt nichts innovatives (aber halt viel besser, als die Folterwerkzeuge im XCode bisher). Die pure Marktmacht wird sicher bleiben. Aber so richtig Anwendungsentwickeln? Bei mir hier in der Firma (Petrochemie) steht weit und breit kein einziger Mac, habe auch bei keinem Zulieferer oder Kunden jemals einen gesehen. Interessiert hier NULL der ganze Angry-Birds-App-Daddel-ich bin so geil weil ich ein glänzendes Handy habe Schmodder.

Bleibt Linux, da warten wir wohl auf Perl6 und darauf, ob die Leute jetzt Python 2.7, 2.8 und 3.x parallel lernen sollen.

Und Google und das Web? node.js und der Rest? Überall Transpiler von XZY in Javascript, auch ein nicht zu vernachlässigender Strang. (esoterisch, aber faszinierend: Scala.js und http://www.scala-js-fiddle.com/)

Vorhersehen kann man da wirklich wenig.

Andererseits: mir wird das bald alles zu viel, eine Stelle als Gärtner oder Aushilfsbedienung einer Oben-Ohne-Bar besser für meine Nerven.

Naja die IT Schleppt einfach noch zu viele Altlasten vom 19 Jahrhundert mit. Einfach weil man es gewöhnt ist. Auch wenn ich es nicht gerne zugebe C# hat Java mittlerweile in Features, Performance und Useability auf Windows zumindest eingeholt und überholt, da wünsche ich mir mehr Innovationen und vielleicht auch mit Java X ein Bruch der Abwärtskompatibilität um einfach alte Sachen die unnötig und falsch sind zu entfernen zu Gunsten der Sprache an sich und die Programmierer.

Das mit dem Cross Compilen ist eigentlich relativ gut so wie es ist. Google hat z.B mit der V8 eine echt schnelle JS engine aus dem Boden gestampft. Wieso sollte google für z.B Dart eine neue Engine schreiben wenn man es einfach auf JS portieren kann.

@Marco13 : mit “aktuellen Herausforderungen” meine ich Skalierbarkeit, Wartbarkeit groszer Projekte, Parallelisierbarkeit (sicher gibts da noch mehr)

[QUOTE=CyborgBeta] @CyborgGamma : Kannst du bitte einen anderen Benutzernamen wählen, oder die Mods darum bitten, oder deinen Account einfach stelllegen, dann gibt es keine Verwechslungsgefahr, wenn wir ohnehin keine gemeinsame Schnittmenge haben. Dankeschön.

[edit SlaterB: Anmerkung intern weitergeleitet][/QUOTE]

Ist jetzt wurscht. Vielleicht vertragen wir und ja oder werden Freunde. Wollte noch so von oben harab reden. Da bin ich viel zu empfindlich.

@CyborgGamma : Schreibe weiter!

meinte ich aber zustimmend im positiven Sinne für dich :wink: , Möglichkeiten und Probleme dabei zu prüfen,
kann man auch andersrum lesen, stimmt, denke nicht an alles

habe es nochmal editiert: [edit SlaterB: Anmerkung intern weitergeleitet (edit: als berechtigtes Problem ähnlicher Namen)]

Meine bescheidene Meinung:

Die vollen Auswirkungen von Java 8 kommen erst noch, und sie werden allgemein unterschätzt.

Die Integration von Lambdas war mehr oder weniger erzwungen, auch wegen der Konkurrenz (“Wenn ich noch mal X Jahre darauf warten muss, schaue ich mir doch lieber Scala/Kotlin/Ceylon/… an”). Nachdem nun diese Anfangshürde genommen ist, kommt jetzt die Phase, in der wichtige Player Blut lecken und die neuen Features - insbesondere in Bibliotheken - massiv einsetzen werden. Das wird wiederum zu einer starken Nachfrage nach weitergehender Unterstützung (Lambdas für einmethodige abstrakte Klassen, verbesserte Typ-Inferenz, Selbsttypen…) und Verbesserung der Java-APIs (Streams, Optional…) führen, der sich Oracle kaum entziehen können wird.

Irgendwann wird es aber für Anfänger - und Profis einfach zuviel, irgendwann muss man den alten Schrott entsorgen - hoffentlich bald -:slight_smile:

Streams Reader Writer Collection

die irrsinnige Property-Gaudi in JavaFx (für jeden primitiven Typ einer)

die Geschichte mit Dateien…

Google selbst hat Dart fallen lassen. Im Gegensatz zu Go gibt’s nämlich keinen Bereich wo die Sprache eingesetzt wird. Der ursprüngliche Plan Javascript zu ersetzen ist gescheitert. Das äußert sich z.B. dadurch, dass Google mit Microsoft gemeinsame Sache macht und die Entwicklung von Angular 2 statt mit Dart mit TypeScript angeht.

Warum nicht? Java 8 hat alles was man braucht + eine Menge alten Code der nach wie vor funktioniert. Im Gegensatz zum alten Dalvik ist’s beim neuen Android RT nicht mehr egal wie der Java-Code übersetzt wird. Im Moment schließt man sich mit Groovy, Scala, Clojure, etc. Runtimes vom Android Runtime Compiler ausschließen, was massive Performanceeinbußen und Auswirkungen auf den Akkuverbrauch zur Folge hat.

Moderne Android-Entwicklung, mit RxJava, den verschiedenen Dependeny Injection Frameworks, Post-Compilern für UI-Bindings, etc. verwandelt den zu schreibenden Code soweit, dass ich überhaupt keinen Grund für eine andere Sprache sehe. Nur Java 8 wäre schön.

Ich hätte überhauptnichts dagegen. Was mich zweifeln lässt, ist der Rechtsstreit mit Oracle. Kann mir irgendwie nicht vorstellen, dass google die Streaming-API kopieren wird. Ohne die Streaming-API wäre es irgendwie witzlos auf Java8 zu gehen.

Eindeutig sehr, sehr wahrscheinlich wahr.

(Leider hat Java halt auch ein paar Sachen, die man nicht mehr braucht - aber was solls?)

Ich schon: Haskell z.B. als wissenschaftliches Werkzeug, Scala als mögliche Weiterentwicklung, Racket zum Lernen,…

Für ein vernünftiges Anwendungsprogramm natürlich Java8 (allerdings: .NET auch geeignet).

Und unser aller Bias: wir verstehen halt Java, denken in Java, lesen Java, etc. Das erschwert ein objektives Urteil.

Eigentlich müsste man ja auch auf Danke klicken.

Klar, nix bleibt lange on the top. Aber Plattformunabhängigkeit + „neue“/andere/ wiederbelebte Paradigmen in Java >= 1.8, das fetzts. :wink:

Trotzdem möchte ich auf („Prolog“) nicht verzichten können, wenn keiner mehr verstehen soll, um wats es eigentlich geht. :slight_smile:

Java war nie das Mittel aller Dinge (eine Nischensprache wie viele andere).
Und Plattformunabhängigkeit hat SUN damals auch nicht erfunden.
Keiner kann ein Fahrrad neu erfinden, sondern nur noch verbessern oder verschlechtern. @Bleiglanz hat recht. Die Objektivität fehlt bei vielen, die ‚nur‘ mit Java zu tun hatten.

[QUOTE=Jango]Java war nie das Mittel aller Dinge (eine Nischensprache wie viele andere).
Und Plattformunabhängigkeit hat SUN damals auch nicht erfunden.
Keiner kann ein Fahrrad neu erfinden, sondern nur noch verbessern oder verschlechtern. @Bleiglanz hat recht. Die Objektivität fehlt bei vielen, die ‘nur’ mit Java zu tun hatten.[/QUOTE]
Mhh, falls du mich damit meintest,

  1. ich bezweifle irgendwie, dass du überhaupt etwas mit Java zu tun gehabt hattest oder hast,
  2. Java zählt mit zu den dutzend Programmiersprachen, die ich beherrsche,
  3. mir scheint, du kannst kein klares Urteil abgeben, bist du hier richtig aufgehoben?,
  4. wenn dem nicht so ist, musst du mich wohl sperren, ich lasse mir ungern den Mund verbieten, wenn ich schlauer als jmd anderes oder andere bin.

Ist ok? Du versuchst nicht mehr, meine Autoreifen zu zerstechen, und ich sage niemanden mehr, was du alles nicht kannst. Einverstanden?

Jo, ist klar, Meister aller Hochsprachen (12 beherrschst du?). Deine Autoreifen machst du dir doch selber kaputt.
Ach noch was. Keiner hat dir den Mund verboten - das bildest du dir wieder ein (wie öfter). Ich habe meine Meinung zu Java geschrieben.
Und ehrlich, dich zu sperren macht keinen Sinn. Zusehen, wie du dich immer lächerlicher machst, ist lustiger… :wink:

Wenn du etwas zum Stressabbau brauchst, verprügel dein Sofa. Hier redest du mit Menschen.

Macht mich eher traurig, irgendwie.

Ist doch sehr wahrscheinlich nur eine Diskussion, ein Austausch von Ideen und Meinungen - da muss man nicht unbedingt recht haben.

12 kommt mir auch übertrieben vor, ich kann nur eine Sprache (Java) auf einem akzeptablen Niveau - aber was ich da alles nicht weiß und kann, das füllt Bände.

Eine Endlosschleife ohne break :-), es ist wohl zu schwierig sich in andere einzufühlen

Aber zurück zum Thema, heute in meiner Blogroll:

A Million Lines of Bad Code – Variance Explained

Im Moment wüsste ich gar nicht, was die best practice in Java für das Einlesen einer Datei eigentlich ist - zu viele Möglichkeiten, alte Sachen, neue Sachen,…

Das auto steht auf dem Hof, ich stehe morgens auf, die Autoreifen sind kaputt, und ich muss mir dann überlegen, wer mich gerade am wenigsten mag…

Aber ist klar, kann natürlich alles Zufall sein, oder selber bei fahrt kaputt gemacht. Kratzer im Lack kommen auch von Büschen.

@Bleiglanz : Sagen wir ein halbes Dutzend.

@Jango : Las uns wieder vertragen/beilegen. Ich hab dich ganz dollle liiiep. :smiley:

[/half-ot]