Ich kriege die Programmierübungen nicht hin. Was soll ich tun?


23.07.2021, 20:06

oder ist Programmieren nicht für mich ? und muss schlau sein ?

6 Antworten

1) Versuche dich bei neu gelerntem Wissen (Sprachelementen) nach Möglichkeit stets praktisch.

Wenn du etwas neues lernst (bspw. Schleifen), reicht es in der Regel nicht, sich nur die Theorie dazu durchzulesen und Praxisbeispiele anzuschauen. Sich selbst praktisch daran zu versuchen, ist ein wertvollereres Ereignis, denn:

  • Beim Schreiben prägt man sich in der Regel mehr ein.
  • Du wirst eher mit Problemen/Fragen konfrontiert. Möglicherweise war doch noch etwas unklar oder dir fallen Sonderfälle auf, zu denen du dich nun via Recherche informieren könntest.

2) Beginne mit einfachen Übungen.

Ein Problem, in welches manche Anfänger tappen, ist der Versuch, früh an Aufgaben herangehen zu wollen, die sie aufgrund ihrer Komplexität noch überfordern. Das wird schnell frustrierend.

Suche dir also für das, was du lernst, einfache Aufgaben. Eine Seite mit Übungen, die sich nach Schwierigkeitsgrad filtern lassen, ist bspw. Edabit. Ebenso würde ich dir CodingBat sehr empfehlen.

3) Kombiniere und wiederhole Lehrstoff.

Durch die Kombination gelehrten Wissen lassen sich erst komplexe Aufgaben bilden und die Wiederholung hilft, das Gelernte nicht so schnell wieder zu vergessen. Gerade die Grundmittel (Variablen, Operatoren, Kontrollstrukturen) sollten stets im Gedächtnis bleiben, denn mit ihnen kannst du den Großteil an Problemen lösen.

Wenn du deine Informationen über eine bestimmte, einzelne Lernquelle beziehst (z.B. ein Tutorial, ein Buch oder vielleicht in einer schulischen Ausbildung), kannst du damit rechnen, dass gestellte Aufgaben zum Großteil das zuvor neu vermittelte Wissen abprüfen sowie auf bereits vermittelten Wissen vorheriger Kapitel aufbauen. Meist fordert nur ein kleiner Anteil etwas Kreativität oder Eigenrecherche.

Ein Beispiel (unter der Annahme, dass sie zu einem Kapitel über Schleifen gestellt wurde):

Schreibe ein Programm, welches alle Vokale eines Wortes in die dezimale Darstellung aus der ASCII-Tabelle umwandelt.

Die Iteration über alle Zeichen des Wortes via Schleife wäre die Übung für die Schleife. Hierbei nur nach Vokalen zu filtern, wäre die Aufgabe einer Verzweigung, die bereits aus vorherigen Kapiteln bekannt sein sollte. Die Recherchearbeit liegt darin, wie man ein einzelnes Zeichen in seine Dezimaldarstellung konvertiert. In der Dokumentation findet man dafür die ord-Funktion. Eine Suche via Google (plump: python character to ascii) hilft ebenso.

4) Finde Übungen oder Lernumgebungen, die Spaß machen und Kreativität fordern.

In Python ist das ziemlich beliebte turtle-Modul enthalten, welches sich konkret an Anfänger richtet. Das Prinzip besteht darin, dass du einen Stift über eine Zeichenfläche bewegst, um bspw. Formen zu zeichnen. Seien es Vierecke, Mandalas, o.ä..

Eine andere Lernumgebung, die ich sehr gern empfehle, ist Processing (den Python-Mode (Processing.py) kannst du leicht im Processing Editor nachinstallieren). Sie wurde ursprünglich für Designer/Programmieranfänger entworfen, um ihnen einen leichten Einstieg zu gewähren, der ihnen ebenso erlaubt, schnell kreativ tätig zu werden. So steht dir auch hier eine Zeichenfläche zur Verfügung sowie verschiedene vorgefertigte Funktionen, um bspw. Rechtecke, Kreise, u.ä. zu zeichnen. Damit ergibt sich ein interessantes Feld neuer Übungsmöglichkeiten. Seien es Minispiele wie Pong, Tetris, ... (die sich gerade mit den oben genannten Grundmitteln gut lösen lassen) oder Simulationen (wie ein rekursiver Baum). Ziemlich tolle Ideen, was generell so möglich ist, kannst du dir auch hier einmal anschauen, wenn dafür auch öfter etwas Mathematik notwendig ist.

