Welche Programmiersprache soll ich Lernen?

01/22/2012 19:08 MoepMeep#1
Wohl eine der meist gestellten Fragen unseres Bereiches. Wird langsam mal Zeit, dass wir was zum verlinken haben ;)

Da sicherlich die Frage kommt, womit ich angefangen habe, klären wir das zuerst. Vor Urzeiten habe ich eine komische Version von Basic in die Finger gekriegt, aber auch schnell wieder aufgehört. Ich war einfach noch viel zu jung. Viele Jahre später kam durch die Schule Python und kurze Zeit später habe ich einen der schlimmsten Fehler meiner 'Programmierkarriere' begangen. Ich habe mit einem C/C++ Mischmasch Gamehacking angefangen. Hat meinen Stil komplett ruiniert und es war harte Arbeit das wieder hinzubiegen. Begeht diesen Fehler auf keinen Fall! Durch das Berufskolleg kamen dann Grundlagen von Java, HTML, PHP, CSS und SQL dazu. Sind natürlich nicht alles Programmiersprachen ;). Durch ein Praktikum habe ich mich für normale Anwendungen in C# verliebt. Nun studiere ich Informatik und behaupte ASM fließend lesen und schreiben zu können(MrSm!th glaubt mir das sogar!).

Aber genug zu mir, kommen wir zur Auswahl der 'richtigen' Sprache. Nun, die Antwort ist einfach, es gibt sie nicht. Es hängt ganz vom Anwendungsbereich ab. Wer sich tief ins Gamehacking stürzen will, wird kaum um C/C++ herumkommen. Wenn es nur um einfache Trainer geht, ist so gut wie jede Sprache geeignet. Wer nur normale Anwendungssoftware schreiben will, hat die freie Auswahl, aber gehen wir doch mal ins Detail mit einigen der größeren Sprachen ;)

C/C++

Ich fasse hier bewusst C/C++ zusammen, die beiden Sprachen sind einfach zu Verwandt um sie getrennt zu behandeln.
Wie bereits erwähnt, ist es in meinen Augen die perfekte Sprache fürs Gamehacking. Nahezu jedes große Spiel ist in C++ geschrieben. Dies wird euch das Reversen später ein wenig erleichtern. Performance mäßig an der Spitze. Der Einstieg ist ein wenig verwirrender als in andere Sprachen, Pointer sind keine leichte Sache. Auch ist die Lernkurve sehr gering. Aber wer dies alles durchsteht hat ein universell einsetzbares und sehr mächtiges Werkzeug. C/C++ kann in jedem Bereich eingesetzt werden.
Wer mir jetzt mit Mikrocontrollern kommt die nur mit ASM programmierbar sind kriegt eins auf die Finger!
Es gibt Zwei große Bibliotheken, qt und Boost. Beide sind unglaublich umfangreich. Sind zwar kein muss, aber sehr zu empfehlen wenn man weit fortgeschritten ist. Nehmt zum Lernen unbedingt ein Buch, Tutorials sind hier in meinen Augen unbrauchbar!

.Net Sprachen

Fangen wir mit einem Vergleich an:
Du hast Hunger. Bei vielen Sprachen kommst man sich teils so vor, als müsste man das Feuer neu erfinden bevor man kochen kann. Bei .Net kommt der Lieferdienst. Du hast zwar keine Ahnung wie es gemacht wurde, aber es ist da ;) Das .Net Framework ist einfach unglaublich mächtig.
Die beiden großen .Net sprachen sind C# und VB. Es besteht ein riesen unterschied in der Syntax aber nicht im Funktionsumfang. Ich persönlich finde die VB Syntax grauenhaft, aber diese Entscheidung muss jeder für sich selbst treffen. C# Syntax liegt näher an der von anderen häufig verwendeten Sprachen. VB Code lässt sich in der Regel problemlos in C# übersetzen und natürlich auch andersrum. Für Anwendungssoftware in meinen Augen die perfekte Sprache, beim Gamehacking gibt es einige Schwierigkeiten, welche aber umgangen werden können. Allerdings wird meines Wissens dazu eine Native Sprache wie C++ benötigt. Trainer, Tastendrücke und vergleichbares sind allerdings Problemlos möglich.
Es gibt auch die Möglichkeit .Net unter C++ zu verwenden. Das ganze heißt dann C++/CLI. Erfreut sich allerdings nicht an sonderlich großer beliebtheit unter den Programmierern, C# ist meiner Meinung nach eindeutig die bessere Wahl hier.
Jeder der mit einer .Net Sprache Anfängt sollte sich relativ schnell den unterschied zwischen Managed und Unmanaged Code bewußt machen .NET.

