Programmiersprachen

Der Anlaufpunkt für alle, die selbst ein Adventure programmieren wollen.
Wolfgke
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 164
Registriert: 06.04.2005, 15:04

Beitrag von Wolfgke »

> Ausserdem entfernt sich .NET vom Model der objektorientierten Programmierung hin zum Klassenmodel.

Sorry, hier muss ich mal fragen: was ist für dich der Unterschied zwischen objektorientierter Programmierung und Klassenmodell?

Nun muss ich noch meinen persönlichen Brei zum Thema Programmiersprachen abgeben (ich kenne mich relativ gut mit C/C++ und Java aus, die .net-basierenden Sprachen (C#, VB.net, J# etc.) jedoch nur sehr grob):

ich persönlich empfehle, wenn du C oder C++ lernen willst, gleich mit C++ einzusteigen, jedoch am Anfang zum großen Teil nur die C-Features zu benutzen. Der Grund liegt darin, dass C++ eine etwas tolerantere Syntax hat (Variablen müssen nicht am Blockbeginn deklariert werden etc.). Lange Zeit war es so, dass man sowieso mit C++ alles tun konnte, was auch mit C geht, man C++ also als ein simples "besseres" C benutzen konnte. Seit dem neuesten (eher ungeliebten) Standard C99 hat sich das ein wenig gewandelt.

Meiner Beobachtung nach haben es die Compiler-Hersteller jedoch ganz passabel hinbekommen (zumindest versuchen sie es), dies auch in die C++-Welt zu portieren (schlagt mich, wenn ich mich hier grundlegend irren sollte), auch wenn es nicht ganz dem Standard entspricht.

C++ ist in der Tat eine sehr komplizierte Programmiersprache (das ist die schlechte Nachricht), allerdings kann man, wenn man nur einen minimalen Bruchteil kennt, schon eigentlich alles machen (die gute Nachricht). Und der Vorteil von C, dass es sehr schnell ist, wurde auch in C++ insofern übernommen, dass man konzeptionell nur für die C++-Features mit Geschwindigkeitseinbußen bezahlen muss, die man auch tatsächlich benutzt. Von daher: ich sehe keinen Grund als Neueinsteiger noch tatsächlich C zu lernen, da mit C++ eigentlich alles, was C kann, besser geht (Ausnahme: man will Systemprogrammierung machen, was glaube ich auf niemanden hier zutrifft).

Es gibt ca. alle Halbjahre Diskussionen darüber, ob C++ noch zeitgemäß ist und nicht lieber (auch bei Spielen) durch eine interpretierte Sprache wie C# ersetzt werden sollte (Java ist für Spiele eher ungeeignet, da man für die Programmierung von Frameworks zu diesem Zweck einige Verrenkungen anstellen muss, während Micro$oft ihr C# durch Managed DirectX in diesem Bereich versucht zu pushen). Geschwindigkeitsmäßig sind die Unterschiede gar nicht mehr *so* gewaltig, allerdings gibt es für C# erheblich weniger Bibliotheken (ich behaupte sogar kaum) zur Spieleprogrammierung: deshalb macht das kaum jemand.

Meine persönliche Meinung: wenn man Spieleprogrammierung machen will, kommt man um C++ nicht herum. Für Enterprise-Programmierung (ein wie ich finde langweiliger, wenn auch, glaube ich, sehr finanzträchtiger Bereich) wird häufig Java benutzt und C# findet insbesondere in der Server-Programmierung von Websites (ASP.net: da soll Micro$oft, auch wenn ich sie nicht mag, ein echter Geniestreich gelungen sein) seinen Platz. Microsoft versucht seine .net-Sprachen auch auf den Desktop zu pushen - im Moment kann man davon jedoch noch nicht so viel sehen (wenn ich mich nicht täusche soll da mit Vista jedoch einiges kommen). Auf jeden Fall stellt C# zur Anwendungsprogrammierung auf Desktop-Systemen eine interessante Alternative zu C++ dar (Java ist in diesem Bereich verrufen, anfangs sehr begründet, mittlerweile hat es aufgeholt (u. a. durch SWT), jedoch seinen absoluten Ruf weg und C# erledigt diese Aufgabe erheblich besser).
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7308
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Mal angenommen, ich würde mich gerne etwas mit c++ beschäftigen wollen. Die typischen Sachen halt. ("Hello World" und einfach grundlegende Dinge programmieren)
Was brauche ich dann? Da gibts doch sicherlich auch kostenlose Varianten.
Benutzeravatar
Der Wanderer
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 89
Registriert: 05.05.2005, 22:59
Wohnort: Mittelerde

Beitrag von Der Wanderer »

Die Wahl der Programmiersprache hängt stark vom persönlichen Geschmack und vor allem auch Fähigkeiten ab.
Dass es so ist, siehst du an den vielen verschiedenen Aussagen hier.

Mein Senf:
C/C++ ist der Quasi-Standard mit dem man alles implementieren kann was man sich ausdenken kann, aber bis du deine Adventure Engine fertig hast, wenn du noch keine Ahnung vom Programmieren hast, werden wohl ein par Jährchen ins Land gehen.

Mit "einfacheren" Sprachen kommst du schneller ans Ziel, z.B. Blitzbasic, dann dauert das vielleicht ein halbes bis ein Jahr. Die Einfachheit wird allerdings meistens mit Einschränkungen erkauft, sei es in der Funktionalität oder in Geschwindigkeit. Du lernst dabei auch weniger über die Maschine und das Betriebssystem kennen.

Schnell genug für ein Adventure dürften heutzutag alle Sprachen sein, da würde ich mir keine Sorgen machen. Die Rechenintensiven Dinge werden soweiso vom Betriebssystem übernommen, wie z.B: Grafikoperationen.

Wenn du mal Erfahrung hast und die Konzepte verstanden hast, ist die Sprache sowieso zweitrangig und es spielen andere Faktoren eine Rolle, z.B. wie gut ist das IDE, wie sieht es mit Portierbarkeit aus etc.
Kannst du eine, kannst du alle. Das einzige was du brauchst ist ein gutes Referenzhandbuch.
NikoRoll
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 217
Registriert: 14.05.2005, 13:52
Wohnort: Maastricht
Kontaktdaten:

Beitrag von NikoRoll »

@Fightmeyer:
ich empfehle dir da (falls du Windows nutzt) Bloodshed DevC++. Sehr schöne Freeware IDE, die für GCC Ports ausgelegt ist. Wenn dir das nichts sagt, macht nix ;) ist der Kompiler - es gibt afaik 3 wichtige Kompiler"familien" für C++: GCC (GNU, also Opensource), den Microsoft-Kompiler und von Borland noch einen.
Kannst dir natürlich auch MS VisualC++ holen (ich glaub, eine Art Basis/Learning Version ist sogar umsonst). Die meisten Beispielprojekte im I-Net sind dafür, und für Professionelle Entwicklung macht das sicher auch Sinn, aber DevC++ nimmt dir viel Arbeit beim Einbinden von Libs ab und hat - imo - eine sehr schöne Oberfläche.
Benutzeravatar
john_doe
Logik-Lord
Logik-Lord
Beiträge: 1302
Registriert: 06.05.2001, 20:58

Beitrag von john_doe »

Es gibt von VC++ eine Express Edition, die ist gar nicht mal so schlecht.
Ich selber verwendet auch Dev-C++, klein, schnell und kann alles was ich für C/C++ brauche, und GCC ist schon dabei.
Save the Cheerleader, save the World!
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7308
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Danke. Das probier ich mal aus.
Benutzeravatar
Loma
Ultimatives Flascherl
Ultimatives Flascherl
Beiträge: 8058
Registriert: 21.07.2006, 16:47
Wohnort: Flascherl
Kontaktdaten:

Beitrag von Loma »

Hallo!

Ich habe zunächst mit der MS Visual C++ Autorenversion begonnen.
Mittlerweile hab ich auch diese C++ Express Edition runtergeladen – allerdings scheint diese auf diesen weiter oben erwähnten C99 Standard zugeschnitten. Aus diesem Grund (zumindest nehme ich an, dass es daran liegt) sind Programme, die bei MS Visual C++ funktioniert haben, unter der Express Edition nicht gelaufen.
Da ich als blutiger Anfänger ohnehin so was wie ein „Schwammerl vom Dienst“ bin, hat mich das natürlich ordentlich verwirrt und ich bin da etwas unsicher, welchen „Stil“ ich mir nun angewöhnen sollte (es gilt ja als leichter, gleich von Anfang an das richtige zu lernen, als sich später umgewöhnen zu müssen – sagt man zumindest :roll: ).
Auch wenn ich noch Lichtjahre davon entfernt bin, so ist es so, dass Programme, die mit der Autorenversion erstellt wurden, nicht finanziell verwertet werden dürfen, jene mit der Express Edition hingegen schon.
Das Dev-C++ hab ich mir auch mal angeschaut – hat mich aber eher zusätzlich verwirrt, weil da wieder einiges funktioniert bzw. nicht funktioniert im Unterschied zu Visual C++.

Hab mir mittlerweile auch ein Buch besorgt (C++-Spieleprogrammierung mit DirectX) – bin auch schon mächtig frustriert, aber noch nicht restlos entmutigt. :)
Darin wird das Visual C++ 2003 Toolkit in Kombination mit Code::Blocks verwendet. Allerdings gilt die Express Edition als Weiterentwicklung dieses Toolkits, weshalb ich die dort angegebenen Programme damit schreibe.
Jedenfalls – lange Rede gar kein Sinn: Taugt diese Express Edition bzw. dieser C99-Standard wirklich was, oder gibt’s Besseres (oder ist letztlich alles nur eine Frage des Geschmacks)???

