Wie motiviere ich mich dazu, selbstständig das Programmieren zu erlernen?

9 Antworten

Hallo,

warum klein anfangen? Weil man es verstehen muss, weil es Schritt für Schritt geht - und nur so kann man wirklich etwas großes aufbauen. Wenn man alles schnell verstehen könnte, was soll dabei Großes, Individuelles, Neues entstehen können? Ein Arzt macht auch ein Medizinstudium und nicht ein 1-Wochen-Praxisseminar, ein Sportler hat sehr viel trainiert. Ebenso der Programmierer, auch geht den Berg hoch. Aber dann ist er auf der Höhe.

Wenn man sich die Zeit gegeben hat, dann kann man sehr viel machen, der Computer wird zu etwas völlig neuem, man kann richtig kreativ werden. Kleine Schritte, viel ausprobieren (wie oft ist mir das Programm und teilweise der Computer schon abgestürzt? Hat Dinge gemacht, die ich nicht wollte - macht nichts, so ist das Lernen), recherchieren, ausprobieren etc., kleine Ziele.

Ich vermute, Du gibst Dir zu wenig Zeit. Als ich mit Basic anfing, wollte ich erst einmal ein ganz kleine Programme schreiben, später erst ein Dame-Spiel programmieren, ein Textverarbeitungsprogramm etc. Hat irgendwann irgendwie auch geklappt. Bis dahin habe ich aber sehr viele Bücher zur Programmierung durchgearbeitet, viel probiert. Diese kleinen Bücher sind für Objektorientierung mit GUI auch nicht wirklich der Hit, das ging für Basic, für Java, C#, C++ mit Qt bezweifele den Sinn. Irgendwann müssen die 1300-Seiten-Bücher her, ohne die geht es einfach nicht weiter (in der Bibliothek vielleicht ausleihen oder auf Rheinwerk Openbooks).

Nach Basic bin ich auf Assembler und Turbo Pascal umgestiegen. Mit Assembler habe ich dann auf einmal recht viel verstanden, mit Turbo Pascal kam ich mit Objektorientierung in Berührung. Objektorientierung braucht Zeit, das ist eine eigene Logik, das kommt irgendwann, nicht aufgeben. Am Anfang habe ich OOP nur verabscheut, zu neu war das für mich. Inzwischen will ich nicht mehr ohne, das hat aber Zeit gedauert.

Inzwischen versuche ich ein Schachspiel mit C++. Hierfür muss ich Algorithmen, Datenstrukturen etc. lernen und lese hierfür auch Bücher. Es hört also nicht auf, sich fortzubilden. Wenn es mal nicht weitergeht, habe ich das Buch gewechselt, zum Beispiel kam ich einmal mit Kaiser/Guddat nicht weiter, mir war nicht klar, was folgender Algo bezweckt (hier jetzt stark abgewandelt):

void func(int n)
{
     if(n<MAX1)func(n+1);
     zeige_n(n);
     if(n<MAX2)func(n+1);
}

Ein doppelter rekursiver Einstieg spricht für eine Baumstruktur, jedoch erfolgt die Verarbeitung in der Mitte. Hier musste ich inne halten, aber nicht aufgeben. Ich legte das Buch zur Seite und probierte viel aus. Dann nahm ich ein anderes Buch, welches ich als einfacher empfand. Solange, bis das Gehirn die Strukturen übernommen hat und damit es verstehen kann.

Ebenso beim Consumer-Producer-Problem mit Monitor-Wait und Monitor-Pulse. Ich fing an auszuprobieren, las die Beschreibung von Microsoft, recherchierte. Irgendwann war es klar.

Häufig ist es hoch komplex (gerade Objektorientierung erlaubt eine Komplexität), hierfür braucht man Zeit, keine Eile.

Motivation: Mache kleine Programme, die klappen, schrittweise, gerne auch Consolen-Programme (auf dem schwarzen "DOS"-Bildschirm, warum nicht?). Wenn Fragen sind, ab in die Foren, entweder hier oder Java-Forum.

3D-Spiele: Sagen wir so, ich würde Weg und Ziel nicht verstauschen. Wenn Du komplexe 3D-Spiele progen kannst, z.B. Tomb Raider (egal welche Version), dann bist Du fit. Aber das ist vielleicht ein Ziel, aber nicht der Weg. Habe das Ziel vor Augen und gehe Deinen Weg. Dabei nicht aufgeben, sondern Dir die Zeit geben, die Dein Gehirn braucht. Und viel ausprobieren.

danke für die ausführliche Antwort :)

1

und von so KLEIN anfangen muss.

