Programmieren, Tutorial Hölle?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Fange immer mit einer Analyse-/Planungsphase an. Auch bei kleinen Vorhaben wie beispielsweise einem Taschenrechner, um dieses Vorgehen generell zu üben.

In einer Planungsphase überlegst du dir erst, was das grundlegende Ziel/Dilemma ist und welche Anforderungen es dazu gibt. Das heißt, du beschreibst das, was du tun möchtest. Bestenfalls schriftlich, entweder in kurzen Sätzen oder Stichpunkten. Im weiteren Verlauf schaust du dir an, inwiefern sich dein Ziel/Problem in Teilziele/-probleme immer weiter aufteilen lässt (bis diese einzelnen Pakete lösbarer werden).

Ein einfaches, konkretes Beispiel für so eine Teilzerlegung könnte folgendermaßen aussehen:

Eine Anwendung soll in der Konsolenausgabe ein ausgefülltes Viereck beliebiger Größe ausgeben, welches aus * besteht.

Das Problem könnte man zerlegen:

  1. Ein Viereck besteht aus mehreren horizontalen Linien/Zeilen. Wie zeichnet man also nur eine Zeile?
  2. Eine Zeile besteht aus mehreren Spalten/Zellen. Wie zeichnet man eine Zelle?
def print_cell():
  print("*", end="")

def print_row(column_count):
  for column in range(column_count):
    print_cell()
  print()

def print_rectangle(width, height):
  for row in range(height):
    print_row(width)

print_rectangle(10, 10)

Man kann so einen Fall natürlich viel kürzer lösen. Aber die von mir beschriebene Strategie sollte gut ersichtlich werden. Erst werden die einfachsten Teilschritte gelöst und dann nach und nach zusammengezogen, um zur letztendlichen Lösung zu kommen.

Beim Entwerfen von Algorithmen würde ich dir raten, (weitestgehend formlose) Programmablaufpläne oder Struktogramme zu bauen. Fange nie im Code-Editor mit deinen Überlegungen an. Zum einen machst du es dir nur selbst schwer, da dabei ein gewisser Zwang entsteht, auch gleich eine korrekte Syntax berücksichtigen zu müssen und zum anderen ist die Wahrscheinlichkeit, dass du dir Sackgassen, Fehler u.ä. Hürden einbaust, recht hoch. Mit einer Implementation (bzw. Übersetzung der Programmlogik in Programmcode) beginnt man erst, sobald der Algorithmus feststeht.

Bei komplexen Softwareprojekten würde man damit anfangen, ein System auszuarbeiten, welches sich aus Modulen, Objekten, u.ä. zusammensetzt (ein paar Stichworte: Objekt-/Klassen-/Komponentendiagramm). Wie man hierbei starten könnte, habe ich in diesem Beitrag an einem Pac-Man-Spiel gezeigt.

Nicht unwesentlich ist dabei auch einige Recherchearbeit. Zumindest für Teilprobleme gibt es ab und an schon Lösungen (Bibliotheken o.ä.) und generell muss man die zugrundeliegende Thematik verstehen. Bei einem YouTube-Downloader müsstest du beispielsweise erst prüfen, in welchem Format YouTube die Videostreams herausgibt, wie man an sie herankommt oder wie die Daten später in passende Formate (MP4/MKV/...) umgewandelt werden können.

Ich würde dir für den Anfang allerdings empfehlen, dich erst einmal nur mit kleinen Projekten auseinanderzusetzen. Du könntest dich mit diesen Aufgaben beschäftigen:

  • Bau dir Programme, die verschiedene Formen (bestehend aus *) in der Konsole ausgeben: Ein Diamant, ein Plus, ein Tannenbaum, ein rechtwinkliges Dreieck.
  • Implementiere eine lineare Suche, die entweder von verschiedenen Enden (also Anfang oder Ende) aus starten kann.
  • Schau dir Sortierverfahren wie Bubblesort, Insertionsort, Selectionsort und Quicksort an (auf Wikipedia findest du Einzelartikel) und finde für sie eine eigene Implementation.
  • Implementiere String-Funktionen wie substring, startsWith, endsWith, indexOf, reverse, split, replace, ohne dafür auf andere Stringfunktionen oder Slicing zurückzugreifen.
  • Erstelle ein Hangman-Spiel. Statt einen Galgen zu zeichnen, reicht natürlich ein einfacher Zähler.
  • Bau dir eigene Datenstrukturen wie: Eine doppelt verkettete Liste, ein Binärbaum, ein AVL-Baum, ein Stack, ein Graph. Klassen und Objekte sollten dir dafür schon bekannt sein.
  • Erstelle eine binäre Suche, mit der du deinen Binärbaum durchsuchen kannst.
  • Erstelle Minispiele wie Nim, Pong, Snake, Breakout, Conway's Game of Life, Space Invaders, Tetris oder Pac-Man. Zum Zeichen könntest du entweder auf Processing.py oder PyGame zurückgreifen.