Liebe Grüße
Ich denke, also spinn' ich.
Ich spinne, also mal' ich.
Ich male, also denk' ich.

"Never leave for the last minute what you can get away with not doing at all." (Pepe the King Prawn)
td
Süßwasserpirat
Süßwasserpirat
Beiträge: 344
Registriert: 26.07.2006, 03:57
Wohnort: Dresden-Südvorstadt

Beitrag von td »

Vergiss Java, das ist propiertaerer Muell.

C# ist zwar ISO-standardisiert, wenn du das jedoch mit einer Microsoft-IDE benutzt, dann bist du ganz, ganz schnell dabei, proprietaere Erweiterungen zu nutzen. Gleiches Problem also wie bei Java: Du bist von einer Firma abhaengig.

C++ ist standardisiert und bietet nebenbei wesentlich mehr als nur objektorientierte Programmierung. Wenn du C++ beherrscht, ist weder Java, noch C#, noch eine ganze Reihe anderer Sprachen ein Problem fuer dich. Faengst du hingegen mit Java oder C# an, dann wirst du ganz bestimmte Aspekte nicht kennenlernen, weil diese damit einfach nicht umsetzbar sind.

Edit:

C99 ist der aktuelle Standard fuer C. Wenn du C++-Programme schreibst, kann dir das allerdings vollkommen egal sein, denn fuer C++ gibt es einen eigenen, unabhaengigen Standard. Dass einige Programme nicht mehr laufen, liegt nicht daran, dass der Compiler C99 unterstuetzt, sondern daran, dass die Programme nicht konform zum C++-Standard sind und die alten Compiler den Standard nicht richtig umgesetzt haben (Vollstaendig umgesetzt wird der zwar auch in der aktuellen Version nicht, aber die Unterstuetzung ist wesentlich weiter fortgeschritten).

