Degree Plans - System Programming

Coordinating Department: Department of Distributed and Dependable Systems Specialization Coordinator: doc. Ing. Lubomír Bulej, Ph.D.

The System Programming specialization focuses on the prerequisites for the design, development, and maintenance of efficient system software, which provides the foundation for application software. Topics therefore include computer architecture, operating systems, parallel and distributed systems, and middleware. In System Programming emphasis is put on a deeper understanding of modern programming languages used for the development of system software, and on the ability to use modern development tools and approaches.

Common obligatory courses in Computer Science

Common obligatory courses for all specializations are listed above in the section giving general information.

4.1 Obligatory Courses

CodeSubjectCreditsWinterSummer
NSWX004Operating systems 42/1 MC
NPRX041Programming in C++ 52/2 C+Ex
NSWI143Computer Architecture 32/0 Ex
NSWI098Compiler Principles 62/2 C+Ex
NSWI163Introduction to Middleware 10/1 MC
NSWI162Program semantics 10/1 C
NPRG054High Performance Software Development 62/2 C+Ex
NPRG042Programming in Parallel Environment 62/2 C+Ex
NSWI090Computer Networks 32/0 Ex

4.2 Elective Courses

A prerequisite for taking either part of the State Final Exam is to have obtained at least 27 credits from elective courses overall.

Elective courses – Group 1

A prerequisite for taking either part of the State Final Exam is to have obtained at least 5 credits from courses in this group.

CodeSubjectCreditsWinterSummer
NPRX035Programming in C# 52/2 C+Ex
NPRX013Programming in Java 52/2 C+Ex

Elective courses – Group 2

A prerequisite for taking either part of the State Final Exam is to have obtained at least 5 credits from courses in this group.

CodeSubjectCreditsWinterSummer
NPRX051Advanced Programming in C++ 52/2 C+Ex
NPRX038Advanced Programming in C# 52/2 C+Ex
NPRX021Advanced Programming in Java 52/2 C+Ex

Elective courses – Group 3

A prerequisite for taking either part of the State Final Exam is to have obtained at least 7 credits from courses in this group.

CodeSubjectCreditsWinterSummer
NSWI154Software Development Tools 20/2 C
NPRX043Recommended Programming Practices 52/2 MC
NPRG024Design Patterns 30/2 MC
NSWI041Introduction to Software Engineering 52/2 C+Ex
NSWI054Software Engineering for Dependable Systems 30/2 C
NSWI130Software System Architectures 52/2 C+Ex

Elective courses – Group 4

A prerequisite for taking either part of the State Final Exam is to have obtained at least 10 credits from courses in this group.

CodeSubjectCreditsWinterSummer
NMAX055Mathematical Analysis 2 52/2 C+Ex
NPRX005Non-procedural Programming 52/2 C+Ex
NPFL054Introduction to Machine Learning 52/2 C+Ex
NAIL120Introduction to Artificial Intelligence 52/2 C+Ex
NPGR035Machine learning in computer vision 52/2 C+Ex
NPGR002Digital Image Processing 43/0 Ex
NPGR036Computer Vision 52/2 C+Ex
NPGR003Introduction to Computer Graphics 52/2 C+Ex
NPGR019Realtime Graphics on GPU 52/2 C+Ex
NAIX028Introduction to Robotics 52/2 C+Ex
NPRX037Microcontroller Programming 52/2 C+Ex
NPGR038Introduction to computer game development 52/2 C+Ex

4.3 Recommended Course of Study

The recommended course of study gives all the obligatory courses, while only some elective courses and optional courses are listed. Students need to choose other such courses themselves. Obligatory courses are printed in boldface, elective courses in roman, and optional courses in italics.

First year

Common to all specializations – see under general information above.

Second year

