Mit welcher Programmier-Sprache anfangen?

Man ist aufgrund der Vielschichtigkeit gezwungen alles schön ordentlich zu schreiben, weil man sonst später selber nicht mehr durchblickt.
Und man hat auch wunderbar die Möglichkeit dazu.

Was natürlich nicht heißt das es in C z.B. keine Goto Schleifen gäbe (wenn man sie denn verwenden würde - was niemand wirklich tut).
 
Also ich denke meistens scheitert Programmieren zu lernen wirklich an der Motivation. Deshalb bin ich eher ein Fan der "Wohlfühlsprachen" C#/Java/... für den Anfang.

Ich würd mir ne simple Engine suchen, so dass du auch schnell was auf die Beine kriegen kannst und erst anfangen die entsprechende Sprache, die du für die Engine brauchst, zu lernen. Siehe bspw. Unity -> C#, Unreal -> C++ etc.
 
KnolleJupp schrieb:
2. Zu Beginn ist klassisches C, als imperative Sprache, sicher ein guter, wenn auch nicht ganz leichter Einstieg in die Welt der Software-Entwicklung.

Klassisches C ist (wenn man nicht gerade eine Karriere als embedded Programmierer anstebt) für Einsteiger zu überhaupt nix gut, außer man will sich unbedingt jede Menge beschissene Angewohnheiten aneignen.
Ergänzung ()

KnolleJupp schrieb:
C erzieht den Programmierer auch zu sauberem Arbeiten und das ganz automatisch. Spaghetticode und Hardcoding wirst du dir so gar nicht erst angewöhnen.

Ich kenne kaum eine andere Sprache, die Spaghetticode so fördert wie C. Na ja, außer vielleicht Perl.
 
antred schrieb:
Ich kenne kaum eine andere Sprache, die Spaghetticode so fördert wie C. Na ja, außer vielleicht Perl.

Spaghetticode in Perl? Wie geht das denn? Das kann Perl auch? ;)
 
Spaghetticode? O,o

Also ihr verwirrt mich langsam immer mehr ^^ .
 
Zuletzt bearbeitet:
Wenn du Spiele programmieren willst die grafisch auch etwas aufwändiger sind, solltest du wirklich mit C++ arbeiten.
Such dir einfach im Internet ein gutes Tutorial.
 
Ich will auch mal meinen Senf dazugeben.

Als blutiger Anfänger kannst du dir Spiele gleich einmal komplett abschminken. Du brauchst ein sehr fundiertes Wissen in vielen unterschiedlichen Bereichen des Programmierens, um so etwas Komplexes zu implementieren.

Ich kann dir auch nicht guten Gewissens C oder C++ empfehlen.

C ist zwar eine sehr schöne Low-Level Sprache, aber selbst in ihrem eigenen Buch sagen Ritchie & Kernighan (die Leute, die C entwickelt haben), dass der Programmierer wegen der großen Freiheit der Sprache wissen muss, was genau er da tut. Das ist nicht unbedingt das, was du als Anfänger brauchst.

C++ ist von Compiler zu Compiler extrem unterschiedlich. Es gibt hier keine einheitlichen Bibliotheken. Borland macht's anders als Microsoft, die wieder anders als GCC, und so weiter und so weiter... Manchmal brauchst du dann von Dritten noch eine andere Bibliothek, die wieder ein ganz anderes Codebild mit sich bringt. Sonst gilt, da C++ ähnlich lax ist wie C, dasselbe wie im Absatz weiter oben.

Meiner Meinung nach solltest du mit einer restriktiven Programmiersprache anfangen. Restriktiv bedeutet hier nicht, dass du eingeschränkt bist in dem was du programmieren kannst, sondern wie du es programmieren kannst.

Schöne Beispiele sind hier Dinge wie zum Beispiel das Verbieten von mehrfacher Vererbung.
Du lernst also ersteinmal korrektes Progammieren und warum etwas korrekt ist. Sobald du das intus hast, kannst du anfangen Sprachen zu benutzen, die dir mehr Freiheiten bieten in bezug auf wie genau du Sachen implementierst.