Achja, und meide DirectX. OpenGL ist offen und weitaus kompatibler.
I will not be broken, though I am the one that bleeds.
Wolfgke
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 164
Registriert: 06.04.2005, 15:04

Beitrag von Wolfgke »

Java und proprietärer Müll? Ich höre wohl nicht ganz richtig. Nicht, dass ich Java mag, aber diese Anschuldigung ist nicht gerechtfertigt.

1. ist Sun im Moment dabei Java immer mehr zu öffnen (sie wollen es als Open Source herausgeben, bei der Lizenz denken sie an GPL).

2. gibt es mit gcj aus der gcc (Gnu Compiler Collection) einen freien (frei wie Freiheit, nicht Freibier) verfügbare Implementierung eines Java-Compilers, der außerdem direkt ausführbare Dateien (.exe, a.out etc.) erzeugen kann, was zwar nicht ganz im Sinne des Erfinders, aber des Entwicklers liegt. Außerdem gibt es mit Gnu Classpath eine freie Implementierung der Java-Bibliotheken

3. gibt es mit kaffe eine freie Java Runtime Engine (wenn auch Stand Java 1.1, was veraltet ist)

Allerdings - und dazu stehe ich - ist Java nur unter Verrenkungen zur "ernsthaften" Spielprogrammierung geeignet.

C#: volle Zustimmung. Ebenso zu DirectX. Allerdings muss ich hier noch einige Erklärungen zu abgeben: der Teil von DirectX, der durch OpenGL ersetzt werden kann, ist Direct3D (in der neuesten Version wurde/wird (?) er irgendwie umbenannt). DirectX enthält jedoch viel mehr: Sound, Musik, Netzwerk, Eingabe etc.

