semestr I: łącznie 409h, 33 ECTS
Metody algebraiczne informatyki
105h
45h wykładów, 60h ćwiczeń; zakończony egzaminem; 8 ECTS
120h
60h wykładów, 60h ćwiczeń; zakończony egzaminem; 10 ECTS
Analiza matematyczna 1
60h
30h wykładów, 30h ćwiczeń; zakończony zaliczeniem; 5 ECTS
60h
30h wykładów, 30h laboratoriów; zakończony egzaminem; 6 ECTS
Środowisko programisty
30h
30h laboratoriów; zakończony zaliczeniem; 3 ECTS
WF
30h
Kurs BHK
4h
semestr II: łącznie 375h, 33 ECTS
Analiza matematyczna 2
60h
30h wykładów, 30h ćwiczeń; zakończony egzaminem; 6 ECTS
Metody programowania
60h
30h wykładów, 30h laboratoriów; zakończony egzaminem; 6 ECTS
90h
45h wykładów, 45h ćwiczeń; zakończony egzaminem; 8 ECTS
75h
45h wykładów, 30h laboratoriów; zakończony zaliczeniem; 7 ECTS
Inżynieria danych
60h
30h wykładów, 30h laboratoriów; zakończony egzaminem; 6 ECTS
WF
30h
semestr III: łącznie 360h, 31 ECTS
Języki programowania (do wyboru)
60h
razem 60h zajęć; 6 ECTS
Systemy operacyjne
60h
30h wykładów, 30h laboratoriów; zakończony egzaminem; 6 ECTS
Sieci komputerowe
60h
30h wykładów, 30h laboratoriów; zakończony egzaminem; 6 ECTS
Algorytmy i struktury danych 1
60h
30h wykładów, 30h laboratoriów; zakończony zaliczeniem; 5 ECTS
60h
30h wykładów, 30h ćwiczeń; zakończony egzaminem; 6 ECTS
Język obcy
60h
60h lektoratów; zakończony zaliczeniem; 2 ECTS
semestr IV: łącznie 330h, 29 ECTS
Algorytmy i struktury danych 2
60h
30h wykładów, 30h laboratoriów; zakończony egzaminem; 6 ECTS
Programowanie niskopoziomowe
60h
30h wykładów, 30h laboratoriów; zakończony egzaminem; 6 ECTS
60h
30h wykładów, 30h ćwiczeń; zakończony egzaminem; 6 ECTS
Inżynieria oprogramowania
30h
30h laboratoriów; zakończony zaliczeniem; 3 ECTS
Przedmioty fakultatywne (do wyboru)
60h
razem 60h zajęć; 6 ECTS
Język obcy
60h
60h lektoratów; zakończony zaliczeniem; 2 ECTS
semestr V: łącznie 305h, 29 ECTS
Analiza algorytmów
60h
30h wykładów, 30h laboratoriów; zakończony egzaminem; 6 ECTS
Projekt programistyczny 1
30h
30h laboratoriów; zakończony zaliczeniem; 3 ECTS
Przedmioty fakultatywne (do wyboru)
120h
razem 120h zajęć; 12 ECTS
Seminaria (do wyboru)
30h
razem 30h zajęć; 3 ECTS
Język obcy
60h
60h lektoratów; zakończony egzaminem; 4 ECTS
Ochrona własności intelektualnej
5h
5h wykładów; 1 ECTS
semestr VI: łącznie 240+h, 31 ECTS
Projekt programistyczny 2
30h
30h laboratoriów; zakończony zaliczeniem; 3 ECTS
Seminaria (do wyboru)
30h
razem 30h zajęć; 3 ECTS
Przedmioty fakultatywne (do wyboru)
150h
razem 150h zajęć; 15 ECTS
Przedmiot fakultatywny z ekonomii lub psychologii
60h
30h wykładów, 30h ćwiczeń; zakończony zaliczeniem; 5 ECTS
Tutorial
5h
przygotowanie pracy rocznej pod opieką tutora; 5 ECTS
Język programowania C#
Język programowania Java
Język programowania Python
Algebra ogólna i złożoność obliczeniowa
Algorytmika problemów trudnych
Algorytmy teorii liczb
Geometria dyskretna
Metody probabilistyczne w uczeniu maszynowym
Projekt VR (FB Open Academy)
Programowanie mobilne
Programowanie współbieżne
Systemy rozproszone
Wstęp do grafiki komputerowej
Algebra i logika w informatyce
Algorytmika
Alg. probabilistyczne i aproksymacyjne
Optymalizacja kombinatoryczna
Paradygmaty języków programowania
Rzucamy sprawiedliwą monetą dopóki nie wypadną 3 orły z rzędu lub 2 reszki z rzędu. Ile razy spodziewamy się rzucać? Losujemy punkt w kole o promieniu 1. Jaka jest oczekiwana odległość otrzymanego punktu od środka? Rzucamy igłą na parkiet o deskach szerokości równej długości igły. Dlaczego igła przecina krawędź deski z prawdopodobieństwem 2/pi? Kiedyś to właśnie w ten sposób szacowaliśmy wartość liczby pi! To wszystko i dużo więcej dowiesz się na kursie z probabila!
Do modelowania różnorakich problemów informatycznych wykorzystywane są pewne uniwersalne struktury kombinatoryczne: aby napisać algorytm znajdowania najszybszych połączeń w sieci komunikacji miejskiej wykorzystasz zapewne grafy, aby napisać algorytm przydzielający zadania do procesorów wykorzystasz częściowe porządki. Badaniem skończonych struktur kombinatorycznych, takich jak grafy czy częściowe porządki, zajmuje się dział matematyki zwany Matematyką Dyskretną. Na tym kursie Matematyki Dyskretnej zapoznasz się z twierdzeniami opisującymi podstawowe własności uniwersalnych struktur skończonych oraz metodami ich zliczania i generowania. Tym samym, kurs ten wyposaży Cię w podstawowy aparat matematyczny niezbędny do konstruowania i analizowania algorytmów.
Styl programowania nazywany „programowaniem obiektowym” pozwala na tworzenie dużych projektów programistycznych które są łatwe w utrzymaniu i rozbudowie. Jest to możliwe dzięki podziałowi tworzonego kodu na klasy, pakiety, biblioteki etc. oraz przestrzeganiu ogólnie przyjętych zasad komunikacji pomiędzy nimi. Dobrze napisany „obiektowy” projekt ma przejrzystą strukturę, jest łatwy w zrozumieniu, a poszczególne jego komponenty mogę być modyfikowane i zastępowane z minimalnymi modyfikacjami w kodzie. Kurs „Programowanie obiektowe” uczy tych oraz wielu innych narzędzi (na przykładzie języków Java i C++) które projektanci języka dostarczają aby ułatwić pisanie takich projektów.
Celem wykładu jest zapoznanie z podstawowymi pojęciami i narzędziami logiki formalnej a w jej ramach z teorią mnogości. Poznasz aksjomatykę teorii mnogości. Zobaczysz jak wykonać konstrukcję iloczynu Kartezjańskiego, jak powstają pojęcia relacji i funkcji, jak organizują te pojęcia struktury porządkowe. Na wykładzie zobaczysz budowę systemów formalnych obecnych tak w informatyce jak i w matematyce. Poznasz jak wyglądają fundamentalne obiekty algorytmiczne i matematyczne oraz jak należy badać ich własności. Razem z wykładowcą skonstruujesz liczby naturalne i poznasz metody przeprowadzania rozumowań indukcyjnych. Zobaczysz jak w ramach teorii mocy fascynujące mogą być konstrukcje zbiorów nieskończonych i jak wiele jest różnych nieskończoności. Zobaczysz jak formalnie wprowadzać podstawy relacyjnych baz danych. Nauczysz się ściśle o nich rozumować.
Problem spełnialności więzów jest jednym z najważniejszych problemów zarówno informatyki teoretycznej jak i zastosowań informatyki. Ze względu na to, że problem jest obliczeniowo trudny rozważa się jego prostsze wersje poprzez nakładanie ograniczeń na relacje wykorzystywane w więzach lub na kształt wejścia. Pełną klasyfikację złożoności obliczeniowej w pierwszej wersji (problem jest w P lub jest NP-zupełny) udało się uzyskać dzięki metodom algebry uniwersalnej, w drugim przypadku dzięki logice matematycznej. Na seminarium rozważamy problemy podobne do problemów spełnialności więzów i szukamy odpowiednich klasyfikacji.
Kurs Podstawy Programowania wprowadzi Cię stopniowo w fascynujący świat algorytmów oraz struktur danych. Swoją przygodę z algorytmami będziesz kontynuował na kolejnych kursach takich jak Metody Programowania oraz Algorytmy i Struktury danych. Nie będziemy poznawać algorytmów „na sucho”. Każdy z nich będziemy implementować w języku C lub C++ oraz testować za pomocą specjalnego systemu automatycznej weryfikacji programów. Jeśli nie umiesz jeszcze programować w tych językach albo znasz tylko ich podstawy, ten kurs będzie dla Ciebie idealny. Stopniowo będziesz samodzielnie pisał coraz trudniejsze programy oraz rozwiązywał coraz ciekawsze zadania.
Wiele danych w „prawdziwym świecie” nie jest liczbami całkowitymi - temperatura za oknem, wysokość Kopca Kościuszki czy prędkość samochodu to wielkości rzeczywiste, które możemy zmierzyć (i zapisać w komputerze) tylko z pewną dokładnością. Algorytmy numeryczne zajmują się takimi właśnie danymi - oprócz efektywności, muszą dbać też o błędy pomiarów i zaokrągleń. Na kursie dowiesz się, między innymi, dlaczego układy równań liniowych są takie ważne, jak szukać optymalnych parametrów, kiedy obliczenia dużo kosztują, oraz jak zgadywać wartości funkcji, o której prawie nic nie wiemy. Zastanowimy się też, jak firmy analityczne klasyfikują wyborców, jak działa kompresja MP3, skąd w kodzie gry Quake III Arena tajemniczy wzór (i szpetne przekleństwo), oraz jak armia USA przegrała bitwę z błędem zaokrąglenia.
Głębokie sieci neuronowe i uczenie maszynowe rozpalają wyobraźnię wielu osób, które widzą siebie w przyszłości w zawodzie informatyka. Wydaje się, że każdy słyszał o programie AlphaGo firmy Google Deepmind, który pokonał Lee Sedola, osiemnastokrotnego mistrza świata. Mecz, który odbył się w 2016 roku w Seulu został wybrany jako jedno z najważniejszych wydarzeń naukowych roku 2016 przez czasopismo Science. Kurs zaznajamia uczestnika z metodami sztucznej inteligencji: podstawami uczenia maszynowego, uczenia ze wzmocnieniem, metodami rozwiązywania problemów spełniania więzów i automatycznego dowodzenia twierdzeń.
Pełne rozumienie złożoności świata problemów algorytmicznych jest niemożliwe bez matematycznego modelu komputera za który od lat 30-tych XX wieku uważa się maszynę Turinga. Prosta matematyczna definicja maszyny obliczeniowej pozwoliła zrozumieć granice obliczalności, w szczególności pokazać, że istnieją łatwo formułowalne problemy obliczeniowe dla których nie ma algorytmów: ani w C++, ani w Pythonie, ani w żadnym innym języku programowania nie da się napisać programu, który dla podanego np. w pliku innego programu komputerowego sprawdzi czy ten zakończy swoje działanie na wejściu długości 128. Na kursie poznaje się najważniejsze modele obliczeń oraz klasy problemów, które mogą być przez nie rozwiązane.
Jest to seminarium badawcze. Prezentowane są współczesne prace dotyczące teorii obliczeń, rachunku lambda, logik programów, programowania w logice, programowania funkcyjnego, problemów zliczania w rachunkach logicznych i związaną z tym problematyką asymptotycznej gęstości.
Od swojego powstania we wczesnych latach 80. ubiegłego wieku do czasów współczesnych, język C++ przeszedł wręcz niewyobrażalną ewolucję od C „na sterydach” do jednego z najpopularniejszych języków programowania, wykorzystywanego między innymi w analizie danych zbieranych przez wielki zderzacz hadronów w Europejskim Ośrodku Badań Jądrowych CERN, w branży gier komputerowych, czy w końcu przy konstrukcji statków kosmicznych SpaceX. Uczestnicząc w kursie zaznajomisz się z tajnikami C++ oraz poznasz zaawansowane techniki programowania pozwalające pisać wysoce wydajny i efektywny kod. Poznasz współczesne metody projektowania kodu i nauczysz się używać języka C++ do rozwiązywania problemów stawianych współczesnym programistom.
Większość problemów informatycznych sprowadza się do skonstruowania algorytmu, który dla danej na wejściu instancji problemu znajduje zadowalające nas rozwiązanie. Od algorytmów takich wymaga się, aby działały szybko i znajdowały optymalne rozwiązanie, najlepiej dla wszystkich możliwych instancji problemu. Niestety, większość ważnych problemów informatycznych (komiwojażer, kolorowanie grafów) jest obliczeniowo trudne, co oznacza, że problemy te nie mają algorytmów spełniających wszystkie powyższe kryteria. Na tym kursie dowiesz się jak konstruować algorytmy rozwiązujące problemy trudne: wykładnicze i podwykładnicze (dokładne ale niezbyt szybkie), aproksymacyjne (szybkie ale dopuszczające rozwiązania przybliżone) oraz parametryzowane (szybkie i dokładne, ale tylko dla pewnych klas instancji problemu).