Zum Lernen finde ich immer wieder Java extrem schön. Du hast eine einheitliche Bibliothek mit sehr guter Dokumentation. Wenn du versuchst, etwas schlecht zu implementieren, haut dir die Sprache auf die Finger. Java ist sehr objektorientiert, etwas was du in größeren Projekten wie Spielen später mal sehr gut gebrauchen wirst.

Wenn du näher an Windows bleiben willst schätze ich ist C# eine gute Alternative zu Java.
 
Als Einsteiger würde ich auch eher Java oder Python empfehlen, auch wenn hier scheinbar C hoch im Kurs steht. Die wirklich relevanten Dinge um ein guter Programmierer zu werden lernt man eh sprachenunabhängig und dafür gibt es genug Literatur (weniger schlecht programmieren/produktiv programmieren etc.) die einen weiter bringt, als es eine Sprache an sich überhaupt könnte.
 
These: Wenn ich mir einmal pro Woche einen neuen Account erstelle und einen "Welche Programmiersprache soll ich lernen"-Thread eröffne, ist dieser immer der Blickfang des ganzen Programmieren-Boards. Vielleicht kann ich mich an Werbeeinnahmen beteiligen lassen, die durch entsprechende Klicks entstehen? Kann das auch automatisieren!

Hinz und Kunz, die irgendwie mal mit Programmierung in Berührung kamen, meinen, sie müssten mal wieder propagieren. Immer wieder wird der gleiche Brei durchgekaut, statt die Leute einfach auf die älteren Threads dazu oder gar das FAQ zu verweisen. Da hat sich seit zig Jahren nichts Wesentliches verändert!

Aber ein Beitrag hier hat mich doch sehr zum Schmunzeln gebracht:
Luxuspur schrieb:
[...]fang mit ner ordentlichen Programmiersprache wie C an!

Programmierer von Sicherheitslücken gibbet da draußen genug!
Vielen Dank dafür. :D

So, und nun habe ich ja auch hier gepostet. Schande über mich. Naja, was solls… Auch ich muss meinen Beitragszähler pflegen.
 
Schreib die Vorschläge auf 'ne Handvoll Zettel, misch durch und zieh einen. Die Sprache ist egal, wichtig sind die Konzepte und die Denkweise.
 
Meine Meinung dazu:

Anfang: C damit man versteht wie dass ganze arbeitet. Pointer sind verdammt wichtig und ich habe die verketteten Liste und einige vorgehensweisen in Java erst mit einem C-Projekt verstanden, wo ich mich intensiv mit pointern und (c/m)alloc und free beschäftigt habe.

Dann Java/C++/C#/Python was auch immer, hauptsache OOP ist meine Meinung.

Wie gesagt nur meine Meinung.

@Vorredner
Geile idee, und dann kommt jemand mit Assembl (er / y ) an und er zieht den Zettel :lol:
 
Zuletzt bearbeitet:
Ich plädiere auch für C(++) - einfach, damit man einmal den ganzen Komplex um Pointer, Memory Management etc. an der Backe hatte, und weiß, was für welche Anwendung teuer ist.

Fängt man mit Java, Python etc. an fragt man sich maximal, was der Unterschied zwischen einer Liste und einem Array ist. Wenn einem da das Lehrskript nicht den Hintergrund zu liefert, weiß man nichtmal grob was der Unterschied ist und benutzt nach Lust und Laune was man will.

Ich habe mit C++ angefangen und es vom Uni-Prof reingekloppt bekommen (der an jeder zweiten Stelle "das ist potentiell ineffizient" gesagt hat und uns Folien wie die unten gezeigte um 8 Uhr morgens um die Ohren gehauen hat in der 4. Woche) und programmiere mittlerweile nur noch Python und ein bisschen C#. Aber das Wissen, was die Sprache im Hintergrund macht hilft mir enorm dabei, auf die Effizienz des Codes zu achten (auch wenn es nicht immer so einfach ist, das man bei Python nicht ordentlich bestimmten kann ob nun Call by Value oder Call by Reference verwendet wird nervt mich immer noch).

