PB173 Domain specific development

Faculty of Informatics
Autumn 2024
Extent and Intensity
0/2/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)
Miroslav Jaroš (seminar tutor)
Ing. Pavel Tišnovský, Ph.D. (seminar tutor)
Bc. Stanislav Zeman (seminar tutor)
RNDr. Martin Ukrop, Ph.D. (lecturer), doc. RNDr. Petr Švenda, Ph.D. (deputy)
Radomír Vrbovský (seminar tutor)
Bc. Vratislav Bendel (seminar tutor)
Izabela Bakollari (seminar tutor)
Carlos Eduardo Maiolino (seminar tutor)
Guaranteed by
doc. RNDr. Petr Švenda, Ph.D.
Department of Computer Systems and Communications – Faculty of Informatics
Contact Person: RNDr. Martin Ukrop, Ph.D.
Supplier department: Department of Computer Systems and Communications – Faculty of Informatics
Timetable of Seminar Groups
PB173/Go: Thu 26. 9. to Thu 19. 12. Thu 10:00–11:50 S505, P. Tišnovský, S. Zeman
PB173/KDLP: Mon 23. 9. to Mon 16. 12. Mon 14:00–15:50 S505, I. Bakollari, V. Bendel, C. Maiolino, R. Vrbovský
PB173/QT: Fri 27. 9. to Fri 20. 12. Fri 14:00–15:50 S505, M. Jaroš
Prerequisites
( PB111 Principles of low-level prog. || PB071 Principles of low-level prog. ) && SOUHLAS
We expect you to have knowledge of appropriate programming language and operating system based on requirements your desired seminar group. A mandatory prerequisite is exemption given by the lecturer based on student response to motivational questions specific to given seminar group (details and process is described in Archived messages).
• 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/KDLP (Kernel Learning Development Pipeline): the class will be delivered in English, knowledge of the C language, basic knowledge about operating systems in general, practical skills in Linux operating system (e.g. Fedora, Debian, Slackware), basics of git
• PB173/QT (Multiplatform programming with C++ a QT framework): student shall by the student should be proficient in programming fundamentals of C and C++ language.
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: 39/110, only registered: 10/110, only registered with preference (fields directly associated with the programme): 6/110
fields of study / plans the course is directly associated with
Course objectives
Enhance your programming capabilities in the language appropriate for the particular selected application domain.
1. 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.
2. PB173/KDLP (Kernel Development Learning Pipeline)
• Introduce students to the Linux Kernel development workflow, show them how to create and send kernel modifications to mailing lists.
• Excite students about the wonderful world of Linux kernel community.
• Expose students to major kernel subsystems.
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 gloals.
1. 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.
2. PB173/KDLP (Kernel Development Learning Pipeline)
• By the end of the course, students should have an understanding of how Linux kernel is architectured.
• Understand the role of each of the major subsystems and how those interact with each other.
• Students will also be able to have a basic understanding on how to write code for the Linux kernel, for its core and for modules, and how to use Linux’s provided generic interfaces (memory allocation, synchronization, generic data structures, etc) in their own kernel code.
• Students will understand how to send patches to specific subsystems and how to review patches.
Syllabus
  • The concrete content of the course depends on the individual thematic groups which are listed in Teacher's information areas.
  • 1. 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
  • 2. PB173/KDLP (Kernel Development Learning Pipeline)
    • Introduction and development environment setup
    • General overview of core kernel concepts
    • PC and x86 architecture
    • Process management
    • Synchronization primitives
    • Memory management
    • Storage and filesystems
    • Networking stack
    • Device drivers
    • Kernel Debugging methods
    • GPG signing party
Literature
  • Literatura dle tematické skupiny
Teaching methods
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.
1. PB173/Go (Coding in Go)
In-person lectures with hands-on exercises, reviewed homework assignments, project.
2. PB173/KDLP (Kernel Development Learning Pipeline)
In-person lectures and homework assignments
Assessment methods
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.
1. 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.
2. PB173/KDLP (Kernel Development Learning Pipeline)
Each assignment is assigned a specific number of points based on its difficulty or importance. These points add up to a maximum of 100. To pass the course, students need to accumulate at least 65 points across all assignments.
Language of instruction
Czech
Further comments (probably available only in Czech)
Study Materials
The course is taught each semester.
Teacher's information

The groups/topics for a given semester will be announced via email before the start of seminar group enrolment and they will be filled to this page.

At the moment, the following groups are open for Autumn 2024:

  • 1. 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
  • 2. PB173/KDLP Kernel Development Learning Pipeline (Red Hat – Radomír Vrbovský, Carlos Maiolino, Izabela Bakollari, Vratislav Bendel; in English)
    The course aims to show students the specifics of developing the Linux kernel. For more information, see fall2024-muni.kdlp.underground.software/.
  • 3. PB173/Qt Multiplatform programming using C++ and the Qt framework (Miroslav Jaroš; in Czech)

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, Spring 2025.
  • Enrolment Statistics (Autumn 2024, recent)
  • Permalink: https://is.muni.cz/course/fi/autumn2024/PB173