Programmierpraktikum SoSe 2024, Bachelor Informatik, FU Berlin
ProPra2024

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:

CLILinuxApt ⚫︎ 0.5
CLIMacOSBrew ⚫︎ 1.5
CLIWindowsWSL ⚫︎ 1.5
Git101 ⚫︎ 1.5
Markdown ⚫︎ 0.5
Shellprompt ⚫︎ 0.5
Zeiterfassung ⚫︎ 0.5
SedrilaEinrichten ⚫︎ 0.25
Einreichungen ⚫︎ 0.5
RequiresAssumes ⚫︎ 0.5
Themenauswahl ⚫︎ 1.0
Python-Variablen ⚫︎ 1.25
mlh-lsnew ⚫︎ 1.5
mlh-rename ⚫︎ 1.5
mlh-gitac ⚫︎ 1.5
mlh-gitmeister ⚫︎ 4.0
mlh-pseudonymize ⚫︎ 4.0
m_datetime ⚫︎ 1.5
m_json1 ⚫︎ 1.0
m_random ⚫︎ 1.0
sorted_and_sort ⚫︎ 1.0
m_argparse ⚫︎ 1.5
m_hashlib ⚫︎ 1.0
m_subprocess ⚫︎ 1.0
m_json2 ⚫︎ 1.0
m_pprint ⚫︎ 1.0
m_subprocess2 ⚫︎ 2.0
LICENSE ⚫︎ 1.5
changelog ⚫︎ 0.75
m_unittest ⚫︎ 1.5
m_pytest ⚫︎ 1.0
RestApi ⚫︎ 2.0
Robot ⚫︎ 1.5
Engineer ⚫︎ 1.5
Sherlock-Holmes ⚫︎ 1.5
Psychologist ⚫︎ 1.5
Safety-Expert ⚫︎ 1.5
Logikdefekte ⚫︎ 1
Off-by-1-Defekte ⚫︎ 1.0
pdb ⚫︎ 1.0
gitbisect ⚫︎ 1.0
IDE_debugging ⚫︎ 1.0
gildedrose_tests ⚫︎ 1.0
Manpages ⚫︎ 1.0
Shell-Grundlagen ⚫︎ 2.0
venv ⚫︎ 1.0
pip ⚫︎ 0.5
git-Funktionsweise ⚫︎ 0.75
git-Zweitrepo ⚫︎ 0.25
git-ignore ⚫︎ 1.5