PB173 Domain Specific Development

Faculty of Informatics
Autumn 2026
Extent and Intensity
1/1/0. 2 credit(s) (plus extra credits for completion). Type of Completion: k (colloquium).
In-person direct teaching
Teacher(s)
doc. RNDr. Petr Švenda, Ph.D. (lecturer)
Ing. Pavel Tišnovský, Ph.D. (seminar tutor)
Bc. Stanislav Zeman (seminar tutor)
Lukasz Michal Chmielewski, PhD (seminar tutor)
RNDr. Milan Šorf (seminar tutor)
Mgr. Kamila Varadzínová (seminar tutor), doc. RNDr. Petr Švenda, Ph.D. (deputy)
RNDr. Martin Ukrop, Ph.D. (assistant)
Matej Matuška (seminar tutor)
Ing. Jan Koscielniak (seminar tutor)
Vojtěch Trefný (seminar tutor)
Bc. Alexander Zgabur (seminar tutor)
Ing. Martin Pokorný (seminar tutor)
Bc. Vratislav Bendel (seminar tutor)
Martin Vaško (seminar tutor)
Guaranteed by
doc. RNDr. Petr Švenda, Ph.D.
Department of Computer Systems and Communications – Faculty of Informatics
Contact Person: doc. RNDr. Petr Švenda, Ph.D.
Supplier department: Department of Computer Systems and Communications – Faculty of Informatics
Timetable of Seminar Groups
PB173/Git: Tue 15. 9. to Tue 15. 12. Tue 10:00–11:50 S505, J. Koscielniak, M. Matuška, M. Pokorný, V. Trefný, A. Zgabur
PB173/Go: Thu 17. 9. to Thu 17. 12. Thu 10:00–11:50 S505, P. Tišnovský, M. Vaško, S. Zeman
PB173/LKI: Mon 14. 9. to Mon 14. 12. Mon 12:00–13:50 S505, V. Bendel
PB173/SCR: Fri 18. 9. to Fri 18. 12. Fri 10:00–11:50 C416, L. Chmielewski
PB173/UX: Tue 15. 9. to Tue 15. 12. Tue 18:00–19:50 A321
Prerequisites
PB111 Principles of Low-level Programming || PB071 Principles of low-level programming

Důležité: Uvedená seminární skupina bude otevřena pouze v případě, že do ní bude do 7.9.2026 (týden před začátkem výuky) zaregistrováno alespoň 10 studentů. V opačném případě si student musí vybrat jinou z nabízených skupin.


PB173/Go (Coding in Go)


the student should be proficient in programming fundamentals, comfortable with SQL and have a basic understanding of networking and virtualization (it is sufficient on the level of passing courses IB111, PB154, PB156 and PB152)

PB173/UX (User Experience)


Students acquire the individual principles primarily through smaller activities, such as identifying UX problems, designing interfaces, creating personas, or testing accessibility. These activities are designed to be manageable even without prior experience with UX.

PB173/SCR (Source Code Review)


the class will be delivered in English, knowledge of the C/C++, python, and another language (e.g., Java), basic knowledge about embedded and operating systems in general, basics of git, basic knowledge of security concepts.

PB173/git (Git versioning system) 

Students should have only the very basics of programming (ideally in Python) and be comfortable working in the terminal (Linux/Mac). Course materials are in English; the course is taught in Czech.


PB173/AiDev (AI-Assisted Software Development)


The class will be delivered in English, basic experience with software development.


PB173/LKI (Linux Kernel Intro)


Knowledge of C and Git, basic understanding of how operating systems work and are administered, ideally Linux/Unix-like, working with the Unix command line

Course Enrolment Limitations
The course is also offered to the students of the fields other than those the course is directly associated with.
The capacity limit for the course is 110 student(s).
Current registration and enrolment status: enrolled: 110/110, only registered: 48/110, only registered with preference (fields directly associated with the programme): 30/110
fields of study / plans the course is directly associated with
there are 36 fields of study the course is directly associated with, display
Abstract

Enhance your programming capabilities in the language appropriate for the particular selected application domain.

PB173/Go (Coding in Go)

  • Students will understand the fundamentals of the Go programming language and its common use cases in practice.
  • Students will acquire the required knowledge for entry-level Go developer positions while writing idiomatic Go code.
  • Students will be capable of applying the acquired knowledge to real-life projects.

PB173/UX (User Experience)


