## 1. Co je software a základní vývojové workflow
- Životní cyklus softwaru od nápadu přes vývoj a nasazení až po dlouhodobou údržbu.
- Důležité pojmy: release, verze, bugfix, refaktoring...
- Editace kódu, textové editory, integrovaná vývojová prostředí (IDE).
- Stručný úvod do agilních metodik vývoje softwaru.
## 2.–3. Cesta od zdrojového kódu k binárce
- Ladění (debugging), kompilace (build systémy), linkování a testování.
- Unit testy a analýzu pokrytí kódu (code coverage).
- Rozbor typických chyb, jako jsou linking errors, segmentation faults a memory leaks.
- Specifika kompilovaných jazyků a interpretovaných jazyků.
- Rozdíly mezi typovanými a netypovanými jazyky.
- Příkladem srovnání typovaného a netypovaného jazyka jsou jazyky C a Python.
## 4.–5. Základy verzování: práce v týmu a hlavní koncepty Git
- Základy práce s Gitem v lokálním repozitáři.
- Prohlížení historie projektu pomocí příkazů log, blame a diff.
- Slučování větví (merge) a řešení konfliktů.
- Vzdálené repozitáře pro sdílení kódu (GitHub/GitLab).
- Operace clone, fetch, pull a push.
- Nastavení přístupů přes SSH a HTTPS.
- Základní CI/CD workflow s využitím GitHub Actions.
- Práce s pull requesty a merge requesty. Základní code review.
## 6.-7. Projektová struktura a modulární kód
- V rámci této části bude zadán skupinový projekt.
- Skupinový projekt se zaměří na vývoj většího softwarového celku v týmu.
- Studenti se naučí organizovat projekt do přehledných adresářů a modulů
- Studenti zjistí, co je API a jakou roli hraje ve struktuře softwaru.
- Naučí se navrhovat rozhraní mezi jednotlivými moduly projektu, která jsou stabilní, rozšiřitelná a srozumitelná.
- Budou se věnovat dokumentaci k projektu a jejímu významu.
- Seznámí se se soubory README a jejich potřebným obsahem.
- Naučí se psát komentářovou dokumentaci přímo v kódu.
- Vyzkoušejí si jednoduché generování dokumentace pomocí nástrojů typu Doxygen nebo podobných systémů.
## 8. Umělá inteligence ve vývoji softwaru
- Studenti se naučí, jak efektivně pracovat s agentními systémy a nástroji založenými na umělé inteligenci pro generování kódu.
- Seznámí se s výhodami využívání umělé inteligence a poznají též úskalí a rizika spojená s takzvaným „vibe codingem“.
## 9. Čitelnost kódu a coding style
- Principy čitelného kódu a jejich praktické použití.
- Studenti se zaměří na vhodné pojmenovávání proměnných, funkcí a modulů.
- Důraz bude kladen na udržování konzistentního stylu v celém projektu.
- Studenti poznají význam coding style guidelines při týmové práci.
- Seznámí se s možnostmi formátování kódu ručně i pomocí autoformatterů.
## 10. Deployment a uživatelská rozhraní
- Studenti získají základní přehled o virtualizaci a jejím využití při nasazování aplikací.
- Naučí se pracovat s kontejnery Docker a Apptainer.
- Úvod do síťové komunikace na internetu (REST API).
- Základní principy kybernetické bezpečnosti.
- Stručný úvod do orchestrátorů kontejnerů, například Kubernetes.
- Seznámení s konceptem grafických uživatelských rozhraní. Seznámení s některými GUI frameworky.
## 11. Specifika vývoje vědeckého softwaru
- FAIR principy pro vědecká data a software.
- Přehled o HPC infrastrukturách používaných ve vědeckém prostředí.
- Základy práce na HPC systémech pro výpočty.
- Seznámení se s používáním plánovačů úloh, jako jsou Slurm a PBS.
## 12.–14. Práce na projektu a konzultace
- Poslední tři bloky budou věnovány intenzivní práci na studentských projektech.
- Studenti budou průběžně konzultovat stav svého projektu s vyučujícím.
- Budou finalizovat implementaci jednotlivých částí softwaru.
- Součástí bude důkladné testování a ladění výsledného řešení.
- Studenti dokončí dokumentaci k projektu a připraví jeho prezentaci včetně demonstrace jeho nasazení v praxi.
Poslední úprava: Šícho Martin (10.02.2026)
## 1. What software is and basic development workflow
- Software life cycle from idea through development and deployment to long‑term maintenance.
- Key concepts: release, version, bugfix, refactoring, etc.
- Code editing, text editors, integrated development environments (IDEs).
- Brief introduction to agile software development methodologies.
## 2–3. Path from source code to binary
- Debugging, compilation (build systems), linking and testing.
- Unit tests and analysis of code coverage.
- Analysis of typical errors such as linking errors, segmentation faults and memory leaks.
- Specifics of compiled and interpreted languages.
- Differences between typed and untyped languages.
- An example of comparing a typed and an untyped language is C and Python.
## 4–5. Basics of version control: teamwork and main Git concepts
- Basics of working with Git in a local repository.
- Staging area and commits.
- Viewing project history using the log, blame and diff commands.
- Merging branches and resolving conflicts.
- Remote repositories for sharing code (GitHub/GitLab).
- Operations clone, fetch, pull and push.
- Setting up access via SSH and HTTPS.
- Basic CI/CD workflow using GitHub Actions.
- Working with pull requests and merge requests; basic code review.
## 6–7. Project structure and modular code
- A group project will be assigned as part of this block.
- The group project will focus on developing a larger software system in a team.
- Students will learn to organize a project into clear directories and modules.
- Students will find out what an API is and what role it plays in software structure.
- They will learn to design interfaces between project modules that are stable, extensible and easy to understand.
- They will work on project documentation and understand its importance.
- They will become familiar with README files and what they should contain.
- They will learn to write comment‑based documentation directly in the code.
- They will try simple documentation generation using tools such as Doxygen or similar systems.
## 8. Artificial intelligence in software development
- Students will learn how to work effectively with agent systems and AI‑based tools for code generation.
- They will learn about the benefits of using artificial intelligence and also about the pitfalls and risks of so‑called “vibe coding”.
## 9. Code readability and coding style
- Principles of readable code and their practical application.
- Students will focus on appropriate naming of variables, functions and modules.
- Emphasis will be placed on maintaining a consistent style across the project.
- Students will understand the importance of coding style guidelines in team work.
- They will learn about options for formatting code manually and with autoformatters.
## 10. Deployment and user interfaces
- Students will gain a basic overview of virtualization and its use in application deployment.
- They will learn to work with Docker and Apptainer containers.
- Introduction to network communication on the internet (REST APIs).
- Basic principles of cybersecurity.
- Brief introduction to container orchestrators such as Kubernetes.
- Introduction to the concept of graphical user interfaces and to selected GUI frameworks.
## 11. Specifics of scientific software development
- FAIR principles for scientific data and software.
- Overview of HPC infrastructures used in scientific environments.
- Basics of working on HPC systems for computations.
- Introduction to job schedulers such as Slurm and PBS.
## 12–14. Project work and consultations
- The last three blocks will be devoted to intensive work on student projects.
- Students will continuously consult the status of their project with the instructor.
- They will finalize the implementation of individual parts of the software.
- Thorough testing and debugging of the final solution will be included.
- Students will complete the project documentation and prepare its presentation, including a demonstration of its deployment in practice.
Poslední úprava: Šícho Martin (10.02.2026)
|