Einstieg in C++

  • C/C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Einstieg in C++

    Hallo,
    ich fange ab Wintersemester ein Elektrotechnikstudium an und mache gerade ein Praktikum. Dort sehe ich mich bald mit der Sprache c konfrontiert, wenn es darum geht Mikrocontroller zu programmieren,
    wen's interessiert: mikrocontroller.net/articles/C

    Da ich allerdings dort nur grundlegendes machen werde, wollte ich nicht anfangen c "vollständig" (wenn es deratiges überhaupt gibt) zu lernen.

    Allerdings finde ich C++ ganz interessant, bin jetzt beim surfen auf das "Microsoft Visual C++ 2010 Express" gestoßen, was einen ansprechenden Eindruck macht.

    Programmieren kenne ich allerdings nur vom Game-Maker. Als ich mich das erste mal vor "c" setzte (auf der Arbeit) bekam ich eine Konsole geöffnet, hoppla, komplett ohne Benutzerinterface, einfach die Windows-Konsole :D

    Okay, ich hab's dann auch begriffen ... Game Maker bietet ja schon einen gewissen Grundstock, ich kann Grafiken importieren, sie in Räume setzen .. all das ohne auch nur eine Codezeile zu verfassen.

    Nun stellen sich mir einige Fragen und suche nach Anregungen und Meinungen.

    Erstens: Lässt sich mit C++ und der oben genannten Software überhaupt etwas derartiges, so wie ich es kenne, realisieren? Also das programmieren eines Programmes (keine Konsole, die sich öffnet), in dem ich Buttons drücken kann, Grafiken anzeigen kann, und so weiter ...?

    Zweitens: Wäre folgende Lektüre (vielleicht kennt sie ja einer bereits):
    amazon.de/Jetzt-lerne-Visual-2…TF8&qid=1309377390&sr=8-3

    Ist dies etwas für den Einstieg? Mit dem Game-Maker kann ich Variablen definieren, if-else, for-schleifen, arrays, ist mir alles bekannt.
    Aber im Grunde bin ich ja doch absoluter Neuling. Denn ich kann mir nicht im entferntesten vorstellen, wie ich ein Benutzerinterface aus for-schleifen coden soll ;)

    In wie weit bringt's mich weiter C++ zu beherrschen, was sind die Vorteile? und welche anderen Sprachen eignen sich noch für den Einstieg?
    Ich weiß, dass ich im ersten Semester beispielsweise unter anderem Java lernen werde ...


    Vielen Dank für's durchlesen und die Mühe :)
    Gruß
    naibaf
    True story!
  • ich persönlich benutze als Compiler und IDE Dev-C++, da mir das Interface einfach simpler gehalten wurde, aber das ist dann wohl Nebensache. Ich kann dir nur das Open Book von Galileo Books: C von A bis Z empfehlen, ich habs selber nicht ganz durch, aber auf jedenfall ein toller Einstieg und vor allem geht es von 0 aus los. Also mit Game Maker Kenntnissen dürftest du dort schon ein paar Kleinigkeiten kennen ;)

    In wie weit bringt's mich weiter C/C++ zu beherrschen, was sind die Vorteile?

    enorm, nicht nur, dass es die weit verbreitesten Sprachen sind, nein auch Platformunabhängigkeit sind dabei ganz entscheident. Für alle möglichen Geräte sind diese Sprachen einsetzbar. Der ANSI C standart dürfte sogar bis zum Taschenrechner verbreitet sein ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von domis4 ()

  • C++ ist eine Erweiterung von C, dort gibt es auch das OOP Konzept. Mit C/C++ kann man alles anstellen was so auf einen Computer läuft und auch viel kaputt machen. Ich selbst hab nur wenig mit C bsw. C++ bisher angestellt.
    Erstens: Lässt sich mit C++ und der oben genannten Software überhaupt etwas derartiges, so wie ich es kenne, realisieren? Also das programmieren eines Programmes (keine Konsole, die sich öffnet), in dem ich Buttons drücken kann, Grafiken anzeigen kann, und so weiter ...?
    Ja kannst du , der Firefox ist ja auch in C++ geschrieben, das ganze erfordert aber auch ein wenig wissen. Das ganze musst du über die Windows APIs machen oder andere APIs verwenden.

    Aber im Grunde bin ich ja doch absoluter Neuling. Denn ich kann mir nicht im entferntesten vorstellen, wie ich ein Benutzerinterface aus for-schleifen coden soll ;)
    Probier rum, probier einfach alles mal aus, egal wie komisch das ist, dabei lernt man extrem viel. ;)
    In wie weit bringt's mich weiter C++ zu beherrschen, was sind die Vorteile? und welche anderen Sprachen eignen sich noch für den Einstieg?
    C++ ist um längen schneller als GML. C++ wird sehr oft verwendet und es gibt auch Open-Source Projekte an denen du dir den Code angucken kannst. (hilft auch) C++ ist aber eine recht komplex Sprache, damit kann man auch viel shice anstellen(Ganze Betriebssystem programmieren).
    Jede Sprache ist für irgendein Sinn gemacht worden, daher sucht man sich am besten die Sprache aus die für seinen Zweck am besten geeignet ist.

    Okay, ich hab's dann auch begriffen ... Game Maker bietet ja schon einen gewissen Grundstock, ich kann Grafiken importieren, sie in Räume setzen .. all das ohne auch nur eine Codezeile zu verfassen.
    Früher wurden Spiele in Assembler/Maschinencode programmiert, mit uralter Technik (8-Bit CPU, 16kilobyte RAM) und das war schone ein riesen Aufwand (denke ich mal). C# ist recht interessant für Anfänger, in dem sich auch tolle Windows Fenster mit Mausklicken (in Visual C#) machen (du klickst dir deine Anwendung buchstäblich zusammen) bis du dann an den Code kommst. Mit C# lassen sich auch interessante Dinge anstellen (ein C# OS z.B.).

    Ich empfehle dir einfach mal eine Sprache an zu gucken und rum probieren :) Gucke dir Code Beispiele an (ich hab Java an Minecraft gelernt...). Zum Beispiel das das: github.com/copyboy/Thnar


    (Wenn ich irgendwo shice laber, bitte melden, ich weiß auch nicht alles genau.)
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Mit C++ kann man alles machen. Es hat viele Vorteile und eignet sich gut für Spiele da es eine Objektorientierte Sprache ist. Mit C++ können ganze Systeme programmiert werden. Sie ist schnell und kann einfach auf den Speicher zugreifen. Man kann 2D und 3D Spiele machen. Um Spiele zu erstellen oder überhaupt eine Grafische Benutzeroberfläche darzustellen muss man DirectX lernen. Aber in Gegensatz zum Game Maker muss man alles selbst basteln, aber dafür gibt es DLL's und EngienenUnd ein kleiner Tipp das komplette Spiel wird in einer Schleife abgespielt im gegensatz zu Anwendungen wie Exel Word usw. Wenn du mit Visual C++ programmieren willst musst du das DirectX-SDK dort einrichten. Ups jetzt habe ich über C++ Spiele geschrieben... egal läuft aufs gleiche hinaus :D .

  • Mit dieser Meinung stehe ich wahrscheinlich wieder ganz alleine da, aber:
    Hört bitte auf ihm einzureden, dass er mit einer sehr mächtigen, plattformunabhängigen Programmiersprache am besten die windowsspezifischen Dinge und APIs lernen soll.
    Ich bin wahrlich kein C++ Experte, habe mich aber weitgehendst über die Möglichkeiten informiert und auch schon was spielbares fertig gebracht.

    Leider wurde hier schon viel gefährliches Halbwissen gepostet und ich entschuldige mich jetzt mal im Vorfeld für die wohl klugscheißerhaft wirkende Verbesserung und eventueller Fehler, welche trotzdem aufkommen könnten.
    Ich nehme einfach mal die Posts auseinander bei denen mir Sachen aufgefallen sind...

    C++ ist eine Erweiterung von C, dort gibt es auch das OOP Konzept. Mit C/C++ kann man alles anstellen was so auf einen Computer läuft und auch viel kaputt machen.

    C++ ist eine Erweiterung von C, das ist richtig. Jedoch hat C momentan einen neueren Standard als den, der als Untermenge in C++ dabei ist. C-Code ist damit meistens, aber halt nicht immer kompatibel.
    Man kann ziemlich viel anstellen, aber in modernen Betriebssystem mit Speicherzugriffsschutz, etc. müllt man höchstens RAM oder HDD zu oder lastet die CPU endlos aus(was bei Mehrkernen keinen Hängenbleiben zur Folge hat)

    C++ ist um längen schneller als GML. C++ wird sehr oft verwendet und es gibt auch Open-Source Projekte an denen du dir den Code angucken kannst. (hilft auch) C++ ist aber eine recht komplex Sprache, damit kann man auch viel shice anstellen(Ganze Betriebssystem programmieren).

    Als Anfänger im Code von OpenSource Programmen rumzuwühlen, hilft meist eher weniger. Dazu braucht man erstmal Verständnis mit der Sprache. Außerdem kann der Coding-Stil einiger Leute es einem ziemlich wirr im Kopf machen. :D
    Ein Betriebssystem kann man hingegen nicht mit C++ programmieren. Zumindest nicht direkt. C++ braucht eine Laufzeitbibliothek, welche vom Betriebssystem bereitgestellt wird. Einzelne Komponenten kann man natürlich in C++ schreiben.

    C# ist recht interessant für Anfänger, in dem sich auch tolle Windows Fenster mit Mausklicken (in Visual C#) machen (du klickst dir deine Anwendung buchstäblich zusammen) bis du dann an den Code kommst. Mit C# lassen sich auch interessante Dinge anstellen (ein C# OS z.B.).

    (Mal abgesehen davon, dass ich den ganzen C# Hype hier nicht verstehen kann(Windows only/.NET). Ist aber subjektiv)Für andere, plattformunabhängige GUI-Systeme gibt es meist auch einen Window-Designer, daran solls nicht hängenbleiben.
    Ein Betriebssystem, welches in C# geschrieben wurde ist völliger Unsinn, weil es wie gesagt nur auf Windows mit dem .NET Framework läuft.

    Um Spiele zu erstellen oder überhaupt eine Grafische Benutzeroberfläche darzustellen muss man DirectX lernen.

    Wie wäre es denn mit so etwas wie SDL? Auf Windows wird es letztendlich auf DX zurückgreifen, aber man kann den gleichen Code für fast alle Plattformen verwenden. Wenn man man Hardwarebeschleunigung braucht/will, dann nimmt man OpenGL dazu.
    Wenn, dann schreibt man unter Windows die GUIs mit der WindowsAPI, aber auch da gibt es elegantere Lösungen(auch wieder plattformunabhängig). Die WinAPI ist alles andere als unkompliziert.
    (Was mich hier am meisten gestört hat war das "muss" mit darauf folgender Windows-only Technologie)


    Java ist letztendlich auch eine Sache für sich. Ganz so plattformunabhängig ist es ja doch nicht. Man ist auf die Existenz der JavaVM angewiesen. Gibts diese nicht, dann halt pech. Außerdem ist Java langsamer als eine kompilierte Sprache.



    Der ganze Beitrag liest sich wohl anders als er gemeint ist. Im Grunde will ich ihn nur von falschem Wissen befreien und den Weg Richtung Platzformunabhängigkeit zeigen. Man sollte ein bisschen über das Anti-Linux Argument Nummer 1 nachdenken. So wird es bestimmt nicht mehr Software für Linux geben, wenn überall Windowspezifische Dinge empfohlen werden.



    *Es könnten trotzdem Fehler in meiner Anprangerei vorhanden sein.
    *Ich bin trotz allem hauptsächlich Windows User. Linux wird bei mir nur auf einem bestimmten mobilen Gerät verwendet.
    *Alle Angaben ohne Gewehr
    (Ich habe viel zu lange für diesen Post gebraucht.)
  • Ein Betriebssystem, welches in C# geschrieben wurde ist völliger Unsinn, weil es wie gesagt nur auf Windows mit dem .NET Framework läuft.
    brokenwire.net/bw/Programming/62/c-operating-system
    (Mal abgesehen davon, dass ich den ganzen C# Hype hier nicht verstehen kann(Windows only/.NET). Ist aber subjektiv)
    http://www.mono-project.com/Main_Page
    Java ist letztendlich auch eine Sache für sich. Ganz so plattformunabhängig ist es ja doch nicht. Man ist auf die Existenz der JavaVM angewiesen. Gibts diese nicht, dann halt pech. Außerdem ist Java langsamer als eine kompilierte Sprache.
    Solang du nicht auf nehm GBA programmieren willst...

    Als Anfänger im Code von OpenSource Programmen rumzuwühlen, hilft meist eher weniger. Dazu braucht man erstmal Verständnis mit der Sprache. Außerdem kann der Coding-Stil einiger Leute es einem ziemlich wirr im Kopf machen. :D
    Solang es kleine Projekte sind (z.B. nicht der Linux Kernel...) und man schon sich einen Stil angewöhnt hat durch die IDE oder durch GML.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • http://www.brokenwire.net/bw/Programming…perating-system

    Interessante Sache. Bin gespannt wie sich das entiwckelt.


    http://www.mono-project.com/Main_Page

    Als Argument ist die Kompatibilität momentan zu schwach. MS wird auch ständig .NET weiterentwickeln, da kommt man nicht so leicht nach.
    Und leider wird bei vielen Problemen eine Lösung vorgeschlagen die letztendlich wieder auf die WinAPI zurückgreift. Zumindest was GUI-Programmierung betrifft.


    Solang du nicht auf nehm GBA programmieren willst...

    Und wenn ich das will? Homebrew, OpenSource Handhelds. Man kann mal über den Tellerrand schauen. Gerade bei mobilen Geräten gilt wieder das mit der Geschwindigkeit.



    Solang es kleine Projekte sind (z.B. nicht der Linux Kernel...) und man schon sich einen Stil angewöhnt hat durch die IDE oder durch GML.

    Dass man sich nen eigenen Coding-Stil angeeignet hat hilft aber recht wenig wenn man sich durch fremden Code wühlt. Als Anfänger sollte man, wie gesagt, erstmal ein Verständnis für die Sprach aufbringen.
    Nebenbei meinte ich natürlich damit nicht den Linux Kernel, aber wenn man sich jetzt irgendein OS Projekt rauspickt, dann wird es auch nicht gerade übersichtlich auf den ersten Blick.
  • elvissteinjr schrieb:

    Zitat
    Solang du nicht auf nehm GBA programmieren willst...

    Und wenn ich das will? Homebrew, OpenSource Handhelds. Man kann mal über den Tellerrand schauen. Gerade bei mobilen Geräten gilt wieder das mit der Geschwindigkeit.


    dann portierst du dir die Java Bibliotheken auf den GBA ;)
    ... oder du lernst c/c++ denn damit sind auch die GBA Games von Nintendo programmiert. Das meiste ist in C/C++ programmiert ;)
  • elvissteinjr schrieb:

    Als Argument ist die Kompatibilität momentan zu schwach. MS wird auch ständig .NET weiterentwickeln, da kommt man nicht so leicht nach.
    Und leider wird bei vielen Problemen eine Lösung vorgeschlagen die letztendlich wieder auf die WinAPI zurückgreift. Zumindest was GUI-Programmierung betrifft.


    Wird das Argument stärker, wenn ich dir erzähle, das Microsoft Angestellte hat, deren einzige Aufgabe es ist, die Mono-Entwickler bei ihrer Arbeit zu unterstützen?

    Im übrigen gibt es noch MOSA, eine Gruppe, die ein Open-Source Betriebssystem auf .NET-Basis entwickelt, aber rootnode kann dir dazu wohl mehr erzählen, als ich (vor allem, inwiefern sich das von Cosmos unterscheidet, oder ob da zwei Gruppen das selbe machen).
  • @Threadersteller:
    Da du E-Technik studierst und nicht Informatik kann dir (meiner Erfahrung nach) der Objektorientierte Kram von C++ erstmal hinten rum gehen, meistens wirste dich mit C rumschlagen.
    Ich hab schon Tutorien für E-Techniker/Nachrichtentechniker/etc. in klassischen Datenverarbeitungsvorlesungen gegeben bzw. im Embedded Computing Bereich (Cluster-Computing, Microcontroller, Assemblerprogammierung etc.). Kein einziges Mal hab ich da Java oder ähnliches gelehrt sondern immer nur C/C++. Euer Anwendungsgebiet beschränkt sich im Normalfall auf eingebettete Systeme bzw. seltener statistische Verfahren. Große Software-Systeme werden klassischerweise in C++ oder Java realisiert, aber damit wirste dich kaum beschäftigen, allenfalls um den Blick über den Tellerrand hin zu anderen Fachgebieten zu bekommen.
    Daher wäre mein Vorschlag, lern jetzt einfach C und C++, das geht Hand in Hand, dann biste für etwaige Microcontroller Programmierung und Ähnliches gut vorbereitet. Wenn du wirklich Java lernen musst dann haste eigtl. keine Probleme wenn du halbwegs C++ programmieren kannst. Sooo unterschiedlich sind die Sprachen dann auch wieder nicht.

    @C-Diskurs:
    Der Vorteil von C ist eben, dass der Kern der Sprache sehr kompakt ist und daher praktisch für alle Prozessoren entsprechende Compiler vorhanden sind.
    Allenfalls GO von Google könnte C als Systemprogrammiersprache ersetzen.

    Mobile Geräte werden ja mittlerweile alle Naselang rausgekackt und da isses einfach wirtschaftlicher nen C-Compiler anzupassen als ne Java VM zu implementieren, meistens ist der Compiler sogar schon da wenn man alte Prozessoren verwendet.
    Das hat seltener etwas mit Geschwindigkeit zu tun, sondern mit der Frage: "Was kostet uns weniger?"

    Warum Java geil ist: :troll:
    Hadoop ist eine komplett in Java geschriebene Reimplementierung der Google Infrastruktur und eine der wichtigsten Cluster/Cloud Computing Lösungen überhaupt.
    Yahoo, Facebook, Twitter, IBM, Apple, Amazon etc. setzten alle Hadoop für verteilte Berechnungen ein.
    Im Juli 2009 hat ein einzelner Hadoop Cluster von Yahoo 100 Terrabyte an Daten in 2:53h sortiert (3452 nodes x (2 Quadcore Xeons, 8 GB memory, 4 SATA).
    (Psst, unter uns, ja das ist sehr schnell ;) )
    Quelle: sortbenchmark.org/
    Mittlerweile werden aber mehrere Petabyte an Daten verarbeitet und bis jetzt hat sich noch keiner über die Leistung von Facebook, Twitter, Amazon etc. beschwert :)

    So viel dazu, dass Java langsam ist.
    Im embedded Bereich spielt Java kaum eine Rolle, aber im High Performance Computing dafür eine umso wichtiger und sind wir mal ehrlich... Power ist sexy :P

    Noch ein paar nette Worte zum Firefox, weils irgendwer erähnt hat:
    Der Firefox ist im Kern schon mit C/C++ programmiert, aber die Oberfläche ist komplett in Javascript + XUL geschrieben. Nur mal so, falls einer auf die Idee kommt zu behaupten Javascript wäre Kot :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Thodd ()

  • Danke für die ganzen, teils sehr ausführlichen Beiträge. Hat mir auf jeden Fall sehr weitergeholfen.
    Ich habe mir jetzt ein Buch über C++ gekauft und bin fleißig am lernen.
    Und falls es falsch rübergekommen ist:
    Ich lerne nicht für mein E-Tec Studium, sondern aus Interesse, aber schaden kann es fürs Studium ja auf gar keinen Fall :)

    Und sollte ich mal vor Problemen stehen, hier scheinen ja einige Ahnung zu haben :P

    LG
    naibaf
    True story!
  • elvissteinjr schrieb:

    Als Anfänger im Code von OpenSource Programmen rumzuwühlen, hilft meist eher weniger. Dazu braucht man erstmal Verständnis mit der Sprache. Außerdem kann der Coding-Stil einiger Leute es einem ziemlich wirr im Kopf machen.
    In Visual Studio 2010 ist aber der Coding-Stil gleich, außer bei Ressourcennamen und Variablen, aber sonst ist das Klammernsetzen, Leerzeichen, usw. gleich!

    PS: Dieser Trollsmilie :troll: hat beim ersten Blick wie ein Schiff ausgeschaut, ich würds vlt. nachbessern. :D
  • Huiuiui, soooo viel zu kommentieren! Machen wir das ganze mal Stück für Stück.

    Thodd schrieb:

    @Threadersteller:
    Da du E-Technik studierst und nicht Informatik kann dir (meiner Erfahrung nach) der Objektorientierte Kram von C++ erstmal hinten rum gehen, meistens wirste dich mit C rumschlagen.
    Ich hab schon Tutorien für E-Techniker/Nachrichtentechniker/etc. in klassischen Datenverarbeitungsvorlesungen gegeben bzw. im Embedded Computing Bereich (Cluster-Computing, Microcontroller, Assemblerprogammierung etc.). Kein einziges Mal hab ich da Java oder ähnliches gelehrt sondern immer nur C/C++. Euer Anwendungsgebiet beschränkt sich im Normalfall auf eingebettete Systeme bzw. seltener statistische Verfahren. Große Software-Systeme werden klassischerweise in C++ oder Java realisiert, aber damit wirste dich kaum beschäftigen, allenfalls um den Blick über den Tellerrand hin zu anderen Fachgebieten zu bekommen.
    Daher wäre mein Vorschlag, lern jetzt einfach C und C++, das geht Hand in Hand, dann biste für etwaige Microcontroller Programmierung und Ähnliches gut vorbereitet. Wenn du wirklich Java lernen musst dann haste eigtl. keine Probleme wenn du halbwegs C++ programmieren kannst. Sooo unterschiedlich sind die Sprachen dann auch wieder nicht.


    Ok, mehrere Punkte. Ein paar davon sind Feinheiten die mir aufstoßen. Also: Clustercomputing als Subkategorie von Embedded Computing? Seriously? Hm, und ich muss sagen dass es doch eher die Informatiker sind die sich mit den Embedded Systems beschäftigen. Die reine Programmierung machen dann die Lakaien, aber da geht es doch eher um eine gute Ausfallsicherheit und intelligent designte Systeme. Als E-Techniker wird er sich wohl wenn eher auf der VHDL-Ebene bewegen würde ich sagen. Klar wird er viel Kontakt mit C/C++ haben, will ich definitiv nicht abstreiten. Aber das ganze spiegelt sich in deinem letzten Satz wieder. Es geht um die Grundlagen und Ideen hinter der Programmierung, nicht die Sprache (auch wenn die ein oder andere die Dinge einfacher gestaltet).

    Thodd schrieb:

    @C-Diskurs:
    Der Vorteil von C ist eben, dass der Kern der Sprache sehr kompakt ist und daher praktisch für alle Prozessoren entsprechende Compiler vorhanden sind.
    Allenfalls GO von Google könnte C als Systemprogrammiersprache ersetzen.

    Mobile Geräte werden ja mittlerweile alle Naselang rausgekackt und da isses einfach wirtschaftlicher nen C-Compiler anzupassen als ne Java VM zu implementieren, meistens ist der Compiler sogar schon da wenn man alte Prozessoren verwendet.
    Das hat seltener etwas mit Geschwindigkeit zu tun, sondern mit der Frage: "Was kostet uns weniger?"


    Irgendwie wird der Großteil der mobilen Geräte (den meisten Teil machen ja Smartphones und Tablets aus) in Java/C#/Objective-C gecodet. C findest du da höchstens als Systemsprache, wenn überhaupt.

    Thodd schrieb:

    Warum Java geil ist: :troll:
    Hadoop ist eine komplett in Java geschriebene Reimplementierung der Google Infrastruktur und eine der wichtigsten Cluster/Cloud Computing Lösungen überhaupt.
    Yahoo, Facebook, Twitter, IBM, Apple, Amazon etc. setzten alle Hadoop für verteilte Berechnungen ein.
    Im Juli 2009 hat ein einzelner Hadoop Cluster von Yahoo 100 Terrabyte an Daten in 2:53h sortiert (3452 nodes x (2 Quadcore Xeons, 8 GB memory, 4 SATA).
    (Psst, unter uns, ja das ist sehr schnell ;) )
    Quelle: sortbenchmark.org/
    Mittlerweile werden aber mehrere Petabyte an Daten verarbeitet und bis jetzt hat sich noch keiner über die Leistung von Facebook, Twitter, Amazon etc. beschwert :)

    So viel dazu, dass Java langsam ist.
    Im embedded Bereich spielt Java kaum eine Rolle, aber im High Performance Computing dafür eine umso wichtiger und sind wir mal ehrlich... Power ist sexy :P


    Eigentlich ist es eher genau andersrum. Im Embedded Bereich ist Java leider sehr verbreitet durch Android, Symbian, etc. Im High Performance Computing ist, wenn wir Data Mining mal rausnehmen, sehr stark C/C++/Matlab/Fortran vorherrschend, und zwar sehr stark. Aber um deinen Punkt der Java "Performance" zu sprechen zu kommen:

    Ok, dieses tolle "Hadoop" zieht seinen größten Geschwindigkeitsvorteil eher aus dem MapReduce Algorithmus, denn erst dieser ermöglicht die hohe Skalierungsfähigkeit. Wird nur so stark genutzt da es die momentan einzig ausgereifte freie Implementierung ist die ein entsprechend großes Framework bietet. Und Java ist nicht unbedingt langsam, aber ich fange hier einfach mal an zu ranten: 90% der Performance eines Programms liegen in der Architektur und dem Design der Algorithmen. Die Sprache macht da nur einen kleinen Teil aus. Insbesondere im Bereich Data Mining, (wofür Hadoop (bzw. Map Reduce (ich fühle mich so Lispig)) am meisten eingesetzt wird) machen die Algorithmen sogar 99% der Geschwindigkeit aus würde ich mal behaupten.
    Welche Sprachen jedoch einen sehr sehr großen Vorteil liefern können sind die Sprachen aus der Funktionalen Familie, insbesondere die Typensicheren und strikten dieser Gattung. Denn hier ist allein schon durch das Sprachdesign eine extrem hohe Skalierbarkeit und Parallelisierung gegeben. Beispiele wären hier die 3 großen: Haskell/Scala/F#.
    Und am Rande möchte ich hier nur bemerken dass Java eigentlich eine schlechte Sprache ist um einzusteigen, da sie zu einem sehr schlechten Programmierstil verführt. Es sind oft viele und hässliche Workarounds notwendig aufgrund fehlender Typsicherheit und/oder der verkackten internen Architektur der VM. Ich möchte dich mal ermutigen dir die Interna der Java VM anzusehen und es danach immer noch zu loben...du wirst es nicht hinkriegen ;) Was aber hier zu einem Flamewar ausarten würde, den das Forum bestimmt nicht möchte. Bin aber gern im IRC dafür zu haben, hehe.

    Thodd schrieb:

    Noch ein paar nette Worte zum Firefox, weils irgendwer erähnt hat:
    Der Firefox ist im Kern schon mit C/C++ programmiert, aber die Oberfläche ist komplett in Javascript + XUL geschrieben. Nur mal so, falls einer auf die Idee kommt zu behaupten Javascript wäre Kot :P


    Die dennoch auf ein UI Backend zurückgreifen muss. Sei es die Windows-API, Cocoa oder GTK. Was alles dementsprechend portiert und angepasst werden muss. Klar gibts da Layer drüber, aber es ist eine Extraschicht die mitgeführt werden muss.
    Und for the record: Ja, JavaScript IST Kot, alleine schon weil es eine dynamisch typisierte Sprache ist und sowas sollte ganz dringend aus dem Web verschwinden! Das würde einiges an Sicherheitslücken schließen.

    Firefox ist ein ähnlich wie Java geartetes Konstrukt. Layer über Layer über Layer. Die spielen da Softwarejenga...keine Sau traut sich mehr auf den unteren Ebenen den Code anzufassen, aus Angst etwas könnte kaputt gehen. Währenddessen wird brav weiter oben gestapelt. Gerade Java ist großartig darin. Bestes Beispiel sind einfach die Java "Generics". Da hätten sie auch einfach bei object bleiben können.
    Siehe dazu:


    So, genug gerantet. Erstmal vielen Dank an CAS für die Erwähnung von MOSA.
    Unser Unterschied zu Cosmos ist grob beschrieben folgendermaßen: COSMOS erzeugt aus dem .NET Code einfachen Assembler Text Output und jagt diesen anschließend durch einen Assembler. Dadurch sind sie schon per Definition so gut wie nicht in der Lage die Userland Programme als JIT auszuführen, was dem Sinn eines Managed OS so ziemlich widerspricht und auch alle Vorteile eines selbigen vernichtet (z.B. Runtime Optimizations).
    Es besteht eine Kooperation in dem Sinne dass wir bei MOSA daran arbeiten ebenfalls Text Output als Alternative anzubieten. Dadurch könnte COSMOS sich an unserem Compiler beteiligen und weiter am OS arbeiten. Ebenfalls gibt es Gespräche über gemeinsame Treiberschnittstellen.

    Angehangene Hintergründe zur Person, um meine Einstellung zu den Themen zu erläutern:
    Hass auf Java:
    - a) Am Lehrstuhl wird bei unseren Forschungsprojekten leider Java benutzt. Man lernt es zu hassen nach einiger Zeit.
    - b) Durch die Jahrelange Arbeit an MOSA habe ich auch sehr viel über die internen Mechanismen von VMs kennengelernt und Konzepte wie Metadaten und Generics. Diese sind auf der Javaseite einfach dermaßen übel verhauen, dass es schon nicht mehr feierlich ist.
    Hadoop/DataMining/Geschwindigkeit:
    - Seit geraumer Zeit Hiwi im Bereich Data Mining und auch meine Thesis in diesem Bereich geschrieben.
    Softwarejenga:
    - Siehe "Hass auf Java", Punkt b). MOSA ist ein mittlerweile groß geratenes Projekt und damals haben wir auch Jenga gespielt. Bis zu einem Rewrite der uns ein Jahr Arbeit gekostet hat.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von rootnode ()