Java

Java kann man am ehesten mit den .Net Sprachen vergleichen ist aber doch wieder etwas komplett eigenes. Die Syntax ist mit der von C# zu vergleichen.
Da Java in einer VM läuft, ist es Plattformunabhängig(Diskussion dazu hier im Forum). Dies sehen viele als einen Vorteil, hat aber einen riesen Nachteil. Mit Java ist keinerlei zugriff auf den Speicher möglich und somit für Gamehacking unbrauchbar. Wär gerne ohne großen Aufwand für mehrere Systeme entwickelt ist hier richtig aufgehoben. Java hat eine gute Dokumentation.

AutoIt und andere Scriptsprachen

Ihr habt richtig gelesen, ihr seid keine Programmierer. Ich persönlich habe eine große Abneigung gegenüber AutoIt und kann es keinem empfehlen. Wer nur schnell ein paar Klicks/Tastendrücke braucht, kann gerne auf AutoIt zurückgreifen. Für alles größere ist es komplett ungeeignet!
Dies zählt natürlich nicht für alle Scriptsprachen. Lua, Python, Ruby und wie sie alle heißen sind durchaus legitime Lösungen für bestimmte Probleme. Aber ich würde keinesfalls versuchen mit diesen Programmieren zu lernen, man nutzt sie später einfach ;)
Anderer Standpunkt : [Only registered and activated users can see links. Click Here To Register...]


Das wären wohl die am meisten genutzten Sprachen hier im Forum. Delphi wäre sicherlich noch Erwähnenswert, aber dort fehlt mir die persönliche Erfahrung, wäre schön wenn jemand dazu etwas schreiben könnte.

Nehmt euch die Sprache, die euch am besten gefällt. Natürlich muss sie zu eurem endgültigen Ziel passen. Wer ins Gamehacking einsteigen möchte, sollte sicherlich kein Java lernen. Für Leute die es wirklich ernst meinen kann ich nur C++ als erste Sprache empfehlen. Aber macht euch dort auf eine Menge Arbeit gefasst. Den deutlich leichteren Einstieg bieten dort .Net Sprachen und Java, sofern man mit der OOP(Objektorientierte Programmierung) klar kommt. Aber vergesst nie, Programmiersprachen sind Werkzeuge, passt das Werkzeug nicht, wechselt man es. Es geht beim Programmieren nicht nur um die Syntax, es geht am Meisten um die Logik dahinter.
Und bitte tut euch selbst den Gefallen und kauft euch Bücher zu den Sprachen. Ein kurzes Tutorial um zu schauen ob einem die Sprache gefällt ist okay, aber danach nicht geeignet. Kopieren von Code bringt euch auch nicht weiter, wenn ihr ihn nicht versteht. Und glaubt mir, Anfangs werdet ihr ihn nicht verstehen.

Vergesst bitte nicht, dies ist meine eigene Meinung. Sie muss weder Sinvoll noch richtig sein ;)
Oh, noch etwas. Im gegensatz zu der Meinung eines komischen Wesens was sich hier herumtreibt, muss man kein C vor C++ lernen.
01/22/2012 19:27 jacky919#2
Sehr schön, werd's mir mal durchlesen und dich gegebenenfalls auf Fehler etc. hinweisen :)

Edit:
.Net kann man auch in C++ bzw. einer leicht abgeänderten Syntax verwenden: C++/CLI
Was meinst du mit
Quote:
Allerdings wird meines Wissens dazu eine Native Sprache wie C++ benötigt.
?

