Przedmiot prowadzony na Wydziale Fizyki UW w ramach studiów I stopnia. Autor poniższego: Piotr Biegański.
1. Planowanie projektu
1.1 Projektowanie obiektowe
Zajęcia z MIMUW, których pierwsze dwa moduły mają ładny wstęp do projektowania obiektowego.
Strona z Wikipedii, która opisuje używaną przez nas notację (w szerszym niż wymagany zakresie).
Otwartoźródłowe programy, które umożliwiają rysowanie diagramów z użyciem UML: Umbrello, dia.
Zadania, na których można poćwiczyć.
Rozwiązania wybranych zadań.
1.2 Modele zarządzania projektem
Programowanie zwinne – osobne podejście łączące w sobie modele m.in. iteracyjny i przyrostowy. Korpomanifest.

2. Dobre praktyki w Pythonie
Repozytorium z plikami z zajęć jest pod linkiem. Na razie (zgodnie z nazwą) zignorujcie plik .gitignore.
2.1 Specyfika Pythona jako języka obiektowego
Problem prywatności
Klasy i metody abstrakcyjne
Metody statyczne i klasowe
Nieistnienie polimorfizmu, metody klasowe jako potencjalne rozwiązanie
Podział projektu na pliki, strukturyzowanie klas pomiędzy plikami
2.2 Pyenv i kontrola wersji Pythona
Dokumentacja modułu venv i opis jego użycia.
Repozytorium pyenva, a w nim również instrukcje instalacji i wyjaśnienie, jak działa.
Pyenv nie działa na Windowsie (chociaż pewnie lepiej powiedzieć, że to Windows nie działa…). Programować na Windowsie, w tym używając pyenva, najlepiej używając Windows Subsytem for Linux.
Jeszcze lepszym rozwiązaniem problemu Windowsa jest pozbycie się go (nie bój się kliknąć!).
2.3 Czytelność i dokumentowanie kodu
PEP-8, czyli zbiór wytycznych stylistycznych, pomagających pisać czytelny i ustandaryzowany kod.
Podstawowe rzeczy dotyczące typowania, czyli przypisywania obiektom konkretnych typów danych. Pełna dokumentacja zawiera też inne rzeczy jak omawiane TypeVar. Opis tego, jak powinno się typować zawiera PEP-484.
PEP-256, PEP-257 i PEP-258 zawierają podstawowe informacje na temat formatowania i używania docstringów. W Pythonie jest wiele dopuszczalnych konwencji. Osobiście używam docstringów zgodnych z formatem Google, wydają mi się czytelne.
Googlowskie wytyczne stylistyczne są zgodne z odpowiednimi PEPami, przy okazji precyzując i rozszerzając to, co PEPy zostawiają jako decyzję dla dewelopera. Są spójne i dobrze przemyślane, warto się zapoznać.
2.4 Moduły, biblioteki, skrypty
Definicje pojęć modułu, paczki i skryptu w kontekście Pythona, oraz podstawowe wytyczne jak je tworzyć.
Dokumentacja modułu argparse.
Samouczek najważniejszych funkcji z modułu argparse.
2.5 Ćwiczenie podsumowujące
Zadania wymagające zaprojektowania hierarchii klas oraz zaimplementowania jej w zgodzie z dobrymi praktykami.
3. Git i Gitlab
3.1 Podstawy
Oficjalny podręcznik do Gita. Interesują nas przede wszystkim rozdziały 1-5.
Dokumentacja Gita.
Samouczki z Gitlaba.
Dokumentacja Gitlaba.
Przykładowy plik .gitignore, który generalnie powinien załatwić wszystko co trzeba jeśli chodzi o Pythona.

3.2 Automatyzacja
Dokumentacja biblioteki pytest oraz samouczki jej użycia (testy jednostkowe).
Dokumentacja biblioteki mypy oraz samouczki jej użycia (statyczne sprawdzanie typów).
Dokumentacja modułu flake8 pozwalającego na sprawdzanie, czy kod trzyma się PEP-8.
Dokumentacja biblioteki sphinx oraz samouczki jej użycia (tworzenie dokumentacji).
Pełny opis procesu tworzenia dystrybucji modułu, składni pyproject.toml itd.
Dokumentacja modułu twine (wrzucanie dystrybucji na PyPI).
3.3 CI/CD na Gitlabie
Dokumentacja CI/CD na Gitlabie, w tym samouczek użycia, szablony dla różnych języków oraz pełna dokumentacja języka YAML.
Samouczek stawiania strony projektu za pomocą Gitlab Pages.
Przykładowy ciąg CI/CD odpowiadający za integrację, testowanie i dostarczanie modułu Pythonowego.
3.4 Ćwiczenia
Zadania z używania kontroli wersji oraz ciągłych integracji, testowania i dostarczania.
4. Projekty zaliczeniowe
Każda grupa powinna założyć repozytorium na Gitlabie i dodać mnie (@pbieganski) w roli developer.
Podczas pracy ocenie podlega stosowanie się do dobrych praktyk oraz systematyczność pracy, w szczególności: równy podział pracy pomiędzy członków zespołu; regularność rozwoju aplikacji oraz commitów; właściwy podział na gałęzie; klarowne nazewnictwo gałęzi i commitów; regularne prowadzenie code review; dokumentowanie kodu na bieżąco; statyczne typowanie; trzymanie się PEP-8; testy jednostkowe; potok CI/CD; zaplanowanie i zaprojektowanie struktury kodu; klarowność kodu i jego struktury.
Po wykonaniu pracy ocenie podlega: jakość i działanie wyniku końcowego; kompletność wypełnienia minimalnych założeń projektu; umiejętność obrony i wyjaśnienia kodu przez członków zespołu.
Tutaj znajdują się opisy projektów z semestru 24L.
