News Programmiersprachen: Java 9 kommt erst im März 2017

@palace4d: Von deinem Artikel über Netflix
To be clear, we haven’t migrated “everything” to JS and Node. We have backend infrastructure which is Java based.

The legacy website stack was a monolithic Java application mostly maintained by UI engineers.

Geht offenbar nur darum, dass die UI-Leute mit Node arbeiten, da diese einfacher mit JS zurecht kommen als mit Java.

Zur Qualität von JS als Sprache kann ich nur folgendes sagen: eine Sprache, welche bei einer simple Addition von 0.1 und 0.2 ein falsches Resultat liefert ist nur bedingt geeignet um seriöse Applikationen zu entwickeln https://jsfiddle.net/94j394zg/.

Dazu kommen diverse Sprachkonstrukte, welche in JS einfach fehlen, zB. Interfaces, Generics, Polymophismus, Methodenüberladung, etc.

Javascript ist als Sprache aufgrund seiner dynamischen Typisierung für grosse Projekte (100k Zeilen +) zudem fast nicht wartbar. Einer Methode können zur Design-Time zB. falsche Datentypen übergeben werden. Keine Fehlermeldungen, muss ja auch nicht compiliert werden. Der Fehler tritt dann meist erst in Produktion auf, sobald die Methode dann mal von nem Kunden aufgerufen wird. Bei kleinen Projekten wo 1 Programmierer einen Überblick über seinen Code hat ist das meist kein Problem. In einem Team von 5+ Leuten mit unabhängigen Modulen und X Ebenen kommt das jedoch sehr schnell vor.

Warum wir es dann trotz all dem verwendet?
Weil es die einzige Client-Seitige Sprache ist, welche alle Mainstream-Browser unterstützen (hier aber auch immer mit Vorsicht, da nicht alle Browser alle ES-Versionen unterstützen).

Projekte wie zB. TypeScript versuchen die Nachteile von JS aus zu gleichen und es auch für grössere Projekte brauchbar zu machen. Persönlich würde ich NIE in reinem JS entwickeln. Mit TS könnte ich es mir eher überlegen.

Java hat als Entwicklungsumgebung genauso wie .Net trotzdem weiterhin seine Daseinsberechtigung, da beide eine sehr solide Basis bieten, mit der sich von kleinen Anfänger-Projekten bis zu verteilten Mega-Systemen alles realisieren lässt. Die Entwicklergemeinde ist in beiden fällen sehr aktiv und bringen ständig neue interessante Technologien hervor.

Zu sagen, dass Java und oder .Net keine Daseinsberechtigung haben ist sehr Naiv.
 
peter_86 schrieb:
Zur Qualität von JS als Sprache kann ich nur folgendes sagen: eine Sprache, welche bei einer simple Addition von 0.1 und 0.2 ein falsches Resultat liefert ist nur bedingt geeignet um seriöse Applikationen zu entwickeln https://jsfiddle.net/94j394zg/.

