Welche Programmiersprache?

Anima97

Mitglied
Hallo zusammen,
ich bin 14 Jahre alt und programmiere nun schon seit 2 Jahren, hauptsächlich in den Scriptsprachen PHP (+ MySQL) und JavaScript. Momentan interessiere ich mich aber mehr für die Anwendungsentwicklung auf dem Computer.
Vor kurzem habe ich mal angefangen C++ zu lernen, wobei ich derzeit leider bei den Basics festhänge. Ich verstehe zwar bisher alles ganz gut, aber als ich mir letztens mal verschiedene APIs und Frameworks wie die WinAPI oder OpenGL angesehen habe, habe ich echt einen kleinen Schock bekommen, weil ich mich da echt nicht reingefunden habe. Nur um ein kleines Nachrichtenfenster zu erzeugen, braucht man da ~ 50 Zeilen Code.
Ich lerne C++ übrigens anhand von Tutorials aus dem Internet, weil ich mir nicht so sicher bin ob es sich lohnen würde sich ein Buch anzuschaffen.

Als ich mich schließlich bei anderen Foren mal erkundigt hatte, welche Programmiersprache denn auch für den Beruf am Besten sein würde, habe ich C++ als Antwort bekommen. Mit C# würde das Entwickeln zwar schneller gehen, aber durch .NET wäre man wohl stark behindert. Selbst Mono soll ja noch nicht so wirklich ausgereift sein.

Momentan überlege ich, ob ich eine andere Programmiersprache lernen sollte, weil ich auch keine besonders gut geeigneten GUI-Frameworks für C++ finde.
Kennt ihr eine Sprache, die...

- einfach zu verstehen ist
- gut zum Coden von GUI-Anwendungen ist
(nein, damit meine ich nicht Delphi oder Visual Basic, wo man sich mal schnell eine "Klickibunti" Anwendung zusammenklickt)
- objektorientiert ist
- gut zum Programmieren von Games ist
- teilweise plattformunabhängig ist (sprich, dass man die Anwendungen trotzdem auf Linux, Mac, usw. benutzen kann)
- auch noch in Zukunft aktuell bleibt (ich will keine Sprache lernen, mit der in ein paar Jahren nicht mehr programmiert wird bzw. die mir bei meinem zukünftigen Beruf nichts mehr bringt)
- viele Möglichkeiten bietet, sodass man nicht so schnell Langeweile beim Programmieren bekommt

Wie gesagt, ich überlege momentan auf C# umzusteigen, weiß aber nicht ob .NET eine wirklich gute Lösung ist. Von Java bin ich übrigens auch nicht so überzeugt.
 
Hi und Willkommen bei tutorials.de :)

Zu OpenGL: Das braucht man ja nicht gleich für ein normales Fenster :D
OpenGL und DirectX sind für den Bereich 3D. Spiele, CAD usw...

Zur Winapi: Stimmt, das ist für kleinen Fenster vergleichsweise viel zu programmieren.
(Dafür kann man bei größeren Projekten wirklich alles aus dem Betriebssystem holen, was es kann)

Es gibt aber viele externe Bibliotheken zur GUI-Entwicklung, die einem das erleichtern.
Teilweise kann man die GUI sogar zusammenmalen, statt Codezeilen zu schreiben.
Coe nur für den Rest, der im Hintergrund passiert. Der GUI-Code wird dabei automatisch erstellt.

zB.: Qt, wxwidgets, oder auch das (etwas veralterte) MFC von Microsoft selber
Was man verwendet ist Geschmackssache.

Zum C-Lernen: http://openbook.galileocomputing.de/c_von_a_bis_z/ ist was Gutes.

Zu C#: .NET hat schon sehr viele Sachen fertig eingebaut (zB. GUI: Winforms), die man nicht mehr extra Programmieren muss (bzw. von Drittherstellern nehmen).
Andere Dinge, die mit nativem C/C++ einfacher sind, kann .NET dagegen nur mit Zugriff auf C/C++ oder gar nicht.

Wenn es um Geschwindigkeit geht, hängt .NET (und Java und...) immer hinter C/C++.
Kommt immer auf die Programme darauf an, die du machen willst, was du nehmen solltest.

Zu Mono: Das hängt in der Entwicklung immer dem offiziellen .NET hinterher, weil sie immer auf die Neuigkeiten warten müssen, bevor sie selbst anfangen, das zu programmieren.

