Systémové programování

Tato stránka vychází z podkladů pro tištěné studijní plány (tzv. Karolinku).

Garantující pracoviště: Katedra distribuovaných a spolehlivých systémů Koordinátor specializace: doc. Ing. Lubomír Bulej, Ph.D.

Specializace Systémové programování je zaměřena na pochopení principů a rozvoj znalostí a dovedností potřebných pro návrh, vývoj a údržbu efektivního systémového software, který poskytuje základní stavební prvky pro software aplikační. Tematické okruhy proto zahrnují architektury počítačů, operační systémy, paralelní a distribuované systémy a middleware. Důraz je kladen také na hlubší znalost moderních programovacích jazyků používaných pro vývoj systémového software a schopnost používat moderní vývojové nástroje a postupy.

Společné povinné předměty programu Informatika

Povinné předměty společné pro všechny specializace jsou uvedeny v předchozí části.

Povinné předměty specializace

kódPředmětKredityZSLS
NSWI004Operační systémy 42/1 KZ
NPRG041Programování v C++ 52/2 Z+Zk
NSWI143Architektura počítačů 32/0 Zk
NSWI090Počítačové sítě 32/0 Zk
NSWI098Principy překladačů 62/2 Z+Zk
NSWI163Úvod do middleware 10/1 KZ
NSWI162Sémantika programů 10/1 Z
NPRG054Vývoj vysoce výkonného software 62/2 Z+Zk
NPRG042Programování v paralelním prostředí 62/2 Z+Zk

Povinně volitelné předměty

Podmínkou pro přihlášení ke státní závěrečné zkoušce je získání celkem 27 kreditů za všechny povinně volitelné předměty.

Povinně volitelné předměty – skupina 1

Podmínkou pro přihlášení ke státní závěrečné zkoušce je získání 5 kreditů za předměty z této skupiny.

kódPředmětKredityZSLS
NPRG035Programování v jazyce C# 52/2 Z+Zk
NPRG013Programování v jazyce Java 52/2 Z+Zk

Povinně volitelné předměty – skupina 2

Podmínkou pro přihlášení ke státní závěrečné zkoušce je získání 5 kreditů za předměty z této skupiny.

kódPředmětKredityZSLS
NPRG051Pokročilé programování v C++ 52/2 Z+Zk
NPRG038Pokročilé programování v jazyce C# 52/2 Z+Zk
NPRG021Pokročilé programování v jazyce Java 52/2 Z+Zk

Povinně volitelné předměty – skupina 3

Podmínkou pro přihlášení ke státní závěrečné zkoušce je získání 7 kreditů za předměty z této skupiny.

kódPředmětKredityZSLS
NSWI154Nástroje pro vývoj software 20/2 Z
NPRG043Doporučené postupy v programování 52/2 KZ
NPRG024Návrhové vzory 30/2 KZ
NSWI041Úvod do softwarového inženýrství 52/2 Z+Zk
NSWI054Softwarové inženýrství pro spolehlivé systémy 30/2 Z
NSWI130Architektury softwarových systémů 52/2 Z+Zk

Povinně volitelné předměty – skupina 4

Podmínkou pro přihlášení ke státní závěrečné zkoušce je získání 10 kreditů za předměty z této skupiny.

kódPředmětKredityZSLS
NMAI055Matematická analýza 2 52/2 Z+Zk
NPRG005Neprocedurální programování 52/2 Z+Zk
NPFL054Úvod do strojového učení v systému R 52/2 Z+Zk
NPFL129Úvod do strojového učení v Pythonu 52/2 Z+Zk
NAIL120Úvod do umělé inteligence 52/2 Z+Zk
NPGR035Strojové učení v počítačovém vidění 52/2 Z+Zk
NPGR002Digitální zpracování obrazu 43/0 Zk
NPGR036Počítačové vidění 52/2 Z+Zk
NPGR003Základy počítačové grafiky 52/2 Z+Zk
NPGR019Realtime grafika na GPU 52/2 Z+Zk
NAIL028Úvod do robotiky 52/2 Z+Zk
NPRG037Programování mikrokontrolerů 52/2 Z+Zk
NPGR038Základy vývoje počítačových her 52/2 Z+Zk
NDMI100Úvod do kryptografie 32/0 Zk

Doporučený průběh studia

Doporučený průběh studia zahrnuje všechny povinné předměty a některé další povinně volitelné nebo volitelné předměty. Posluchač si ho musí sám doplnit dalšími povinně volitelnými a volitelnými předměty podle vlastního výběru. Povinné předměty jsou v tabulkách doporučeného průběhu studia vyznačeny tučně, povinně volitelné běžným písmem a volitelné kurzívou.

1. rok studia

Doporučený průběh je společný pro všechny specializace, viz předchozí část.

2. rok studia

kódPředmětKredityZSLS
NTIN061Algoritmy a datové struktury 2 52/2 Z+Zk
NAIL062Výroková a predikátová logika 52/2 Z+Zk
NSWI004Operační systémy 42/1 KZ
NPRG041Programování v C++ 52/2 Z+Zk
 Programování v jazyce C#/Java 52/2 Z+Zk
NJAZ074Anglický jazyk pro středně pokročilé III110/2 Z
NTVY016Tělesná výchova III310/2 Z
NTIN071Automaty a gramatiky 52/2 Z+Zk
NMAI059Pravděpodobnost a statistika 1 52/2 Z+Zk
NSWI090Počítačové sítě 32/0 Zk
NSWI143Architektura počítačů 32/0 Zk
 Pokročilé programování v jazyce C++/C#/Java 52/2 Z+Zk