Kannst du bitte kurz noch einen Link anhängen, in dem definiert ist, dass die Sprache "JavaScript" bei genau dieser Addition ein falsches Resultat liefern soll? Kann es nicht sein, dass dieser Rechenfehler wenn überhaupt durch die Behandlung von Gleitkommazahlen durch die ausführende Engine zu Stand kommt? Diese Art von unerwarteten Ergebnissen gibt es auch in anderen Sprachen. Dir ist bewusst dass "0.1" oder "0.2" im Speicher nicht unbedingt als exakt dieser Wert abzubilden ist? (http://floating-point-gui.de/basic/).

Java Schnipsel:

Code:
public class ShowMe {
    public static void main (String... args)
    {
        double t = 0.1 + 0.2;
        
         System.out.println("Ergebnis: " + t);
    }
}

Das spuckt mir ebenfalls 0.30000000000000004 als Ergebnis aus. Ist jetzt Java auch "kaputt"? Tippe ich in der Python Shell "0.1 + 0.2" ein erhalte ich das Ergebnis 0.30000000000000004. Ist Python auch kaputt?
 
Mir ist klar, dass dies damit zuammenhängt, dass 'float' oder 'double' Beschränkungen haben.

Unter C# kannst jedoch zB. das machen:
Code:
    class Program
    {
        static void Main(string[] args)
        {
            decimal a = 0.1m;
            decimal b = 0.2m;

            var result = a + b;
            Console.WriteLine(result);
            Console.ReadLine();
        }
    }

Das liefert zB. zuverlässig das Resultat 0.3

Ich gehe davon aus, dass auch Java einen entsprechenden Datentyp anbietet. (Bin .Net-Entwickler, kenne Java nur vom Studium)

Der Punkt ist hier: starke Typisierung

Ich kann explizit angeben, dass ich jetzt mit Zahlen arbeite, welche eine möglichst hohe Präzision erfordern.
In JS muss ich mich darauf verlassen, dass das "schon richtig" gemacht wird. Gerade wenns um Finanzen geht kann man hier als Entwickler schnell blöd aussehen oder im schlimmsten fall unbemerkt jahrelang Berechnungen falsch durchführen. Da hilft dann nichts dem Kunden Binäre Datenstrukturen zu erklären. Da ist dann das Vertrauen gebrochen und ev. sogar Schadensersatzforderungen im Haus.

Ist natürlich für eine UI-Scripting Sprache nicht wirklich entscheidend, da solche Fehler rein kosmetisch sind und normalerweise nicht in das Backend fliessen. --> Wofür JS ursprünglich auch entwickelt wurde.

Doch hier war ja auch die Rede, dass JavaScript für ALLES benutzt werden soll. Dies würde dann auch die Serverseitige Berechnungslogik bedeuten, welche in diesem Fall Fehlerhaft wäre.

Insofern würde ich lieber 2 mal überlegen, ob JS denn wirklich die Richtige Lösung für solche Applikationen ist.
 
Zuletzt bearbeitet:
peter_86 schrieb:
Doch hier war ja auch die Rede, dass JavaScript für ALLES benutzt werden soll. Dies würde dann auch die Serverseitige Berechnungslogik bedeuten, welche in diesem Fall Fehlerhaft wäre.

Im ersten Schritt ist das immer noch kein Fehler. Wenn man weiß mit welcher Genauigkeit man rechnen "muss", muss man egal in welcher Sprache und auf welchem System man arbeitet sicherstellen, dass das auch funktioniert. Und sei es indem man am Ende festlegt bis zu welcher Stelle hinter dem Komma genau gearbeitet werden muss und ab wann gerundet werden darf. Du hast die decimals aus C# aufgeführt. Es mag sein, dass man mit diesen scheinbar "korrekt" rechnen kann, allerdings behaupte ich jetzt mal, dass das im Vergleich zu z.B. meinem Java Beispiel auch einfach daran liegen kann, dass decimals insgesamt 128 Bit (96 für die Mantisse) zur Verfügung haben, während der primitive double in mit 64 Bit (52 Bit für die Mantisse) auskommen muss - und ja.. ich hätte netterweise einen BigDecimal verwenden können, der am Ende ausreichend Genauigkeit zumindest für dieses Beispiel bietet ;-).

Aber ja, eine starke Typsierung wäre zumindest bei der Deklaration oder Übergabe von Variablen ab und an recht nützlich.
 
Geht offenbar nur darum, dass die UI-Leute mit Node arbeiten, da diese einfacher mit JS zurecht kommen als mit Java.

Hier noch ein Interview eines Entwicklers http://www.talentbuddy.co/blog/building-with-node-js-at-netflix/
We have moved Netflix.com from a struts-based Java application to one that runs on Node.js utilizing technologies such as React, Restify, and Bunyan. We’re now in the process of creating a Node-based platform to enable broader adoption of Node across not just UI engineering but the entire Netflix organization.

Javascript ist als Sprache aufgrund seiner dynamischen Typisierung für grosse Projekte (100k Zeilen +) zudem fast nicht wartbar.

Meine gelisteten Beispiele sagen da was anderes ...
 
Nur weil es funktioniert und eine der besseren Möglichkeiten ist, heißt es nicht, dass es gut ist. Javascript wurde nie für Großprojekte erfunden und das merkt man am Mangel an Sprachfeatures an allen Ecken. Nicht umsonst wird momentan überall ECMAScript 6 gepushed, was lange überfällige Features nachliefert und es gibt viele Transpiler um die Arbeit mit Javascript in großen Anwendungen erträglich zu machen. Google entwickelt inzwischen auch Angular 2 in Typescript und nicht mehr in reinem Javascript. Das Angular Team wollte sogar anfangs für v2 ne eigene Spracherweiterung (Atscript) schreiben. Es ist also eher so, dass JS gerade Hip ist, so ziemlich der einzige Player ist und gerade JS Frameworks überall aus dem Boden schießen, die die Arbeit mit Großprojekten einfacher machen (React, Angular, Node, ...). Heißt aber nicht, dass die Sprache besonders gut geeignet ist.
 
Zuletzt bearbeitet:
Zurück
Oben