Klein anfangen muss man ganz allgemein. Bei allen Sachen, die man neu lernen will. Wenn man backen lernen will, dann sollte man auch zuerst flache Käsekuchen backen, bevor man sich an fünfstöckige Hochzeitstorten wagt. Wenn man gleich mit der Hochzeitstorte anfängt, dann verschwendet man nur Zeit und Geld und ist am Ende frustriert, weil nix geklappt hat. Und genauso ist es beim Programmieren auch.

Den Quelltext von Doom 1 kannst du dir hier angucken

https://github.com/id-Software/DOOM

, da wirst du ziemlich schnell merken, dass du da überhaupt nicht durchblickst, wenn du "Hallo Welt" (und vieles, was darauf folgt), nicht verstanden hast. Und Doom 1 ist noch weit von "komplexen 3D-Games" entfernt. Es ist übrigens ein Denkfehler, wenn man glaubt, dass man als Profi-Zocker auch automatisch ein geeigneter Programmierer ist.

Du könntest einen neuen Anlauf starten und dir erneut ein gutes Buch / Video suchen, mit dem du von Anfang an und ohne Kapitel zu überspringen erstmal die Grundlagen in Java lernst. Dabei können dir Programmierparadigmen anfangs egal sein.

Wenn das nicht klappt, dann musst du akzeptieren, dass dir programmieren nicht liegt. Das ist dann halt so, dafür hast du sicherlich andere Stärken.

Hab niemals behauptet , dass man als Profi-Zocker geeignet für sowas ist :D Und danke

0

Nun - um gleich zu Beginn keine falschen Hoffnungen zu wecken:
Verabschiede dich von der Vorstellung, zeitnah 3D-Spiele zu entwickeln ;)
Der Weg bis dahin ist sehr viel Schwieriger als dir im Moment bewusst ist.

Was die Lernquote angeht:
Die ist zu Beginn zugegeben recht flach
Das ändert sich aber, sobald Du die Grundlagen drauf hast.
Mit etwas Zeit kommst Du dann auch in die Situation, Neues direkt nutzen zu können, da alles auf sehr ähnliche Prinzipien aufbaut.

Was die Lernmaterialien angeht, solltest Du mMn. Abstand von diversen Online-Tutorials nehmen. Der Großteil davon ist großer Mist.
Schau lieber nach professionellen Büchern.

Mit Java hast Du schon eine gute Wahl getroffen, Java ist recht leicht zu erlernen, hat aber auch einige Schwächen.
Ich persönlich rate zu C#, das hat die gleichen Stärken wie Java plus ein paar mehr. Und es gibt Visual Studio (Die Community-Edition ist kostenlos), was extrem viel vereinfacht.

Wenn Du ein kostenloses C#-Buch suchst:
http://openbook.rheinwerk-verlag.de/visual_csharp_2012/
Ich hab den Vorgänger gelesen und fand den sehr gut. Eine Kollegen hat sich den aktuellen Band vorgenommen und stimmt mir zu. Sie sagt aber auch, dass sie zu Beginn viele Fragen offen blieben, das Buch kommt später aber darauf zurück.
Wenn ich das richtib überblicke, musst Du bis Kapitel 11 lesen um die Grundlagen zu haben. Danach kommen weitere Kapitel die Themen wie Datenbank-Anwendungen und Benutzeroberflächen mit WPF besprechen.

Die Frage, wie Du dich motivieren kannst:
Zwing dich dazu :D
Zu Beginn ist Durchhaltevermögen wichtig, einen Trick gibt's da nicht.
Sobald Du aber erste Erfolge bei Benutzeroberflächen hast, dann kommen auf einmal Ideen, was Du noch alles machen könntest und willst und dann kommt auch der Spaß am Programmieren.
Manche kompliziertere Themen wirst Du auch erst dann komplett verstehen, da alles miteinander zusammen hängt.

Wenn Du später sowas mal beruflich machen willst:
Da wird dir auch keiner helfen und wenn doch, dann ist das die große Ausnahme.

Wenn Du sowas in der Richtung mal beruflich machen willst:
Auch da wirst Du sehr viel Eigeninitiative zeigen müssen, dir wird keiner beim Motivation finden helfen und selbst wenn, dann ist das eine große Ausnahme.