Quote:
Oh, noch etwas. Im gegensatz zu der Meinung eines komischen Wesens was sich hier herumtreibt, muss man kein C vor C++ lernen.
;)
01/22/2012 19:43 MoepMeep#3
C++/CLI ist mir durchaus bewußt, aber ich schreibe nicht gern über Krankheiten :p

Damit meinte ich das injecten einer managed dll in unmanaged code.
01/22/2012 19:44 Keyosk#4
Wow! Top!
Vielen Dank.
Aber etwas viele Fachausdrücke/-abkürzungen :D
01/22/2012 19:48 jacky919#5
Quote:
Originally Posted by Keyosk View Post
Aber etwas viele Fachausdrücke/-abkürzungen :D
naja

@Moep: Der Vollständigkeit halber solltest du es aber hinzufügen.
Außerdem kann man Trainer in .Net Sprachen ja auch mit Dll Calls realisieren.
(kernel32.dll -> Read/Write ProcessMemory)
01/22/2012 19:56 MoepMeep#6
Quote:
Originally Posted by jacky919 View Post
naja

@Moep: Der Vollständigkeit halber solltest du es aber hinzufügen.
Außerdem kann man Trainer in .Net Sprachen ja auch mit Dll Calls realisieren.
(kernel32.dll -> Read/Write ProcessMemory)
Ich werde es kurz erwähnen und das mit dem Gamehacking unter C# etwas umschreiben, ist für jemand ohne entsprechende Erfahrung echt etwas schwer verständlich.
01/22/2012 20:06 jacky919#7
Quote:
Mit Java ist keinerlei zugriff auf den Speicher möglich
Könnte man missverstehen...

Wenn du bei Java schreibst, dass es in einer VM läuft, musst das auch für die .Net Sprachen schreiben
01/22/2012 20:18 MoepMeep#8
Bei Java geschieht dies deutlich Offensichtlicher, aber ich werde das kurz überarbeiten.
01/22/2012 20:32 Dr. Coxxy#9
ASSEMBLER UND MICROCONTROLLER !111einself11!
das musste jetzt einfach kommen^^

kannst ja noch assembler dazunehmen, ist auch eine programmiersprache und besonders für den bereich gamehacking sehr interessant, grundlagen, ein paar befehle und wie bestimmte hochsprachbefehle vom compiler umgesetzt werden sollte man zumindest wissen.

wo wir direkt wieder bei:
Quote:
Oh, noch etwas. Im gegensatz zu der Meinung eines komischen Wesens was sich hier herumtreibt, muss man kein C vor C++ lernen.
landen...
*rot anlauf* :P

na, lassen wir das...

netter post, hast dir ein thanks verdient.
01/22/2012 20:34 MoepMeep#10
Wegen Assembler war ich am überlegen, aber das ist nun wirklich nicht Anfängerfreundlich :p
01/22/2012 20:48 Dr. Coxxy#11
hey, es hat einen ziemlich simplen befehlssatz :P
01/23/2012 09:29 xNopex#12
Zum Thema Scriptsprachen:
Quote:
Aber ich würde keinesfalls versuchen mit diesen Programmieren zu lernen
Am MIT lernt man das Programmieren mit Python.
[Only registered and activated users can see links. Click Here To Register...]
01/23/2012 11:46 TripleTrouble#13
Zu dem "AutoIt und andere Scriptsprachen"
Mit AutoIt kann man viel mehr machen als du "beschreibst" ...
Informier dich lieber vorher, als dass du nur sch... schreibst ...
01/23/2012 12:57 MoepMeep#14
Quote:
Originally Posted by xNopex View Post
Zum Thema Scriptsprachen:


Am MIT lernt man das Programmieren mit Python.
[Only registered and activated users can see links. Click Here To Register...]
Ich sehe fehlende Datentypen als sehr hinderlich an, wenn man später umsteigen möchte. Bleibt natürlich jedem selbst überlassen. Ich werde deinen Post mal oben verlinken.

@TripleTrouble AutoIt ist Müll für alles andere, ob es nun geht oder nicht.
01/27/2012 23:46 Keyosk#15
Ist Delphi zum hacken geeignet?