Zu deinen Wunschpunkten: Vor allem, wenn es um einfache Portabilität geht: Java.
Was passt daran nicht? Ist ähnlich wie C#, von Programmiererseite her..
Zwei Punkte, die vielleicht ein Problem sind:
-Auch in Zukunft noch...da Sun von Oracle aufgekauft wurde, geht jetzt irgendwie die Angst um, das Java kostenpflichtig werden soll.
-Games: Welche? 2D mit Java: Gut. Sehr einfaches 3D...na gut. Mehr: Nop, C++ nehmen.
Wie gesagt, Geschwindigkeit. 3D braucht viel Leistung.

Gruß
 
Zuletzt bearbeitet:
Hallo,

Meine eindeutige Empfehlung: Java
  • Die Plattformunabhängigkeit ist wirklich sehr wertvoll, gerade zumal auch Swing (für GUI) Applet-, Netzwerk-, Sound-, Sicherheits-...Bibliotheken schon mit im JRE sind. Andere, z.B. für Medien, 3D, DB-Treiber, EMail, ... können problemlos als JARs (selten auch native DLLs) mitgeliefert werden.
  • Die Geschwindigkeit ist außer bei viel 3D oder sehr komplizierter Logik / Mathematik auf modernen Rechnern echt in ordnung. (Meine auch beim Deserialisieren mal ne zimlich hohe Laufzeit gehabt zu haben)
  • Sehr viel mit überschaubarem aufwand möglich, viele Bücher, Tutorials, ...
  • Nur meine Meinung, aber ich bin mir fast absolut sicher, dass Java nie etwas kosten wird
  • Wenn du schon C++ und JavaScript kannst, denke ich zimlich einfach zu lernen
  • Manche meinen sogar 90% übereinsimmung mit C++
  • Professionelle Webanwendungen mit JEE (ähnlich PHP) und entwicklung von Android-Apps möglich, JME für normale Handys

Wenn du doch bei C++ bleiben willst, was wegen performanz und für die Entwichlung größerer Spiele durchaus sinfoll wäre, auf jeden Fall:
Qt:
  • Bringt SQLite, Netzwerk, ... Bibliotheken Plattformunabhängig (natürlich nur mit Crosscompilern)
  • Nützliche Tools wie Assistent, Linguist, Designer, Creator
  • Zimlich moderne, coole Widgets ohne gleich viel Code schreiben zu müssen
&
Boost:
  • Ebenfalls sehr gut, enthält jetzt schon manches was demnächst im C++ Standart sein wird

Nochmal zusammengefasst:
Alles was ich genannt habe ist und wird wohl auch völlig kostenfrei bleiben, außerdem eben Plattformunabhängig und bietet die Möglichkei viele spannene Programme zu schreiben. Außerdem "lebendig" (wird weiterentwiket).

Hoffe es ware noch hilfreiche Infos dabei,
javaDeveloper2011
 
Also ich würde dir auch zu Java raten :
-Objekt orientiert
-einfache Syntax
-hat schon sehr viel von Haus aus dabei
-Erweiterungen einfach über Einbindung der entsprechenden Lib's
-als Enterprise Edition auch für komplizierte Web-Applikationen fähig *mehr Umfang als PHP*
-auf heutigen Systemen sehr gute Performance
-PLATTFORMUNABHÄNGIGKEIT *der wohl beste Punkt an Java* *trifft nur zu wenn man den Source entsprechend schreibt was aber in 99% aller Fälle sowieso gegeben ist wenn man einige Regeln beachtet*
-sehr populär da seit 1985 bereits auf dem Markt
-man kann "FAST" alles mit Java machen

Du siehst also ... es gibt genug Gründe sich für Java zu entscheiden. Auch wird es in einigen Unternehmen sogar schon als Hauptsprache angewendet.

Bei folgenden Punkten würde ich dir aber zu C++ *oder zumindest zu einer JNI-Lib* raten :
-3D ... egal ob OpenGL/OpenAL oder DircetX/Direct3D ... 3D braucht immer extreme Leistung und dierekten Hardwarezugriff. Beides ist mit Java aber so nicht gegeben. Es gibt zwar schon einige Möglichkeiten Java auch für sowas zu entfremden *Google : Jake2 ... portierung von Quake2 auf Java* ... aber das sind entweder Projekte die sich mit Dingen beschäftigen die schon 10 Jahre alt sind oder einfach keine Leistung brauchen. Für moderne 3D-Anwendungen wie CAD oder moderne Spiele eignet sich Java definitiv nicht.

