Opcjonalnie: Algorytmy rozproszone. Podstawy obliczalności i problemy nierozstrzygalne. Klasy złożoności P i NP. Teoria automatów i języki formalne. Zaawansowana analiza algorytmiczna. Algorytmy kryptograficzne. Algorytmy geometryczne. Algorytmy równoległe.
Umiejętności: Konstruowanie algorytmów z wykorzystaniem podstawowych technik algorytmicznych. Analiza złożoności algorytmów
2. Architektura systemów komputerowych
Obowiązkowo: Technika cyfrowa i systemy cyfrowe. Maszynowa reprezentacja danych i realizacji operacji arytmetycznych. Organizacja komputera na poziomie asemblera. Organizacja i architektura systemów pamięci. Interfejsy i komunikacja. Organizacja CPU. Wieloprocesorowość i architektury alternatywne. Opcjonalnie: Podnoszenie wydajności. Architektura zorientowana na sieci i
systemy rozproszone. Urządzenia zewnętrzne. Projektowanie procesorów. Wydajność.
Umiejętności: Projektowanie prostych układów sekwencyjnych i
kombinacyjnych. Obliczanie reprezentacji liczb całkowitych i rzeczywistych oraz wykonywanie podstawowych operacji arytmetycznych na tych reprezentacjach. Pisanie prostych programów na poziomie asemblera (instrukcje warunkowe, pętle, operacje na liczbach całkowitych, tablice).
3. Systemy operacyjne
Obowiązkowo: Przegląd systemów operacyjnych. Zasady działania systemów operacyjnych. Współbieżność. Szeregowanie zadań. Zarządzanie pamięcią.
Opcjonalnie: Zarządzanie urządzeniami. Bezpieczeństwo i ochrona. Systemy plików. Systemy czasu rzeczywistego i wbudowane. Tolerancja uszkodzeń. Ocena wydajności systemów. Skrypty.
Umiejętności: Rozwiązywanie klasycznych problemów synchronizacji
(producent-konsument, czytelnicy-pisarze, pięciu filozofów). Dobieranie algorytmu szeregowania zadań do specyfiki aplikacji.
4. Technologie sieciowe
Obowiązkowo: Wprowadzenie do sieci komputerowych. Komunikacja i sieci komputerowe. Bezpieczeństwo w sieciach komputerowych i kryptografia. Technologie udostępniania informacji w sieciach komputerowych. Budowa aplikacji sieciowych.
Opcjonalnie: Zarządzanie siecią. Kompresja i dekompresja. Technologie dla
danych multimedialnych. Systemy bezprzewodowe i mobilne. Sieci LAN i WAN. Ocena wydajności sieci. Przesyłanie danych.
Umiejętności: Instalowanie prostej sieci z dwoma klientami i pojedynczym serwerem z wykorzystaniem narzędzi typu DHCP. Korzystanie z kluczy i pakietów PGP. Budowanie prostych interakcyjnych aplikacji internetowych działających w oparciu o bazę danych.
5. Języki i paradygmaty programowania
Obowiązkowo: Paradygmaty programowania. Programowanie obiektowe.
5