If you're seeing this message, it means we're having trouble loading external resources on our website.

Wenn du hinter einem Webfilter bist, stelle sicher, dass die Domänen *. kastatic.org und *. kasandbox.org nicht blockiert sind.

Hauptinhalt

Ein Programmierprojekt planen

Auf dem Weg zum Programmierer geht es nicht nur darum die Syntax und die Konzepte einer Programmiersprache zu lernen. Es geht vielmehr darum zu erkennen wie man dieses Wissen einsetzt um Programme zu erstellen. In diesem Kurs hast du in den Challenges und Projekten schon ganz viele Programme erstellt. Aber nun musst du eigenen Ideen für neue Programme entwickeln, Ideen welche dich wirklich begeistern, und versuchen diese in wirklichen Programmen umzusetzen.
Wahrscheinlich wirst du zu Beginn noch nicht alles, was für dein Programm notwendig ist, wissen. Aber das ist ganz ok, denn während du das Programm entwickelst, wirst du immer mehr dazulernen. Und da du motiviert bist, diese Dinge für dein cooles Programm zu lernen, wird dir dies ganz einfach fallen. Programmierer lernen ständig neue Dinge für neue Projekte dazu, und deshalb lieben wir das Programmieren auch so sehr.
Schauen wir uns nun den Prozess für die Planung einen Programmierprojektes an:

1. Was möchtest du machen?

Als ich zu programmieren anfing, sind mir ständig neue Ideen für Programme in den Sinn gekommen und ich habe diese jeweils auf einer Liste niedergeschrieben. Ich war süchtig nach der Möglichkeit, neue Dinge zu erschaffen. In meinem Kopf gab es unzählige Dinge, welche ich programmieren wollte. Wenn es dir ähnlich ergeht, dann weißt du wohl schon, was du machen willst, oder vielleicht hast du sogar schon deine eigene Liste.
Falls du wirklich keine eigene Ideen hast, hier ein paar Fragen, welche dir beim Brainstorming helfen:
  • Welches ist dein Lieblingsspiel? Ist es ein Videospiel, Brettspiel oder gar ein Sportspiel? Kannst du eine vereinfachte digitale Version davon erstellen? Kannst du es etwas verändern wie z. B. andere Charaktere oder ein anderes Thema verwenden?
  • Was sind deine Lieblingsfächer? Wenn du Kunst magst, mach doch ein Malprogramm! Wenn du Geschichte magst, wäre eventuell eine interaktive Zeitleiste eine Idee? Wenn du Biologie, Chemie oder Physik magst, wäre eventuell eine wissenschaftliche Simulation eine gute Idee.
  • Was ist dein Lieblingsfilm oder TV-Serie? Kannst du vielleicht eine digtale Version einer Szene oder eines Charakters davon machen? Oder kannst du ein Computerspiel dazu programmieren?
  • Was ist dein Lieblings-Gadget? Kannst du eine Simulation davon erstellen?
Sobald du eine Idee ausgewählt hast, solltest du eine Beschreibung davon machen. Wenn ich zum Beispiel eine einfache Kopie von "Breakout" machen möchte, da dies mein Lieblings-Videospiel war, schreibe ich:
Breakout: Ein Spiel, bei dem man einen Balken am unteren Rand des Bildschirms steuert und diesen dazu verwendet, einen Ball in verschiedenen Winkeln nach oben zu schlagen, damit dieser Ziegelsteine zerstört. Das Ziel ist, es alle Ziegelsteine zu zerstören und den Ball nicht zu oft den Boden berühren zu lassen.
Später wirst du diese erste Beschreibung weiter ausarbeiten. Aber vorläufig gibt es dir eine gute Idee, um mit dem Planungsprozess fortzufahren.

2. Welche Technologien wirst du einsetzen?

In diesem Schritt musst du prüfen, welche Technologien (Sprachen/Bibliotheken/Umgebungen) du kennst oder in der Lage bist, leicht zu lernen, und welche davon am besten für diese Aufgabe geeignet sind. Für viele von Euch enthält diese Liste möglicherweise nur ein Element : JS+ProcessingJS", und macht dir die Entscheidung natürlich ganz leicht.
JS+ProcessingJS Umgebung ist gut für die Erstellung von Animationen, Spielen, Visualisierungen und Simulationen geeignet. Schau dir die Programme aus der Community an, um einen Eindruck der vielen verschiedenen Programme, welche hier erstellt wurden, zu erhalten.
Unsere Umgebung funktioniert aber nicht für andere Dinge wie Multiplayer-Spiele, mobile Apps und Anwendungen zur Datenauswertung. Wenn du andere Sprachen/Umgebungen (wie JS+HTML, Python, SCRATCH, Swift usw.) kennst und du planst etwas zu entwickeln, was nicht soviel Sinn mit ProcessingJS macht, dann überlege dir, welche dieser Technologien für dein Programm am besten geeignet wäre. Wenn du eines dieser Dinge entwickeln möchtest, aber noch keine andere Technologie kennst, dann überlege dir besser eine andere Idee. Du kannst zwar für ein neues Projekt eine neue Technologie lernen, aber vor allem wenn du gerade erst beginnst zu programmieren, ist es besser zuerst deine erste Sprache richtig gut zu beherrschen.
Wenn ich ein Spiel wie Breakout programmieren möchte, würde ich JS+ProcessingJS verwenden, da ich diese Umgebung schon kenne und sie sich auch gut für 2D-Spiele eignet.