Welche Sprache du am Ende lernst hängt von dem ab was du damit machen willst.
Wie du ja bereits gelesen hast : wenn du mal aufwändige 3D-Anwendungen schreiben willst ... dann wären C und C++ die richtige Wahl. Willst du vorallem Plattformunabhängigkeit : Java. Oder wie sieht es z.B. mit Web-Applikationen aus ? Dafür am besten das verbreitete PHP.

Ich würde es dir ans Herz legen nicht nur eine Sprache zu lernen. Du bist 14 ... und hast noch genug Zeit dir das Wissen anzueignen. Ich z.B. habe auch ungefähr in deinem Alter angefangen. Ich habe mit HTML/CSS + JavaScript angefangen ... dann über PHP und mal n Versuch in Richtung C/C++ bis hin zu Java. Was sich auf jedenfall lohnt : Fachbücher. Und da auch ne ganze Menge. Aber vorsicht : Fachbuch ist nicht gleich Fachbuch. Einige vertreten die Auffassung : unter 2000 Seiten kommt mir nix ins Haus. Mag sicher richtig sein für ein Umfangreiches Nachschlagewerk. Für Anfänger eignen sich aber am besten kleine Taschenbücher mit bis zu 500 Seiten.
Wenn ich mal meine Sammlung an Programmierbüchern überblicke ... also da kommt was zusammen. Für alles mindestens 3 oder 4 Bücher und alles dabei vom Taschenbuch bis zum Wälzer. Und nicht zu vergessen : Foren und unser Freund Google.
Du siehst also : selbst wenn du eine Sprache sehr gut beherrschst und darüber haufen Bücher hast ... manches findet man eben nur im Netz.
Auch sind die meisten Fachbücher immer auf ein bestimmtes Thema bezogen. Die meisten gibt es wohl für Einsteiger. Aber es gibt auch welche für Fachbgebiete wie z.B. JavaMail oder in PHP ein umfassendes Referenzbuch über alles was mit Datenbanken zu tun hat *und damit meine ich einen Haufen an Datenbanken ... nicht nur MySQL*. Auch sehr speziell sind z.B. Bücher über XHTML welche sich aber nur mit den Spezifikationen aus ein ander setzen und weniger mit HTML selbst.


Überleg dir also erstmal GENAU was du machen willst und was du später mal für Anforderungen haben könntest. Auf dieser Grundlage kann man dann sehr schön auf 2 bis 3 Sprachen eingrenzen die man sich an aneignen kann. Wie gut man dabei jede einzelne dieser Sprachen lernt ist einem selbst überlassen , aber man sollte immer mindestens so viel können wie man mit machen will.


Meine persönliche Empfehlung für einen All-Rounder : C/C++ , Java/JSP , HTML/CSS + JavaScript , PHP ... damit deckst du einen sehr großen bereich ab. Du kannst einerseits hochperformante C/C++ 3D-Anwendungen schreiben , dazu passend vielleicht eine gute Webpräsenz aufbauen ... und für Zwischendurch plattformunabhängiges in Java.
Das du um all das zu lernen entsprechend viele Jahre brauchst , womit du anfangen solltest , was zeitgleich und was lieber nacheinander ... darüber kann man sich dann noch unterhalten.
 
Das Einzigste was mich eben an Java stört ist, dass es nicht ohne die VM auskommt. Es wird also erst bei der Ausführung "just in time" zu nativem Code kompiliert (habe ich zumindestens gehört).
Und bei C# bzw. .NET soll es ja ähnlich sein. Wenn der Anwender des Programmes nicht Windows nutzt und das Framework nicht installiert hat, sieht er alt aus. Aus diesen Gründen habe ich mich bisher immer dagegen gewehrt eine solche Sprache zu lernen, da dachte ich ich wär mit C/C++ besser bedient.

Ich habe mich (auch wenn es mir nach euren Posts doch recht schwer gefallen ist) entschieden weiterhin C++ zu lernen. Für die GUI werde ich dann wohl Qt oder eine Alternative nutzen müssen, hat ja auch noch Zeit. Ich will lieber noch ein bisschen meine Grundkenntisse in der Sprache festigen, bevor ich mich dann auf solche Frameworks und APIs verlassen kann.

Eine Frage habe ich allerdings noch: Wenn ich später mal in Richtung 3D und Spiele gehen will... Was würdet ihr mir da mehr empfehlen? DirectX / Direct3D oder OpenGL?
Ich denke nämlich das es aufgrund der vielen Bücher und Tutorials nicht schlecht wäre DirectX zu lernen, aber ich bin mir nicht sicher, ob heutzutage auch Games für andere Plattformen wie Linux produziert werden. DirectX ist ja Windows-only, soll aber wohl ganz viele Möglichkeiten für Multimedia Zeugs bieten.