Ralf9619 
Fragesteller
 02.03.2024, 08:31

Vielen Dank für deine super Antwort. Sehr viel Mehrwert, zumindest für mich :)

Ich hoffe ich komme einen Schritt weiter bei meinen Programmierkünsten mit der Hilfe deiner aufgezeigten Punkten.

0

Das Problem bei einem YouTube Downloader ist dass das ein wahnsinnig komplexes Projekt mit sehr umfangreichem Reverse Engineering ist. In der Praxis würdest du einfach ein paar Calls mit yt-dlp machen und das nicht alles neu schreiben, dafür hat fast keiner Zeit.

ich würde mit was anderem anfangen was dir Spaß macht. Bspw. ein CLI Tool dass Währungen mittels einer API umrechnet, das wäre vom Umfang sinnvoll.

Wenn du nicht weiter kommst frag einfach Claude/Bing Chat/Perplexity o. ä., den Lerneffekt hast du trotzdem

Ralf9619 
Fragesteller
 01.03.2024, 23:04

Das mit dem YT downloader soll nur ei beisbiel sein, ich weiss was du meinst. Was eher mein problem ist.. Irgendwie lerne ich etwas, wenn ich ein anderes beisbiel nehme z.b. einen Taschenrechner programmieren.. wenn ich dann vor dem leeren File stehe ist bei mir wie schwarz und ich weiss nicht mal wo anfangen. Wenn ich dan in einem YT video sehe wie das jemand macht, erscheint mir alles logisch. Irgendwie fehlt mir was grundlegendes um selbst damit anzufangen und auch wirklich mit "learning by doing" anzufangen.

0
weiss jemand wie man da rauskommt. 

Nun..... du schaust dir Tutorials für spezifische Aufgabenstellungen an und versuchst diese dann mehr oder weniger abzutippen.
Dir fehlen aber die Grundlagen, um das zu verstehen, was du da gerade tust.

Du willst also für einen Marathon trainieren, kannst aber noch nicht einmal stabil stehen, geschweige denn gehen......

Fang bei den Grundlagen an. Staubtrockenes Thema, ja.... aber ohne diese Grundlagen ist alles Andere witzlos.
Die Grundlagen beginnen auch nicht mit Python oder VS Code, sondern mit den Themen Programm-Ablauf-Plan, Pseudocode, OOP, ...
Wenn du eine Aufgabe nicht bereits auf Papier in einem strukturierten Plan dargestellt bekommst, aus dem hervor geht, wie dein Programm theoretisch funktionieren soll, wirst du das auch in einer Programmiersprache nicht umsetzen können. Pseudocode macht aus dem Plan dann ein mit verständlicher Sprache dargestellten Code, der in jede beliebige Programmiersprache übersetzt werden kann. (Und dafür braucht man auch noch keinen Computer, sondern wenigstens Stift und Papier.)

Dann lerne nicht Python sondern was Gescheites! Iwas mit Intellisense Unterstützung und nem richtigen Compiler. Nimm C# oder Java, VB, C++ aber kein Python. Das ist äußerst ungeeignet für Einsteiger. (jaja steinigt mich....)

Ralf9619 
Fragesteller
 01.03.2024, 22:47

Kannst du mir das ein wenig genauer elräutern wieso du dies denkst? Was mich immer sehr intressiert hat ist Hacking/Reverse Engineering etc. Ich weiss das hierfür C++ am besten geeignet wäre. Jedoch wird von allen ecken Python empfohlen da es am anfängerfreundlichsten ist. Da ich mich sonst schon schwer tue wollte ich mir nicht noch das leben erschweren mit einer kompexeren sprache.

0
DonkeyShot  01.03.2024, 22:52
@Ralf9619

Du hast kaum Unterstützung zur Entwurfszeit und überhaupt keine Typprüfung zur Compilierzeit. Das ist ein reiner Blindflug. Tickende Zeitbomben kann man damit gut produzieren. Ich programmiere jetzt seit 35 Jahren. Also ich kenne die Unterschiede. Nur wenn es unbedingt sein muss, würde ich auf die Selbstverständlichkeiten einer modernen IDE oder auf compile time checks verzichten wollen. Das macht den Code auch nicht fehlerfrei, aber die wichtigsten Dinge sind schon mal gesichert.

1