Programmierpraktikum SoSe 2024, Bachelor Informatik, FU Berlin

Willkommen beim Programmierpraktikum (ProPra)!

Auf dieser Seite ist erklärt, was das ProPra soll und wie es funktioniert. Bitte sehr sorgfältig lesen und verstehen und bei Verständnisproblemen fragen.

1. Was sind die Ziele des ProPra?

Das Informatikstudium vermittelt in den ersten Semestern hauptsächlich sehr theoretisches Wissen. Das ist gut, weil dieses Wissen sehr breit anwendbar und sehr langlebig ist. Das ist aber auch schlecht, weil für professionelle Softwareentwicklung auch bergeweise praktisches Wissen und technologisches Detailwissen benötigt wird.

Solches praktisches Wissen und Detailwissen will das ProPra vermitteln. Genauer gesagt: Es gibt Ihnen die Gelegenheit, solches Wissen selbständig zu erwerben. Das ProPra ist nämlich sehr offen angelegt: Sie können aus einer großen Palette möglicher Aufgaben selbst auswählen, was Ihnen am lohnenswertesten erscheint. Es gibt Aufgaben aus verschiedenen Themenbereichen und mit unterschiedlichem Schwierigkeitsgrad.

Eine Warnung gleich vorab: Softwareentwicklung ist eine sehr komplexe Fertigkeit und gut darin zu werden dauert tausende Stunden des Lernens und Erfahrungsammelns. Natürlich kann das Programmierpraktikum dazu nur einen kleinen Teil beisteuern. Aber gerade wer bislang noch nicht sehr viel kann, kann hier gewaltige Fortschritte machen.

2. Wie funktioniert das ProPra?

2.1 Grober Gesamtablauf

Sie arbeiten im ProPra zu zweit, aber ansonsten völlig selbständig. Alle Aufgaben sind auf dieser Website beschrieben. Sie bearbeiten zahlreiche kleine Aufgaben. Zwischendurch reichen Sie kleine Päckchen gelöster Aufgaben bei einer Tutor_in ein und bekommen sie gutgeschrieben oder zur Nachbesserung zurückgegeben.

Insgesamt sieht der Ablauf ungefähr so aus:

  1. Arbeitsumgebung einrichten (das passiert im Kapitel "Basis")
  2. Aufgabe auswählen
  3. Aufgabe bearbeiten
  4. Aufgabe einchecken (wie das geht, lernt man im Kapitel "Basis")
  5. Weiter bei 2 bis man ein geeignetes Paket Aufgaben beisammen hat.
  6. Aufgabenpaket beschreiben und bei der Tutor_in einreichen (auch das lernt man im Kapitel "Basis")
  7. Wenn der Soll-Umfang (siehe unten) noch nicht erreicht ist, weiter bei 2.

Sie genießen bei der Auswahl von Aufgaben große Freiheit; es gibt viel mehr Aufgaben als zum Bestehen des ProPra nötig sind. Wir bauen darauf, dass Sie Aufgaben so auswählen, wie es für Ihren persönlichen Lernerfolg günstig ist.

2.2 Wie wähle ich Aufgaben aus?

Die Aufgaben (siehe der Menübaum) sind in einem dreistufigen Schema angeordnet, wie in einem Verzeichnisbaum: Kapitel, Aufgabengruppe, Aufgabe.

Kapitel beschreiben große Themenkreise. Ein Sonderfall ist das Kapitel "Basis": Hier werden die unverzichtbaren Arbeitsgrundlagen geschaffen, ohne die man am ProPra gar nicht teilnehmen kann.

Aufgabengruppen fassen mehrere verwandte Aufgaben zusammen. Die Verwandtschaft kann unterschiedlicher Art sein, z.B. ein Themenkreis zur freien Auswahl, eine Sequenz voneinander abhängiger Aufgaben oder (selten) eine Auswahl alternativer Aufgaben (1-aus-N-Auswahl).

Aufgaben sind die kleinsten in sich abgeschlossenen Einheiten des Lernens im ProPra. Nur Aufgaben werden absolviert und eingereicht, nicht Aufgabengruppen oder Kapitel,
aber bevor Sie eine Aufgabe beginnen, sollten Sie unbedingt die kurze Einleitung des zugehörigen Kapitels und die kurze Einleitung der Aufgabengruppe gelesen haben.