Hierzu gibt es zahlreiche (in der Regel plattformunabhängige) Ersatzbibliotheken (ich könnte sie aufzählen, aber das interessiert sowieso keinen ;) ). Allerdings sind diese irgendwie nicht so richtig einheitlich zusammenpassend. Es gibt Bestrebungen hier etwas zu machen, allerdings bislang ist sehr wenig geschehen.

Ich habe es bislang sehr gut hinbekommen DirectX zu meiden, allerdings ist die Versuchung als Spieleentwickler wahnsinnig groß, hier einfach mal bei einem Teil (besonders Eingabe, da zumindest ich keine Möglichkeit kenne Force-Feedback-Hardware unter Windows anders anzusteuern) zuzugreifen und sich somit in die Fänge von Microsoft zu begeben.

Der Vorteil von OpenGL gegenüber Direct3D ist, dass man, zumindest wenn man einen Wrapper wie SDL verwendet, man sehr schnell mit der 3D-Programmierung beginnen kann. Allerdings bringt das einen sehr leicht in Versuchung Dinge zu probieren, die man besser lassen sollte.

Noch ein paar Worte zu C++: es ist sowieso die "Standard"-Sprache, auch wenn sie voller Macken (kein zuschaltbarer Garbage Collector, Stringklassen (std::string) sind zwar vorhanden, werden jedoch kaum benutzt etc. ) und sowieso komplett überladen (Mehrfach-Vererbung; Template-Pogrammierung als eigene Turing-vollständige Untersprache von C++: der Fairness halber: kaum ein Programmierer kann diese aufgrund der Kompliziertheit wirklich benutzen). Ich will nicht leugnen, dass es für eigentlich jedes Feature von C++ Anwendungen gibt, für die dieses nahezu unabdingbar ist (und sei es noch so exotisch).

Zum Glück (wie ich oben schon schrieb) braucht man 90% von C++ gar nicht. Allerdings sollte man sich sehr sicher mit Algorithmen & Datenstrukturen auskennen (weil so einfach "loslegen" mit dem Programmieren geht im Gegensatz zu "Spielzeugsprachen" wie BlitzBasic schlecht - ich behaupte nicht, dass es mehr Zeit braucht, in C++ ein Spiel zu entwickeln als z. B. in BlitzBasic (vorausgesetzt, man nutzt vernünftige Bibliotheken), allerdings ist der Unterschied, dass man sich bei C++ erheblich mehr Gedanken machen muss, wie man das alles in Datenstrukturen steckt, was nicht Jedermanns Geschmack ist).
joeydee
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 118
Registriert: 11.12.2005, 23:05

Beitrag von joeydee »

Gamedesign- und Programmier-Boards wie z.B. http://www.zfx.info sollte für viele der hier gestellten Fragen ein besserer Platz sein um Antworten zu finden (Achtung: Einsteiger-Forum auf der Startseite nicht gelistet; einfach auf community gehen).
td
Süßwasserpirat
Süßwasserpirat
Beiträge: 344
Registriert: 26.07.2006, 03:57
Wohnort: Dresden-Südvorstadt

Beitrag von td »

Wolfgke hat geschrieben:Java und proprietärer Müll? Ich höre wohl nicht ganz richtig. Nicht, dass ich Java mag, aber diese Anschuldigung ist nicht gerechtfertigt.

1. ist Sun im Moment dabei Java immer mehr zu öffnen (sie wollen es als Open Source herausgeben, bei der Lizenz denken sie an GPL).
Ich beziehe mich da ausschliesslich auf die Sprache ansich, dass es da freie Implementationen gibt, ist mir klar. Solange die Sprache selbst aber ausschliesslich von Sun kontrolliert wird, ist das proprietaer.
I will not be broken, though I am the one that bleeds.
Wolfgke
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 164
Registriert: 06.04.2005, 15:04

Beitrag von Wolfgke »

Auch hier wird immer mehr die Community in die Weiterentwicklung einbezogen (Community Process).