Daher empfehle ich auch den Einstieg über eine Low-Level Sprache, bei mir war es nur 1 Semester und dann noch 1 Semester Algorithmen und Datenstrukturen. Für den Anfang halte ich es aber für extrem wichtig, die Grundlagen direkt richtig mitzunehmen.

Besonders da der TE in Richtung Spiele gehen will, muss er sich eh später damit auseinandersetzen, denn in Java oder Python schreiben sich Spiele halt nicht so gut (Sprachen beliebter Engines wurden ja schon genannt). Daher gleich richtig anfangen, dann muss man nicht später gerade eingeübte Muster wieder umgewöhnen.

Und hier die versprochene Slide:
Unbenannt.PNG
Und die große Frage: Was wird ausgegeben?
 
Zuletzt bearbeitet:
6
4
4
1
2
3
4
5
6

Ist doch einfach?

Ich würde mit C++ anfangen, da lernst du das Wichtigste, einige C-Sprachkonstrukte sind doch relativ veraltet (z.B. char* in C statt std::string in C++) und müssen in den meisten Fällen nicht mehr verwendet werden. Und falls du mal wirklich C benutzen musst, kannst du das immer noch lernen.
 
Zuletzt bearbeitet:
Nur mal ne doofe Frage am Rande:
Kommt da neben dem ganzen Programmieren nicht auch noch so etwas wie 3d Modellierung hinzu?
(irgendwie kann ich mir nicht vorstellen, dass alle Texturen und Formen in Games programmiert werden)
 
Wenn du 3D games machen willst dann ja, 3D Modellierung, Texturierung, Animationen etc
Bei 2D kommst du mit Sprites noch relativ einfach zum Ziel.
 
Autokiller677 schrieb:
Fängt man mit Java, Python etc. an fragt man sich maximal, was der Unterschied zwischen einer Liste und einem Array ist. Wenn einem da das Lehrskript nicht den Hintergrund zu liefert, weiß man nichtmal grob was der Unterschied ist und benutzt nach Lust und Laune was man will.
Aber das Wissen, was die Sprache im Hintergrund macht hilft mir enorm dabei, auf die Effizienz des Codes zu achten

Und das is der Trugschluss. Du kannst aus C/++ überhaupt gar nicht ableiten, wie Dinge in Java oder Python intern implementiert sind. Nur weil eine Art und Weise etwas zu tun in C/++ einen Vorteil bringt, heißt das nicht, dass das in Python oder Java auch der Fall ist.

Generelle Konzepte (Arrays vs Listen vs..) haben außerdem erst mal nicht mit der Sprache zu tun. Ich war in der Vergangenheit bei zwei verschiedenen Hochschulen Tutor und die Studenten mussten in den Java-Übungen stets verkettete Listen selbst manuell implementieren, rein dem Verständnis wegen. Warum sollte man den Unterschied von Datenstrukturen nur in einem C/++ Kurs, nicht aber in einem Java-Kurs erklären?


Autokiller677 schrieb:
(auch wenn es nicht immer so einfach ist, das man bei Python nicht ordentlich bestimmten kann ob nun Call by Value oder Call by Reference verwendet wird nervt mich immer noch).

Danke für das Paradebeispiel, bei dem dich dein Vorwissen schön in die Irre führt. Es gibt in Python überhaupt kein Call-by-Reference. Der C/++ Programmierer geht jetzt aber hin und denkt, oh, nach dem Methodenaufruf kann ich ja Dinge im übergebenen Objekt manipulieren, also muss es Call-by-Reference sein. Ist aber halt nicht so.

C++ lernen ist super, sei es einfach so, oder wenn man etwas über die Funktionalität von Computern lernen möchte, oder wenn man (wie der TS) sowieso auf Spiele aus ist oder oder oder. Aber C/++ nur als Vobereitung auf andere Sprachen zu lernen ist großer Quatsch.
 
Zuletzt bearbeitet:
Magogan schrieb:
6
4
4
1
2
3
4
5
6

