Lerne Python, indem du Spiele schreibst.

Autor:in

Alexander (Sasha) Pastukhov

Veröffentlichungsdatum

14. Oktober 2024

Einleitung

Dieses Buch wird dir das Programmieren beibringen. Hoffentlich auf eine lustige Art und Weise, denn wenn es etwas Befriedigenderes gibt als ein Videospiel zu spielen, dann ist es eines zu erstellen. Obwohl ich das Buch für den Kurs “Python für soziale und experimentelle Psychologie” geschrieben habe, ist mein Hauptziel nicht, dir Python beizubringen. Python ist ein fantastisches Werkzeug (mehr dazu später), aber es ist nur eine von vielen existierenden Programmiersprachen. Mein letztendliches Ziel ist es, dir allgemeine Programmierfähigkeiten zu vermitteln, die nicht von einer bestimmten Programmiersprache abhängen, und sicherzustellen, dass du gute Gewohnheiten entwickelst, die deinen Code klar, leicht lesbar und leicht wartbar machen. Letzteres ist entscheidend. Beim Programmieren geht es nicht darum, Code zu schreiben, der funktioniert. Das ist auch wichtig, aber es ist nur die Mindestanforderung. Beim Programmieren geht es darum, einen klaren und leicht lesbaren Code zu schreiben, den andere und, noch wichtiger, dein Zukunfts-ich verstehen können.

Ziel des Buches

Das Ziel ist, dass du lernst, ein komplexes Experiment zu programmieren, das mehrere Blöcke und Durchläufe, verschiedene Bedingungen, komplizierte visuelle Präsentationen, automatische Datenerfassung und Ausnahmebehandlung hat. Klingt das ambitioniert? Ja, aber wir werden Schritt für Schritt vorgehen, damit du es lernst.

  • Kernkonzepte von Python, die du lernen solltest:
    • Variablen und Konstanten
    • Unveränderliche Datentypen wie Ganzzahlen, Fließkommazahlen, Strings, logische Werte und Tupel
    • Veränderliche Typen wie Listen und Dictionaries
    • Funktionen
    • Steuerstrukturen wie bedingte if-else-Anweisungen und Schleifen
    • Objektorientierte Programmierung, einschließlich der Konzepte Vererbung, Duck-Typing und Mixing
    • Ausnahmen
    • Dateioperationen
  • PsychoPy: PsychoPy ist kein Kern-Python, aber es ist eine wichtige Bibliothek für psychophysikalische Experimente und du wirst wichtige Werkzeuge lernen, die du benötigst, um ein Experiment zu programmieren.
  • Guter Programmierstil, der du beachten solltest:
    • Schreibe klaren Code in iterativer Weise
    • Lies (deinen eigenen) Code
    • Dokumentiere deinen Code
    • Debugge dein Programm in VS Code

Ich habe versucht, Konzepte in dem Kontext darzustellen, in dem sie benötigt werden, um sie zu erklären und ihre typischen Anwendungsfälle zu präsentieren. Das bedeutet, dass das Material verteilt ist und nach Bedarf präsentiert wird. Zum Beispiel wird der Begriff von Listen zuerst eingeführt, aber Operationen an ihnen werden erst in späteren Kapiteln thematisiert. Dies geschieht zum einen weil wir sie erst später benötigen und zum anderen auch um dein Gefühl der Überforderung in Grenzen zu halten. Das macht es etwas schwieriger dieses Buch als Referenz zu nutzen (es gibt aber hervorragende andere Referenzen wie die offizielle Python-Dokumentation), aber die Hoffnung ist, dass dir durch die Dosierung in kleine Informationsbrocken das Verständnis des Materials und die Integration mit dem, was du bereits weißt, erleichtert wird.

Die gleiche “verteilte” Logik gilt auch für Übungen. Statt am Ende jedes Kapitels aufgeführt zu sein, sind sie in den Text eingebettet und du solltest sie zu diesem Zeitpunkt machen. Viele von ihnen sind nämlich so gestaltet, dass sie Konzepte klären, die zuvor präsentiert wurden, indem sie illustrative Beispiele verwenden, also wäre es am hilfreichsten, sie sofort zu absolvieren. Dasselbe gilt für die Kodier-Übungen, obwohl du in diesem Fall das gesamte Material lesen kannst, um einen Überblick über das gesamte Programm zu erhalten, und dann den Text erneut lesen und die Übungen erledigen kannst.