Aber joeydee hat Recht, diese Diskussion passt hier weniger hin (auch wenn, soweit mir bekannt, in Gamedesign-Foren eigentlich immer auf C++ mit falls nötig eingebundener Skriptsprache verwiesen wird (ich habe da so meine Erfahrungen) ).
Benutzeravatar
Loma
Ultimatives Flascherl
Ultimatives Flascherl
Beiträge: 8058
Registriert: 21.07.2006, 16:47
Wohnort: Flascherl
Kontaktdaten:

Beitrag von Loma »

joeydee hat geschrieben:Gamedesign- und Programmier-Boards wie z.B. http://www.zfx.info sollte für viele der hier gestellten Fragen ein besserer Platz sein um Antworten zu finden (Achtung: Einsteiger-Forum auf der Startseite nicht gelistet; einfach auf community gehen).
Tolle Seite - Danke!!
Ich denke, also spinn' ich.
Ich spinne, also mal' ich.
Ich male, also denk' ich.

"Never leave for the last minute what you can get away with not doing at all." (Pepe the King Prawn)
MadHatter
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 67
Registriert: 20.09.2006, 16:14
Kontaktdaten:

Beitrag von MadHatter »

Nun man mag es sehen wie man will, aber jede der genannten Sprachen hat ihre Daseinsberechtigung.

Während C und C++ ziemlich stark bei Desktopanwendungen sind, zeigen Java und C# ihre Stärken im Web. Gerade J2EE ist derzeit die wichtigste und führendste Technologie für die Umsetzung von Enterprise Anwendungen. Dies zeigt sich schon alleine dadurch, dass Unternehmen wie IBM, SAP, Oracle und... und... und auf Java setzen. Man kann also durchaus behaupten, dass jemand, der Java lernt und sein Wissen entsprechend auch um den Themenbereich J2EE(bzw JEE) ausbau seine Zukunft ganz gut absichert.

Dies kann man von C und C++ nicht zwangsläufig behaupten auch wenn C++ und VB durch die .NET-Geschichte etwas gepuscht wurden. Im Business-Bereich verlieren verlieren sie weiterhin am Land. In anderen Bereichen wird die klassische Programmierung oft durch die Verwendung irgendwelcher Engines und Zwischenlösungen umgangen.

Dazu kommt noch, dass Java Platform unabhängig ist, so dass man ein Spiel in Java Programmiert und auf jeder anderen Platform wie Linux, Win und MacOS ausführen kann.

In letzter Zeit hat sich auch im Bereich der Spieleentwicklung bei Java ordentlich was getan.

Dennoch muss man zugeben, dass bei der Programmierung von Spielen derzeit C++ die wichtigste Sprache ist.
if($ahnung==0) {
read('handbuch');
}
td
Süßwasserpirat
Süßwasserpirat
Beiträge: 344
Registriert: 26.07.2006, 03:57
Wohnort: Dresden-Südvorstadt

Beitrag von td »

MadHatter hat geschrieben:Gerade J2EE ist derzeit die wichtigste und führendste Technologie für die Umsetzung von Enterprise Anwendungen.
`Enterprise' ist so circa ein anderes Wort fuer ,,Scheisse.'' Das sind dann so Anwendungen, die Java-Klassenhierarchien nach XML serialisieren und als BLOB in eine Oracle-Datenbank quetschen...
Im Business-Bereich verlieren verlieren sie [C/C++, --td] weiterhin am Land. In anderen Bereichen wird die klassische Programmierung oft durch die Verwendung irgendwelcher Engines und Zwischenlösungen umgangen.
Nicht ein aktuelles Desktop- oder Serverbetriebssystem ist in etwas anderem als C/C++ geschrieben. Sobald es an die Low-Level-Funktionalitaet geht, kommt man da nicht drum herum.
Dazu kommt noch, dass Java Platform unabhängig ist, so dass man ein Spiel in Java Programmiert und auf jeder anderen Platform wie Linux, Win und MacOS ausführen kann.
Java ist nicht platformunabhaengiger als jede andere Sprache auch.

Java laeuft nur da, wo du eine entsprechende Laufzeitumgebung zur Verfuegung hast. Sobald man bestimmte Bibliotheken verwendet, die nicht ueberall verfuegbar sind, laeuft es auch nicht einmal mehr auf allen Platformen, die von purem Java unterstuetzt werden (und mit purem Java alleine kommt man nicht sonderlich weit).

Fuer C/C++ braucht man einen Compiler fuer die Zielplattform und entsprechende Bibliotheken, die auf diesen Plattformen vorhanden sind.
I will not be broken, though I am the one that bleeds.
Antworten