Ist doch einfach?
So einfach dann aber doch nicht?
Abgesehen davon, dass du eine Ausgabe vergessen hast, hast du auch Fehler drin:
Code:
6
5
4
1
2
3
4
4
6
Ich habe schon ein paar jährchen mit C++ zu tun und muss da auch 3x hingucken, bei solch einem Code schleichen sich verdammt schnell Fehler ein.
Wenn ich mir jetzt vorstelle die Sprache gerade erst zu lernen und dann vor diesem snippet zu sitzen...

Code:
	int m[3][2] = {1, 2, 3, 4, 5, 6};
	cout << *(m[m[0][1]] + 1) << endl
		 << (*m[*(m[0] + 1)])-- << endl;
	int* p = m[1] + 2;
	cout << *--p << endl;
	for (int i = 0; i < 6; ++i)
		cout << *(&m[0][0] + i) << endl;
https://www.codechef.com/ide
 
Ok, stimmt, hatte vergessen, dass der erste -- Operator ja auch das Array modifiziert und den vorherigen Wert (5) zurückgibt xD Voll fail... War so mit den Pointern beschäftigt, dass ich das übersehen habe... So viel zum Thema "einfach". Der Code ist aber auch nur zum Verwirren geeignet xD

Man ist übrigens ein guter Programmierer, wenn man so einen Code nicht schreibt xD
 
Zuletzt bearbeitet:
crvn075 schrieb:
Und das is der Trugschluss. Du kannst aus C/++ überhaupt gar nicht ableiten, wie Dinge in Java oder Python intern implementiert sind. Nur weil eine Art und Weise etwas zu tun in C/++ einen Vorteil bringt, heißt das nicht, dass das in Python oder Java auch der Fall ist.
Nein, aber ich habe eine grundsätzliche Vorstellung davon, wie "teuer" eine Operation ungefähr ist, wenn ich es eben mal selber machen musste statt irgendeine Lib zu verwenden.

Generelle Konzepte (Arrays vs Listen vs..) haben außerdem erst mal nicht mit der Sprache zu tun. Ich war in der Vergangenheit bei zwei verschiedenen Hochschulen Tutor und die Studenten mussten in den Java-Übungen stets verkettete Listen selbst manuell implementieren, rein dem Verständnis wegen. Warum sollte man den Unterschied von Datenstrukturen nur in einem C/++ Kurs, nicht aber in einem Java-Kurs erklären?
Wenn es in dem Kurs gemacht wurde - gut. Meiner Erfahrung nach wird das bei Java (und noch mehr bei Python) gerne ignoriert, gibts ja schön vorgefertigt.

Danke für das Paradebeispiel, bei dem dich dein Vorwissen schön in die Irre führt. Es gibt in Python überhaupt kein Call-by-Reference. Der C/++ Programmierer geht jetzt aber hin und denkt, oh, nach dem Methodenaufruf kann ich ja Dinge im übergebenen Objekt manipulieren, also muss es Call-by-Reference sein. Ist aber halt nicht so.
Mir ist bewusst, dass Python hier einen anderen Ansatz verfolgt. Nervig finde ich es aber trotzdem, weil ich das C++ Konzept komplett einleuchtend und sehr einfach finde, allein schon, weil ich durch das "&" einfach nochmal drauf gestoßen werde, was ich gerade mache. Dagegen ist das Python Konzept einfach nervig imho.

C++ lernen ist super, sei es einfach so, oder wenn man etwas über die Funktionalität von Computern lernen möchte, oder wenn man (wie der TS) sowieso auf Spiele aus ist oder oder oder. Aber C/++ nur als Vobereitung auf andere Sprachen zu lernen ist großer Quatsch.
Ich denke das Lernen jeder Programmiersprache sollte damit beginnen, etwas über die Funktionalität des Computers zu lernen. Und das geht mit einer Sprache, die nicht extrem viel direkt hinter Abstraktionen versteckt nunmal besser.
 
Zuletzt bearbeitet:
Zurück
Oben