Voraussetzungen

Dieses Material setzt kein Vorwissen in Python oder Programmieren voraus. Es soll dir helfen, dein Wissen schrittweise aufzubauen und immer komplexere Spiele zu entwickeln.

Warum Spiele?

Das eigentliche Ziel dieses Kurses ist es, Psychologie- und Sozialwissenschafts-Studenten beizubringen, wie man Experimente programmiert. Das ist es, worum es in der echten Forschung geht. Allerdings gibt es kaum einen praktischen Unterschied zwischen Experimenten und Spielen. Die grundlegenden Zutaten sind dieselben und, zugegeben, Experimente sind einfach langweilige Spiele. Also, keine Sorge, wenn du ein Spiel programmieren kannst, kannst du auf jeden Fall auch ein Experiment programmieren.

Warum sollte ein Psychologe programmieren lernen?

Warum sollten Psychologen, die sich für Menschen interessieren, lernen, wie man Computer programmiert? Die offensichtlichste Antwort ist, dass das eine nützliche Fähigkeit ist. Wenn du programmieren kannst, hast du die Freiheit, ein Experiment zu erstellen, das deine Forschungsfrage beantwortet, und musst dich nicht auf ein Experiment beschränken, das aufgrund der Einschränkungen deiner Software umsetzbar ist.

Wichtiger ist, zumindest aus meiner Sicht, dass das Programmieren die Art und Weise verändert, wie du denkst. Menschen sind clever, aber Computer sind dumm1. Wenn du dein Experiment oder deine Reisepläne jemandem erklärst, kannst du recht vage sein, einen kleinen Fehler machen oder bestimmte Teile auslassen. Menschen sind clever, also werden sie die fehlenden Informationen mit ihrem Wissen ausfüllen, einen Fehler erkennen und korrigieren, nach mehr Informationen fragen und auf eigene Faust improvisieren, wenn sie auf etwas stoßen, das du nicht abgedeckt hast. Computer sind dumm, also musst du präzise sein, du kannst dir keine Ungenauigkeiten erlauben, nichts dem “es wird sich schon ergeben, wenn es passiert” überlassen (das wird es nicht). Meine persönliche Erfahrung, gestützt durch Psychologen, die das Programmieren gelernt haben, ist, dass es dir bewusst macht, wie vage und ungenau Menschen sein können, ohne es zu merken (und ohne dass du es bemerkst). Programmieren zwingt dich, präzise und gründlich zu sein, im Voraus für jede Eventualität zu planen. Und das ist an sich eine sehr nützliche Fähigkeit, die auf jede Aktivität angewendet werden kann, die Planung erfordert, ob es sich nun um ein Experimentaldesign oder Reisevorbereitungen handelt.

Warum Python?

Es gibt viele Möglichkeiten, ein Experiment für psychologische Forschung zu erstellen. Du kannst Drag-and-Drop-Systeme verwenden, entweder kommerziell wie Presentation, Experiment Builder oder kostenlos wie PsychoPy Builder-Interface. Sie haben eine viel flachere Lernkurve, sodass du schneller mit dem Erstellen und Ausführen deiner Experimente beginnen kannst. Allerdings hat ihre Einfachheit einen Preis: Sie sind relativ begrenzt darin, welche Stimuli du verwenden und wie du das Präsentationsschema, Bedingungen, Feedback usw. steuern kannst. Normalerweise kannst du sie durch Programmieren des gewünschten Verhaltens erweitern, aber dafür musst du programmieren können (wenn du Python kennst, beschleunigst du deine PsychoPy-Experimente). Daher denke ich, dass diese Systeme, insbesondere PsychoPy, großartige Werkzeuge sind, um schnell ein einfaches Experiment zusammenzustellen, aber sie sind am nützlichsten, wenn du verstehst, wie sie den darunterliegenden Code erstellen und wie du es selbst programmieren würdest. Dann bist du nicht durch die Software beschränkt, weil du weißt, dass du etwas programmieren kannst, das der Standard-Drag-and-Drop nicht erlaubt. Gleichzeitig kannst du immer auf Drag-and-Drop zurückgreifen, wenn es ausreichend und schneller ist, oder eine Mischung aus beiden Ansätzen verwenden. Letztendlich geht es darum, Optionen und kreativen Freiheit zu haben, um ein Experiment zu programmieren, das deine Forschungsfrage beantwortet, und nicht nur ein Experiment, das deine Software hergibt.