The course provides developers with an introduction to the principles of user experience (UX) and their practical application, from the basics of a user-centered approach through cognitive principles, visual design such as colors and typography, and consistency, to the design process and user research. Special attention is given to working with design patterns. The emphasis is on connecting UX and development, practical activities, and solving real-world problems.

PB173/SCR (Source Code Review)

  • Provide an introduction to the principles and practices of source code review, with a focus on improving software quality, maintainability, and security.
  • Attendees will learn about common types of vulnerabilities, how to systematically analyze source code for vulnerabilities, design flaws, and inefficiencies.
  • Real-world hands-on group exercises, concentrated on embedded devices source code review, will help participants develop the skills necessary to identify issues early in the development lifecycle.

PB173/git (Git versioning system)


During this course, you will learn unique benefits and concepts of Git as well as its core features via extensive examples, hands-on exercises and mandatory homework. The emphasis of the course is to prepare you for working on group community upstream projects in enterprise. In-person lectures will only take place in the first 8 weeks of the semester, which is followed by project work.


PB173/AiDev (AI-Assisted Software Development)


TBA


PB173/LKI (Linux Kernel Intro)


The aim of the course is to introduce students to the internals and algorithms of the Linux kernel: how to interact with it, analyse its behaviour, read its source code, and possibly contribute patches. The course focuses on entry-level knowledge.

Learning outcomes

The general goal of this course is extension of programming knowledge in a particular area of expertise based on the particular seminar group. Each seminar group will define its own specific learning goals.

PB173/Go (Coding in Go)

  • Write idiomatic Go code.
  • Understand the Go concurrency model.
  • Profile and optimize Go applications.
  • Develop REST API services in Go.
  • Containerize and deploy one's applications.
  • Implement persistence leveraging SQL databases.
  • Instrument applications with various types of telemetry.

PB173/UX (User Experience)

  • Understand what UX is and is not, and why it is important for software development.
  • Understand the impact of design decisions on user experience.
  • Gain an overview of the basic UX process: research, design, and testing.
  • Understand the cognitive principles that influence user behavior.
  • Understand where and how a developer affects UX in everyday practice.
  • Identify common UX problems in user interfaces.
  • Think about functionality from the user’s perspective.
  • Recognize problematic points in user flows.
  • Propose small UX improvements in everyday development decisions.
  • Apply the basic design process: personas, user journey, prototype, and testing.
  • Collaborate more effectively with designers.

PB173/SCR (Source Code Review)

  • By the end of the course, students should learn the core concepts of source code review and vulnerability identification, including being able to recognize common software vulnerabilities.
  • Students will be able to identify and document software vulnerabilities in a clear, accurate, and responsible manner.
  • Learn about common logical attacks as well as about hardware risks, like side-channel and fault-injection vulnerabilities.
  • Students will also learn learn about use of tools in code review, especially with respect to collaboration, and about code quality and maintainability.
  • Student will learn about reviewing open-source code based on real-world examples (i.e., hands-on practice).
  • Students will also learn about platform-specific code review with respect to embedded systems.

PB173/git (Git versioning system)

  • TBA

PB173/AiDev (AI-Assisted Software Development)

  • Explain the basic principles, capabilities, and limitations of large language models in software engineering.
  • Apply LLM-based tools to selected software engineering tasks, including implementation, testing, debugging, documentation, and code review.
  • Use prompt and context engineering techniques to improve the quality and reliability of AI-generated software artifacts.
  • Select suitable AI-assisted approaches, such as copilots, agents, and MCP-based tools, for specific software engineering tasks.
  • Critically evaluate AI-generated code and tests with respect to correctness, maintainability, security, hallucination risks, and the need for human oversight.

PB173/LKI (Linux Kernel Intro)

  • TBA
Key topics

  • The concrete content of the course depends on the individual thematic groups which are listed in Teacher's information areas.

    PB173/Go (Coding in Go)

  • Introduction: introduction to Go, IDEs and editors, installing Go, running Go
  • Fundamentals #1: packages & visibility, variables, data types, control flow, functions, pointers, user-defined data types
  • Fundamentals #2: interfaces, errors, arrays, slices, maps, range
  • Concurrency & parallelism: goroutines, runtime, channels, select, related packages
  • Advanced #1: generics, packages, testing
  • Advanced #2: benchmarks, optimizations, CGo, unsafe & reflect
  • REST APIs: JSON, HTTP, REST API, HTTP package, routers & web frameworks, OpenAPI, templating
  • Containers: containerization, Docker, Kubernetes
  • Databases: SQL, RDBMSs, migrations, SQL, sqlx, sqlc, GORM
  • Infrastructure: CI/CD, infrastructure, Google Cloud Platform
  • Observability: health, logs, metrics, traces, OpenTelemetry

