Studia Podyplomowe Inżynieria Oprogramowania i Narzędzia Biznesu Program studiów (od roku akademickiego 2017/2018)

Program studiów obejmuje następujące zagadnienia:

  • Systemy operacyjne Windows i Linux (15 godzin wykładu + 15 godzin konwersatorium),
  • Administracja Linux albo Administracja Windows (15 godzin wykładu + 15 godzin konwersatorium),
  • Inżynieria oprogramowania (15 godzin wykładu + 15 godzin konwersatorium),
  • Relacyjne bazy danych (15 godzin wykładu + 30 godzin konwersatorium),
  • Programowanie obiektowe w języku Java (30 godzin wykładu + 30 godzin konwersatorium),
  • Współczesne kierunki informatyki:
    1. Obliczalność algorytmów (6 godzin wykładu),
    2. Złożoność algorytmów (6 godzin wykładu),
    3. Kryptografia (6 godzin wykładu),
    4. Systemy rozproszone (6 godzin wykładu),
    5. Systemy sztucznej inteligencji (6 godzin wykładu),
  • Wybrane zagadnienia informatyki (jeden przedmiot do wyboru, 30 godzin konwersatorium):
    1. Tworzenie aplikacji internetowych,
    2. Sieci komputerowe,
    3. SQL Serwer,
    4. Java - programowanie zaawansowane,
    5. Systemy rozproszone,
  • Projektowanie oprogramowania (10 godzin wykładu + 10 godzin konwersatorium).

Opis przedmiotów

Systemy operacyjne Windows i Linux

Metody instalacji i aktualizacji systemów Windows i Linux, podstawowe narzędzia administracyjne, zarządzanie użytkownikami w grupie roboczej, profile sprzętowe, konfiguracja ustawień sieciowych, konfiguracja drukarek sieciowych, system plików NTFS i zarządzanie dyskami, zarządzanie prawami do zasobów, sprawdzenie wydajności systemu, narzędzia i metody zapewnienia niezawodności, rejestr systemowy, WSL (Windows Subsystem for Linux).

Administracja Windows

Podstawowe pojęcia z zakresu sieci komputerowych, Active Directory, Administracja domeną, rozproszony system plików, tworzenie drzew DFS, usługi terminalowe (Terminal Services), wirtualne sieci prywatne (VPN), administracja serwerem IIS, zaawansowane administrowanie systemami desktopowych Windows 10 oraz wersji serwerowych Windows Serwer 2008, Windows Server 2016 za pomocą języka skryptowego PowerShell,  użycie WSL w codziennej pracy administratora Windows.

Administracja Linux

Wybór początkowego sposobu partycjonowania dysków, zarządzanie dyskami, instalowanie dodatkowego oprogramowania i łatek, poszczególne fazy uruchamiania systemu, kontrolowanie tego procesu, autentykacja użytkowników, konfigurowanie Ąródeł z których są pobierane informacje o kontach użytkowników, konfigurowanie interfejsów sieciowych do łączności z Internetem, serwery podstawowych usług sieciowych (DNS, poczta, NFS, NIS), narzędzia wspomagające śledzenie pracy systemu, WSL (Windows Subsystem for Linux).

Inżynieria oprogramowania

Zadania inżynierii oprogramowania, problemy skali w produkcji oprogramowania. Zagadnienia organizacyjne - organizacja projektu i komunikacji. Fazy rozwoju oprogramowania: specyfika, analiza, projektowanie architektury, projktowanie szczegółowe, implementacja, testowanie, wdrożenie. Wprowadzenie do modelowania obiektowego - podstawowe techniki modelowania struktury i zachowania. Wzorce w architekturze i projektowaniu szczegółowym . Podstawowe metody implementacji modeli obiektowych. Narzędzia kontroli wersji i narzędzia współpracy grupowej. Podstawy testowania systemów. Wprowadzenie do zarządzania projektem.

Relacyjne bazy danych

