F5698 Ultimátní příručka mladého budovatele v Pythonu

Přírodovědecká fakulta
podzim 2023
Rozsah
0/2/0. 2 kr. Ukončení: z.
Vyučující
Mgr. Andrej Roštek (cvičící)
Dr. Martin Topinka, PhD. (cvičící)
Mgr. Petr Zikán, Ph.D. (cvičící)
Garance
Dr. Martin Topinka, PhD.
Ústav teoretické fyziky a astrofyziky – Fyzikální sekce – Přírodovědecká fakulta
Kontaktní osoba: Dr. Martin Topinka, PhD.
Dodavatelské pracoviště: Ústav teoretické fyziky a astrofyziky – Fyzikální sekce – Přírodovědecká fakulta
Rozvrh
Po 16:00–17:50 Fcom,01034
Předpoklady
Předmět volným způsobem navazuje na F1420 Programování v jazyce Python a F4500 Python pro fyziky. Předpokládá se základní znalost jazyka Python (základní syntaxe a datové struktury, funkce, moduly).
Omezení zápisu do předmětu
Předmět je nabízen i studentům mimo mateřské obory.
Mateřské obory/plány
předmět má 6 mateřských oborů, zobrazit
Cíle předmětu
Čeká nás třetí ročník tohoto budovatelského kurzu. Zatímco první ročník se pokusil o pochopení některých konceptů zřejmě zbytečně do detailu, v druhém ročníku jsme využili cloudovou službu GitPod a již hotovou strukturu Python balíčku od Claudia Jolowicze (https://github.com/cjolowicz/cookiecutter-hypermodern-python). Tím jsme však některé důležité prvky moderního budování v Pythonu dostatečně nevysvětlili a de-facto přeskočili. Tento rok se tady pokusíme najít rovnováhu mezi oběma přístupy.

Cíle předmětu však zůstavají stejné:
* Porozumět systémům verzování a využít GitHub pro spolupráci při správě kódu.
* Efektivně používat integrovaná vývojová prostředí (Visual Code)
* Získat dovednosti v technikách modelování softwarových domén pro efektivní reprezentaci systémů v reálném světě.
* Identifikovat a využívat základní balíčky jazyka Python pro různé aplikační oblasti.
* Používat návrhové vzory pro psaní udržitelného, škálovatelného a znovupoužitelného kódu v jazyce Python.
* Vyvinout pochopení testování softwaru, dokumentace a kontinuální integrace (Continuous Integration).

Nově - pro třetí ročník - bychom pak přidali následující:
* Prozkoumat koncepty kontejnerizace a použít Docker pro vytváření reprodukovatelných prostředí.

Je jasné, že vše zde uvedené, není možné vměstnat do jednoho semstru. Kam tedy nakonec zaměříme naši pozornost bude předmětem společné diskuse.
Výstupy z učení
Během kurzu se studenti naučí (snad alespoň něco z) následující(ho):

* Systémy verzování a spolupráce:
* * Porozumění systémům verzování a jejich důležitosti ve vývoji softwaru.
* * Využití GitHubu pro spolupráci při správě kódu, včetně větvení, slučování a řešení konfliktů.
* Integrovaná vývojová prostředí (IDE):
* * Efektivní využití Visual Code jako integrovaného vývojového prostředí pro projekty v jazyce Python.
* * Prozkoumání funkcí a produktivních nástrojů poskytovaných IDE pro efektivní programování.

* Modelování softwarových domén:
* * Získání dovedností v modelování softwarových domén pro efektivní reprezentaci systémů v reálném světě.
* * Naučení se konceptů objektově orientovaného modelování, jako jsou třídy, objekty a dědičnost.

* Základní balíčky jazyka Python:
* * Identifikace a využívání základních balíčků jazyka Python pro různé aplikační oblasti.
* * Porozumění funkčnosti a použití těchto balíčků v praktických scénářích.

* Návrhové vzory v jazyce Python:
* * Naučení se návrhových vzorů a jejich důležitosti při psaní udržitelného a škálovatelného kódu.
* * Studium běžně používaných návrhových vzorů v jazyce Python, jako je Singleton, Factory a Observer.
* * Použití návrhových vzorů pro řešení praktických problémů a zlepšení architektury kódu.

* Testování softwaru, dokumentace a kontinuální integrace:
* * Rozvoj porozumění testování softwaru v jazyce Python.
* * Naučení se osvědčených postupů pro dokumentaci projektů v Pythonu, včetně použití nástrojů jako Sphinx.
* * Prozkoumání konceptu kontinuální integrace a její role v automatizovaném testování a vývoji projektů.

* Kontejnerizace pomocí Dockeru:
* * Prozkoumání konceptů kontejnerizace a jejich výhod ve vývoji softwaru.
Během kurzu budou studenti také provádět praktické projekty a cvičení, ve kterých uplatní své znalosti v reálných scénářích. Získají komplexní přehled o moderních postupech vývoje v jazyce Python, včetně nástrojů infrastruktury, osvědčených postupů a principů softwarového návrhu.
Osnova
  • V průběhu kursu budeme společně pracovat na celosemetrálním projektu, který budeme postupně rozvíjet a postupně vysvětlovat principy, koncepty a nástroje uvedené výše.
Literatura
    doporučená literatura
  • Scopatz, Anthony, and Kathryn D. Huff. Effective computation in physics: Field guide to research with python. " O'Reilly Media, Inc.", 2015.
  • Bob Gregory. Architecture Patterns with Python. O'Reilly Media, Inc. 2020. https://www.cosmicpython.com/
  • LUTZ, Mark. Learning Python. 4th ed. Beijing: O'Reilly, 2009, xlix, 1162. ISBN 9780596158064. info
Výukové metody
Výuka bude probíhat formou seminářů, kde budeme společnými silami rozvíjet celosemetrální projekt.
Metody hodnocení
Předmět bude ukončen na základě aktivity během semestru a závěrečného kolokvia.
Informace učitele
Je vhodné, aby student měl při výuce vlastní počítač. Výuka bude primárně probíhat na operačním systému Linux, nicméně ostatní operační systémy (Windows, iOS) by neměly být překážkou. Je však možné, že na těchto OS vyučující nebude schopen poskytnout plnou podporu mladému budovateli.
Další komentáře
Studijní materiály
Předmět je dovoleno ukončit i mimo zkouškové období.
Předmět je vyučován každoročně.
Předmět je zařazen také v obdobích podzim 2021, podzim 2022, podzim 2024.