Programowanie zespołowe

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

Kaskadowy

Iteracyjny

Przyrostowy

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, Gitlab i dystrybuowanie kodu

3.1 Podstawy

Oficjalny podręcznik do Gita. Interesują nas przede wszystkim rozdziały 1-5.

Dokumentacja Gita.

Przykładowy plik .gitignore, który generalnie powinien załatwić wszystko co trzeba jeśli chodzi o Pythona.

Samouczki z Gitlaba.

Dokumentacja Gitlaba.

3.2 Tworzenie dystrybucji

Pełny opis procesu tworzenia dystrybucji modułu, składni pyproject.toml itd.

Przykładowy plik pyproject.toml (nieco bardziej rozbudowany i z automatycznym wersjonowaniem).

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.

Przykładowe rozwiązanie starcata. To niekoniecznie jest dobre i poprawne rozwiązanie!

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.

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.

3.5 Tematy dodatkowe

Automatyczne wersjonowanie z użyciem versioningit.

Dokumentacja biblioteki sphinx oraz samouczki jej użycia (tworzenie dokumentacji).

Samouczek stawiania strony projektu za pomocą Gitlab Pages.

Dokumentacja modułu twine (wrzucanie dystrybucji na PyPI).

Samouczek automatyzacji publikowania modułu na PyPI używając „trusted publishers”.

Kiedy Python jest złym wyborem?

Wybrane licencje otwarte: GPL, MIT, BSD.

4. Projekty programistyczne i zaliczenie

Można proponować własne projekty (i bardzo do tego zachęcam)!

Tutaj znajduje się lista aktualnie dostępnych oraz minionych projektów.

Na dole strony znajdują się także zasady oceniania.

Tutaj znajdują się zagadnienia na kolokwium.

English (UK)