Frage von densch92, 48

Wie komme ich vom , in Schule und Uni gleichermassen, sehr verbreiteten Programmiersprachen-Lernen hin zu einem realen, problembezogenen Programm?

Hallo. Meine Frage mag zwar für Jemanden vom Fach gar lächerlich oder dumm klingen aber sie ist durchaus ernst gemeint: Wie mache ich ein Spiel oder ein Programm? Damals in der Schule hatte ich bereits Informatik und auch an der Uni besuchte und besuche ich vielerlei Informatikvorlesungen. Aber überall wird nur der Standard-Kram wie "Was sind Schleifen?" "Wie funktioniert Rekursion?" etc. durchgekaut. Der Standardmist eben.

Und jedes Mal stehe ich am Ende da, sehe diverse Programmme und Spiele, wenn auch nur etwas extrem simples wie Flappy Bird, und stelle fest dass ich keinen einzigen Schritt näher daran gekommen bin , ein reales, sinnvolles und zweckgebundenes Programm zu machen. Und weiß immer noch nicht mal ansatzweise wie warum welches Programm so funktioniert wie es das tut.

Aber dafür kann ich nun "Hallo Welt" in einem extra aufgerufenen Terminal schreiben. Yuhu! >:-(

Was bringt es mir wenn ich das dämliche "Hello World" Programm in 10 verschiedenen Programmiersprachen schreiben kann und hab doch keinen Plan wie ich daraus nun was real Brauchbares hinkriegen kann? Beispielsweise ein Programm welches meine Daten speichert oder Ähnliches?

Ne Programmiersprache und deren Strukturen zu lernen, ist ja toll und alles, aber den richtig interessanten Kram, nämlich die nächsten Schritte dann hin zu einem Programm das nicht nur 1+1 berechnet, der wird einfach nirgends erwähnt. nicht mal ansatzweise!

Ich will wissen wie reale Programme funktionieren, und wie ich diese selbst machen kann!

Und nicht dieser Pseudo-Mist auf Waldorf-Niveau!

Konkret: Sagen wir mal, ich will beispielsweise einen simplen 2D Platformer bauen: Was brauch an Programmen, Compiler, etc.?

Was muss ich wissen und wo krieg ich dieses Wissen her?

Und mit bauen mein ich tatsächlich selbst bauen, und nicht irgendeinen Kleinkinder-Baukastensystem!

Plump gesprochen: Wie komme ich vom simplen Strom an Strom aus (eben dem was ein Computer als Einziges versteht) hin zu dem, was man als ein in einer Programmiersprache verfasstes Programm bezeichnet? Was sind die genauen Schritte?

Was sind die fehlenden Schlüsselelemente und wo finde ich sie?

Antwort
von spaghetticode, 34

Die Frage ist überhaupt nicht dumm. Tatsächlich ist das sogar ganz genau der springende Punkt. Der Punkt, der aus "eine Programmiersprache lernen" ein "Programmieren lernen" macht.

Das Blöde an dieser Frage ist, dass man sie nicht anders beantworten kann als: "durch Übung".

Und "Übung" bedeutet hier nicht, ein Programm zu schreiben. "Übung" bedeutet: Übung, Übung, Übung.

Denk' dir Projekte aus, die dir wirklich Spaß machen würden. Und dann fang an, auszuprobieren. Die Ergebnisse werden am Anfang grauenhaft sein. Du wirst tagelang an einem simplen "Galgenraten" für die Konsole sitzen, solange, bis das Ding zwar zufriedenstellend läuft, der Code aber ein riesiger Haufen undurchsichtiger Müll ist, den du freiwillig eigentlich gar nicht mehr anfassen magst.

Das ist aber normal. Fang das nächste kleinere Projekt an. Erinnere dich an verschiedene Entscheidungen, die zu dem letzten Code-Müll geführt haben, und triff diesmal andere.

Hangel dich von Projektidee zu Projektidee, von Fehlentscheidung zu Fehlentscheidung - und freu dich über jeden einzelnen Rückschlag. Weil du aus jedem Rückschlag lernst.

Das Lernen einer Programmiersprache bedeutet, zu lernen, wie etwas funktioniert. Tatsächliches Programmieren lernen bedeutet aber das Gegenteil: Jeden Tag neu zu lernen, wie etwas nicht funktioniert.

Kommentar von densch92 ,

Ich verstehe zwar deinen Punkt aber so ganz weiß ich immer noch nicht wie es jetzt weitergeht.

Sagen wir mal, ich will wirklich ein Galgenraten Spiel machen.

Wie mach ich das?
Denn mit Konsole/Terminal/wieauchimmerdasteilnochheißenkann und nem Java-Dokument krieg ich so direkt keine grafische Darstellung in irgendeiner Weise hin, kann auch noch keinerlei Tastatureingaben irgendwie verwerten, etc.

Gibts da irgendwelche Programme oder Bibliotheken die ich da brauchen würde?


Denn wie oben erwähnt, geht es mir nicht darum mit irgendeinem Baukastensystem oder so auf die Schnelle was zusammen zu werkeln sondern ich will das komplette System und die Struktur dahinter verstehen.

Weißt du eventuell vielleicht eine Homepage oder so wo ich mich da weiterbilden könnte?

Kommentar von spaghetticode ,

Ich weiß ganz genau, was du meinst. An dem Punkt war ich selbst sehr lange und bin es in gewisser Hinsicht auch noch. Zwischen Einsteiger- und Lernliteratur und Fortgeschrittenenliteratur gibt es eine deutliche Lücke, die man leider selbst füllen muss.

Ich habe diesbezüglich selbst sehr lange gesucht, aber keine Lehrmaterialien finden können, die einem beim Überbrücken dieser Lücke helfen.

Bis ich eines Tages einfach mal angefangen habe. Nun habe ich mit größeren Programmen immer noch so meine Schwierigkeiten und fühle mich selbst noch immer ganz am Anfang dieser "Üben, üben, üben"-Phase. Aber ich habe immerhin schon gelernt, dass man all das nur lernen kann, in dem man es tut. Mit all seiner Ahnungs- und Ratlosigkeit.

Bei einem Galgenraten könntest du damit anfangen, die genau aufzuschreiben, wie ein solches Spiel abläuft und was der Computer dabei tun muss. Und zwar wirklich genau.

Dann fängst du an zu modellieren. Wie könnte ich die Daten verwalten? Das gesuchte Lösungswort, der aktuelle Stand des Wortes, wie er auf dem Bildschirm dargestellt wird? Wie kann ich die Benutzereingaben zwischen den beiden abgleichen? Usw. usw.

Kommentar von CSANecromancer ,

Schritt 1: Lerne die wesentlichen Begriffe deiner Frage in Englisch zu formulieren. ("...Java-Dokument krieg ich so direkt keine grafische Darstellung hin...") => java document graphical display

Schritt 2: Gebe die englischen Schlüsselbegriffe durch Leerzeichen getrennt bei Google ein.

Schritt 3: Verdrehe nicht gleich genervt die Augen, wenn nicht sofort das erste oder zweite suchergebnis das **PFERFEKTE** Ergebnis ist.

Schritt 4: Lies' dich durch die ganzen Suchergebnisse durch. Also nicht auf der Google-Seite sondern klicke die Links der Suchergebnisse an und lies' dir durch, was dahinter steht. **Das** ist das Lernen.

Schritt 5: Mache dir klar, dass du vieles von dem, was du gelesen hast, weder verstehst noch gebrauchen kannst.

Schritt 6: Filtere aus dem Gelesenen das heraus, was du benötigst.

Herzlichen Glückwunsch, du hast einen weiteren Schritt nach vorne gemacht. Im Ernst: Ich entwickel hauptberuflich Software, deren reale Implementierung mehrere dutzend Module und zig Tausend Zeilen Code unterschiedlicher Sprachen beinhaltet. Aber wenn ich an einen Punkt komme, wo ich auch noch keine Erfahrungswerte habe, dann gehe ich genau so vor, wie ich das oben beschrieben habe.

Unter der Annahme, dass du in Java programmieren willst:

Du weisst nicht, wie du etwas graphisch in einem Fesnter darstellen sollst? -> java window graphics

Du weisst nicht, wie du Tasteneingaben erhalten oder verarbeiten kannst? -> java keyboard input

Du weisst nicht, wie du Daten auf Festplatte schreiben und wieder davon einlesen sollst? -> java data hard disk write read

usw.

Kommentar von densch92 ,

Ja, ich will in Java programmieren.

Es regt mich doch so langsam auf dass selbst kleine Kinder mittlerweile eigene Programme und Spiele veröffentlichen;

von daher dachte ich, trau ich mich doch mal so langsam an das Thema ran. ^^

Antwort
von Leolyyn, 48

Für spiele brauchst du ne game engine. Teilweise musst du noch nicht mal programmieren können um ein spiel raus zu bringen. So was wie das oben genannte kann man auch voll ohne eine einzige zeile code schaffen (aber code erleichtert vieles glaub mir. sei froh das du es kannst. ohne dauerts drei mal so lang :D).

Antwort
von W00dp3ckr, 24

Du musst noch Software Engineering lernen.

Und ansonsten ganz viel üben. Andere Programme ansehen und modidizieren kann auch helfen. Programmieren ist ein kreativer Prozess. Also versuch, erst kleine und dann größere Dinge selbst zu Programmieren.

Antwort
von bergerle, 10

Die grundbausteine der meisten Programme sind eigentlich recht einfach: Datenstrukturen erstellen (z. B. Klassen, enums, structs oder was auch immer), methoden/Funktionen definieren und dann ein Haufen if, schleifen und funktionsaufrufe. Also eigentlich genau das, was man in diesen Vorlesungen recht schnell lernt. Der Rest sind dann Sachen, die man mit der Erfahrung mitkriegt und sich im Internet aneignen kann. Als Übergang zwischen hello world und einem grafischen Programm empfehle ich webanwendungen. Da kriegt man mit HTML schnell und einfach die Anzeige hin und kann sich auf die Funktionalität konzentrieren. Allerdings müssen gerade bei der Verwendung von Javascript und php sehr darauf achten, den eigenen Code strukturiert zu halten, sonst verbaut man sich komplett den programmierstil. Wenn man dann etwas Erfahrung mit der implantieren von logischen Abläufen gesammelt hat, kann man auch einen Schritt weiter gehen und sich komplexere Aufgaben, wie z. B. die Nutzung von Grafiken ins anschauen. Ein weiterer möglicher Zwischenschritt sind z. B. Apps, bei denen es auch recht einfach ist, sich die Anzeige zusammen zu bauen.

Antwort
von WhiteGandalf, 20

In der Schule lernst Du die grundlegenden Techniken.

Das ist nichts anderes als das, was Du im Laufe der Schulzeit zwischen den verschiedenen Klassenstufen erlebst. Deine Frage könntest Du also auch so formulieren:

"Wie komme ich von dem - in der Schule weit verbreiteten - Buchstabieren lernen zum Lesen von realen Büchern?"

Die kannst Du Dir aber bereits seit längerem beantworten. Danach brauchst Du das Ergebnis der Antwort nur noch per Analogiebetrachtung auf das Programmieren übertragen.

Deine Frage impliziert eine Gegenfrage: "Ist das nicht Stuss, erst diese Tippelschritte beim Programmieren lernen zu nehmen? Kann man nicht GLEICH RICHTIG ins Programmieren einsteigen?"

Klar geht das: Genau, wie Du aus dem Kalten heraus als Kleinkind sofort ins Lesen von Fachbüchern einsteigen kannst, ohne jemals durch die erste Klasse zu gehen. Die ist eh nur von Chemtrail-Verwaltern als Arbeitsbeschaffungsmaßnahme für ansonsten arbeitslose Lehrer gedacht. Weiß doch jedes Kind!

Kommentar von densch92 ,

Ich sag ja nicht das es schlecht ist.

Aber man will eben auch nicht ewig auf dem Kleinkindniveau bleiben wo man lediglich die einzelnen Buchstaben kennt! :-)