Um aber einmal direkt auf Übungen/Minispiele zurückzukommen, die sich in der Hinsicht für dich sehr gut eignen würden:

  • Conways Game Of Life (schau auf Wikipedia für eine Beschreibung)
  • Pong (und darauf aufbauend Breakout)
  • Snake
  • Vier gewinnt
  • Asteroids
  • Tic-Tac-Toe

5) Gehe analytisch vor.

Ein Fehler, den Anfänger öfter machen, ist ein Start ohne Plan. Die direkte Umsetzung eines Programms nennt sich (Tastatur) hacken (Deutsch ausgesprochen) und birgt das Problem, beste Voraussetzungen für ein fehleranfälliges, schlecht verwaltbares Endprodukt zu kreieren.

Also, auch wenn Python gern mit Pseudocode verglichen wird: Plane dein Vorgehen, bevor du beginnst. Abseits einer Python IDE.

Die erste Frage, die du dir stellen solltest, wäre: Was ist das aktuelle Problem, welches gelöst werden soll? Beschreibe es kurz, entweder in wenigen Stichpunkten oder maximal drei Sätzen. Stelle auf diese Weise sicher, dass du das Problem verstehst und ermittle die sich daraus ergebenden Anforderungen. Unter Umständen ist es bei diesem Punkt schon notwendig, Recherche zu betreiben, weil vielleicht bestimmte Themen noch unbekannt sind.

Ein Beispiel: Du sollst ein Programm entwickeln, welches den Quotient aus zwei Zahlen ermittelt. Eine Anforderung hierbei könnte sein, dass der Divisor nicht null sein darf.

Bei einigen Problemen eignet sich zudem das Teile-und-herrsche-Verfahren. Dafür zerlegt man das aufgestellte Problem erst in Teilprobleme und diese wiederum ebenso. Die Idee dabei ist, das ein Teilproblem, umso kleiner es ist, sich leichter lösen lässt. Die Teillösungen kann man zu einer Gesamtlösung zusammenfügen.

Ein Beispiel hierfür: Du sollst ein Programm entwickeln, welches ein beliebig großes Viereck aus Pluszeichen in der Konsole ausgibt.

++++
++++
++++

Ein Viereck besteht aus mehreren Zeilen und jede Zeile besteht aus mehreren Spalten. Also rückwärts gelöst, lässt sich eine Spalte so anlegen:

print("+", end="")

Eine Zeile beliebiger Länge so:

for x in range(width):
  print("+", end="")

Und ein Viereck in beliebiger Höhe so:

for y in range(height):
  for x in range(width):
    print("+", end="")
  print()

Mittel, die dir eine Programmplanung ebenfalls erleichtern dürften, sind z.B. Programmablaufpläne (ich kann hierbei den PapDesigner empfehlen, aber du kannst natürlich auch mit Paint o.ä. Pläne erstellen). Aufgrund ihrer sehr einfachen Syntax zwingen sie dich auch dazu, Logiken soweit herunterzubrechen, sodass sie auch nur mit diesen lösbar werden. Implementationsdetails wie z.B. die Handhabung von Datentypen werden vorerst beiseite gelegt, denn für die eigentliche Logik sind sie nicht so wichtig. Diese Übersetzung für deine jeweilige Programmiersprache kannst du später durchführen, wenn sichergestellt ist, dass die geplante Anwendungslogik sitzt.

Bei mathematischen Problemen (z.B. eine Kollisionsprüfung von 2D-Formen) sind auch Skizzen förderlich. Mit einer bildlich festgehaltenen Vorstellung von dem Problem lässt sich m.E. besser arbeiten, denn man hat sie vor sich liegen und muss sie nicht ständig in Gedanken selbst neu bilden.

6) Betreibe Recherche und suche geeignete Lernquellen.