PB173/UX (User Experience)

  • What is UX
  • Cognitive principles in UX
  • Colors, typography, and reading on screens
  • Consistency and design systems
  • Design process
  • Basics of user research
  • Workshop: heuristic analysis
  • Design patterns for enterprise applications
  • Accessibility
  • Student project presentations

PB173/SCR (Source Code Review)

  • Introduction to source code review (language level vulnerabilities: buffer overflow, type overflow, strings)
  • Design review
  • Tooling: static and dynamic analysis, reporting
  • Platform-specific aspects: Trusted Execution Environment
  • Reviewing key functionalities #1: Authentication and Authorization, Input Validation, Error Handling, Data Handling,
  • Reviewing key functionalities #2: Memory Management (for languages like C/C++), Code Quality and Maintainability and Concurrency and Thread Safety.
  • Project work: reviewing various open-source implementations (see Teacher Information for examples)

PB173/git (Git versioning system)

  • Introduction (course, instructors, students). Version control systems. What is version control? Installing Git. Git workflow basics. Cloning repositories. The index. The art of commits. Configuring and securing repositories with SSH keys.
  • Branching. Tags, stash, branching, merging, reverting.
  • Teamwork. Upstream and remote. Push, pull, and tracking remotes. The golden rule of push.
  • Fixing mistakes. Git logs and auditing. Resolving Git conflicts. Interactive rebase. Different ways to find and undo changes made in a Git project, and when to use each.
  • Advanced Git features, forges, CI/CD, automation.
  • Git etiquette, or: mind your manners in Git.
  • Advanced Git features — blame, hooks, submodules/subtrees, bisect, worktrees, large files.

PB173/AiDev (AI-Assisted Software Development)
  • LLM Foundations for Software Engineering
  • Prompt and Context Engineering
  • AI-Assisted Implementation
  • AI-Assisted Testing, Debugging, and Code Review
  • Agentic Software Engineering
  • MCP and Tool Integration
  • Evaluation and Mini-Project

PB173/LKI (Linux Kernel Intro)

  • What Linux is and the role of the kernel in a Linux distribution
  • Browsing the Linux source code
  • Interaction between users and the kernel, and the virtual filesystem layer
  • Basics of process management and scheduling classes
  • Basics of memory management: virtual address space, physical memory allocation, kernel memory (slabs), reclaim and fragmentation, memory locality (NUMA)Synchronisation (locks) and deadlock detection
  • Timers and interrupts
  • Kernel tracing and perf
  • kdump and crash
  • eBPF
  • Implementing a kernel module and how to contribute to open source Linux
Study resources and literature
  • Literatura dle tematické skupiny
Approaches, practices, and methods used in teaching

In the seminar, students do programming exercises or write small programs in the respective domain. Those are complemented by homework assignments. Finally, seminars include a theoretical introduction, typically taking no more than 30 % of the allocated time.

PB173/Go (Coding in Go)


In-person lectures with hands-on exercises, reviewed homework assignments, project.

PB173/UX (User Experience)


In-person lectures with hands-on exercises, reviewed homework assignments, project.

PB173/SCR (Source Code Review)


In-person lectures and group project assignment.

PB173/git (Git versioning system)

In-person lectures with in-class exercises, graded homework assignments, and a project.



PB173/AiDev (AI-Assisted Software Development)


The course combines approximately 30–40% in-person lectures with 60–70% seminar-based and practical activities. Teaching methods include:

  • Short lectures introducing fundamental concepts and methods
  • Hands-on exercises using LLM-based software engineering tools
  • Discussion and critical analysis of research papers
  • Reviewed homework assignments
  • Project-based learning

PB173/LKI (Linux Kernel Intro)


In-person lectures with practical demonstrations, graded homework assignments.

Method of verifying learning outcomes and course completion requirements

During the whole semester, student will undertake several programming homework and/or a project. The amount of homework and final evaluation criteria are specified by each thematic group.

PB173/Go (Coding in Go)


Multiple homework assignments (fifty points) and a final project (fifty points), including its defense. Seventy out of the one hundred points are required to successfully complete the course.

PB173/UX (User Experience)


For successful completion of the course, active participation during lectures and continuous completion of practical assignments are expected. The course also includes a semester project focused on designing the UX of an application: an alarm clock for a tablet. Students will create a prototype covering the basic functions of the application and test it with at least two users. The use of AI tools for generating the design is expected when creating the prototype. The output is a short presentation, 10 minutes long, in which students present their process, key decisions, and the feedback they received. Assessment is based primarily on the quality of the design in terms of usability, logic, and clarity. The emphasis is on the thinking process, the ability to explain one’s decisions and work with feedback, rather than on the visual perfection of the design. To successfully complete the course, students need to obtain at least 70 out of 100 points: practical assignments account for 50 points and the semester project for 50 points.

PB173/SCR (Source Code Review)


The grading will be performed based on the points received from project assignment, presentation, and the activity during the seminar. Total of 60% will be necessary to pass the course.

PB173/git (Git versioning system)

To pass the course, students are expected to complete homework assignments on an ongoing basis and to complete a final project.

PB173/AiDev (AI-Assisted Software Development)

  • 15% — A 10–15-minute presentation on recent advances in a topic related to the course
  • 15% — A one-page critical summary of a selected research paper related to the key topics
  • 20% — Homework assignments and practical exercises
  • 50% — Final project, including implementation, evaluation, and presentation
  • To successfully complete the course, students must obtain at least 75 out of 100 points.

PB173/LKI (Linux Kernel Intro)


Several graded homework assignments (50 points) and a final test (50 points). At least 60 out of 100 points are required to pass the course.

Language of instruction
Czech
Teacher's information

Important: The given seminar will be opened only when at least 10 students are registered for it till 7.9.2026 (one week before the semester starts). Otherwise, another seminar group has to be taken by a student.

The actual capacity of the course is limited by the available number of places in seminar groups. The course can only be completed if you obtain a place in one of the seminar groups.

There are following seminar groups are planned for Autumn 2026 (see note above):

PB173/Go (Coding in Go) (Red Hat – Pavel Tišnovský, Stanislav Zeman; in Czech)

The course aims to introduce the Go programming language and its modern applications (API, virtualization, libraries, ...). As a change from last year, the course was extended to span the full semester. More information at https://github.com/course-go/course

PB173/UX (User Experience) (SAP – Kamila Varadzínová; in Czech)

The course provides developers with an introduction to the principles of user experience (UX) and their practical application, from the basics of a user-centered approach through cognitive principles, visual design (colors, typography), and consistency to the design process and user research. Special attention is given to working with design patterns. The emphasis is on connecting UX and development, practical activities, and solving real-world problems.

PB173/SCR (Source Code Review) (Łukasz Chmielewski; teaching in English)

The seminar will mostly graded based on a project. After four introductory seminars, the participants will create groups and they will review various open-source implementations belonging to a specific class of software, including Smart Home Devices, Printers, Routers, Open-Source Crypto-libraries, Trust Execution Environments code bases, bootloaders or JavaCard applets.

PB173/git (Git versioning system) (Red Hat; in Czech)

The course introduces students to the Git version control system and related topics concerning contributing to open source software. More information at https://red.ht/muni-git

PB173/AiDev (AI-Assisted Software Development) (teaching in English)

TBA

PB173/LKI (Linux Kernel Intro)

In previous years, the course focused more on kernel code development and the methodology of submitting patches. This semester we are revising the course to concentrate more on understanding the internal structures and algorithms of the Linux kernel. The intent is therefore primarily to understand how the kernel works and how to interact with it. We will also look at development itself, but it will take up a smaller part of the course.

Further comments (probably available only in Czech)
Study Materials
The course is taught each semester.
The course is also listed under the following terms Autumn 2010, Autumn 2011, Autumn 2012, Autumn 2013, Autumn 2014, Autumn 2015, Spring 2016, Autumn 2016, Spring 2017, Autumn 2017, Spring 2018, Autumn 2018, Spring 2019, Autumn 2019, Spring 2020, Autumn 2020, Spring 2021, Autumn 2021, Spring 2022, Autumn 2022, Spring 2023, Autumn 2023, Spring 2024, Autumn 2024, Spring 2025, Autumn 2025, Spring 2026, Spring 2027.
  • Enrolment Statistics (recent)
  • Permalink: https://is.muni.cz/course/fi/autumn2026/PB173