Wir werden Programmieren in Python lernen, das ist eine super Sprache, die eine einfache und klare Syntax mit Power und der Fähigkeit verbindet, fast jedes Problem zu lösen. In diesem Seminar werden wir uns auf Desktop-Experimente konzentrieren, aber du kannst Python auch für Online-Experimente (oTree und PsychoPy), wissenschaftliches Programmieren (NumPy und SciPy), Datenanalyse (pandas), Machine Learning (scikit-learn), Deep Learning (keras), Web-Programmierung (django), Computer Vision (OpenCV) usw. verwenden. Also ist Python eines der vielseitigsten Programmierwerkzeuge, das du für alle Phasen deiner Forschung oder Arbeit verwenden kannst. Und, Python ist kostenlos, also musst du dir keine Sorgen machen, ob du oder dein zukünftiger Arbeitgeber sich die Lizenzgebühren leisten können (ein sehr reales Problem, wenn du Matlab verwendest).

Seminar-spezifische Informationen

Dieses Buch ist Material für das Python für Sozial- und Experimentelle Psychologie-Seminar, das ich an der Universität Bamberg halte. Jedes Kapitel behandelt ein Spiel, stellt die notwendigen Ideen vor und wird von Übungen begleitet, die du absolvieren und einreichen musst. Um das Seminar zu bestehen, musst du alle Übungen durchführen , d.h. alle Spiele schreiben. Du musst nicht alle Übungen abschließen oder korrekte Lösungen liefern, um das Seminar zu bestehen. Informationen darüber, wie die Punkte für Übungen in eine Note (wenn du eine benötigst) oder ein “bestanden” umgewandelt werden, werden während des Seminars zur Verfügung gestellt.

Das Material ist so strukturiert, dass jedes Kapitel oder jeder Abschnitt einem einzelnen Seminar-Treffen entspricht. Aber wir sind alle unterschiedlich, also arbeite in deinem eigenen Tempo, lies das Material und reiche die Aufgaben unabhängig ein. Ich werde dir detailliertes Feedback für jede Aufgabe geben und du hast die Möglichkeit, Probleme anzugehen und erneut einzureichen, ohne Punkte zu verlieren. Bitte beachte, dass mein Feedback nicht nur die tatsächlichen Probleme mit dem Code, sondern auch die Art und Weise, wie du die Lösung umgesetzt hast und wie sauber und gut dokumentiert dein Code ist, abdeckt. Denk dran, unsere Aufgabe ist es nicht nur, ein funktionierendes Spiel zu programmieren, sondern auch zu lernen, wie man einen schönen, klaren, leicht lesbaren und wartbaren Code schreibt.2

Sehr wichtig: Zögere nicht, Fragen zu stellen. Wenn ich denke, dass du wichtige Informationen im Material verpasst hast, werde ich dich auf die genaue Stelle hinweisen. Wenn du verwirrt bist, werde ich dich mit Fragen anstupsen, damit du dein eigenes Problem löst. Wenn du mehr Informationen benötigst, werde ich sie dir zur Verfügung stellen. Wenn du einfach mehr wissen möchtest, frag mich und ich werde dir erklären, warum Dinge so sind, wie sie sind, oder Vorschläge zum Lesen geben. Wenn ich denke, dass du das Problem ohne meine Hilfe lösen solltest, werde ich es dir sagen (obwohl ich wahrscheinlich immer noch ein paar hinweisende Fragen stellen würde).

Über das Material

Dieses Material ist kostenlos nutzbar und steht unter der Creative Commons Attribution-NonCommercial-NoDerivatives V4.0 International License.


  1. Dies wurde geschrieben, bevor große Sprachmodelle auf den Plan traten, ist aber immer noch wahr, wenn es um Programmieren geht.↩︎

  2. Gute Gewohnheiten! Forme gute Gewohnheiten! Danke fürs Lesen dieser subliminalen Nachricht.↩︎