Wie schon in den vorherigen Punkten angedeutet: Zu vielem ist Eigenrecherche unabdingbar. Der einfachste und schnellste Anlaufpunkt wäre Google (bzw. die Adresszeile des Browsers). Ansonsten: Beschäftige dich mit der Python Dokumentation. In ihr sind alle Module mit allen Klassen und Funktionen aufgeführt. Stets mit einer kleinen Beschreibung, ab und an auch mit praktischen Beispielen.

Selbst Wikipedia kann häufiger helfen, als man womöglich denkt. Eine Vielzahl an Algorithmen (Suchverfahren wie die binäre Suche, Sortierverfahren wie Bubblesort, u.ä.) sind in einzelnen Artikeln aufgeführt. Teilweise mitsamt grafischer Abbildungen, Animationen und Algorithmen.

Wenn du dir Lernquellen heraussuchst, würde ich zudem dazu raten, etwas mehr Acht darauf zu geben, was das für Quellen sind. Das heißt: Wie sind sie aufgebaut (z.B. sprachlich)? Gibt es einen Autor? Von wann sind sie?

Nicht jede Quelle ist gut geeignet. Tutorials, die bspw. aktiv zum Abtippen / Copy & Paste auffordern, helfen dir beim Lernen (von Python) kaum weiter. Stelle sicher, dass du stets nur Code verwendest, der dir in seinem Ablauf / seiner Funktionalität klar ist.

7) Achte auf lesbaren Code.

Auch wenn Python schon etwas zu Ordnung zwingt, habe ich trotzdem bereits Anfängercodes gesehen, die einfach nur wüst waren. Sei es ein Mix aus verschiedenen Sprachen (Deutsch, Englisch) und Konventionen (snake_stil und camelCase), etliche unnötige Blöcke auffeinanderfolgender Leerzeilen, schlecht gewählte Bezeichner oder fehlende Leerzeichen zwischen Operatoren.

Achte darauf, deinen Code gut lesbar zu gestalten. Umso besser er lesbar ist, umso besser findest du dich in ihm zurecht, umso eher vermeidest du Fehlerfälle und umso besser können andere Programmierer sich in ihn hineinfinden und dir helfen.

Nur ein kleines Beispiel dazu:

a = int(input())
b = int(input())
c = a + b
print(c)

Dies ließe sich so besser formulieren:

number_one = int(input())
number_two = int(input())
sum = number_one + number_two

print(sum)

Denn nun wird schneller an den Bezeichnern sichtbar, wofür sie stehen. Bei größeren Skripten besteht weniger Notwendigkeit, wegen ungenauer Bezeichner hin- und herzuscrollen, um zu schauen, was sie eigentlich nochmal für eine Bedeutung im Code haben.

Noch eine Stufe besser wäre die Gruppierung und Abstraktion in einer Funktion. So wird der Code wiederverwendbar und bekommt einen zusätzlichen beschreibenden Bezeichner (den Funktionsnamen).

def get_sum(summand_one, summand_two):
  return summand_one + summand_two

number_one = int(input())
number_two = int(input())
sum = get_sum(number_one, number_two)

print(sum)

Das wird bei diesem Beispiel vielleicht noch nicht ganz so deutlich. Bei komplexeren Programmen, bei denen mehrere Operationen sich in eine Funktion auslagern lassen, wird der Vorteil klarer.

8) Arbeite mit einer IDE.

Ein Programm, welches dich bei der Programmierung mit hilfreichen Funktionen wie Syntax Highlighting, Autosuggestion oder einem Debugging-Tool (mit dem du dich unbedingt auseinandersetzen solltest) ist natürlich noch eine weitere wertvolle Unterstützung. Sie nimmt dir zwar nicht das Denken ab, aber macht dich schneller auf potentielle Fehlerstellen aufmerksam.

PyCharm wäre hierbei eine gute Wahl.