Und was Java angeht: Ich habe ja, wie SPiKEe schon gesagt hat noch genug Zeit um noch eine weitere Sprache zu lernen. Da ich auch sehr gerne Minecraft spiele, wäre es gar nicht mal so dumm Java zu lernen, um Mods oder sowas dafür zu entwickeln.
Und da ich auch sehr gerne im Web arbeite, würde es sich bestimmt auch mal anbieten ein kleines Applet in Java zu programmieren. Mal sehen.

Übrigens. In der 11. Klasse werden wir in Informatik mit Delphi arbeiten, aber die Sprache ist ja auch so eine Sache, weil man sich die GUI dort "zusammenklicken" kann. Könnt ihr mir eure persönlichen Eindrücke von dieser Sprache schildern? Ist es schwer die Sprache zu erlernen, wenn man vorher mit "höheren" Sprachen, wie C++ oder Java gearbeitet hat?
 
Das Einzigste was mich eben an Java stört ist, dass es nicht ohne die VM auskommt. Es wird also erst bei der Ausführung "just in time" zu nativem Code kompiliert (habe ich zumindestens gehört).
Und bei C# bzw. .NET soll es ja ähnlich sein.
Stimmt.

da dachte ich ich wär mit C/C++ besser bedient.
C/C++ laufen nativ ohne VM, ja. Aber die VM hat eben auch Vorteile.
zB. Ein größeres C/C++-Programm für Windows UND Linux zu schreiben.
Da muss viel mehr für beide OS extra programmiert weren, als in Java (bei dem ist es meistens gar nichts, was für Windows/Linux getrennt gemacht werden muss).

Eine Frage habe ich allerdings noch: Wenn ich später mal in Richtung 3D und Spiele gehen will... Was würdet ihr mir da mehr empfehlen? DirectX / Direct3D oder OpenGL?
Ich denke nämlich das es aufgrund der vielen Bücher und Tutorials nicht schlecht wäre DirectX zu lernen, aber ich bin mir nicht sicher, ob heutzutage auch Games für andere Plattformen wie Linux produziert werden. DirectX ist ja Windows-only, soll aber wohl ganz viele Möglichkeiten für Multimedia Zeugs bieten.
DirectX ist für Windows, während OpenGL auch mit Linux läuft. Stimmt.
Umgekehrt hat DX nicht nur Grafik, sondern auch gleich Sound, Eingabe etc etc drinnen, während OpenGL sich nur auf Grafik konzentriert (und zB Tastatureingaben wieder für Win/Linux getrennt gemacht werden müssen, oder eine weitere Bibliothek verwenden).

Übrigens. In der 11. Klasse werden wir in Informatik mit Delphi arbeiten, aber die Sprache ist ja auch so eine Sache, weil man sich die GUI dort "zusammenklicken" kann.
Vergleichbares gibts auch für alle bisher genannten Sprachen. C, C++, Java, C# usw.

Ist es schwer die Sprache zu erlernen, wenn man vorher mit "höheren" Sprachen, wie C++ oder Java gearbeitet hat?

Gruß
 
Hallo,

Eine Frage habe ich allerdings noch: Wenn ich später mal in Richtung 3D und Spiele gehen will... Was würdet ihr mir da mehr empfehlen? DirectX / Direct3D oder OpenGL?
Ich denke nämlich das es aufgrund der vielen Bücher und Tutorials nicht schlecht wäre DirectX zu lernen, aber ich bin mir nicht sicher, ob heutzutage auch Games für andere Plattformen wie Linux produziert werden. DirectX ist ja Windows-only, soll aber wohl ganz viele Möglichkeiten für Multimedia Zeugs bieten.

Gerade für den Anfang ist es ziemlich egal ob man DirectX oder OpenGL verwendet, da sich die beiden APIs ähnlich sind. Im späteren Verlauf wird die Entscheidung was man verwenden möchte meist davon abhängig sein für welche Plattformen man entwickelt.
Gerade in kommerziellen Titeln kommt es oft vor das für verschiedene Plattformen verschiedene Grafiklibraries verwendet werden, so nutzt z.B.: Crysis 2 für Windows und XBox DirectX, jedoch für die Playstation OpenGL.

Wie schon weiter oben beschrieben ähndeln sich die beiden APIs im grundsätzlichen Aufbau, das heißt wenn du mit einer deine Grafik hinbekommst wirst du es innerhalb von Stunden auch mit der anderen schaffen.
 
