The course introduces students to practical software development from initial design through deployment and long‑term maintenance of applications. It focuses on understanding the software life cycle, working with both compiled and interpreted languages, systematic debugging and testing, including unit tests and code coverage measurement. Emphasis is placed on using Git for team-based version control, including branching, working with remote repositories, and basic CI/CD. Students will learn how to design modular project structures, create APIs, write documentation, and apply principles of readable, long-term maintainable code. They will also become familiar with deploying applications using containers (Docker, Apptainer), basics of networking and cybersecurity, the use of artificial intelligence in programming, and the specifics of developing scientific software on HPC infrastructures. In the final team project, they will experience the complete development workflow from design through implementation, version control, testing, and documentation to a demonstration of deployment in practice.
Last update: Šícho Martin (10.02.2026)
Předmět studenty uvádí do praktického vývoje softwaru od prvotního návrhu až po nasazení a údržbu aplikací. Zaměřuje se na porozumění životnímu cyklu softwaru, práci s kompilovanými i interpretovanými jazyky, systematické ladění a testování včetně unit testů a měření pokrytí kódu. Důraz je kladen na používání systému Git pro verzování v týmu, včetně práce s větvemi, vzdálenými repozitáři a základním CI/CD. Studenti si osvojí návrh modulární struktury projektů, tvorbu API, dokumentaci a principy čitelného, dlouhodobě udržovatelného kódu. Seznámí se také s nasazováním aplikací pomocí kontejnerů (Docker, Apptainer), základy sítí, kybernetické bezpečnosti, využitím umělé inteligence při programování a specifiky vývoje vědeckého softwaru na HPC infrastrukturách. Na závěrečném týmovém projektu si vyzkoušejí kompletní workflow vývoje od návrhu přes implementaci, verzování, testování, dokumentaci až po demonstraci nasazení v praxi.
Last update: Šícho Martin (10.02.2026)
Course completion requirements -
Attendance in classes is compulsory and is continuously monitored. The course is completed with a graded credit, which will be awarded based on the team’s final project presentation and the submitted Git history documenting active participation in solving the project problem.
Last update: Šícho Martin (10.02.2026)
Účast na výuce je povinná a je průběžně kontrolována. Předmět je zakončen klasifikovaným zápočtem, který bude udělen na základě závěrečné prezentace projektu celého týmu a doložení Git historie, která bude dokladovat aktivní participaci na řešení problému.
Doug Lowe. Networking All-in-One For Dummies. : John Wiley & Sons Inc, 2024, s. ISBN 9780470534052.
Last update: Šícho Martin (10.02.2026)
Teaching methods -
At the beginning of the lesson, the teacher introduces the students to a specific issue through a presentation and during the rest of the time the students do practical tasks.
Last update: Cibulková Jana (29.07.2025)
Vyučující na začátku lekce uvede studenty pomocí prezentace do konkrétní problematiky a ve zbytku času studenti samostatně realizují praktické úlohy.
Last update: Cibulková Jana (29.07.2025)
Requirements to the exam -
Classified credit. Attendance sheet. Solution of tasks in group and alone.
Last update: Šícho Martin (10.02.2026)
Klasifikovaný zápočet. Docházkový list. Řešení samostatných a skupinových úloh.
Last update: Šícho Martin (10.02.2026)
Syllabus -
## 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.
The .gitignore file.
Viewing project history using the log, blame and diff commands.
Merging branches and resolving conflicts.
Release tags.
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.
Last update: Šícho Martin (10.02.2026)
## 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.
Staging area a commity.
Soubor .gitignore.
Prohlížení historie projektu pomocí příkazů log, blame a diff.
Slučování větví (merge) a řešení konfliktů.
Release tagy.
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.
Last update: Šícho Martin (10.02.2026)
Learning resources -
stackexchange.com
Last update: Cibulková Jana (29.07.2025)
stackexchange.com
Last update: Cibulková Jana (29.07.2025)
Learning outcomes -
Acquired competencies
Ability to use Git and remote repositories (GitHub/GitLab) for team development and basic CI/CD workflows.
Skills in compiling, debugging and testing programs, including writing unit tests and working with code coverage.