CodeSubjectCreditsWinterSummer
NTIX061Algorithms and Data Structures 2 52/2 C+Ex
NDBX025Database Systems 52/2 C+Ex
NAIX062Propositional and Predicate Logic 52/2 C+Ex
NSWX004Operating Systems 42/1 MC
NPRX041Programming in C++ 52/2 C+Ex
NPRX...Programming in C#/Java 52/2 C+Ex
NTIX071Automata and Grammars 52/2 C+Ex
NMAX059Probability and Statistics 1 52/2 C+Ex
NSWI143Computer Architecture 32/0 Ex
NPRX...Advanced Programming in C++/C#/Java 52/2 C+Ex

Third year

CodeSubjectCreditsWinterSummer
NDMX011Combinatorics and Graph Theory 1152/2 C+Ex
NSWI098Compiler Principles 62/2 C+Ex
NSWI163Introduction to Middleware 10/1 MC
NSWI162Program semantics 10/1 C
NPRG045Individual Software Project 40/1 C
 Elective courses    
 Optional courses    
NSWI090Computer Networks 32/0 Ex
NPRG054High Performance Software Development 62/2 C+Ex
NPRG042Programming in Parallel Environment 62/2 C+Ex
NSZZ031Bachelor Thesis 60/4 C
 Elective courses    
 Optional courses    

1 In 2019/2020 the courses Mathematical Analysis 2 and Combinatorics and Graph Theory 1 are taught in the summer semester for students who started their studies in previous years. For students starting their studies in 2019/20, the courses will be taught in the winter semester of 2020/21.

4.4 State Final Exam

The State Final Exam knowledge requirements common to all specializations are described in the first section of this chapter (General Information on Computer Science bachelor's degree plans). Students of the System Programming specialization will be further tested according to the list below.

1. Computer Architecture
Fundamentals of computer performance (basic metrics and their limitations, relation to program performance). Instruction execution (scalar and superscalar pipelines, static and dynamic instruction scheduling, speculation, hyper-threading, SIMD). Computer memory subsystem architecture (locality of access, caches, cache miss model, cache architectures and their impact on cache performance). Multi-processor systems (impact on computer architecture, cache coherence and its impact on performance, coherence protocols, NUMA). Peripheral device support (communication with devices, interrupts, DMA).

2. Operating Systems
Process and thread management (process and thread state, context switching and its overhead, scheduling on multiprocessors). Communication and synchronization (race condition, synchronization objects and their application in solving synchronization problems, lock implementation, deadlock). Memory management and sharing (address spaces, address translation at HW and SW level, data structures for address translation, fault handling, page sharing, memory mapped files and associated interfaces). File management (concepts and associated interfaces, typical on-disk structures, examples of specific file systems). Device management (interrupts in operating systems, interrupt handling at HW and SW level, device drivers).

3. Computer Networks
Connected and unconnected communication, reliable and unreliable connections. Link layer, addressing, connections at the physical and link layers, VLAN. Network layer, addressing in IPv4 and IPv6, static routing, routers and gateways, NAT, IP tunnels, VPN. Transport layer, addressing and ports in TCP and UDP, reliability, flow control. Service protocls, ARP, DHCP, ICMP. Application interfaces and abstractions, communication security, authentication, encryption.

4. Compilers and Programming Languages
Compiler architecture, AOT and JIT compilation. Lexical and syntactic analysis, internal program representation, basic blocks. Program optimization, automatic vectorization, impact of object-oriented programming on performance. Object lifetime, allocation and initialization (static, stack, heap), constructors, object deallocation (explicit, garbage collection, automatic), destructors, finalizers. Standard libraries and their prominent elements (containers, iterators, algorithms, ranges), common container types (properties and applications), implementing custom containers.

5. Software Design and Construction
API, method, and class design (cohesion, coupling, abstraction, encapsulation, inheritance, composition, polymorphism, immutability). Object-oriented design principles (SOLID) and their applications, application of design principles in design patterns. Parallel programming (speed-up, decomposition, dependencies, load balancing, memory model), atomic operations and non-blocking data structures, design patterns for parallel programs and algorithms. Version management: concepts (version, commit, change set), graph of version, conflict resolution, local/distributed version management. Building software: concepts (artefacts, tasks, dependencies, build targets) and their representation in common build systems. Software testing: unit tests, impact on software design, tools.