3. Welche Funktionen soll es haben?

Hier geht es nun in die richtige Planung und (zumindest glaube ich dies) hier wird es richtig spannend. Dein Ziel in diesem Schritt ist es, herauszufinden, was du wirklich entwickeln willst - wie wird es aussehen, welche Funktionen soll es enthalten, und welche nicht.
Das Erste, was du nun machen kannst, sind  "Mock-ups" : Skizzen, welche aussehen wie dein Programm, aber keine Details wie Farben oder genaue Dimensionen haben. Du kannst Mock-ups auf Papier oder mit Online-Programmen machen:
Um dir eine Idee zu geben, wie Mock-ups aussehen, habe ich unten die Mock-ups meines Breakout-Klon eingefügt. Ich habe jede Szene einzeln skizziert und Pfeile dazwischen gezeichnet, um zu zeigen, wie eine Szene zur anderen führt. Diese Pfeile helfen mir die Logik, welche ich für das Wechseln zwischen den Szenen programmieren muss, zu verstehen.
Skizzierte Mock-ups von einer Kopie von Breakout
Nun kannst du mit Hilfe dieser Mock-ups eine Liste aller Funktionen in deinem Programm erstellen.
Für meine Kopie von Breakout können meine Liste der Funktionen pro Szene folgendermaßen aussehen:
Szene: Spiel
  • Benutzergesteuerter Balken
  • Mehrere farbige Ziegel
  • Abgewinkelte Ballbewegung
  • Kollisionserkennung
  • Anzeige der Leben
  • Anzeige der Punkte
  • Sound-Effekte
Szene: Start
  • Button Spielen
  • Button Hilfe
Szene: Hilfe
  • Text
  • Button zurück
Szene: Gewonnen
  • Überschrift
  • Animation Feuerwerk
Szene: Verloren
  • Text
  • Button Neustart

4. Welche Funktionen muss es haben?

Wenn wir alle unbeschränkt Zeit zum Programmieren hätten, würden wir alle unsere Ideen mit allen Funktionen auf unserer Liste programmieren. Das haben wir aber nicht. Daher müssen wir in diesem Schritt entscheiden, welche Funktionen die wichtigsten sind und welche wir nur dann programmieren, wenn wir noch Zeit übrig haben. Dies hilft uns auch zu entscheiden, in welcher Reihenfolge wir die Funktionen programmieren. Zuerst die wichtigsten, und die unwichtigen erst am Schluss.
Folgende Fragen können dir helfen, die Wichtigkeit von jeder Funktion zu ermitteln:
  • Wenn ich dies einem Freund zeige, welche Funktionen müssen dann unbedingt funktionieren?
  • Welche Funktionen begeistern mich am meisten?
  • Welche Funktionen machen mein Programm einzigartig?
  • Beim programmieren welcher Funktionen werde ich am meisten dazulernen?
  • Gibt es Funktionen, welche für mich wohl zu schwierig zu programmieren sind?
Gehe dann nochmals durch die Liste der Funktionen aus dem letzten Schritt und sortiere nun diese Liste nach der Wichtigkeit.
Für die Liste der Funktionen meiner Kopie von Breaktout habe ich "P1", "P2", und "P3" neben die Funktionen geschrieben, um höchste (P1), mittlere (P2) und niedrigste (P3) Priorität zu kennzeichnen. Ich habe mich entschieden, einzigartige Spielfunktionen höher zu priorisieren als allgemeine Funktionen wie Szenen, da diese mich am meisten begeistern:
(P1) Szene: Spiel
  • (P1) Benutzergesteuerter Balken
  • (P1) Mehrere farbige Ziegel
  • (P1) Abgewinkelte Ballbewegung
  • (P1) Kollisionserkennung
  • (P2) Anzeige der Leben
  • (P2) Anzeige der Punkte
  • (P3) Sound-Effekte
(P2) Szene Start
  • (P2) Button Spielen
  • (P3) Button Hilfe
(P3) Szene Hilfe
  • (P3) Text
  • (P3) Button zurück
(P2) Szene Gewonnen
  • (P2) Überschrift
  • (P3) Animation Feuerwerk
(P2) Szene Verloren
  • (P2) Text
  • (P3) Button Neustart