Die komplette Liste aller Kapitel, Aufgabengruppen und Aufgaben finden Sie ausschließlich hier auf der Homepage. Überall sonst ist im Menü immer nur ein Bereich aufgeklappt.

Aufgaben haben unterschiedliche Schwierigkeitsgrade. Diese sind im Inhaltsverzeichnis deutlich markiert, damit Sie leicht Aufgaben der richtigen Stufe aussuchen können. Auch damit machen Sie sich im Kapitel "Basis" vertraut. Schwierigkeit bedeutet dabei nicht unbedingt, dass man die Aufgabe mit weniger Vorkenntnissen kaum schaffen kann, sondern oft nur, dass das sehr viel länger dauert als für die Aufgabe geplant ist, weil die Anleitung viel grober ist und erheblich mehr Selbstständigkeit verlangt.

Viele Aufgaben enthalten Zusatzhinweise zum Aufklappen. Sie dienen dazu, den Schwierigkeitsgrad an die Person anzupassen. Öffnen Sie solche Zusatzhinweise nur, wenn Sie den deutlichen Eindruck haben, anders nicht angemessen weiterzukommen. So sieht so ein Zusatzhinweis aus:

Hinweis (nur bei Bedarf): Dieser Text ist das Thema des Zusatzhinweises

Dieser Text ist der Rumpf des Zusatzhinweises, der kurz oder lang sein kann und z.B. hilfreiche Stichwörter oder Links enthält.

Manchmal sind Aufgaben von anderen Aufgaben abhängig. Auch das ist im Inhaltsverzeichnis markiert und auch damit machen Sie sich im Kapitel "Basis" vertraut.

Wenn Sie diese Hilfen für die Aufgabenauswahl verstanden haben, suchen Sie in der letzten von Kapitel "Basis" aus, mit was Sie Ihr eigentliches ProPra beginnen wollen.

Wie man fertige Aufgaben einreicht haben Sie schon zuvor in einer anderen Aufgabe gelernt und eingerichtet, ebenfalls im Basis-Kapitel.

Sie merken es schon: Das Basis-Kapitel ist etwas Besonderes. Es ist das einzige Kapitel, dass Sie komplett von vorn bis hinten durcharbeiten müssen. Außerdem ist hier die Reihenfolge nicht beliebig, sondern ebenfalls strikt von vorn nach hinten nötig. Drittens müssen Sie mit diesem Kapitel anfangen, sonst sind Sie für den Rest gar nicht arbeitsfähig.

Danach beginnt die Wahlfreiheit.

2.3 Paararbeit: Was ist mit "zu zweit" gemeint?

Oben stand "Sie arbeiten im ProPra zu zweit". Wie ist das zu verstehen?

  1. Das ProPra ist dafür konzipiert, dass Sie Aufgaben mit einer anderen Teilnehmer_in besprechen und sich gemeinsam Gedanken über die Lösung machen.
  2. Abgaben macht hingegen jeder von Ihnen völlig separat. Wie ist das zu verstehen?:
  3. Wenn ein längerer Programmtext zu erarbeiten ist (bei den meisten Aufgaben ist das nicht der Fall), schreiben Sie auch diesen zu zweit, kopieren ihn dann und reichen dann jede_r den gleichen Programmtext ein.
  4. Wenn die Abgabe hingegen Text ist oder ein Kommandoprotokoll, fertigt das jede_r von Ihnen beiden allein an. Bei Kommandoprotokollen dürfen beide Abgaben fast identisch sein. Bei Textabgaben (Markdown-Dokument) formuliert aber jede_r seine eigenen Gedanken selbst.
  5. Jede_r von Ihnen muss sich mit jedem Aspekt Ihrer Abgabe voll und ganz auskennen und bei Rückfragen der Tutor_in kompetente Antworten geben.