NPRG045Ročníkový projekt 40/1 Z
NJAZ090Anglický jazyk pro středně pokročilé IV110/2 Z
NJAZ091Anglický jazyk — zkouška pro bakaláře210/0 Zk
NTVY017Tělesná výchova IV310/2 Z
 Povinně volitelné předměty    
 Volitelné předměty    

3. rok studia

kódPředmětKredityZSLS
NDMI011Kombinatorika a grafy 1 52/2 Z+Zk
NDBI025Databázové systémy 52/2 Z+Zk
NSWI098Principy překladačů 62/2 Z+Zk
NSWI163Úvod do middleware 10/1 KZ
NSWI162Sémantika programů 10/1 Z
NPRG054Vývoj vysoce výkonného software 62/2 Z+Zk
NPRG042Programování v paralelním prostředí 62/2 Z+Zk
NSZZ031Vypracování a konzultace bakalářské práce 60/4 Z
 Povinně volitelné předměty    
 Volitelné předměty    

1 Výuka anglického jazyka NJAZ070, NJAZ072, NJAZ074, NJAZ090 v rozsahu 0/2 v každém semestru je určena pro středně pokročilé a pokročilé. Pro začátečníky a mírně pokročilé jsou určeny předměty NJAZ071, NJAZ073, NJAZ075, NJAZ089 s rozsahem výuky 0/4 v každém semestru.

2 Zkoušku z anglického jazyka NJAZ091 je možné absolvovat v zimním nebo v letním semestru.

3 Místo jednoho z předmětů NTVY014, NTVY015, NTVY016 a NTVY017 je možné si zapsat letní výcvikový kurz NTVY018 nebo zimní výcvikový kurz NTVY019. Tyto kurzy může student absolvovat kdykoli v průběhu bakalářského studia.

Požadavky znalostí ke státní závěrečné zkoušce

V první části studijních plánů programu jsou popsány okruhy státní zkoušky společné pro všechny specializace. Studenti specializace Systémové programování budou navíc zkoušeni v rámci tématických oblastí uvedených níže. Pro každou oblast je uveden orientační přehled témat a předměty v rámci specializace, které danou oblast pokrývají. V případě tématického překryvu s požadavky ze společné části závěrečné zkoušky se v rámci specializace očekává hlubší pochopení problematiky. Detailnější přehled požadavků odrážející požadovanou hloubku znalostí bude k dispozici v elektronické podobě v dostatečném předstihu před konáním státní závěrečné zkoušky.

1. Architektura počítačů
Výkonnost počítače a procesoru, metriky a omezení. Zpracování instrukcí procesorem, paralelismus, predikce a spekulace. Architektura paměťového subsystému, architektura cache. Multi-core a multi-socket systémy, koherence cache. Komunikace se zařízeními.

Související předměty:

NSWI143 Architektura počítačů
NPRG054 Vývoj vysoce výkonného software

2. Operační systémy
Správa procesů a vláken, plánování, komunikace, synchronizace. Správa paměti, stránkování, správa paměti uvnitř procesů, sdílení paměti. Souborové systémy, koncepty a rozhraní, typické diskové struktury. Správa periferií, ovladače zařízení.

Související předměty:

NSWI004 Operační systémy

3. Počítačové sítě
Linková vrstva, adresace v Ethernetu, VLAN. Síťová vrstva, adresace v IPv4 a IPv6, statické směrování, NAT, IP tunely, VPN. Transportní vrstva, adresace v TCP a UDP, spolehlivost, řízení toku. Aplikační rozhraní a abstrakce pro síťovou komunikaci. Zabezpečení komunikace, autentizace, šifrování.

Související předměty:

NSWI090 Počítačové sítě

4. Překladače a programovací jazyky
Architektura překladače, AOT a JIT překlad. Vnitřní reprezentace programu. Optimalizace programu překladačem. Generování kódu pro cílový procesor.

Související předměty:

NSWI098 Principy překladačů

Správa paměti v běhových prostředích, životní cyklus objektů. Polymorfismus, generické programování, typová inference. Významné prvky standardních knihoven a jejich aplikace.

Související předměty:

Témata jsou pokryta povinnými a povinně volitelnými předměty zaměřenými na programovací jazyky. V rámci specializace je nutné absolvovat minimálně 3 takové předměty:

NPRG041 Programování v C++
V rámci PV předmětů skupiny 1: NPRG013 Programování v jazyce Java nebo NPRG035 Programování v jazyce C#.
V rámci PV předmětů skupiny 2: NPRG051 Pokročilé programování v C++ nebo NPRG021 Pokročilé programování v jazyce Java nebo NPRG038 Pokročilé programování v jazyce C#.

5. Návrh a tvorba software
Principy objektového návrhu, návrh API, tříd a metod, návrhové vzory.

Související předměty:

Téma prostupuje řadou povinných a povinně volitelných předmětů zaměřených na programování. Specificky v tomto případě se očekává doplnění znalostí absolvováním vhodné kombinace PV předmětů ze skupiny 3.

NPRG043 Doporučené postupy v programování nebo NPRG024 Návrhové vzory
NSWI041 Úvod do softwarového inženýrství nebo NSWI130 Architektury softwarových systémů nebo NSWI054 Softwarové inženýrství pro spolehlivé systémy

Paralelní programování, paměťový model, atomické operace a neblokující datové struktury.

Související předměty:

NPRG042 Programování v paralelním prostředí

Správa verzí, systémy pro sestavování software, nástroje pro testování software.

Související předměty:

NSWI154 Nástroje pro vývoj software

V rámci specializace se očekává, že získání potřebných znalostí a dovedností v této oblasti bude primárně výsledkem absolvování předmětů, u kterých je tvorba programů důležitým aspektem hodnocení. Základem jsou povinné a povinně volitelné předměty (skupiny 1 a 2) věnované programovacím jazykům doplněné o vhodný výběr povinně volitelných předmětů ze skupiny 3.