PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programme für Anfänger



moerk
29-08-2007, 15:30
Hallo zusammen!

Ich programmier zwar schon seit einiger Zeit, aber sehr spezialisiert (z.B. JavaScript). Ich möchte meine Kenntnisse jetzt ausweiten. Vom Prinzip her kann ich programmieren (also kenne die Strukturen, z.B. was es mit Klassen, Vererbung und Polymorphie in der OOP auf sich hat), habe aber wenig Praxiserfahrung. Das waren immer so kleine Beispielprogramme mit anderen entwickelt (z.B. in der Schule). Ich kann also im Prinzip programmieren, habe aber wenig Erfahrung. Außerdem möchte ich jetzt C++ lernen.

Deswegen meine Frage an euch: Was für Programme sind für Anfänger sinnvoll? Also nicht "Hallo Welt" oder ne Physikengine mit OpenGL ;) , sondern Programme, die relativ leicht zu bewältigen sind und viele verschiedene Aspekte abdecken (z.B. nen Chat-Client für Netzwerkverbindungen). Sie sollten also nicht allzu schwer sein und nach dem Programmieren der Tools möchte ich alle wichtigen Bereiche gesehen und mit C++ implementiert haben, also z.B. LAN, Internet, GUI, Medieneinbindung, ...

Langfristig habe ich übrigens vor, in die Spieleprogrammierung einzusteigen, aber anfangen sollte man damit vielleicht nicht ;) .

Vielen Dank schonmal für eure Antworten!

Mörk

anda_skoa
29-08-2007, 18:53
Ich persönlich fange bei einer neuen Sprache praktisch immer mit "Dateiparsen" an.

D.h. zum Beispiel lesen und schreiben einer INI-Style Konfigurationsdatei.
Das ist relativ simpel, gibt aber trotzdem einen guten Überblick über die Handhabung verschiedener Basisdatentypen in der jeweiligen Sprache, File IO, String-Operationen, assoziative Container (z.B. Maps), usw.

Meiner Erfahrung nach ist das "Lesen" von Textformaten praktisch Bestandteil fast jeder Software, sei es Config, Import/Export, Output von Hilfsprogrammen, textbasierte Protokolle, etc.

Ciao,
_

BlueJay
30-08-2007, 13:33
Zwangsweise habe ich damit angefangen, Logfiles auszuwerten.
Wenn das Programm dann endlich "pariert", kann man es Stück für Stück "benutzerfreundlich" ausbauen.

Mit dem Spieleprogrammieren in C++ würde ich warten, bis Trolltech mit seinen Bibliotheken im reinen ist. Sonst sind alle Erfahrungen auf diesem Gebiet für die Katz'.

so long,
Bluejay

moerk
30-08-2007, 13:47
Ok, also es scheint recht nützlich zu sein, sich mit "Textverarbeitung" ;) auseinanderzusetzen. Dann werde ich mal einen Parser für Ini-Dateien und XML bauen. Ich könnte dann mit Qt ne schöne GUI und nen kompletten XML-Editor bauen. Danke, damit bin ich erstmal beschäftigt!


Mit dem Spieleprogrammieren in C++ würde ich warten, bis Trolltech mit seinen Bibliotheken im reinen ist. Sonst sind alle Erfahrungen auf diesem Gebiet für die Katz'.

Was meinst du damit?

BlueJay
01-09-2007, 19:08
Ich hatte mich vor 2-3 Jahren durch die Trolltech-Bibliotheken zur Spieleprogrammierung durchgebissen, fand sie auch ganz brauchbar und schnell.