Architektury systemów baz danych, model relacyjny danych, podstawy projektowania relacyjnych baz danych, model związków encji, normalizacja relacji, język SQL, odmiany języka SQL w popularnych systemach serwerowych (Oracle, Microsoft SQL Server), przetwarzanie transakcyjne, poziomy izolacji transakcji, struktura fizyczna bazy danych, indeksy, optymalizacja zapytań, podstawy programowania procedur składowanych, funkcji i wyzwalaczy, podstawowe zadania administracyjne na przykładzie systemu Microsoft SQL Server, elementy baz danych na SQL.

Programowanie obiektowe w języku Java

Podstawy programowania i przegląd języków programowania, proces interpretacji i kompilacji, paradygmaty programowania i podstawy implementacji algorytmów. Podstawy programowania obiektowego (klasy, obiekty, dziedziczenie, polimorfizm, metody wirtualne). Podstawy języka Java: słowa kluczowe języka, typy danych, instrukcje i operatory, obiektowość języka Java. Programowanie w języku Java: zagadnienia kompilacji klas, maszyny wirtualnej Javy (JVM), uruchamiania aplikacji, wyszukiwania i ładowania klas, tworzenia oraz wykorzystywania pakietów, korzystania z dokumentacji oraz zasobów internetowych. Praktyczne wykorzystanie języka Java: struktury danych w Javie, obsługa wyjątków, wejście/wyjście, tworzenie graficznego interfejsu użytkownika (JavaFX), typy generyczne, programowanie wielowątkowe w Javie, nowe elementy języka Java 8, środowisko programistyczne IntelliJ.

Współczesne kierunki informatyki: Obliczalność algorytmów

Podstawowe pojęcia z zakresu teorii obliczalności i rozstrzygalności, Maszyna Turinga - model obliczeń, zbiory rekurencyjne i rekurencyjnie przeliczalne, funkcje rekurencyjne, problemy nierozstrzygalne, problem "stopu" dla maszyn, problem odpowiedniości Posta, twierdzenia Rice'a, filozoficzne aspekty twierdzenia Rice'a.

Współczesne kierunki informatyki: Złożoność algorytmów

Pojęcie algorytmu, złożoność obliczeniowa, przykłady projektowania i analizy algorytmów, pojęcie problemu trudnego obliczeniowo, transformacja wielomianowa jako narzędzie dowodzenia trudności obliczeniowej, klasy problemów P, NP, NPC, przykłady problemów NP-zupełnych, przykład dowodu NP-zupełności, metody rozwiązywania problemów trudnych, przykład wielomianowej strategii aproksymacyjnej dla problemu komiwojażera.

Współczesne kierunki informatyki: Kryptografia

Kryptologia, kryptografia, kryptoanaliza, historia i współczesność, elementy teorii liczb, klasyczne systemy kryptograficzne, kody z publicznym kluczem, łamanie kodów i jego złożoność obliczeniowa.

Współczesne kierunki informatyki: Systemy rozproszone

Systemy rozproszone (definicja, oceny jakościowe i ilościowe, aplikacja rozproszona a program sekwencyjny, klasyfikacje równoległości i współbieżności), sieci komputerowe (ISO i TCP/IP, technologie LAN i MAN, Ethernet i FDDI, ATM), sieć internet (architektura i protokoły).

Współczesne kierunki informatyki: Systemy sztucznej inteligencji

Wprowadzenie do problematyki sztucznej inteligencji, podstawowe metody reprezentacji wiedzy i wnioskowania, systemy ekspertowe i oprogramowanie do ich projektowania i implementacji, wykorzystanie sieci neuronowych, algorytmów genetycznych i metod rozpoznawania obrazów, zastosowania sztucznej inteligencji (przemysłowe systemy ekspertowe czasu rzeczywistego, systemy wizyjne, robotyka, systemy przetwarzania języka naturalnego).

Tworzenie aplikacji internetowych