Und dieser Übergang von einzelnen Buchstaben zu richtigem Lesen ist es, was meiner Meinung nach komplett fehlt und auch nirgendswo ansatzweise erwähnt wird.

Ist ja schön und gut dass einem da in allen Sprachen Programmieren beigebracht wird aber wie zur Hölle gehts danach weiter? O_o

Kommentar von WhiteGandalf ,

Da halte ich die Antwort von spaghetticode für das Non-Plus-Ultra. Kann ich voll unterschreiben.

Vielleicht noch ein winziger Zusatz: Wenn Du in Deiner gewohnten täglichen Umgebung - aus Deiner gewohnten Lernumgebung zum Beispiel - heraus Sachen entdeckst, die Du mit dem gerade eben gelernten BESSER machen kannst, dann lass Dich daran aus! Na klar werden das ZUERST einfache Sachen sein, aber so wie Du die löst, entwickeln sich vollautomatisch Deine Fertigkeiten und Deine Fähigkeit, wieder mehr Dinge in Deiner Umgebung zu entdecken, die Du mit Deinem Können verbessern kannst. Das baut sich iterativ auf. Und in einer Exponentialkurve. Recht schnell kommst Du zu einem Stand, wo Du Dir einen Kopf machen willst, wie Du Deine Programmiertätigkeit automatisierst (statt nur mit dem Programmieren Deine Umgebung zu automatisieren), und Dir dazu "höhere" Programmiertechniken anschaust und verschiedene Arbeitsmittel kombinierst. Und dann BIST Du bereits dort, wo Du jetzt hin willst. Das geht ab einem bestimmten Punkt schneller, als Dir lieb ist.

Keine passende Antwort gefunden?

Fragen Sie die Community