Nach einem Jahr musste ich erfahren, dass diese Bibliotheken nicht mehr unterstützt wurden.
Trolltech bot erst mal ein Konvertierungsprogramm an, das aber jämmerlich versagte.
Dann schrieben sie neue Bibliotheken, aber mit anderen Headern :(
Und damit man das auch merkt, heissen die Methoden auch anders. :(

Gleichzeitig hatte ich mich damals auf aRts eingeschossen, nur um zu hören, dass aRts in der nächsten Linux-Version nicht mehr unterstützt wird. Schon von KDE 3.3/3.4 nach KDE 3.5 verschwanden einige Headers aus der Library.

Nö, die sollen erst mal Qt4/KDE4 auf die Beine kriegen samt Konzept, bevor ich wieder irgendwelchen Gehirnschmalz investiere.

Derweil vergnüge ich mich mit Java und staune mittlerweile, dass die Uralt-Javascript-Spiele alle noch funktionieren!

Also, wenn es unter den Nägeln brennt, und du unbedingt ein Spiel programmieren musst, nimm Java. Die Konzepte, die du dabei entwickeln musst, passen später auch für andere Sprachen.

so long,
BlueJay

anda_skoa
03-09-2007, 14:44
Ok, also es scheint recht nützlich zu sein, sich mit "Textverarbeitung" ;) auseinanderzusetzen. Dann werde ich mal einen Parser für Ini-Dateien und XML bauen.

XML würde ich nicht selber parsen, das können die XML Parser viel besser und es ist dann immer noch genug datenspezifischer Aufwand dabei, d.h. die eigentlichen Nutzdaten aus dem DOM Baum oder dem SAX Parser rauszuholen.

Ciao,
_

anda_skoa
03-09-2007, 14:53
Nach einem Jahr musste ich erfahren, dass diese Bibliotheken nicht mehr unterstützt wurden.

Qt3 wird ab heuer nicht mehr gewartet, was nicht heißt, dass nicht och genug Leute damit arbeiten.



Gleichzeitig hatte ich mich damals auf aRts eingeschossen, nur um zu hören, dass aRts in der nächsten Linux-Version nicht mehr unterstützt wird. Schon von KDE 3.3/3.4 nach KDE 3.5 verschwanden einige Headers aus der Library.

Das ist extrem unwahrscheinlich. aRts gehört zur KDE3 API und ist damit auch die ganze KDE3 Serie API und ABI stabil.
Wird halt nicht mehr viel für diese API entwickelt werden, aber es wird schon noch einige Zeit im Umöauf sein (aktuelle "Enterprise" Distributionen kamen heuer raus, d.h. nächste Umstellungen in >2 Jahren)



Nö, die sollen erst mal Qt4/KDE4 auf die Beine kriegen samt Konzept, bevor ich wieder irgendwelchen Gehirnschmalz investiere.

Nicht dass ich jemanden davon abhalten möchte, Qt/KDE Spiele zu machen (die KDE Games Leute scheinen da ziemlich Spaß zu haben), aber oft benutzen Spiele keines der traditionellen GUI Frameworks, sondern eher Low-Level Sachen wie SDL und darauf aufbauenden Hilfsbibliotheken.



Also, wenn es unter den Nägeln brennt, und du unbedingt ein Spiel programmieren musst, nimm Java. Die Konzepte, die du dabei entwickeln musst, passen später auch für andere Sprachen.


Java ist überhaupt keine so schlechte Idee. Ein Freund von schreib gerade eines seiner Spiele nochmal neu in Java (vorher C++) und ist ziemlich begeistert, vorallem wegen der leichten Integration einer JavaScript Engine, usw.

Ciao,
_

moerk
08-09-2007, 00:58
Java ist überhaupt keine so schlechte Idee. Ein Freund von schreib gerade eines seiner Spiele nochmal neu in Java (vorher C++) und ist ziemlich begeistert, vorallem wegen der leichten Integration einer JavaScript Engine, usw.

Also die Idee war ja, dass ich mich in C++ reincode. Das mit dem Qt war nur son Schnellschuss. Jetzt ratet ihr mir zu Java, obwohl ich noch nicht geschnallt habe, ob ihr Java oder JavaScript meint. Wie auch immer - ich habe mit C++ tatsächlich Ini-Dateinausgelesen. Allerdings auf Shellbasis, also ohne Qt.

Wegen XML - es geht hier ja nicht um Produktivprogramme, sondern um etwas, dass ich selber schreibe, um die Sprache zu lernen. Wie auch immer - ich denke Sachen in Textdateien schreiben und aus ihnen rauslesen kann ich jetzt.

Was für Programme schlagt ihr mir denn noch so vor?


// edit: C++ brauche ich langfristig nicht nur für mich und Spieleprogrammierung, sondern auch für meinen Beruf. Deswegen bin ich so gebunden. Obwohl Java für private Zwecke vermutlich schöner ist (allein schon wegen der Portabilität....)

anda_skoa
09-09-2007, 14:54
Jetzt ratet ihr mir zu Java, obwohl ich noch nicht geschnallt habe, ob ihr Java oder JavaScript meint.


Java, aber das war mehr ein Nebenthread zwischen BlueJay und mir, sorry :)



Allerdings auf Shellbasis, also ohne Qt.

Commandline und Qt schließt sich ja nicht aus. Hab schon tonnenweise Serverdienste mit Qt gemacht :)



Wegen XML - es geht hier ja nicht um Produktivprogramme, sondern um etwas, dass ich selber schreibe, um die Sprache zu lernen.

Ich habe gemeint, dass es nicht zielführend ist, XML selber zu parsen, auch nicht zum Lernen, weil immer eine XML Parser API benutzt wird.