Als allgemeiner Tipp an alle, die Spiele programmieren, hier ein paar Funktionen, denen ich niedrige Priorität gebe: Menüs, mehrere Level, 3D-Grafiken. Konzentriere dich auf die einzigartigen und spannenden Funktionen in deinem Programm und füge die Extras später hinzu.
Du kannst deine priorisierte Liste auch in Versionen deines Projektes umwandeln. So siehst du einfach, was du in welcher Version implementieren musst. Und du kannst immer nach einer Version stoppen und glücklich sein, diese komplett programmiert zu haben.
Hier siehst du, wie ich die Versionen meiner Kopie von Breakout geplant habe:
V1
  • Benutzergesteuerter Balken
  • Mehrere farbige Ziegel
  • Abgewinkelte Ballbewegung
  • Kollisionserkennung
V2
  • Anzeige der Leben
  • Anzeige der Punkte
  • Szene: Spiel mit Button Spielen
  • Szene: Gewonnen mit Überschrift
V3
  • Sound-Effekte
  • Button: Hilfe
  • Feuerwerk
  • Szene: Verloren mit Button Neustart

5. Wie wirst du es implementieren?

Nun hast du eine Vorstellung der Funktionen, welche du zuerst in deinem Programm implementierst. Aber wenn du jetzt beginnst, beginnst du mit einem leeren Programm ohne Code, und dies kann einem zu Beginn etwas Angst machen. Welche Variablen soll ich zuerst schreiben? Welche Funktionen?
Nun, eine Möglichkeit ist es, sich zuerst die grobe Architektur deines Programms zu überlegen. Zerlege es in Kategorien wie "Objekte", "Logik", "Benutzer-Interaktionen", "Benutzerdaten" und "Szenen" und überlege dir, wie du diese implementieren kannst (wie z.B. mit Objekttypen, Funktionen oder Variablen).
Hier zum Beispiel die Architektur meiner Kopie von Breakout:
Objekte
  • Brick (.isHit())
  • Paddle (.move())
  • Ball (.move())
Szenen
  • Start
  • Spiel
  • Ende
Logik
  • Ball-Ziegel Kollision (Funktion, Verwende einen Begrenzungsrahmen)
  • Schläger-Ball-Winkel (Funktion, Winkel invertieren)
Benutzerinteraktion
  • Bewegung des Schlägers mit der Tastatur(keyPressed)
  • Buttons für Szenenwechsel (mouseClicked)
Benutzerdaten
  • Ballverluste (array)
  • Balltreffer (array)
Nachdem du dir diese grobe Architektur überlegt hast, sollte es ganz einfach sein, mit dem Programmieren zu beginnen.
Eventuell möchtest du zuerst dein ganzes Programm in Pseudocode schreiben. Dies schauen wir uns später in diesem Tutorial an. Grundsätzlich schreibt man dann sein ganzes Programm in deutscher Sprache in einem Kommentar. Dann wandelt man dies Schritt-für-Schritt in richten Code um.

6. Wie lange wirst du brauchen?

Wie viel Zeit wirst du für dieses Programm brauchen? Wie viele Wochen und wie viele Stunden pro Tag? Welche Funktionen schreibst du in welcher Woche? Dein Ziel ist es, eine Zeitplanung für dein Projekt zu machen. Dies ist besonders wichtig, wenn du eine Deadline hast, aber auch sonst gut, um zu verstehen, wie lange es dauert, ein Programm zu schreiben.
Hier die Zeitplanung für meine Kopie von Breakout. Ich habe mir vorgenommen 2-4 Stunden pro Woche daran zu arbeiten:
  • Woche 1: Design und Pseudocode
  • Woche 2: Grobe Grafiken
  • Woche 3: Ballbewegung/Kollisionsmechanik
  • Woche 4: Zählen der Punkte
  • Woche 5: Szenen (Start/Sieg/Niederlage)
  • Woche 6: Polieren, manuelle Tests (QA), Vorbereitung für Demo
Eine verlässliche Zeitplanung für Programmierprojekte zu machen, ist sehr schwierig. Einige Dinge scheinen einfach und brauchen viel länger als erwartet (manchmal verliert man viele Stunden beim Debuggen von komischen Fehlern), andere Dinge scheinen schwierig, sind dann aber ganz schnell implementiert. Als Faustregel kannst du annehmen, dass es immer länger als gedacht dauert und du deine Planung laufend anpassen musst.

Bist du bereit?

Ich hoffe, dies gibt dir ein paar Ideen für den Prozess der Planung eines Programmierprojektes und inspiriert dich, dein eigenes Projekt jetzt in Angriff zu nehmen. Je nachdem, was du entwickeln möchtest, möchtest du möglicherweise auch erst andere Kurse wie JS für Fortgeschrittene: Spiele & Visualisierungen oder JS für Fortgeschrittene: natürliche Simulationen anschauen, damit du mehr über Spiele und Simulationen lernst.
Das Wichtigste ist, dass du irgendwann beginnst, deine eigenen Programme zu programmieren, denn erst dann beginnst du, wirklich zu lernen. Aber auch dann wirst du wirklich Freude am Programmieren bekommen, weil du deine eigenen kreativen Ideen umsetzen kannst.

Willst du an der Diskussion teilnehmen?

Verstehst du Englisch? Klick hier, um weitere Diskussionen auf der englischen Khan Academy Seite zu sehen.