Warum wird soviel in Java/C# entwickelt?



  • Ich mache zur Zeit eine Ausbildung als FI. Bisher haben wir alle Proramme mit C++ (MFC) geschrieben. Allerdings wollen wir zukünftige Projekte primär nur noch mit Java oder C# entwickeln. Angeblich um wettbewerbsfähig zu sein. 😕

    In unserer Branche(Datenbanksysteme und allg. Anwendungen für die Wirtschaft) wird leider mittlerweile sehr viel in Java gecoded. Sieht das bei Euch ähnlich aus? Warum wird auf Sprachen wie Java und C# mehr Wert gelegt?



  • ein wort: plattformunabhängigkeit.

    ein java programm kann auf jedem system laufen, für das es eine java-vm gibt. das spart immens viel portierungsarbeit und damit geld. Und da java inzwischen fast soschnell wie C/C++ ist, ist das auch kein argument mehr gegen java.



  • FIA schrieb:

    Warum wird auf Sprachen wie Java und C# mehr Wert gelegt?

    weil die vorstandsvorsitzenden immer öfters reine wirtschaftler ohne jedes technische verständnis sind. und von da zieht es sich nach unten, daß technikunverständnis was tolles ist und zeichen für erfolg. daher auch studiengänge wie "wirtschaftsinformatik". und diese leute hören halt auf buzz-words.



  • also java kann ich shcon verstehn. nur c# find ich eigentlich überflüssig. für viele anwendungen ist es einfach bequem mit java zu arbeiten, weil einfach alles portabel ist. mache in der arbeit jetzt so ein tool für speichere-sprachaufnahmen-in-datenbank-mit-patientendaten, das wäre mit c++ deutlich umstaendlicher. mit java hab ich _alles_ integriert und muss mich nicht um plattformen/libs kümmern.



  • otze schrieb:

    ein wort: plattformunabhängigkeit.

    Halte ich für kein wichtiges Argument.

    Wer braucht eigentlich Plattformunabhängigkeit? Außerdem muß man das Projekt letztlich doch auf jeder Plattform testen, oder würde jemand wirklich ein Java-Prog unter Linux entwickeln und dann einfach blind darauf vertrauen, daß es unter Windows läuft??? Hoffentlich nicht... alleine die Unterschiede im Dateisystem machen Anpassungen und Tests auf jeder Zielplattform notwendig.

    Der Vorteil gegenüber einen übergreifenden GUI-Lib unter C++ mit Verwendung von Libs wie Boost ist minimal.

    Ich glaube es liegt daran, weil Java und C# einfachere Sprachen sind - die Qualifikation der Entwickler nimmt ständig ab (logisch, da mehr und mehr Software gebraucht wird, aber die Anzahl guter Entwickler langsamer wächst und mehr und mehr Leute in die Softwareentwicklung gedrängt werden). Daher wächst der Drang hin zu Sprachen, die einfacher sind und bestimmte Fehler nicht erlauben, und die weniger Wissen vom Programmierer verlangen. Stichwort dazu: Pointer "verlegt", Garbage Collection, automatisches Referenzcounting, Exception für jeden Fehler.

    Das soll jetzt nicht die Sprachen Java oder C# abwerten - Fakt ist, daß diese weniger Wissen vom Entwickler verlangen als C++. Um Objekte korrekt als Parameter zu übergeben muß man bereits einiges verstanden und gelesen haben, die Masse der Entwickler ist nicht bereit einen solchen Fortbildungsaufwand zu betreiben und will einfach loshacken.

    Weiterhin kommen Marketinggesichtspunkte dazu: C++ präsentiert sich als sehr lose Sprache ohne feste Konturen, es gibt ein ISO-Gremium, ein paar Experten, aber es ist alles sehr schwammig. Für Java gibt es Sun, für C# gibt es Microsoft. Es gibt genau ein offizielles SDK, es gibt festgelegte Zertifizierungskurse, es gibt offizielle Compiler, man kann durch Download eine ziemlich genau definierte Startposition einnehmen. Manager und Kostenrechner lieben sowas... wer also eine Softwareabteilung neu aufbaut, wird darauf achten daß eines dieser Tools zur Anwendung kommt. Das ist der gleiche Punkt, warum Firmen bei Automatisierungen immer noch zur Siemens-SPS greifen, obwohl deren Hard- und Software vom Preis-/Leistungsverhältnis her völlig unzureichend ist.



  • otze schrieb:

    ein wort: plattformunabhängigkeit.

    Kann ich nicht bestätigen. Wir programmieren für den VW-Konzern (also alle Marken) und Java ist eine Vorgabe, aber die Platformunabhägigkeit ist schnuppe. Wir sollen oder können sogar COM-Schnittstellen ansteuern und Excel-Makros usw. zu benutzen. Irgendjemand hat mal vor 8 Jahren hier in der Konzernzentrale entschieden, das Java "schön" ist und jeder Idiot das kann (vorher bzw. ein paar Projekte immer noch, wurde hier vieles in VisualBasic gemacht), aber Plattformunabhängigkeit interessiert hier niemanden. Wichtig ist: schnelle Projekt-Ergebnisse! Was widerrum heißt: Geld sparen.

    Kann Marcus voll und ganz zustimmen! Das ist das, was ich hier seit Jahren in diesem Megakonzern erlebe. C++ ist 0% Thema... einige glauben, es gibt nur die MFC um GUIs zu entwickeln.



  • otze schrieb:

    ein wort: plattformunabhängigkeit.

    http://bash.org/?338364 😉 :xmas1:

    Java hat Vorteile, aber es ist nicht Plattformunabhängig.
    Java ist eine Plattform, wie Windows oder Linux.
    Nur das sie halt kein OS ist, sondern nur eine
    Umgebung, die noch auf ein OS portiert werden muss.

    Devil



  • FIA schrieb:

    In unserer Branche(Datenbanksysteme und allg. Anwendungen für die Wirtschaft) wird leider mittlerweile sehr viel in Java gecoded. Sieht das bei Euch ähnlich aus? Warum wird auf Sprachen wie Java und C# mehr Wert gelegt?

    Weil C# rockt und ich damit 10000mal so schnell ne GUI-App erstelle wie mit dem grausigen C++ APIs



  • volkard schrieb:

    FIA schrieb:

    Warum wird auf Sprachen wie Java und C# mehr Wert gelegt?

    weil die vorstandsvorsitzenden immer öfters reine wirtschaftler ohne jedes technische verständnis sind. und von da zieht es sich nach unten, daß technikunverständnis was tolles ist und zeichen für erfolg. daher auch studiengänge wie "wirtschaftsinformatik". und diese leute hören halt auf buzz-words.

    Was ist denn bitte an Java technisch schlecht? Java hat die beste Standardbibliothek die ich kenne (echt "alles" ist da drin über irgendein krasses Design-Pattern gelöst und sehr schön objektorientiert, was ich sehr mag), Java-Code ist sehr stabil und sicher, weil in Java alles unglaublich fail-fast ist (Collections, Iteratoren, anständige Fehlerbehandlung bei I/O-Sachen, ... ).
    Die Sprache Java selber hat sein Haupt-Designziel, dass Java Code leicht lesbar und wartbar (auch von anderen) ist, sehr gut erreicht.

    Wenn du die Sprache nicht magst, ist das eine unanfechtbare Sache. Aber das mit der Technik musst du mir genauer erklären. Etwas ist nicht technisch besser, weil es in Assembler gehackt ist.
    Ich muss auch kein Wirtschaftsfuzzi sein, um zu erkennen, dass ich in Java verdammt viel schneller was auf die Beine stellen kann.

    devil81 schrieb:

    otze schrieb:

    ein wort: plattformunabhängigkeit.

    http://bash.org/?338364 😉 :xmas1:

    Java hat Vorteile, aber es ist nicht Plattformunabhängig.
    Java ist eine Plattform, wie Windows oder Linux.
    Nur das sie halt kein OS ist, sondern nur eine
    Umgebung, die noch auf ein OS portiert werden muss.

    Devil

    Natürlich ist die Java-Plattform eine eigene Plattform. Aber wie willst du das denn sonst nennen? Der Bytecode ist prinzipiell unabhängig von Prozessorarchitektur und Betriebssystem.

    Marc++us schrieb:

    Das soll jetzt nicht die Sprachen Java oder C# abwerten - Fakt ist, daß diese weniger Wissen vom Entwickler verlangen als C++. Um Objekte korrekt als Parameter zu übergeben muß man bereits einiges verstanden und gelesen haben, die Masse der Entwickler ist nicht bereit einen solchen Fortbildungsaufwand zu betreiben und will einfach loshacken.

    Da stimme ich voll zu, ich würde aber nicht alles auf die Qualifikation schieben. Ein paar Details in C++ kosten einfach auch mehr Aufwand.
    In Java schreibe ich mit wenigen Zeilen ein Programm, dass Objekte serialisiert, zippt und per Socket in einem Hintergrund-Thread an jemand anders schickt, der das Objekt wieder herstellt.
    Dafür hast du in C++ faktisch ungleich mehr Aufwand und wie willst du denn rechtfertigen? Ist es dann schneller? Wenn ich etwas übers Netzwerk verschicke, welche Rolle spielt das dann? Manchmal ist ein Mehraufwand einfach nicht zu rechtfertigen und das hat nicht immer was mit Qualifikation zu tun.



  • Das mit dem Mehraufwand stimmt natürlich, das ist ja auch ein Grund warum sich VB immer noch so wacker schlägt und eine berechtigte Stellung hat.

    Ich denke Hauptfehler bei C++ ist es, daß eben die "wichtigen" Libs nicht vom Standardisierungsgremium angepackt wurden. Es ist ein Unding, wenn eine Sprache heute keine einheitliche Schnittstelle für Sockets und Datenbanken mitbringt, oder für Sachen wie Dateirechte und Verzeichnishandling. Auch fehlende Threadunterstützung ist einfach nicht mehr vertretbar. *1) Diese Dinge (bwz. deren Abwesenheit) sind meines Erachtens die potentiellen Sargnägel für C++.

    *1) GUI ist noch vertretbar, da es hier viele Unterschiede gibt.



  • @Optimizer: Sehr guter Beitrag! Studierst Du eigentlich(schliesse ich mal aus Deinem Beitrag)?



  • Ja, aber das muss ja nichts heißen. 🙂



  • Marc++us schrieb:

    Es ist ein Unding, wenn eine Sprache heute keine einheitliche Schnittstelle für Sockets und Datenbanken mitbringt, oder für Sachen wie Dateirechte und Verzeichnishandling. Auch fehlende Threadunterstützung ist einfach nicht mehr vertretbar. *1) Diese Dinge (bwz. deren Abwesenheit) sind meines Erachtens die potentiellen Sargnägel für C++.

    *1) GUI ist noch vertretbar, da es hier viele Unterschiede gibt.

    Ja, ich denke auch, dass C++ sich noch deutlich besser gegenüber anderen Sprachen behaupten würde, wenn das der Fall wäre.

    Und ich sehe die Komplexität von C++ nicht als Nachteil. Es ist dadurch um so mächtiger.



  • Warum wird soviel in Java/C# entwickelt?

    Ich denke einzig und allein deswegen, weil es so eine große, standardisierte Bibliothek gibt.

    Die Sprachen selber können doch nix :->



  • DrGreenthumb schrieb:

    Ich denke einzig und allein deswegen, weil es so eine große, standardisierte Bibliothek gibt.

    Die Sprachen selber können doch nix :->

    lol...na du bist der experte...ist natürlich immer besser wenn ich das Rad neu erfinden muss. 👎



  • DrGreenthumb schrieb:

    Die Sprachen selber können doch nix :->

    Da täuscht du dich, mein lieber. Es gibt in Java und C# Sprachmittel, die ich in C++ bitterböse vermisse.

    Interfaces (seltsamerweise gibt es ja genug Leute, die 'pure abstract classes' als Workaround benutzen
    vgl. Delegates/nested Classes/Funktionszeiger

    meistens sind es aber sogar eher ganz triviale Sachen, wie

    only static const integral data can be initialized inside a class or struct

    was einfach dämlich ist. Wieso kann ich nicht

    class Foo
    {
        static const double PI = 3.14;
    }
    

    schreiben?

    Und gerade bei C# ist es wirklich dumm, zu behaupten, dass es nichts kann. Sogar ohne unsafe mode ist die Feature-Liste beachtlich (was man positiv oder negativ sehen kann).



  • Interfaces (seltsamerweise gibt es ja genug Leute, die 'pure abstract classes' als Workaround benutzen

    Entweder versteh ich Interfaces nicht oder Interfaces sind einfach nur abstrakte Klassen.

    Ich kenn Java nicht sehr gut, aber bis auf Nested Klassen, die in Java eindeutig besser sind, gibt es keine lustigen Sprachfeatures, wie Templates. Wie gesagt, man kann das als Vorteil sehen, weil die Sprache dadurch leichter beherschbar wird.

    Das man innerhalb der Klasse nur Integral Konstanten deklarieren kann, ist wirklich ein wenig merkwürdig. Aber niemand will hier behaupten, dass es an C++ keine Ecken und Kanten gibt, genauso wie es in Java auch Dinge gibt, wo man sich an den Kopf fassen muss.



  • Die Sprache Java selber hat sein Haupt-Designziel, dass Java Code leicht lesbar und wartbar (auch von anderen) ist, sehr gut erreicht.

    Ne das ziel gut lesbar hat Java schon deshalb nicht erreicht, weil es eine C-artige Synthax verwendet. 👎

    Interfaces (seltsamerweise gibt es ja genug Leute, die 'pure abstract classes' als Workaround benutzen vgl. Delegates/nested Classes/Funktionszeiger

    Interfaces in Java sind aber auch nicht der Hit. Es gibt Sprachen, in denen Interfaces deutlich besser gelöst sind. In Java sind Interfaces doch wirklich nur wie ABCs.

    Delegates/nested Classes/Funktionszeiger

    Verstehe ich jetzt nicht.
    Delegates sind cooler als nested Classes, wenn es um die selben Aufgaben geht. Natürlcih können Nested Classe noch viel mehr als Delegates, was man aber selten braucht. Funktionszeiger sind das, was man noch aus C hat. Aber es gibt ja boost::function oder boost::signal - je nauch Aufgabe - und damit können delegates nicht mithalten (was sie aber auch nicht brauchen).



  • kingruedi schrieb:

    Interfaces (seltsamerweise gibt es ja genug Leute, die 'pure abstract classes' als Workaround benutzen

    Entweder versteh ich Interfaces nicht oder Interfaces sind einfach nur abstrakte Klassen.

    Korrekt! Javas Interfaces sind einfach nur abstrakte Klassen. Also alle Methoden virtual = 0. Mehr nicht.



  • kingruedi schrieb:

    ...gibt es keine lustigen Sprachfeatures, wie Templates.

    In java 1.5 sind Templates enthalten 🙂 für mich ist Java damit nochmal eine stufe aufgestiegen. nichtdestotrotz sollte man find ich schon genau überlegen, welche sprache man wann einsetzt. jede hat ihre spezifischen vorteile


Anmelden zum Antworten