Was haben wir uns bei diesen Regeln gedacht?

  • Das viele Sprechen über die Aufgabe, das sich beim gemeinsamen Erarbeiten ergibt, erleichtert das Verständnis nicht nur, sondern verbessert es sogar.
  • Bei Denkfehlern findet man das Problem zu zweit viel schneller.
  • Man hat zu zweit auch mehr und bessere Ideen.
  • Beim Programmieren ist die Neigung zum Pfuschen bei Paaren geringer.
  • Beim Programmieren finden Paare bessere Programmentwürfe.
  • Paarprogrammierung (nichts anderes ist das hier) ist eine wichtige Technik für schwierige Aufgaben bei professioneller Softwareentwicklung.
  • Paarprogrammierung funktioniert hingegen nicht, wenn sich ein Paarmitglied passiv zurücklehnt.

2.4 Was mache ich, wenn ich alleine nicht weiterkomme?

  • Beachten Sie den Schwierigkeitsgrad der Aufgabe. Wählen Sie nötigenfalls Aufgaben mit niedrigerem Schwierigkeitsgrad.
  • Lesen Sie die Aufgabe sorg-fäl-tig.
    Aufgaben mit Schwierigkeitsgrad "leicht" sind auch leicht; Sie müssen aber genau lesen und mitdenken.
  • Nutzen Sie die Aufklapp-Hinweise. Ebenfalls sorgfältig.
  • Sie arbeiten doch zu zweit? Besprechen Sie das Problem miteinander; das erzeugt Ideen.
  • Die Tutor_innen stehen für (kurze!) Hilfestellung zur Verfügung.
    Die helfen aber nur, wenn Sie mit einer konkreten Frage ankommen. Also nicht "Ich komme hier irgendwie nicht weiter" oder "Ich habe keine Ahnung, was ich hier machen soll". Sondern z.B. "Wo finde ich die-und-die Information?" oder "Was bedeutet diese Meldung?" oder "Warum passiert hier das-und-das?"
    Solches sehr gezieltes Nachfragen ist eine wichtige Fertigkeit in der professionellen Softwareentwicklung und deshalb ein Lernziel des ProPra.

2.5 Wann habe ich das ProPra bestanden? (Soll-Umfang)

Im Inhaltsverzeichnis wird für jede Aufgabe ein Zeitwert angegeben, z.B. 1.5h. Das ist die erwartete Arbeitszeit für diese Aufgabe. Wenn Sie diese Aufgabe einreichen und die Tutor_in akzeptiert die Einreichung, wird dieser Wert Ihrem ProPra-Konto gutgeschrieben (Ausnahme siehe unten). Sobald die Summe dieser Werte mindestens dem Kursumfang entspricht (30 Stunden pro Leistungspunkt) und Sie die Tutor_in darauf hinweisen und diese einen entsprechenden Eintrag macht, ist das ProPra erfolgreich absolviert.

Ihre tatsächliche Arbeitszeit kann darunter liegen. Das kommt vor, wenn Sie Aufgaben wählen, die zu einfach für Ihre vorhandenen Fertigkeiten sind oder wenn mal alles schön glatt läuft.

Ihre tatsächliche Arbeitszeit kann aber auch darüber liegen. Das kommt vor, wenn Sie Aufgaben wählen, die zu schwierig für Ihre vorhandenen Fertigkeiten sind oder wenn bei Aufgaben der richtigen Schwierigkeitsstufe mehr schiefgeht, als wir eingeplant haben. Das kommt beim Programmieren leider oft vor und passiert auch hoch kompetenten Softwareentwickler_innen ständig.

Um Sie zum sorgfältigen Arbeiten zu animieren und die Tutor_innen vor Überlastung zu schützen, wird der Zeitwert einer Aufgabe nicht angerechnet, wenn die Tutor_in Ihre Lösung zu oft zurückweisen muss, weil sie nicht den Anforderungen genügt. Klingt vage? Wie Sie Genaueres herausfinden, lernen Sie im Basis-Kapitel.

3. Anmerkung zum Gendern

Eigentlich soll an der Freien Universität mit dem Genderstern gegendert werden: Tutor*innen.

Aber leider ist der Stern in den meisten Programmiersprachen ein Operator und kann deshalb nicht als Bestandteil von Bezeichnern auftreten. Deshalb gendern wir hier mit dem Unterstrich, denn der ist in den meisten Programmiersprachen in Bezeichnern erlaubt: Tutor_innen.