Zu guter Letzt kann ich dir noch ein paar Quellen für Übungsaufgaben (abgezogen zu den bereits aufgezählten) nennen. Weitere Alternativen findest du leicht via Google-Suche (python exercises).

  • Exercism
  • GeeksForGeeks (mitsamt verschiedener Lösungsvorschläge je Aufgabe)
  • W3Resources
  • CheckiO
  • Weitere Minispielvorschläge: Bananen fangen (Objekte fallen den Bildschirm hinunter und müssen mit einem Korb aufgefangen werden), Hangman, Nim, Space Invaders, Black Jack
  • String-Funktionen selbst implementieren (wie substring, index, lower, upper, split, ...)
  • Eigenimplementation von Sortier- (Mergesort, Heapsort, Slowsort, ...) und Suchverfahren (schau auf Wikipedia!)
  • Eigene Datenstrukturen implementieren (Stack, zirkuläre Liste, Splay Tree, ...)

Mathematische Probleme eignen sich oft für Übungen:

  • Berechnung der kleinsten Zahl einer Liste an Zahlen
  • Berechnung der Fakultät
  • Berechnen von Produkten ohne das Multiplikationszeichen oder Funktionen der Standardbibliothek verwenden zu dürfen
  • Berechnung des kleinsten/größten gemeinsamen Teilers
  • Auf Projekt Euler findest du eine Vielzahl an Problemstellungen

Einfach üben, üben, üben. Du brauchst dir absolut kein Stress zu machen, einfach immer wieder probieren und wenn du nicht weiter kommst mache mehr Challenges oder Projekte auf dem selben Niveau. Irgendwann kommst du in die Denkmuster rein und kannst immer schneller und effizienter Probleme lösen. Wie gesagt sind auch Projekte eine super Sache, da kannst du die Schwierigkeit besser regulieren als bei Challenges. Fange einfach mal mit kleinen Programmen an, die müssen keinen Sinn ergeben, aber einfach damit du merkst dass man diese Situation so lösen kann.

Woher ich das weiß:Hobby – Programmiere seit eineinhalb Jahren

Leichtere Übungen machen. Man muss sich hocharbeiten. Die Basics Schritt für Schritt verinnerlichen.

Natürlich solltest du dir auch mal irgendwo durchlesen, was genau welche Funktion macht, oder wie man etwas macht. Python hat eine gute Dokumentation, und auf Stackoverflow findet man auch viel Code. Falls du die Übungen von der Schule her machen musst, dann den Stoff nochmal anschauen.

Und viel rumprobieren, immer mit dem Gedanken "Was kommt raus, wenn ich das hier ändere?" "Wieso kommt dann das raus?"

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

Nicht selber stressen, sondern mit Spaß rangehen. Schau dir den Code anderer Entwickler an, zb. in Libraries oder github. Und am Ende einfach üben üben üben... Wird schon.

Woher ich das weiß:Berufserfahrung
Marwin388 
Fragesteller
 23.07.2021, 20:14

ok . ich mach das eigentlich schon aber vielleicht mehr Codes anschauen .

0

Nein Nein und Ja

c99 bande

Marwin388 
Fragesteller
 23.07.2021, 20:07

was ist damit gemeint ?

0
lunnen  23.07.2021, 20:08
@Marwin388

In welcher Sprache, OS und Compiler/Interpreter machst du das denn?

0
lunnen  23.07.2021, 20:21
@Marwin388

Oke, sobald du meine Nachricht gelesen hast, machst du folgendes.
1. Du Bookmarkst folgende Seiten in deinem Browser:

https://teachyourselfcs.com/

https://projecteuler.net/

https://github.com/Hack-with-Github/Awesome-Hacking/blob/master/README.md

Nachdem du das getan hast, ohne Widerrede, egal wer dir was anderes sagt, jene haben Unrecht, bin der Einzige der dir hilfreiche Tipps geben wird, erhlich:

also

Liest die ersten paar Kapitel davon. Das Scheme-Zeug ist per se egal, hauptsache du hast diese Konzepte verinnerlicht.

https://doc.lagout.org/programmation/Lisp/Scheme/SICP.pdf

gut, danach wirft du den Blick auf diese Dinger:

https://automatetheboringstuff.com/

https://www.composingprograms.com/

http://inventwithpython.com/pygame/chapters/

Wenn du dieses Zeug ehrlich und gewissenhaft verinnerlicht hast geht es flott ohne Probleme. Würde dir sehr ans Herz zu legen es zumindest zu versuchen diese Dinge anzuschauen, sie werden dir helfen unzwar besser als jedes youtube tut

1