Degree Plans - System Programming
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
Code | Subject | Credits | Winter | Summer | |
NSWX004 | Operating systems | 4 | 2/1 MC | — | |
NPRX041 | Programming in C++ | 5 | 2/2 C+Ex | — | |
NSWI143 | Computer Architecture | 3 | — | 2/0 Ex | |
NSWI098 | Compiler Principles | 6 | 2/2 C+Ex | — | |
NSWI163 | Introduction to Middleware | 1 | 0/1 MC | — | |
NSWI162 | Program semantics | 1 | 0/1 C | — | |
NPRG054 | High Performance Software Development | 6 | — | 2/2 C+Ex | |
NPRG042 | Programming in Parallel Environment | 6 | — | 2/2 C+Ex | |
NSWI090 | Computer Networks | 3 | — | 2/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.
Code | Subject | Credits | Winter | Summer | |
NPRX035 | Programming in C# | 5 | 2/2 C+Ex | — | |
NPRX013 | Programming in Java | 5 | 2/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.
Code | Subject | Credits | Winter | Summer | |
NPRX051 | Advanced Programming in C++ | 5 | — | 2/2 C+Ex | |
NPRX038 | Advanced Programming in C# | 5 | — | 2/2 C+Ex | |
NPRX021 | Advanced Programming in Java | 5 | — | 2/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.
Code | Subject | Credits | Winter | Summer | |
NSWI154 | Software Development Tools | 2 | 0/2 C | — | |
NPRX043 | Recommended Programming Practices | 5 | — | 2/2 MC | |
NPRG024 | Design Patterns | 3 | — | 0/2 MC | |
NSWI041 | Introduction to Software Engineering | 5 | — | 2/2 C+Ex | |
NSWI054 | Software Engineering for Dependable Systems | 3 | — | 0/2 C | |
NSWI130 | Software System Architectures | 5 | 2/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.
Code | Subject | Credits | Winter | Summer | |
NMAX055 | Mathematical Analysis 2 | 5 | 2/2 C+Ex | — | |
NPRX005 | Non-procedural Programming | 5 | — | 2/2 C+Ex | |
NPFL054 | Introduction to Machine Learning | 5 | 2/2 C+Ex | — | |
NAIL120 | Introduction to Artificial Intelligence | 5 | — | 2/2 C+Ex | |
NPGR035 | Machine learning in computer vision | 5 | 2/2 C+Ex | — | |
NPGR002 | Digital Image Processing | 4 | 3/0 Ex | — | |
NPGR036 | Computer Vision | 5 | — | 2/2 C+Ex | |
NPGR003 | Introduction to Computer Graphics | 5 | 2/2 C+Ex | — | |
NPGR019 | Realtime Graphics on GPU | 5 | — | 2/2 C+Ex | |
NAIX028 | Introduction to Robotics | 5 | 2/2 C+Ex | — | |
NPRX037 | Microcontroller Programming | 5 | 2/2 C+Ex | — | |
NPGR038 | Introduction to computer game development | 5 | — | 2/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
Code | Subject | Credits | Winter | Summer | |
NTIX061 | Algorithms and Data Structures 2 | 5 | 2/2 C+Ex | — | |
NDBX025 | Database Systems | 5 | 2/2 C+Ex | — | |
NAIX062 | Propositional and Predicate Logic | 5 | 2/2 C+Ex | — | |
NSWX004 | Operating Systems | 4 | 2/1 MC | — | |
NPRX041 | Programming in C++ | 5 | 2/2 C+Ex | — | |
NPRX... | Programming in C#/Java | 5 | 2/2 C+Ex | — | |
NTIX071 | Automata and Grammars | 5 | — | 2/2 C+Ex | |
NMAX059 | Probability and Statistics 1 | 5 | — | 2/2 C+Ex | |
NSWI143 | Computer Architecture | 3 | — | 2/0 Ex | |
NPRX... | Advanced Programming in C++/C#/Java | 5 | — | 2/2 C+Ex |
Third year
Code | Subject | Credits | Winter | Summer | |
NDMX011 | Combinatorics and Graph Theory 1 | 1 | 5 | 2/2 C+Ex | — |
NSWI098 | Compiler Principles | 6 | 2/2 C+Ex | — | |
NSWI163 | Introduction to Middleware | 1 | 0/1 MC | — | |
NSWI162 | Program semantics | 1 | 0/1 C | — | |
NPRG045 | Individual Software Project | 4 | 0/1 C | — | |
Elective courses | |||||
Optional courses | |||||
NSWI090 | Computer Networks | 3 | — | 2/0 Ex | |
NPRG054 | High Performance Software Development | 6 | — | 2/2 C+Ex | |
NPRG042 | Programming in Parallel Environment | 6 | — | 2/2 C+Ex | |
NSZZ031 | Bachelor Thesis | 6 | — | 0/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.