Was für Programme schlagt ihr mir denn noch so vor?


Das hängt im Wesentlichen von deiner unmittelbaren Zielsetzung ab.
Sagen wir, dir ist Netzwerkhandling wichtig, dann kann man durchaus das übliche Chatclient/Chatserver Duo versuchen, oder man versucht sich an HTTP Requests (sowohl als Client als auch als Server, hat den Vorteil dass man mit einer "professionellen" Implementierung auf der anderen Seite testen kann)

Im Falle von Netzwerk sollte man sich aber überlegen, ob man wirklich mit der C-Socket API arbeiten möchte, oder man nicht doch besser eine C++ Socketbibliothek benutzt.

Speziell unter Linux, bzw. wenn Software leicht als Quellcode verfügbar ist, kann es auch Spaß machen, fremde Programme irgendwie umzubauen, z.B. einfache Netzwerkfähigkeit in ein Spiel einzubauen, das derzeit nur gegen Computer spielbar ist.

Apropos Spiele: ein Freund von mir macht beim Lernen einer neuen Sprache oder auch neuer GUI Bibliotheken immer ein Schachspiel :)

Ciao,
_

moerk
09-09-2007, 15:48
Java, aber das war mehr ein Nebenthread zwischen BlueJay und mir, sorry :)

Aso, ok. :)


Commandline und Qt schließt sich ja nicht aus. Hab schon tonnenweise Serverdienste mit Qt gemacht :)

Aso... klar - Qt ist ja nicht nur für Guis da. Ich meinte allerdings jetzt ohne Qt, also einfach cout.


Das hängt im Wesentlichen von deiner unmittelbaren Zielsetzung ab.
Sagen wir, dir ist Netzwerkhandling wichtig, dann kann man durchaus das übliche Chatclient/Chatserver Duo versuchen, oder man versucht sich an HTTP Requests (sowohl als Client als auch als Server, hat den Vorteil dass man mit einer "professionellen" Implementierung auf der anderen Seite testen kann)

Meine Zielsetzung bleibt immer noch Spieleprogrammierung. Allerdings wollte ich ja absichtlich etwas einfacheres vorher machen und Netzwerkhandling braucht man fürn Multiplayer ja auch. Also eine gute Idee! Außerdem habe ich vor ein paar Jahren schonmal einen Chatclient mit Delphi programmiert, also so ganz fremd ist mir der Gedanke nicht. Vielleicht programmiere ich mir ja auch ein Pidgin-Plugin für Imap-Abfragen (siehe anderen Thread).


Apropos Spiele: ein Freund von mir macht beim Lernen einer neuen Sprache oder auch neuer GUI Bibliotheken immer ein Schachspiel :)

:O Aber doch hoffentlich ohne KI, oder? ;)

www.gamedev.org empfiehlt Tetris. Ich denke mal, da werde ich mich über kurz oder lang auchmal dranbegeben.

Ok, dann habe ich erstmal Material. Danke! :)

cu

anda_skoa
09-09-2007, 16:03
Meine Zielsetzung bleibt immer noch Spieleprogrammierung. Allerdings wollte ich ja absichtlich etwas einfacheres vorher machen und Netzwerkhandling braucht man fürn Multiplayer ja auch. Also eine gute Idee!

Zum Thema Spiele und Netzwerkfähigkeit ist mir jetzt noch GGZ eingefallen
http://www.ggzgamingzone.org/

Hat gegenüber selbergestricktem Netzwerkcode den Vorteil, dass man das eigentliche Spielprotokoll mit XML beschreibt und den Netzwerkcode generieren lassen kann.

Schadet natürlich nicht, wenn man das Know-How hat, es auch händisch machen zu können :)



:O Aber doch hoffentlich ohne KI, oder? ;)

Soweit ich weiß ja, ohne KI. Allerdings hat ein Spiel mit fixen Regeln wie Schach den Vorteil, dass man eine KI jederzeit einfach portieren kann.

Ciao,
_

moerk
11-09-2007, 14:20
Falls es irgendwen interessiert - versuche mich jetzt erstmal an einer einfachen Imap-Abfrage.

BlueJay
12-09-2007, 16:30
Java ist überhaupt keine so schlechte Idee. Ein Freund von schreib gerade eines seiner Spiele nochmal neu in Java (vorher C++) und ist ziemlich begeistert, vorallem wegen der leichten Integration einer JavaScript Engine, usw.

Oder umgekehrt wie bei mir grad.
Wasserköpfe löschen, andere Köpfe austauschen, int und boolean nach var, fertig ist die Laube :D