Język HTML i protokół HTTP, elementy interaktywne działające w przeglądarce: applety Java, kontrolki ActiveX, skrypty JavaScript i VBScript, interaktywność po stronie serwera: programy CGI, servlety Java, strony SHTML, PHP, ASP, bezpieczeństwo w sieci: certyfikaty kryptograficzne, ograniczanie dostępu do stron hasłem lub adresem IP, przyszłość WWW: język XML, inne języki i standardy rozszerzające XML, przykłady zastosowań, "kurs przeżycia" języków perl i PHP na potrzeby ćwiczeń, instalacja i konfiguracja programów-demonów WWW na przykładzie serwerów Apache (Linux) oraz IIS (MS Windows).

Sieci komputerowe

Protokoły Internetu, modele warstwowe, programowe i sprzętowe składniki sieci, topologie LAN, podstawowe urządzenia, technologie LAN (Ethernet, ramki Ethernet II, projekt IEEE802, IEEE802.3, adresy MAC, sieci bezprzewodowe), protokół IPv4, ICMP - Internet Control Message Protocol, UDP - User Datagram Protocol, TCP - Transmission Control Protocol, DHCP - Dynamic Host Configuration Protocol, protokół IPv6, podstawy protokołów routowania, DNS, działanie przełączników, STP, sieci VLAN, bezpieczeństwo w sieciach komputerowych (mechanizmy szyfrowania, mechanizmy sprawdzania autentyczności i integralności, protokoły warstwy aplikacji oraz sieci, filtry/zapory sieciowe).

SQL Serwer

Architektura Microsoft SQL Serwera, system bezpieczeństwa, podsystemy wejścia wyjścia, fizyczna struktura bazy danych, mechanizmy dzienników transakcji, strategie kopii bezpieczeństwa, odtwarzanie baz danych, planowanie i tworzenie indeksów, Transact-SQL, procedury składowane i wyzwalacze, implementowanie integralności danych, zarządzanie transakcjami i blokadami, poziomy izolacji transakcji współbieżnych, automatyzacja zadań administracyjnych, wymiana danych między różnymi systemami, monitorowanie i dostrajanie systemu, rozproszone bazy danych, planowanie i implementowanie replikacji.

Java - programowanie zaawansowane

Rozszerzenie podstaw programowania w języku Java (zaawansowana obsługa wejścia/wyjścia; klasy użytkowe w tym kolekcje, kolekcje niemodyfikowalne, kolekcje bezpieczne wątkowo; obsługa czasu; lokalizacja programów; zaawansowana obsługa sytuacji wyjątkowych). Tworzenie zaawansowanych aplikacji okienkowych przy wykorzystaniu JavaFX. Tworzenie aplikacji webowych (servlety, JSP, Apache Tomcat, JavaBeans, użycie gotowych frameworków). Wstrzykiwanie zależności. Obsługa baz danych z poziomu kodu źródłowego Javy. Efektywne użycie języka Java (np. jakie możliwości daje użycie Enumów). Wykorzystanie mechanizmów strumieni i elementów programowania funkcyjnego wprowadzonych w Java 1.8.

Systemy rozproszone

Sieć internet (trasowanie, multicasting), sieci Frame Relay (koncepcja sieci wirtualnych, komutacja pakietów, adresacja, fragmentacja pakietów), sieci ATM jako realizacja sieci B-ISDN (architektura, struktura komórek, koncepcja ścieżek i kanałów wirtualnych, klasy połączeń), szerokopasmowe zintegrowane sieci SDH (synchroniczny moduł transportowy, odwzorowanie sygnałów cyfrowych w kontenerach, urządzenia, topologie), sieci optyczne (transmisja światłowodowa, urządzenia i protokoły), sieci radiowe i satelitarne, ochrona danych w sieciach komputerowych.

Projektowanie oprogramowania

Cel modelowania biznesowego, podstawowe pojęcia, oszacowanie kosztów (Activity-based costing, Activity-based management), architektura biznesu, wzorce projektowe, rozwój e-biznesu, C2B, B2B, B2C, C2C, "najlepsze praktyki" inżynierii oprogramowania, technologia obiektowa, wizualizacja modelu - UML, zorientowane obiektowo projektowanie systemu zgodnie z wybranym procesem, zarządzanie cyklem produkcyjnym (Git, GitHub, Bitbucket, Jira).