Huhu,

Was Spiele angeht ist Java meiner Meinung nach nicht der Renner.
Java ist ja eine interpretierte Sprache, welche on-the-fly interpretiert, und gegebenenfalls in nativen Code umgewandelt wird um die Performance bei häufig durchzulaufenden Codeteilen zu erhöhen.

Ich würde aber sagen, Java ist "idiotensicher".
Dafür bin ich selbst auch dankbar.

Zum Beispiel:
- Keine Probleme mit Zeigern, Zeigerarithmentik da es keine Zeiger gibt.
- Kein Lowlevelzugriff auf das unterliegende System - kein direkter Speicherzugriff.
- Auch muss man den verwendeten Speicher nicht selbst verwalten (anfordern, freigeben) - Die VM erledigt das.
...

Der große Vorteil ist jedoch die Plattformunabhängigkeit.
Bei C/C++ muss man für jede Plattform oft extreme Anpassungen vornehemen.

Threads / Netzwerkprogrammierung / Dateizugriff und dergleichen sind nicht überall einheitlich.
Unter Linux hat man ja nicht die Win32 Bibliotheken, kein Winsock, etc.

Natürlich sind die Gegenstücke auf den anderen Plattformen oft vom Aufbau her ähnlich oder identisch - dennoch muss oft viel Zeit in eine Portierung investiert werden.

Auch kommt die Sprache mit einer sehr gut dokumentierten (!) API.

Java selbst hat sich in der Geschäftswelt schon vor langer Zeit etabliert.

Ebenso verwenden einige kritische Systeme Java - zum Beispiel viele Geräte von nahmhaften Herstellern für CT / MR / Röntgenanlagen und auch andere Lösungen von Firmen für den Bereich Medizin (wenn auch nur am Endpoint :)).

Ausserdem:
Sollte man mit Visual C++ arbeiten, muss die Visual C++ Runtime (MSVCR) der jeweils benutzen IDE (2003,2008,...) auf dem Zielcomputer installiert sein.

Dass C++ wirklich ohne Voraussetzungen unter Windows läuft, stimmt nicht in jedem Fall.

mfg,
mccae
 
... gegebenenfalls in nativen Code umgewandelt wird um die Performance bei häufig durchzulaufenden Codeteilen zu erhöhen ...

Das stimmt so nicht. Es ist zwar richtig das die VM via JIT/HotSpot bestimmte Code-Stücke in nativen Code umwandelt , es hat aber nichts damit zu tun wie oft ein bestimmter Programmabschnitt ausgeführt wird sondern davon was sich am einfachsten bis zu einem gewissen grad überhaupt in nativen Code ändern lässt.

Programmabschnitte welche häufig ausgeführt werden werden *wenn zur Compile-Time bekannt und möglich* schon vom Compiler in optimale Schleifen umgeschrieben. Das bedeutet dann aber nicht das ein Code der so im Source gesehen sicherlich Wert wäre in nativen Code übersetzt zu werden diesen Wert auch noch nach der Compiler-Optimierung hat.
 
Huhu,
Programmabschnitte welche häufig ausgeführt werden werden *wenn zur Compile-Time bekannt und möglich* schon vom Compiler in optimale Schleifen umgeschrieben. Das bedeutet dann aber nicht das ein Code der so im Source gesehen sicherlich Wert wäre in nativen Code übersetzt zu werden diesen Wert auch noch nach der Compiler-Optimierung hat.

Ja, das stimmt natürlich: Bytecode wird bei dessen Erstellung optimiert, wie es bei Compilern anderer Programmiersprachen der Fall ist.
Es ist auch klar, dass offensichtlich optimierungswürdige Codeteile in den Sources bereits beim Kompilieren optimiert werden, und dadurch möglicherweise zur Laufzeit kein Bedard nativer Kompilierung entsteht.

...Es ist zwar richtig das die VM via JIT/HotSpot bestimmte Code-Stücke in nativen Code umwandelt , es hat aber nichts damit zu tun wie oft ein bestimmter Programmabschnitt ausgeführt wird...

Es hat doch damit zu tun wie oft ein bestimmter Abschnitt ausgeführt wird.
Es wird dabei darauf geachtet wie oft eine bestimmte Methode ausgeführt, oder eine bestimmte Schleife durchlaufen wird.

Siehe folgenden Wikieintrag über die Arbeitsweise von HotSpot: http://de.wikipedia.org/wiki/HotSpot

Liebe Grüße,
Martin C. Caesar
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück