jobo: Warum Java programmieren? Waurm meistgenutze Sprache?

Hallo,

in unserer Schul-Ag gibt es immer wieder Diskussionen, welche Programmiersprachen man benutzen "sollte". Der Tiobe Index führt Java auf Platz 1. Programme wie Apache, OpenOffice oder Browserengines sind ja vemrutlich alle in C bzw. C++ oder objective C verfasst, oder?

Was für einen Grund gibt es, mit Java zu programmieren und was für welche, das nicht mit Java zu machen? Welche größeren Projekte sind in Java programmiert. Warum gibt der Tiobe-Index Java mit knapp 20% auf Platz 1 an?

Plattformunabhängigkeit ist mir schon klar, auch gibt es vermutlich historisch bedingt einen Anwendungen auf Webservern, oder? Gibt es aber ein Kernfeld? Ich habe von einem Informatikstudenten gehört, dass Java oder C als Alternative zu Auswahl stehen an der Uni, also ein von beiden _muss_ man lernen.

Gruß

jobo

  1. Aloha 'oe,

    Plattformunabhängigkeit ist mir schon klar, auch gibt es vermutlich historisch bedingt einen Anwendungen auf Webservern, oder? Gibt es aber ein Kernfeld? Ich habe von einem Informatikstudenten gehört, dass Java oder C als Alternative zu Auswahl stehen an der Uni, also ein von beiden _muss_ man lernen.

    Man „muss“ die lernen, die in den Vorlesungen von einem gefordert wird ;-). In meinem ersten Semester waren das Java, Prolog und Haskell. Alles unterschiedliche Sprachen für unterschiedliche Einsatzgebiete.

    Eine Spezialität von Java liegt in der Realisierung von komplexeren Web-Anwendungen (dafür ist die J2EE-Version vorgesehen), insbesondere im Themenfeld der Wirtschaftsinformatik. Auf diesem Gebiet dürfte Java die wohl am meisten genutzte Programmiersprache sein (Stichworte dazu wären Spring oder Seam).

    Gruß

    Volker

  2. Hallo,

    in unserer Schul-Ag gibt es immer wieder Diskussionen, welche Programmiersprachen man benutzen "sollte".

    das hängt ganz einfach von den Umständen ab. Als allererstes ist es eine gute Idee, eine Programmiersprache zu verwenden, die der Problemstellung/Aufgabe angemessen ist - und in der Kompetenz vorhanden ist oder erworben werden kann.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      das hängt ganz einfach von den Umständen ab. Als allererstes ist es eine gute Idee, eine Programmiersprache zu verwenden, die der Problemstellung/Aufgabe angemessen ist - und in der Kompetenz vorhanden ist oder erworben werden kann.

      Genau, der Ansatz ist schon klar. Lässt doch im Umkehrschluss aber die Frage zu, welche Problemstellungen und Aufgaben denn besonders mit Java angemessen lösen kann, wenn das laut Tiobe doch ein Fünftel aller Problemstellungen zu sein scheinen. Spiele und performante GUIs sind das ja zB. wohl eher nicht, oder???

      Dank und Gruß

      Robert aka jobo

      1. Hallo,

        das hängt ganz einfach von den Umständen ab. Als allererstes ist es eine gute Idee, eine Programmiersprache zu verwenden, die der Problemstellung/Aufgabe angemessen ist - und in der Kompetenz vorhanden ist oder erworben werden kann.

        Genau, der Ansatz ist schon klar. Lässt doch im Umkehrschluss aber die Frage zu, welche Problemstellungen und Aufgaben denn besonders mit Java angemessen lösen kann, wenn das laut Tiobe doch ein Fünftel aller Problemstellungen zu sein scheinen.

        nein, sowas läßt sich aus dem Tiobe-Index gerade *nicht* herauslesen.
        Steht doch dort. Auf einer verlinkten Seite kannst Du nachlesen, wie die Definiton aussieht.

        Freundliche Grüße

        Vinzenz

        1. Moin Moin!

          Auf einer verlinkten Seite kannst Du nachlesen, wie die Definiton aussieht.

          "This website requires JavaScript. Site Map"

          Na toll. Sehr informativ.

          Die Seite besteht bis auf das Stückchen <noscript> tatsächlich ausschließlich aus leeren DIV-Containern:

            
               <body>  
                  <noscript>This website requires JavaScript. <a href="spiderpage.html">Site Map</a></noscript>  
                  <div id="wrapper">  
                      <div id="maincontent"></div>  
                      <div id="subcontent">  
                          <div id="subcontent1" class="content subvlak"></div>  
                          <div id="subcontent2" class="content"></div>  
                      </div>  
                      <div id="teasercol"></div>  
                      <div id="crumbs"></div>  
                      <div id="menu"></div>  
                      <div id="subnav" src="content/general/subnav.html"></div>  
                      <div id="homelogo">  
                          <a href="/index.php" title="TIOBE Software - The coding standards company">  
                          </a>  
                      </div>  
                  </div>  
              </body>  
          
          

          Was für ein Murks! Und valide ist der Müll auch nicht. Tolle "Coding Standards".

          So wie ich nach Freigabe von Javascript den Text verstehe, würfelt Tiobe anhand von recht willkürlichen Kriterien ("own entry on Wikipedia", "top 6 websites of Alexa") irgendwelche Zähler zusammen. Mit fallen spontan drei Turing-vollständige Sprachen bzw. Systeme ein, die Tiobe hier nicht abdeckt: Intersystems Caché (höchstens indirekt über MUMPS), O-Script (in Opentext Livelink, kein Wikipedia-Eintrag für die Sprache vorhanden), Blomesystem P-Code (nicht einmal über Labbase, kein Wikipedia-Eintrag für die Sprache vorhanden).

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  3. Moin Moin!

    in unserer Schul-Ag gibt es immer wieder Diskussionen, welche Programmiersprachen man benutzen "sollte". Der Tiobe Index führt Java auf Platz 1. Programme wie Apache, OpenOffice oder Browserengines sind ja vemrutlich alle in C bzw. C++ oder objective C verfasst, oder?

    Apache ist definitiv in C geschrieben, OpenOffice wenigstens teilweise, braucht für einige Funktionen allerdings eine Java Runtime. Firefox ist in C geschrieben, mit einer Schnittstelle zu Java (via Java-Plugin).

    Was für einen Grund gibt es, mit Java zu programmieren und was für welche, das nicht mit Java zu machen?

    Ein ganz klarer Grund in der Wirtschaft: Man kann sich für Java zertifizieren lassen. Nicht, dass so ein überteuertes Stück Papier irgendetwas über die Fähigkeiten aussagt, aber man hat halt seine Zeit in einem Java-Kurs abgesessen, und hey, es steht ZERTIIFKAT auf dem Papier, über dem eigenen Namen. Fast schon ein Diplom, nur schneller und nicht so teuer.

    Java ist u.a. sehr streng mit Datentypen, das führt IMHO allerdings zu mehr Problemen, als es Wert ist. Am Ende ist man nur noch dabei, Daten wie blöd auf irgendetwas zu casten, damit nicht alles auseinander fällt und man die Typprüfungen letztlich aushebelt.

    Außerdem ist bei Java (im Gegensatz z.B. zu Smalltalk) längst nicht alles ein Objekt oder eine Klasse, was weitere Probleme nach sich zieht.

    Man tippt sich in Java entweder die Finger wund, oder man läßt Ko^H^HCode generieren. Beides ist nicht sonderlich schön. C++ hat, gerade bei grafischen Oberflächen, ähnliche Probleme.

    Der Overhead der virtuellen Maschine, auf der Java läuft, ist angesichts von GHz-Prozessoren und RAM im GByte-Bereich nicht mehr sonderlich relevant -- es sei denn, man arbeitet mit Embedded Systems. Dort sind GHz und GByte längst nicht so reichlich vorhanden wie auf PCs.

    Java hat ein Not-Invented-Here-Problem, muß alles immer wieder neu erfinden. Angefangen mit Makefiles.

    Plattformunabhängigkeit ist mir schon klar,

    Die ist eine Marketing-Illusion. Sicher, Hello World funktioniert tatsächlich cross-plattform ohne neu compilieren. Aber versuch mal eine Java-Anwendung zu schreiben, die über Plattformgrenzen hinweg ein Gerät an einer RS232-Schnittstelle oder gar an einem USB-Port steuern soll. Das endet oft damit, dass man eine betriebssystem- und architekturspezifische "Native Code"-Schnittstelle bastelt, darüber ein paar Lagen Wrapper wie Klopapier stapelt, und hofft, dass der üble Geruch durch die Wrapper ausreichend verdeckt wird.

    Zu den Vorteilen von Java können die "Millionen Fliegen" sicher mehr schreiben als ich, mir steht Java einfach nur im Weg.

    Ich habe von einem Informatikstudenten gehört, dass Java oder C als Alternative zu Auswahl stehen an der Uni, also ein von beiden _muss_ man lernen.

    Mach Dich doch selbst schlau, statt dich auf Hörensagen zu verlassen. Generell solltest Du heutzutage MINDESTENS Java und C "können". Vor allem solltest Du die Stärken und Schwächen kennen. Vier bis fünf verschiedene Sprachen wirst Du in Zukunft mindestens brauchen, wenn Du in die Informatik gehen willst.

    Mal sehen, was ich schon so alles in den Fingern hatte: Z80- und x86-Assembler, diverse BASICs inklusive VBA, LOGO, DOS-Batches, Unix-Shellscripte, Pascal, Delphi, C, C++, Perl, SQL in diversen Dialekten, FORTRAN, Java, HTML/XML (jaja, keine Programmiersprache!), Javascript, Lua, Opentext O-Script, seit 1,5 Jahren Blomesystem P-Code (ein fürchterlicher C-Kastrat) und seit Anfang des Jahres MUMPS ("Perl mit Lochkarten auf nackter Hardware"). Ein paar hab ich wohl noch vergessen, und in den nächsten zwei oder drei Jahren wird noch mindestens ein weiterer C-Kastrat dazu kommen, das steht jetzt schon fest. Und auf meiner Wunschliste steht noch mindestens Smalltalk, einfach nur, um mal wieder ein komplett anderes System zu benutzen. M4 und COBOL sollte ich auch mal lernen, nur um selbst zu erfahren, wie übei die beiden sind. Und Postscript, Python und Ruby wären auch noch auf der Liste.

    C und Pascal sind essenziell wichtig, weil sehr viele andere Sprachen mehr oder weniger direkt von C (C++, C#, Objective C, Javascript, Java, C-Shell, O-Script, P-Code) und (leider) seltener Pascal (Delphi, Modula) abgeleitet sind. Shell-Scripte sollte man auch kennen, die bilden zusammen mit C und Teilen von Pascal die Grundlage für Perl, dessen entstellten Stiefbruder Igor, äh, PHP und den neuesten Sproß in der Familie, Ruby.

    Um P-Code zu lernen habe ich so etwa 10 Minuten gebraucht, C ohne alle brauchbaren Funktionen und Konstrukte, dafür echter String-Datentyp. Bis auf ein paar Bugs im Compiler, im Editor und in der Doku nichts wirklich überraschendes -- bis auf die Tatsache, wie sehr man C verstümmeln und kastrieren kann, ohne dass Entwickler, die mit dem Kastrat arbeiten müssen, revoltieren.

    Bei MUMPS hilft Dir aber weder C noch Pascal. Ansatzweise FORTRAN, Konzepte (nicht Konstrukte) aus Perl und XML, und vor allem viel Erfahrung mit anderen Sprachen. MUMPS ist ein recht kompaktes System, nach zwei Wochen habe ich es so ziemlich vollständig verstanden. Als Erstkontakt mit Software-Entwicklung ist MUMPS allerdings eine Katastrophe. 40 Jahre alter Code und vor allem ebenso alte schlechte Angewohnheiten, seit der PDP-7 über mehrere Plattformen mitgeschleppt und nie so wirklich ausgemistet.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Om nah hoo pez nyeetz, Alexander (HH)!

      Mal sehen, was ich schon so alles in den Fingern hatte:

      Falls du mal schauen möchtest, ob du was übersehen hast. Hello World

      Ich persönlich fand forth ganz spannend.

      Matthias

      --
      Wer ein Problem beschreiben kann, hat es schon halb gelöst.                                             (Julian Huxley) http://www.billiger-im-urlaub.de/kreis_sw.gif
    2. Hi!

      Am Ende ist man nur noch dabei, Daten wie blöd auf irgendetwas zu casten, damit nicht alles auseinander fällt und man die Typprüfungen letztlich aushebelt.

      Ich hab einiges in Java gesehen und gemacht, aber das ist mir noch nie untergekommen. Hast du vielleicht versucht, Java nicht wie Java sondern wie eine andere Programmiersprache zu verwenden? Oder für etwas, für das es nicht gemacht wurde?

      Außerdem ist bei Java (im Gegensatz z.B. zu Smalltalk) längst nicht alles ein Objekt oder eine Klasse, was weitere Probleme nach sich zieht.

      Stimmt. Wie schwerwiegend diese Problem sind, dazu hat wohl jeder seine eigene Meinung. Das mit Java 5 eingeführte Autoboxing behebt jedenfalls sehr viele davon.

      Man tippt sich in Java entweder die Finger wund, oder man läßt Ko^H^HCode generieren. Beides ist nicht sonderlich schön.

      Was bedeutet "Ko^H^HCode"?

      Java hat ein Not-Invented-Here-Problem, muß alles immer wieder neu erfinden. Angefangen mit Makefiles.

      Das liegt u.a. daran, dass es Leute gibt, die (um bei deinem Beispiel zu bleiben) make nicht für das Nonplusultra zum Bauen halten. Das heißt nicht, dass make "schlecht" ist, das heißt, dass es Probleme hat, die man halt zu beheben versuchte. Abgesehen davon fällt mir nichts ein, was dich daran hindert, Java-Projekte mit make zu bauen, wenn du Probleme mit ANT, Maven und Konsorten hast.

      Aber versuch mal eine Java-Anwendung zu schreiben, die über Plattformgrenzen hinweg ein Gerät an einer RS232-Schnittstelle oder gar an einem USB-Port steuern soll. Das endet oft damit, dass man eine betriebssystem- und architekturspezifische "Native Code"-Schnittstelle bastelt, darüber ein paar Lagen Wrapper wie Klopapier stapelt, und hofft, dass der üble Geruch durch die Wrapper ausreichend verdeckt wird.

      Java wurde ja auch mit dem Ziel entworfen, möglichst nah an der Hardware und am Betriebssystem zu sein. Deswegen die VM... Ernsthaft: Hast du in diesen Fällen vielleicht versucht, Java für etwas zu verwenden, für das es nicht gedacht ist?

      Zu den Vorteilen von Java können die "Millionen Fliegen" sicher mehr schreiben als ich, mir steht Java einfach nur im Weg.

      Der Fliegensager hinterlässt doch einen etwas unguten Nachgeschmack. Glaubst du wirklich, alle Java-Entwickler rennen nur einem Trend hinterher?

      mir steht Java einfach nur im Weg.

      Ok, kein Problem. Verwende die Sprache(n) und Plattform(en), die du für richtig hältst.

      Vor allem solltest Du die Stärken und Schwächen kennen.

      Zuallererst sollte man wissen, welche Sprache/Plattform wofür gedacht ist. Dann weiß man, dass beispielsweise ein Vergleich von Java mit C sinnlos ist. Und dann ist man vielleicht auch so weit, Java beispielsweise auf seine Vor- und Nachteile gegenüber .NET zu untersuchen...

      C und Pascal sind essenziell wichtig, weil sehr viele andere Sprachen mehr oder weniger direkt von C ([...] C#, [...] Javascript, Java [...]) [...] abgeleitet sind.

      Sorry, das ist völliger Unfug: C#, Javascript und Java haben vielleicht geringfügige Syntaxanleihen bei C genommen, sind aber ansonsten C so ähnlich wie Äpfel Telefonen. Ein C-Programmierer, der C# (oder Java oder Javascript) lernt hat keinen nennenswerten Vorteil gegenüber einem Pascal-Programmierer, der C# (oder Java oder Javascript) lernt.

      Fazit: Java ist eine Programmiersprache (und Plattform) wie jede andere auch:
      * Sie ist für gewisse Einsatzgebiete gedacht und für andere nicht.
      * Sie hat gewisse Eigenheiten, die per se weder gut noch schlecht sind.
      * Sie hat Vor- und Nachteile nicht nur gegenüber Sprachen wie C(++) o.ä., die für andere Einsatzzwecke gemacht sind, sondern auch gegenüber richtigen Konkurrenten wie C# (bzw. der .NET-Plattform).

      Ich erlaube mir die Spekulation: Der ziemlich negative Grundtenor deines Postings, der irgendwie so mittransportiert, dass Java für gar nix gut ist, liegt daran, dass du dich nicht damit auseinandergesetzt hast, a)für welche Einsatzzwecke man Java entworfen hat und b)wie man Java verwenden soll. Wer versucht, C mit Java zu emulieren, wird scheitern. Das dürfte aber eigentlich keine Überraschung sein...

      Nix für ungut.

      Grüße
      Bernhard

      1. Hallo,

        was mich interessieren würde, ist der Einsatz von Java für Webanwendungen. Wie ist da der Stand? Wie funktioniert das ganze? Welche Application Server nutzt man da? Welche Frameworks sind verbreitet? JavaServer Faces? Schreibt man da JavaServer Pages? Kennst du dazu Überblickartikel?

        Von Java und Webanwendungen habe ich kürzlich nur durch Groovy, Clojure und Scala gehört. Aber was ist so der Mainstream an Techniken, mit den einige bekannte Websites umgesetzt sind?

        Mathias

        1. Hi!

          was mich interessieren würde, ist der Einsatz von Java für Webanwendungen. Wie ist da der Stand?

          Ich bin vor ein paar Jahren auf die .NET-Schiene (und außerdem von der Webschien weg) geraten, da also leider nicht auf dem neuesten Stand. Ich glaube, es gibt hier aber eh ein paar von den, äh, Stammpostern, die da einen Überblick haben. Ich hab mir sogar vor gar nicht allzu langer Zeit einen Beitrag diesbezüglich gemerkt, habe den aber gerade nicht zur Hand. Werde versuchen, den nachzureichen.

          Wie funktioniert das ganze?

          Die Frage ist mir zu allgemein, das überfordert mich... ;-)

          Welche Application Server nutzt man da?

          Also ich hab anno dazumal Tomcat und JBoss verwendet...

          Welche Frameworks sind verbreitet?

          Von ziemlich vielen der dort aufgelisteten hab ich leider nichtmal gehört... :-( Struts, JSF, Spring und Tapestry sind mir schon untergekommen.

          JavaServer Faces?

          Ja, ist meines Wissens immer noch ziemlich state-of-the-art.

          Schreibt man da JavaServer Pages?

          Kann man, aber Facelets sind meines Wissens der Standard.

          Kennst du dazu Überblickartikel?

          Leider nein; ich sollte mich selber damit wirklich wieder mal auseinander setzen *ermahnt sich selbst*. Vielleicht kann jemand anderes was liefern.

          Von Java und Webanwendungen habe ich kürzlich nur durch Groovy, Clojure und Scala gehört.

          Clojure und Scala sind ja funktionale Sprachen und für Web-Frontends daher vermutlich eher ungeeignet; Groovy als Skriptsprache genauso.

          Aber was ist so der Mainstream an Techniken, mit den einige bekannte Websites umgesetzt sind?

          S.o. Mit JSF ist man jedenfalls nicht mehr im Programmiermittelalter--trotzdem aber vielleicht noch nicht in der Gegenwart.

          Grüße
          Bernhard

          1. Hi!

            Ich hab mir sogar vor gar nicht allzu langer Zeit einen Beitrag diesbezüglich gemerkt, habe den aber gerade nicht zur Hand. Werde versuchen, den nachzureichen.

            Der wars. Ist auch schon wieder ein Jahr her, naja...

            Grüße
            Bernhard

          2. Von Java und Webanwendungen habe ich kürzlich nur durch Groovy, Clojure und Scala gehört.
            Clojure und Scala sind ja funktionale Sprachen und für Web-Frontends daher vermutlich eher ungeeignet; Groovy als Skriptsprache genauso.

            Nein! Scala ist funktional _und_ objektorientiert. Und wenn man damit umzugehen versteht und erst Dinge wie firstclass-Funktionen zu lieben gelernt hat, will man nie wieder Java benutzen.

          3. Danke für die Infos.

            Von Java und Webanwendungen habe ich kürzlich nur durch Groovy, Clojure und Scala gehört.
            Clojure und Scala sind ja funktionale Sprachen und für Web-Frontends daher vermutlich eher ungeeignet; Groovy als Skriptsprache genauso.

            Groovy wird bspw. für Grails verwendet, Scala für Lift; also durchaus für Web-Frontends, soweit ich das verstehe. Und Clojure höre ich auch im Zusammenhang mit dem Web, natürlich nicht als All-Purpose-Sprache für Webanwendungen, sondern für die Teile, bei denen die Nebenläufigkeit von Clojure nützlich ist.

            Mathias

        2. Hi,

          was mich interessieren würde, ist der Einsatz von Java für Webanwendungen. Wie ist da der Stand? Wie funktioniert das ganze? Welche Application Server nutzt man da? Welche Frameworks sind verbreitet? JavaServer Faces? Schreibt man da JavaServer Pages? Kennst du dazu Überblickartikel?

          Du hast eine E-Mail.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hi!

            was mich interessieren würde, ist der Einsatz von Java für Webanwendungen. Wie ist da der Stand? Wie funktioniert das ganze? Welche Application Server nutzt man da? Welche Frameworks sind verbreitet? JavaServer Faces? Schreibt man da JavaServer Pages? Kennst du dazu Überblickartikel?

            Du hast eine E-Mail.

            Kannst du das vielleicht hier posten (oder mir auch mailen)? Mich würds jedenfalls interessieren. (Außer natürlich, es geht um persönliche Dinge.)

            Grüße
            Bernhard

            1. Hi,

              Kannst du das vielleicht hier posten

              Wenn ich das könnte/wollte, hätte ich's gemacht.

              (oder mir auch mailen)?

              Muß ich noch drüber nachdenken. Mathias ist mir seit langem als Selfer bekannt ...

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      2. Hallo,

        Sorry, das ist völliger Unfug: C#, Javascript und Java haben vielleicht geringfügige Syntaxanleihen bei C genommen, sind aber ansonsten C so ähnlich wie Äpfel Telefonen.

        Naja, der Vorgänger von diesem Javascriptcode war ein C-Programm. Vom ursprünglichen Programm (Vorgängerversion) mussten wirklich nur ein paar Kleinigkeiten geändert werden (gefühlte 5%) ums unter Javascript zum Laufen zu bringen. Ansonsten heißt es doch von Javascript auch: "Lisp in Cs clothing".

        Gruß

        jobo

        1. Hi!

          Sorry, das ist völliger Unfug: C#, Javascript und Java haben vielleicht geringfügige Syntaxanleihen bei C genommen, sind aber ansonsten C so ähnlich wie Äpfel Telefonen.

          Naja, der Vorgänger von diesem Javascriptcode war ein C-Programm. Vom ursprünglichen Programm (Vorgängerversion) mussten wirklich nur ein paar Kleinigkeiten geändert werden (gefühlte 5%) ums unter Javascript zum Laufen zu bringen.

          Ist das C-Programm auch von einem Browser (oder einem anderen Interpreter) interpretiert und dargestellt worden?

          Ansonsten heißt es doch von Javascript auch: "Lisp in Cs clothing".

          Zitat von dort: "This is misleading because JavaScript has more in common with functional languages like Lisp or Scheme than with C or Java."

          Wie gesagt, die Syntax ist sicherlich an C angelegt. Wenn man Programmiersprachen (oder Plattformen) dahingehend vergleicht, wofür sie gut zu gebrauchen sind, dann ist die aber eine eher unbedeutende Eigenschaft. Da ist dann doch eher bedeutend, dass Javascript im Gegensatz zu C eine interpretierte Skriptsprache ist, die auch Objektorientierung erlaubt und gut für DOM-Skripting geeignet ist. Da ist von Bedeutung, dass Javascript zwar auch direkt in ausführbaren Code kompiliert werden kann, aber trotzdem (im Gegensatz zu C) eher nicht geeignet ist, um ein Betriebssystem zu schreiben und ähnliches mehr.

          Grüße
          Bernhard

          1. Hallo,

            Naja, der Vorgänger von diesem Javascriptcode war ein C-Programm. Vom ursprünglichen Programm (Vorgängerversion) mussten wirklich nur ein paar Kleinigkeiten geändert werden (gefühlte 5%) ums unter Javascript zum Laufen zu bringen.
            Ist das C-Programm auch von einem Browser (oder einem anderen Interpreter) interpretiert und dargestellt worden?

            Nein, das hatte der Schüler geschrieben um einen Würfel mit OpenGL drehen zu lassen. Das ist irgendwie der Kern der Bewegungsberechnungen gewesen. Wir waren selbst erstaunt, weil er bisher nur C gemacht hatte (zumindest kein Javascript) und ich JS besser konnte und C nur rudimentärst. Sozusagen ein Schlüsselerlebnis, was die rein formale Syntax angeht. Also genauer gesagt der Liniencode erstmal. Das vormals verlinkte war dann wirklich eine Portierung oder wie man das nennt, die aber syntaktisch vermutlich eben formal sehr ähnlich C bleibt.

            Gruß

            jobo

            1. Hi!

              Ist das C-Programm auch von einem Browser (oder einem anderen Interpreter) interpretiert und dargestellt worden?

              Nein, das hatte der Schüler geschrieben um einen Würfel mit OpenGL drehen zu lassen.

              Eben. C ist für andere Dinge gemacht als Javascript. Trotz aller Syntaxähnlichkeit ist es eher weniger schlau, mit C ein von einem Browser interpretiertes Programm schreiben zu wollen...

              Grüße
              Bernhard

      3. Moin Moin!

        Am Ende ist man nur noch dabei, Daten wie blöd auf irgendetwas zu casten, damit nicht alles auseinander fällt und man die Typprüfungen letztlich aushebelt.
        Ich hab einiges in Java gesehen und gemacht, aber das ist mir noch nie untergekommen. Hast du vielleicht versucht, Java nicht wie Java sondern wie eine andere Programmiersprache zu verwenden?

        Nö, ich hab nur solchen Code gesehen und dankend abgelehnt.

        Man tippt sich in Java entweder die Finger wund, oder man läßt Ko^H^HCode generieren. Beides ist nicht sonderlich schön.
        Was bedeutet "Ko^H^HCode"?

        ^H = Backspace

        Den Rest darfst Du dir selbst ausmalen.

        Aber versuch mal eine Java-Anwendung zu schreiben, die über Plattformgrenzen hinweg ein Gerät an einer RS232-Schnittstelle oder gar an einem USB-Port steuern soll. Das endet oft damit, dass man eine betriebssystem- und architekturspezifische "Native Code"-Schnittstelle bastelt, darüber ein paar Lagen Wrapper wie Klopapier stapelt, und hofft, dass der üble Geruch durch die Wrapper ausreichend verdeckt wird.
        Java wurde ja auch mit dem Ziel entworfen, möglichst nah an der Hardware und am Betriebssystem zu sein. Deswegen die VM...

        Nö, das ist die nachgebastelte Legende. Ursprünglich gab es durchaus einen Plan für eine Hardware-Maschine (Star 7), die compilierten Java-Code in Hardware ausführen sollte: http://en.wikipedia.org/wiki/Java_(software_platform)#History

        Ernsthaft: Hast du in diesen Fällen vielleicht versucht, Java für etwas zu verwenden, für das es nicht gedacht ist?

        Ich nicht, ich schreibe ohne große Not keinen Java-Code.

        Zu den Vorteilen von Java können die "Millionen Fliegen" sicher mehr schreiben als ich, mir steht Java einfach nur im Weg.
        Der Fliegensager hinterlässt doch einen etwas unguten Nachgeschmack. Glaubst du wirklich, alle Java-Entwickler rennen nur einem Trend hinterher?

        Nicht alle, und nicht nur einem Trend.

        Vor allem solltest Du die Stärken und Schwächen kennen.
        Zuallererst sollte man wissen, welche Sprache/Plattform wofür gedacht ist. Dann weiß man, dass beispielsweise ein Vergleich von Java mit C sinnlos ist.

        Klar, denn C gewinnt. *SCNR*

        Im Ernst: Auch der Vergleich muß erlaubt sein. Angefangen damit, dass man sich in C viel schneller und viel uneleganter in die Füße schießen kann als in Java. C kennt keine Strings und keine Arrays, beides ist nur eine dünne Schicht Syntactic Sugar über der Pointer-Arithmetik. Man muß sich in C komplett von Hand um die Speicherverwaltung kümmern. Das hat allerdings auch den Vorteil, dass einem nicht irgendwann völlig überraschend die Garbage Collection in die Parade fährt und die CPU blockiert.

        C und Pascal sind essenziell wichtig, weil sehr viele andere Sprachen mehr oder weniger direkt von C ([...] C#, [...] Javascript, Java [...]) [...] abgeleitet sind.
        Sorry, das ist völliger Unfug: C#, Javascript und Java haben vielleicht geringfügige Syntaxanleihen bei C genommen, sind aber ansonsten C so ähnlich wie Äpfel Telefonen.

        "Geringfügig" im Sinne von "großenteils", ja.

        Ein C-Programmierer, der C# (oder Java oder Javascript) lernt hat keinen nennenswerten Vorteil gegenüber einem Pascal-Programmierer, der C# (oder Java oder Javascript) lernt.

        Außer dass er viele Konstrukte aus C bereits Zeichen für Zeichen kennt.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        1. Moin Moin!

          Aber versuch mal eine Java-Anwendung zu schreiben, die über Plattformgrenzen hinweg ein Gerät an einer RS232-Schnittstelle oder gar an einem USB-Port steuern soll. Das endet oft damit, dass man eine betriebssystem- und architekturspezifische "Native Code"-Schnittstelle bastelt, darüber ein paar Lagen Wrapper wie Klopapier stapelt, und hofft, dass der üble Geruch durch die Wrapper ausreichend verdeckt wird.
          Java wurde ja auch mit dem Ziel entworfen, möglichst nah an der Hardware und am Betriebssystem zu sein. Deswegen die VM...

          Nö, das ist die nachgebastelte Legende. Ursprünglich gab es durchaus einen Plan für eine Hardware-Maschine (Star 7), die compilierten Java-Code in Hardware ausführen sollte: http://en.wikipedia.org/wiki/Java_(software_platform)#History

          Ernsthaft: Hast du in diesen Fällen vielleicht versucht, Java für etwas zu verwenden, für das es nicht gedacht ist?

          Ich nicht, ich schreibe ohne große Not keinen Java-Code.

          Hier fehlt noch der ein oder andere Link.

          Auerswald hat z.B. die Steuersoftware für seine Telefonanlagen (die vorherige Generation ohne Webserver, wie z.B. 2104, 2204, 2206, 4406, 4410, Basic, Basic.2) in Java geschrieben. Wunderbar, würde auch auf Nicht-Windows-Systemen laufen, wenn Java denn auf die Schnittstellen zugreifen könnte, mit denen man die Anlage steuert. Das sind Exoten wie RS232 und USB. Wahlweise auch ein ISDN-Adapter ("ISDN-Modem").

          Die AusweisApp ist ebenfalls mit Java gebastelt, und das BSI demontiert die Illusion "compile once, run everywhere" wunderbar (unter FAQ -> Betriebssysteme):

          Die AusweisApp unterstützt die nachfolgend genannten Betriebssysteme:

          * Windows XP 32bit / 64bit
              * Windows Vista 32bit / 64bit
              * Windows 7 32bit / 64bit

          Im Lauf des Jahres folgen darüber hinaus Versionen für

          * Ubuntu ab Version 9.04 32bit
              * Debian 5.0 32bit
              * MacOS 10.5 MacOS 10.6

          Andere Windows-Versionen, sei es das antike 2000 oder eine aktuelle Server-Version wie 2008 oder 2008 R2, werden nicht unterstützt. Bei MacOS nur die neueste und die vorherige Version. Klar, alte Apple-Hardware ist nach der regelmäßigen Keynote des Herrn Jobs sofort unbrauchbar und muß durch neue ersetzt werden. Von Debian exakt eine Version, dem Wortlaut nach nur auf 32-Bit-Plattformen, vermutlich eher nur der x86-Port. Dafür dem Wortlaut nach alle zukünfigen Ubuntu-Versionen auf 32-Bit-Plattformen, vermutlich aber auch wieder nur der x86-Port, und auch nur die bislang veröffentlichten Versionen. Keine Aussage zu LTS-Versionen. Keine Support für andere Debian-Derivaten. Kein Support für andere Distributionen. Kein Support für LFS oder T2. Kein Support für die diversen BSDs. Kein Support für Solaris.

          Schön bei Twitter zusammengefaßt: "Die AusweisAPP: Java-Wasserkopf und trotzdem plattformabhängig hingeschustert. Respekt. Ein Geländewagen, der nur auf ebenen Straßen fährt."

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
          1. Hi!

            Die AusweisApp und die Auerwald-Steuersoftware sind also suboptimal? Tja, mit C wär das natürlich nicht passiert!

            Ich werde hier nicht die Beispiele auflisten, wo irgendwelche Leute in C Blödsinn programmiert haben. Davon gibts genug, ich schiebe das aber nicht auf C sondern auf die Kompetenz der Autoren.

            Gerade die AusweisApp ist das beste Beispiel: Bei einer Software, bei der der Staat derartig die Finger im Spiel hat, wäre ich überrascht, wenn da was Ordentliches rauskommt, egal in welcher Sprache die implementiert wird.

            Grüße
            Bernhard

        2. Hi!

          Nö, ich hab nur solchen Code gesehen und dankend abgelehnt.

          Ok, hast du denn selber überhaupt schon mal was mit Java gemacht?

          Was bedeutet "Ko^H^HCode"?

          ^H = Backspace

          Den Rest darfst Du dir selbst ausmalen.

          Ich kapier leider trotzdem nicht, was du damit sagen willst... Wolltest du da eigentlich ein "Kotze", "Kot" o.ä. schreiben??

          Nö, das ist die nachgebastelte Legende. Ursprünglich gab es durchaus einen Plan für eine Hardware-Maschine (Star 7), die compilierten Java-Code in Hardware ausführen sollte: http://en.wikipedia.org/wiki/Java_(software_platform)#History

          Um bei Wikipedia zu bleiben: "C is an imperative (procedural) systems implementation language. It was designed to be compiled using a relatively straightforward compiler, to provide low-level access to memory, to provide language constructs that map efficiently to machine instructions, and to require minimal run-time support. C was therefore useful for many applications that had formerly been coded in assembly language."

          D.h., C wurde einfach nahe an die Hardware gebaut.

          Wenn man nun in grauer Vorzeit mal bei Sun versucht hat, eine Hardware-Maschine _an die Plattform_ hinanzubauen, dann sagt das was konkret über das Design der Plattform aus?

          Du kannst es drehen und wenden, wie du willst: Java ist nie und war nie für Systemprogrammierung wie C gedacht.

          Ernsthaft: Hast du in diesen Fällen vielleicht versucht, Java für etwas zu verwenden, für das es nicht gedacht ist?

          Ich nicht, ich schreibe ohne große Not keinen Java-Code.

          S.o.: Was hast du denn schon mit Java gemacht?

          Zu den Vorteilen von Java können die "Millionen Fliegen" sicher mehr schreiben als ich, mir steht Java einfach nur im Weg.
          Der Fliegensager hinterlässt doch einen etwas unguten Nachgeschmack. Glaubst du wirklich, alle Java-Entwickler rennen nur einem Trend hinterher?

          Nicht alle, und nicht nur einem Trend.

          Gut, wem oder was rennt die Masse dann nach? Und was macht der Rest, der nicht nachrennt?

          Dann weiß man, dass beispielsweise ein Vergleich von Java mit C sinnlos ist.

          Klar, denn C gewinnt. *SCNR*

          Nur damit das mal klar ist: C, Pascal, Java und Konsorten sind allesamt überflüssiges neumodisches Zeug. Das braucht kein Mensch. Für echte Männer gibts nur Fortran (PDF-Link) und programmiert wird mit Teco. 'nough said!

          Im Ernst: Auch der Vergleich muß erlaubt sein. Angefangen damit, dass man sich in C viel schneller und viel uneleganter in die Füße schießen kann als in Java. C kennt keine Strings und keine Arrays, beides ist nur eine dünne Schicht Syntactic Sugar über der Pointer-Arithmetik. Man muß sich in C komplett von Hand um die Speicherverwaltung kümmern. Das hat allerdings auch den Vorteil, dass einem nicht irgendwann völlig überraschend die Garbage Collection in die Parade fährt und die CPU blockiert.

          Jo, man sieht diese Unterschiede und am Ende steht man mit der Erkenntnis da, dass es Bereiche gibt, in denen man C weiter kommt als mit Java und umgekehrt. Es steht dir natürlich weiterhin frei, mit C Webanwendungen (oder mit Java Betriebssysteme) zu schreiben. _Gehen_ tut das ja beides; ich machs aber trotzdem nicht. :-)

          "Geringfügig" im Sinne von "großenteils", ja.

          Dann eben von mir aus größtenteils.

          Ein C-Programmierer, der C# (oder Java oder Javascript) lernt hat keinen nennenswerten Vorteil gegenüber einem Pascal-Programmierer, der C# (oder Java oder Javascript) lernt.
          Außer dass er viele Konstrukte aus C bereits Zeichen für Zeichen kennt.

          Er kennt die Schlüsselwörter, großartig. Der Pascal-Programmierer muss natürlich erst langwierig lernen, dass er statt

          While i < 10 do  
          Begin  
            i := i + 1;  
          End;
          
          while (i < 10) {  
            i = i + 1;  
          }
          

          schreiben muss. Derartige Syntaxunterschiede dürfen für jemanden, der mit Programmieren sein Geld verdient, kein Hindernis darstellen.

          Grüße
          Bernhard

  4. Hi,

    [..] Gibt es aber ein Kernfeld?

    Ja: Bankenanwendungen

    Ich habe von einem Informatikstudenten gehört, dass Java oder C als Alternative zu Auswahl stehen an der Uni, also ein von beiden _muss_ man lernen.

    Sei froh, dass Du kein Russisch lernen musst. Obwohl: Heute würde ich das sogar gerne machen...

    Друшба!

    (war bestimmt wieder verkehrt ж)

    Hotti

    --
    Mijachkie Snjak: Was zu Essen mit weichgekochten Eiern.
  5. Moin,

    Was für einen Grund gibt es, mit Java zu programmieren und was für welche, das nicht mit Java zu machen? Welche größeren Projekte sind in Java programmiert. Warum gibt der Tiobe-Index Java mit knapp 20% auf Platz 1 an?

    "Große" Client-Server-Systeme...und ich meine damit WIRKLICH(!) große...wie z.b. die Backend-Systeme in Websjops, Banken, Versicherungen usw. sind sehr oft in Java programmiert.

    Der Grund hierfür ist z.b., dass Java (weniger als Sprache, sondern die ganze Architektur) sehr frühzeitig an Skalierbarkeit gedacht hat: Große Systeme müssen zum Teil mehrere zehn-tausend komplexe Transaktion in der Sekunde verarbeiten. Java kann das, wenn man es clever einsetzt. Andere Sprachen allerdings inzwischen auch (Facebook = PHP+MySQL, nur als Beispiel), aber in der Zeit, in der Java "groß" geworden ist (Ende 90er/Anfang 2000er) gab es in dieser Hinsicht kaum Vergleichbares.

    Die strenge Typisierung, die hier oft als Nachteil gesehen wird, ist bei großen Entwickler-Teams IMO von Vorteil. Es gibt einfach Applikationen, die so groß sind, dass es keinen mehr im Team gibt, der alle Schnittstellen und Klassen überschauen kann, und über Coding-Guidelines kann man bei so einer Größe auch nicht sicherstellen, dass alle Entwickler nach einer bestimmten Vorgabe programmieren. Die "Strenge" bei Java hilft dabei, wenigstens ein Minimum an Code-Qualität einzuhalten.

    Der Einsatz in Schulen und im Studium ist IMO widerrum dadurch begründet, dass Java einen sehr sauberen Programmierstil erzwingt, den man in anderen Sprachen zwar ebenso nutzen kann aber keineswegs muss.

    Fazit: Java gilt als Dinosaurier und der Ruf ist berechtigt: Es ist schwerfällig, langsam, unflexibel, starr,... aber es fällt eben auch nicht so schnell auf die Füsse, wenn der Wind mal etwas stärker bläst.

    Aber es muss eben nicht jedes Tier einen Hurrican überstehen können, will sagen, es gibt vergleichsweise wenig Applikationen, für die man in solchen Dimensionen denken muss.

    Ich habe von einem Informatikstudenten gehört, dass Java oder C als Alternative zu Auswahl stehen an der Uni, also ein von beiden _muss_ man lernen.

    Wir mussten an der Uni beides lernen, und ich kann auch beides empfehlen: Java aus den o.g. Gründen, C, weil es einen wie nur wenig andere Sprachen sehr nah an die Maschine heranführt, sodass man wirklich lernen kann, was auf unterster Ebene passiert.

    1. Hallo,

      Wir mussten an der Uni beides lernen, und ich kann auch beides empfehlen: Java aus den o.g. Gründen, C, weil es einen wie nur wenig andere Sprachen sehr nah an die Maschine heranführt, sodass man wirklich lernen kann, was auf unterster Ebene passiert.

      Was ich interessant finden würde wäre zu erfahren was du genau studiert hast. Bei uns wird nämlich eigentlich bei jedem Kurs so halb vorausgesetzt dass man eigentlich alle Programmiersprachen kann, auch die etwas mehr obskuren wie Erlang, Lisp, Skala, ...

      Ja, Java hatten wir (Computer Science in Schweden) auch ziemlich am Anfang, aber nur um an Objektorientierung herangeführt zu werden, es hätte wohl auch jede andere objektorientierte Sprache genauso getan. Die erste Sprache aber war damals Haskell was auch so einige aus der Bahn geworfen hat ;)

      Jeena