Wenn Du mal Spiele entwickeln willst:
Der Weg bis dahin ist lang. Je nachdem, wie schnell Du bist und wie viel Zeit Du hast, solltest Du dafür mindestens einige Monate, wenn nicht sogar Jahre ins Auge fassen.
Die Kompexität solcher Spiele ist leider sehr viel größer als die Meisten von Außen überhaupt erahnen. Und wer denkt, zu wissen, wie komplex sowas sein kann, der unterschätzt das immer noch :D Tue ich vermutlich auch ... :D
Es gibt in der für C# allerdings Unity, damit lassen sich mit vergleichsweise wenig Aufwand Spiele entwickeln bzw. Hälfte Entwickeln, andere Hälfte zusammen klicken. Es nimmt dir dabei den gewaltigen Aufwand für die grafische 3D-Oberfläche ab.

So oder so kann es aber sein, dass Du mit mehr oder weniger komplexer Mathematik konfrontiert wirst. Mindestens Vektor-Rechnung ...

Ich würde dir nur in einem Rat widersprechen: C# statt Java. Der Grund ist, dass die Sprache selbst komplexer als Java ist, das .NET-Framework für einen Anfänger zu mächtig und bestimmte sprachliche Features (wie z.B. das Schlüsselwort var) schnell zu Missbrauch verführen.

Eher würde ich empfehlen, einen Schritt zurück zu gehen, bspw. zu Greenfoot oder Processing. 

1
@regex9

Das Buch von Kühnel zu C# ist einfach nur klasse, man versteht sehr viel sehr schnell, auch komplexe Thread-Klassen sind meines Erachtens gut erklärt, wo ich mir anfangs etwas die Zähne ausgebissen habe. So etwas wie serialized, Manifeste etc. kann man ja überspringen. Das OOP erklärt Kühnel meines Erachtens verständlich. Var kommt meines Erachtens im Buch spät genug. Bei Kühnel finde ich auch gut, dass er zuerst alles auf Konsole erklärt und erst zum Schluss GUI macht.

Hingegen sind die Inselbücher für Anfänger vielleicht nicht ganz so einfach. Auch diese Einstiegsbücher, die viel zum schnell auf GUI gehen, halte ich für so lala.

Aus diesem Grund finde ich den Rat von Paladin nicht schlecht.

C# statt Java

Vor dem Hintergrund der Bedeutung, welche Java momentan einnimmt, gebe ich Dir recht, wo man hinschaut ist Java am Start. Aber ist Java wirklich weniger komplex für den Anfänger als C#?

0
@regex9

Endlich mal ein vernünftiges Argument, was gegen C# spricht :D
Gibt's echt selten bei diesem Streit "C# vs. Java"

Tatsächlich kann ich dagegen nicht viel sagen, da C# an manchen Stellen tatsächlich komplexer ist. Es bringt mit Werttypen ja auch eine etwas andere Art von OOP ein und mischt verschiedene Verfahren. Das gibt's in Java so nicht.
Das hat allerdings auch Gründe und Vorteile, die es in Java wiederum auch nicht gibt.

Das gleiche auch mit Features wie delegates, async, linq, etc.
Oder gibt's bei Java mittlerweile vergleichbares?

Allerdings sind diese ganzen Features in erster Linue zur Vereinfachung gedacht.
Klar, wer gleich zu Beginn mit Features zu geworfen wird, steugt ziemlich schnell aus, aber genau dafür gibt's ja gute Bücher, die genau diese Grätsche versuchen: Möglichst viel zeigen ohne dabei mit Umfang zu erschlagen oder zu verwirren.

Eines meiner Lieblings-Beispiele: Async
Jeder, der mal versucht hat, Aufgaben parallel laufen zu lassen, am besten noch mit einer GUI, wird mir dabei zustimmen, dass die Arbeit mit Thread echt kompliziert werden kann. Besonders dafür zu sorgen, dass die Threads sich nicht in die Quere kommen ...
Da bringt .NET mit dem async-Feature und den Tasks eine enorme Vereinfachung mit die meines Wissens bisher einzigartig ist.

Den wirklich großen Vorteil merkt man nicht zu Beginn, aber wenn das erste mal die eigene GUI anfängt zu blockieren, weil irgendwas zu lange braucht und in einen eigenen Thread ausgelagert werden soll - dann merkt man das ganz deutlich :D

Ach ja:
Ich persönlich bin der Meinung, dass Java auf einem absteigenden Ast ist. Klar, ist es noch sehr verbreitet und das wird auch noch lange so bleiben, allerdings werden neue Projekte immer öfter mit C# begonnen.
Und der größte Vorteil von Java, dass es extrem gut platformunabhängig funktioniert, dem stemmt Microsoft langsam .NET Core entgegen.

0

Ich fang einfach mit Java an.. Hab da bereits ein bisschen Erfahrung.

1

Was möchtest Du wissen?