Die Bedeutung ist dieselbe.

4. Änderungen nach dem Start

Leider ist das ProPra noch nicht fertig entwickelt. Deshalb liefern wir ca. wöchentlich Aufgaben nach. Hier steht, welche; schauen Sie hier bitte also immer mal vorbei:

  • 2024-04-30: Aufgabe Sprachen/Pythonpraxis/mlh-gitmeister zugefügt
  • Aufgaben Debugging/Debugging-Praxis/einkaufsliste-defekt2, einkaufsliste-defekt3, einkaufsliste-postmortem zugefügt
  • Aufgabe Bibliotheken/Python-Standardbibliothek/m_hashlib zugefügt
  • Aufgaben Testen/Unittests/m_unittest und m_pytest zugefügt
  • unreife Aufgaben coverage, mocking und unittest201,202,301 zurückgezogen
  • 2024-05-03: Aufgabe Testen/Unittests/pytest_parametrize zugefügt
  • Aufgaben Bestandscode/Refactoringpraxis/gildedrose_tests, gildedrose_refactor, gildedrose_implementation und gildedrose_reflexion zugefügt.
  • 2024-05-17: Aufgabengruppe Basis/IDE zugefügt. Die hatten wir bei der Freigabe anfangs übersehen, sorry! Durchführung bitte ggf. unbedingt nachholen!
  • 2024-05-29: Aufgabe Testen/Testgrundlagen/Fehler-Defekt-Versagen zugefügt.
  • Aufgaben Werkzeuge/Benutzerverwaltung/sudo, Benutzerkonten, Dateiberechtigungen zugefügt
  • 2024-06-03: Aufgabe Werkzeuge/Paketmanager/apt zugefügt.
  • Aufgabe Bibliotheken/Dokumentation/changelog2 zugefügt.
  • Aufgabe Bibliotheken/Python-Standardbibliothek/m_os.path zugefügt.
  • Aufgabe Debugging/Debugging-Denken/Mathematician zugefügt.
  • 2024-06-06: Aufgabe Sprachen/Python/PEP8 zugefügt.
  • Aufgabe Werkzeuge/Linter/flake8 zugefügt.
  • 2024-06-10: Aufgaben Bestandscode/Refactoringpraxis/refactor_movierental_planning und refactor_movierental_implementation zugefügt.
  • 2024-06-13: Wir entwickeln auch am sedrila-Werkzeug weiter. Das führt gelegentlich zu Inkompatibilitäten zwischen der Website und den früheren Versionen von sedrila. Wenn ein sedrila-Aufruf abstürzt, ist ein Aktualisieren auf die neueste Version (mit pipx upgrade) meist die Lösung.
  • Beschreibung des Konzepts von Abgaben in die erste Aufgabe (CLI*) ergänzt.
  • Aufgabe Werkzeuge/Benutzerverwaltung/Gruppen zugefügt.
  • 2024-07-22: Aufgabe Sprachen/Python/Python-List-Comprehensions zugefügt.
    Aufgaben Web/HTML/HTMLErsteSchritte und HTMLMedien zugefügt.
    Aufgabe Web/CSS/CSSEinfuehrung zugefügt.
    Aufgabe Debugging/Debuggingtools/printfdebugging zugefügt.
  • 2024-08-14: Ab jetzt werden die Aufgaben mit sedrila 2.0 freigegeben. Falls es beim Abgeben der Aufgaben Probleme gibt, bitte die eigene sedrila-Installation mittels pipx upgrade sedrila aktualisieren.
  • 2024-08-16: Aufgabe Sprachen/Pythonpraxis/mlh-columnpercentage zugefügt.
  • 2024-08-26: Aufgabe Werkzeuge/Git/git-Fehlerbehebung zugefügt.
    Neue Funktion sedrila viewer, siehe die Dokumentation. Dazu bitte auf Version 2.2.0 aktualisieren: pipx upgrade sedrila.
    Dadurch wird ein viel bequemeres Verfahren für Kommandoprotokolle möglich; bitte nochmal die (entsprechend geänderte) Aufgabe Kommandoprotokolle lesen und ab sofort einfach ohne weitere Umstände auf dieses Format wechseln.
  • 2024-09-10: Aufgaben Web/HTML/HTMLTabellen und HTMLSemantik zugefügt.
  • 2024-09-17: Aufgaben Sprachen/Python/Python-Function-Arguments-Basic und Web/HTML/HTMLFormulare zugefügt.
  • 2024-10-11: Aufgabe Bibliotheken/Python-Standardbibliothek/m_sqlite3 zugefügt.
  • 2024-10-29: Aufgabe Werkzeuge/Netzwerk/SSH zugefügt.
  • 2024-11-05: Aufgabe Bibliotheken/Python-Standardbibliothek/m_glob zugefügt.
  • 2024-11-07: Aufgabe Web/HTTP/HTTP-GET zugefügt.
  • 2024-11-08: Aufgaben Bibliotheken/pip-popular/beautifulsoup und m_requests zugefügt.
    Aufgaben Sprachen/Pythonpraxis/linkcheck-getlinks und mlh-pseudonymize2 zugefügt.
  • 2024-11-11: Aufgabe Bibliotheken/Python-Standardbibliothek/m_sys zugefügt.
  • 2024-11-12: Aufgaben Sprachen/Pythonpraxis/linkcheck-testbase und linkcheck-core zugefügt.
  • 2024-11-22: Aufgabe Sprachen/Pythonpraxis/linkcheck-fullscreen zugefügt.
  • 2024-12-03: Aufgabengruppe Unix-Basiswerkzeuge und die Aufgaben apt, venv und pip aus der Gruppe Paketmanager werden wie die Teile des Kapitels Basis jetzt ohne Angabe von assumes als bekannt vorausgesetzt.
  • 2024-12-03: Aufgabe Werkzeuge/Unix-Basiswerkzeuge/Unix-Editoren zugefügt.
  • 2024-12-10: Aufgabe Basis/IDE/IDEFirstSteps zugefügt.
  • 2025-01-28:
    • Aufgabengruppe Sprachen/Python2 umbenannt in Sprachen/Python.
    • In Basis/Repo/Einreichungen die gewünschte Struktur des Dateibaums klarer beschrieben (das ist sogar schon am 2024-11-29 passiert, war hier aber bisher nicht erwähnt).
      Dateibäume, die anders aussehen, bitte umbauen, denn sonst wird die Korrektur zu mühsam!
    • student.yaml muss ab sofort zusätzlich die Felder student_gituser und partner_gituser enthalten, bestückt mit dem jeweiligen Accountnamen zum Git-Repo; siehe Basis/Repo/SedrilaEinrichten. Dieser Name dient den Tutor_innen als Bezeichner für die Teilnehmer_in.
    • Bitte wechseln Sie auf die neuste Version von sedrila, Version 2.5.
    • Wer Aufgaben zu zweit erarbeitet, sollte bitte auch gemeinsam zeitgleich einreichen, denn das senkt den Aufwand für die Überprüfung erheblich.
    • Um das zu unterstützen, ist das per Email zu sendende Kommando jetzt ein anderes. Sie bekommen es angezeigt, wenn Sie die oben erwähnte aktuell Version von sedrila benutzen.
    • Auch Sie selbst können von der Unterstützung für Tutor_innen profitieren: Der Viewer (jetzt per sedrila student --op webapp) kann jetzt über mehrere Verzeichnisbäume (Ihren plus den Ihrer Partner_in) gleichzeitig browsen und markiert Dateien, die zur Abgabe vorgesehen sind. Probieren Sie es aus.
  • 2025-03-11:
    • Aufgaben Web/CSS/CSSBoxModel und Web/CSS/CSSSelektoren zugefügt.
    • Aufgabe Werkzeuge/Unix-Basiswerkzeuge/redirect zugefügt.
    • Bitte geben Sie keine Lösungen mit dem alten Format von Kommandoprotokollen (erzeugt mit dem script-Kommando) mehr ab, sondern lesen Sie das (viel einfachere) aktuelle nach: Kommandoprotokolle
    • Wegen des diversen Unmußes in dieser Null-Version des ProPra bekommen Sie 10% Rabatt: Zum Absolvieren reichen 135 Stunden kumulierter Zeitwert der akzeptierten Aufgaben.