Also: Java ist, wenn es int und boolean u.s.w. heisst, bei javascript heisst das alles nur var.
Java besteht auf Typenunterscheideung, Javascript nimmt im Zweifelsfall immer Typ String und nennt das dann automatische Typumwandlung.

Javascript ist es dann, wenn es einen Browser mit DOM as GUI benutzt, Java nimmt MIDP, AWT oder Swing.


Java und Javascript gibt es für fast alle betriebssysteme

moerk
12-09-2007, 20:51
JavaScript kenne ich von der Arbeit her... leider...

Ich finde die Sprache extrem problematisch - unsauber was Variablen angeht, nicht standarisiert (bzw. einige Browser *hustIEhust* unterstützen es nicht richtig, es gibt Sicherheitslücken und es läuft nicht gerade schnell.

Java ist irgendwie das genaue Gegenteil dazu :D (bis auf Performance vielleicht). Auf jeden Fall bin ich ein Feind von JavaScript.

BlueJay
13-09-2007, 18:18
JavaScript r...
Ich finde die Sprache extrem problematisch - unsauber was Variablen angeht,
Ist doch ganz einfach: es gibt nur String, alles andere sind Ausnahmen :p


nicht standarisiert
ecma-262 sei dir ans Herz gelegt:
http://www.ecma-international.org/publications/standards/Ecma-262.htm


es läuft nicht gerade schnell.
Trotzdem schlägt es Java, zumindest im Browser.
Die grausame Keyboard-Unterstützung liegt an den Browsern, wobei das Pärchen IE/keydn sogar ganz brauchbar ist. Mozilla beschränkt sich ja auf keyup.

Und du hast JavaME noch nicht erlebt, wie es beim Einlesen eines einzelnen Bytes ein Integer zurückgibt, dafür dann ein Float bei ceil und floor. :D Bei Division zweier Integers wirft es dann ganz das Handtuch, äh, eine Exception, wenn das Modulo >0 ist.

Tja, diese blöden Handys verstehen aber nun mal leider kein Javascript.
Und die Interaktion puren Javas mit dem Keyboard ist um Klassen besser als das Browsergefrickel, was für Spiele ein k.o.-Kriterium sein könnte.

peschmae
13-09-2007, 19:12
ecma-262 sei dir ans Herz gelegt:
http://www.ecma-international.org/publications/standards/Ecma-262.htm


Wollte ich auch schreiben; nur halten sich die Leute auch daran? Und ist der Standard überhaupt umfangreich genug (die Sprache ist drin, ja gut, aber damit schreibst du ja noch nix...)?



Trotzdem schlägt es Java, zumindest im Browser.


Naja, das kannst du dann auch wirklich überhaupt nicht fair vergleichen. ;)

MfG Peschmä

BlueJay
13-09-2007, 20:20
Dem Smiley entnehme ich, dass du auf den Busch kloppen willst :D
Also gut, ich gebe zu, dass ich bei Javascript-Spielen nicht ganz unbedarft bin. Java als Applet hingegen läuft (lief) meist etwas stotternd in diversen Browsern, kann als Application aber ganz flott sein.

Und geschickt programmiertes Javascript kann mit den meisten Flash-Spielchen gut mithalten, abgesehen mal vom Sound.

Der Standard ist umfangreich genug, dass man damit zaubern kann.
Für's GUI ist ja dann das WC-3-DOM / HTML4.01 zuständig, alle Schnittstellen fein definiert.
Das Wichtigste läuft ja auch in allen Browsern.

Abgesehen vom (schrägen) Linienzeichnen habe ich noch nichts ernstlich vermisst. - Die Sprite-Kollisionsdetection läuft zumindest im Java2ME über bounding rects, das sind in Javascript dann auch nur 2 Zeilen. Sogar die Kollisionsdetektion via Polygon ist in Javascript schnell genug.

moerk
14-09-2007, 14:03
zum Thema Javascript-Standard: Natürlich gibt es diesen Standard. Aber IE 6 und Firefox haben trotzdem nicht den gleichen Befehlssatz und einige eigentlich standarisierte Sachen macht dann der IE trotzdem nicht richtig.

Wie auch immer - ich persönlich muss leider allzu oft mit Javascript arbeiten und möchte mich jetzt mal halt in die Desktopprogrammierung einarbeiten.

BlueJay
14-09-2007, 19:57
Wenn du einschlägige Erfahrung mit Javascript hast, wird dir Java nicht schwerfallen.

Allerdings hast du für jede Zielplattform einen anderen Dialekt, und es ist weise, GUI-Sachen peinlichst genau von anderen Sachen zu trennen, so dass man nur 1 oder 2 Klassen austauschen muss, um für ein anderes Gerät zu programmieren.