Uniwersytet Warszawski - Centralny System Uwierzytelniania
Strona główna

Języki i narzędzia programowania II

Informacje ogólne

Kod przedmiotu: 1000-224bJNP2
Kod Erasmus / ISCED: 11.302 Kod klasyfikacyjny przedmiotu składa się z trzech do pięciu cyfr, przy czym trzy pierwsze oznaczają klasyfikację dziedziny wg. Listy kodów dziedzin obowiązującej w programie Socrates/Erasmus, czwarta (dotąd na ogół 0) – ewentualne uszczegółowienie informacji o dyscyplinie, piąta – stopień zaawansowania przedmiotu ustalony na podstawie roku studiów, dla którego przedmiot jest przeznaczony. / (brak danych)
Nazwa przedmiotu: Języki i narzędzia programowania II
Jednostka: Wydział Matematyki, Informatyki i Mechaniki
Grupy: Przedmioty obowiązkowe dla II roku informatyki
Przedmioty obowiązkowe dla III roku JSIM - wariant 3I+4M
Przedmioty obowiązkowe dla IV roku JSIM - wariant 3M+4I
Punkty ECTS i inne: 2.00 Podstawowe informacje o zasadach przyporządkowania punktów ECTS:
  • roczny wymiar godzinowy nakładu pracy studenta konieczny do osiągnięcia zakładanych efektów uczenia się dla danego etapu studiów wynosi 1500-1800 h, co odpowiada 60 ECTS;
  • tygodniowy wymiar godzinowy nakładu pracy studenta wynosi 45 h;
  • 1 punkt ECTS odpowiada 25-30 godzinom pracy studenta potrzebnej do osiągnięcia zakładanych efektów uczenia się;
  • tygodniowy nakład pracy studenta konieczny do osiągnięcia zakładanych efektów uczenia się pozwala uzyskać 1,5 ECTS;
  • nakład pracy potrzebny do zaliczenia przedmiotu, któremu przypisano 3 ECTS, stanowi 10% semestralnego obciążenia studenta.
Język prowadzenia: polski
Rodzaj przedmiotu:

obowiązkowe

Wymagania (lista przedmiotów):

Wstęp do programowania 1000-211bWPI

Skrócony opis:

Celem tego przedmiotu pokazanie studentom konkretnych języków i narzędzi programistycznych.

Pełny opis:

Celem tego przedmiotu pokazanie studentom konkretnych języków i narzędzi programistycznych. Dynamiczny rozwój informatyki powoduje, że stale powstają nowe języki, środowiska i technologie informatyczne. Zestaw języków i narzędzi, o których warto by było opowiedzieć studentom, poszerza się z każdym rokiem. Są to zagadnienia bardzo ważne dla każdego, kto chce zajmować się praktycznymi zastosowaniami informatyki. Z drugiej strony program zajęć uniwersyteckich jest w naturalny sposób nakierowany na przedstawianie tych zagadnień, które są ogólne i w małym stopniu zależne od aktualnych trendów. Nie ma też możliwości pomieszczenia w nim wszystkich pojawiających się nowości. Chcąc pogodzić ze sobą te dwie sprzeczne ze sobą potrzeby (nowości i stabilności) wprowadzamy do naszego planu zajęć 30-godzinne kursy.

Literatura:

Specyficzna dla danego kursy (zwykle będzie to dokumentacja języka programowania i jego środowiska bądź dokumentacja przedstawianego narzędzia).

Efekty uczenia się:

Wiedza

* Zna szczegółowo wybrane narzędzie lub język programowania [K_W02, K_W09, K_W10].

Umiejętności

* Umie pozyskiwać informacje z literatury, baz wiedzy, Internetu oraz innych wiarygodnych źródeł, integrować je, dokonywać ich interpretacji oraz wyciągać wnioski i formułować opinie (K_U02)

* Umie samodzielnie planować i realizować własne uczenie się przez całe życie (K_U09).

* Umie ocenić, na podstawowym poziomie, przydatność rutynowych metod i narzędzi informatycznych oraz wybrać i zastosować właściwą metodę i narzędzia do typowych zadań informatycznych (K_U18).

* Umie planować i organizować pracę indywidualnie i w zespole, także o charakterze interdyscyplinarnym; zarządzać swoim czasem oraz podejmować zobowiązania i dotrzymywać terminów (K_U29).

Kompetencje społeczne:

* Student jest gotów do krytycznej oceny posiadanej wiedzy i odbieranych treści (K_K01).

* Student jest gotów do pracy z zachowaniem uczciwości intelektualnej w działaniach własnych i innych osób; przestrzegania zasad etyki zawodowej i wymagania tego od innych oraz dbałości o dorobek i tradycje zawodu informatyka (K_K02).

* Student jest gotów do uznawania znaczenia wiedzy w rozwiązywaniu problemów poznawczych i praktycznych oraz wyszukiwania informacji w literaturze oraz zasięgania opinii ekspertów (K_K03).

Metody i kryteria oceniania:

Praca zaliczeniowa. Szczegóły podane przez prowadzącego zajęcia w grupie.

Zajęcia w cyklu "Semestr letni 2022/23" (jeszcze nie rozpoczęty)

Okres: 2023-02-20 - 2023-06-18
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć:
Ćwiczenia, 30 godzin więcej informacji
Koordynatorzy: Agata Janowska
Prowadzący grup: Paweł Gołąb, Michał Gruchała, Grzegorz Grudziński, Paweł Kucharczyk, Andrzej Mizera, Witold Rudnicki, Aleksy Schubert, Michał Sierakowski, Jakub Sitek, Tomasz Waleń
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę
Pełny opis:

*** Grupa 1: Zaawansowana Java - Jakub Sitek (zajęcia prowadzone zdalnie)

Opis przedmiotu: Zaawansowana Java

Celem tego przedmiotu jest zapoznanie studentów z zaawansowanymi aspektami języka Java (refleksja, anotacje, classloadery, dynamic proxy) oraz ich praktyczne użycie w rozbudowanym projekcie programistycznym.

W ramach laboratorium zapoznamy się z budową kontenera serwletów i postaramy się go zaimplementować w kilkuosobowych zespołach. Nie będziemy używać gotowych rozwiązań i bibliotek, tylko wzorując się na istniejących implementować własne w Java SE. Następnie przetestujemy go wydajnościowo, postaramy się ustalić wąskie gardła (bottleneck) naszego rozwiązania i poprawić jego wydajność. Dla specyfikacji jax-rs zaimplementujemy uproszczoną wersję biblioteki wspierającej tworzenie serwisów restowych. Wszystko to z wykorzystaniem git, testów jednostkowych, integracyjnych i CI/CD. W ocenianiu ważne będzie terminowe i regularne oddawanie poszczególnych etapów serwera w trakcie semestru.

Kryterium oceniania:

- za zadanie zaliczeniowe (cały kontener serwletów i bibliotekę rest) będzie można otrzymać maksymalnie 30 punktów

- progi ocen:

- 28-30 = 5

- 25-27 = 4+

- 22-34 = 4

- 19-21 = 3+

- 16-18 = 3

*** Grupa 2: Architektura i tworzenie współczesnych aplikacji webowych (+ programowanie reaktywne) - Paweł Gołąb

Aplikacje webowe dawno przerosły rozmiarem proste liczniki odwiedzin i obecnie często stanowią pełnoprawne aplikacje, nieodróżnialne dla użytkowników od aplikacji na komputery stacjonarne.

Celem kursu jest zapoznanie się z trendami i pomysłami na efektywną odpowiedź na wyzwania pojawiające się wraz z ciągle rosnącą złożonością wymagań.

Kurs będzie związany z programowaniem w JavaScript, ale pojęcia takie jak zarządzanie stanem, czy programowanie reaktywne z powodzeniem przenoszą się na inne architektury.

Zagadnienia:

* Zarządzanie stanem aplikacji

* Selektory i Immutable

* Programowanie reaktywne na przykładzie RxJS

* Sagi

* React i React Native

* CSS-in-JS

Kryterium oceniania:

- za zadanie zaliczeniowe będzie można otrzymać maksymalnie 50 punktów

- progi ocen:

- 45-50 = 5

- 35-44 = 4

- 25-34 = 3

- 0-24 = 2

*** Grupa 3: * - Tomasz Waleń

Grupa jest częścią projektu TAG. Ocena z przedmiotu jest oceną z tego projektu. Szczegóły: https://sio2project.mimuw.edu.pl/display/~accek/Zasady+zaliczania+TAG-a

*** Grupa 4: Programowanie w Solidity na Ethereum - Aleksy Schubert

Na zajęciach przedstawiony zostanie język programowania Solidity wraz ze związaną z nim pragmatyką programowania. Na zajęciach poruszone zostaną następujące zagadnienia:

1. Model obliczeniowy Ethereum

2. Podstawy pisania kontraktów w Solidity

3. Wdrażanie stworzonego kontraktu w łańcuchu bloków

4. Niespodzianki związane z bazowymi typami danych i kolekcjami

5. Rola modyfikatorów i zdarzeń w programowaniu w Solidity

6. Zarządzanie aktorami w kontraktach

7. Niezmienniki klasowe przy pisaniu kontraktów

8. Narzędzia wspomagające tworzenie kontraktów

Zasady zaliczania:

- zadanie zaliczeniowe polegające na wykonaniu szczegółowego opisu działania zadanego z góry kontraktu Solidity.

*** Grupa 5: Programowanie systemowe z/OS - Michał Sierakowski

Celem przedmiotu jest wprowadzenie słuchaczy w zagadnienia administracji i programowania w systemie operacyjnym z/OS na poziomie pozwalającym na dostęp i zarządzanie strukturami danych takich jak pliki sekwencyjne, pliki indeksowane oraz baza danych DB2. Wykorzystywanymi narzędziami będą języki JCL, COBOL i Java oraz silnik transakcji CICS. Zawarte w programie technologie należą do uniwersalnych i najpowszechniej stosowanych metod w środowiskach z/OS oraz stanowią punkt wyjścia do eksploracji innych mechanizmów tego systemu operacyjnego. Część zajęć obejmująca wprowadzenie do architektury sprzętowej jest niezbędna również dla pracy w innych systemach operacyjnych platformy mainframe: Linux, z/VM i z/TPF.

Program:

1. Wprowadzenie do architektury i systemów operacyjnych serwerów rodziny IBM Z

2. Praca interaktywna w sesji TSO, ISPF/PDF, zarządzanie zadaniami (kolejki SDSF)

3. Model bezpieczeństwa systemu z/OS (RACF)

4. Język sterowania zadaniami JCL, operacje w systemie plików, UNIX System Services

5. COBOL: wprowadzenie, struktura programu, obsługa tablic i plików, wywoływania i łączenie, Run Unit, funkcje wewnętrzne i zaawansowane

6. Java w z/OS: praca w systemie z różnymi typami plików

7. Baza danych DB2: interfejs interaktywny, API, integracja z CP4D

8. CICS: środowisko programistyczne CICS i przegląd poleceń, tworzenie aplikacji w CICS, podstawowe wspracie dla odwzorowań, sterowanie program-program

Efekty kształcenia:

1. Ma zaawansowaną wiedzę na temat architektury IBM Z oraz struktury systemu operacyjnego z/OS

2. Posługuje się podstawowymi mechanizmami środowiska z/OS (zarządzanie sesją, kontekstem bezpieczeństwa, praca w podsystemach)

3. Potrafi interpretować komunikaty systemowe i diagnozować błędy środowiska związane z wykonywanymi programami

4. Potrafi tworzyć, uruchamiać i interpretować wyniki działania programów w środowisku systemu z/OS w tym z wykorzystaniem monitora transakcji CICS

Literatura:

A. Salla, P. Oughton, ABCs of z/OS System Programming Volume 10, IBM International Technical Support Organization, 2018

K. Singh et al., ABCs of z/OS System Programming Volume 6, IBM International Technical Support Organization, 2014

L. Parziale, L. Fadel, S. Jon, ABCs of z/OS System Programming Volume 1, IBM International Technical Support Organization, 2018

L. Parziale, G. Cosimo, L. Kuehner, ABCs of z/OS System Programming Volume 2, IBM International Technical Support Organization, 2018

Kryterium zaliczania:

- ocena końcowa na podstawie punktów z zadań realizowanych podczas zajęć (50%) oraz egzaminu (50%)

*** Grupa 6: Architektura i infrastruktura mikroserwisów w aplikacjach internetowych - Michał Gruchała

Celem zajęć będzie przedstawienie nowoczesnych technik budowy skalowalnych i wydajnych aplikacji internetowych, które składają się z wielu mikroserwisów, wykorzystują komunikację synchroniczną i operacje asynchroniczne. Jako przykład implementacji tych technik będziemy budować aplikację typu twitter, która zostanie zrealizowana w architekturze mikroserwisów, skonteneryzowana oraz wydana w środowisku Cloud.

W ramach zajęć będziemy używać technologii / poruszać następujące zagadnienia:

Architektura aplikacji www, z naciskiem na architekturę mikroserwisów

Konteneryzacja aplikacji (na przykładzie Kubernetes / Docker)

Komunikacja synchroniczna (http) i asynchroniczna (rabbitMQ)

Środowisko chmurowe

Zajęcia odbywać się będą w formie warsztatów, gdzie uczestnicy będą tworzyć własne rozwiązania oparte o prezentowane techniki.

Kryterium oceniania:

- za zadanie zaliczeniowe, polegające na napisaniu i zaprezentowaniu aplikacji sieciowej, będzie można otrzymać maksymalnie 10 punktów

- ocena dostateczna od 6 pkt

*** Grupa 7: Pisanie narzędzi do Oracle przy użyciu C++ oraz QT - Paweł Kucharczyk

Studenci będą pracowali nad rozwojem narzędzia Tora, które może służyć do tworzenia kodu oraz administracji Oracle (i jeszcze kilkoma innymi bazami). Narzędzie jest pisane w C++, z wykorzystaniem Qt - stąd wymagania. Działa przede wszystkim pod Linuksem, ale może być kompilowane dla Windows i Maca. W trakcie zajęć będą omawiane zagadnienia dotyczące zarządzania Oraclem - zakres materiału będzie dopasowywany do tych fragmentów/narzędzi z narzędzia Tora, które studenci wybiorą do pracy. Studenci będą też - „w poszukiwaniu inspiracji” - oglądali konkurencyjne narzędzia jak SQL*Developer, Enterprise Manager, Toad.

Kryteria oceniania:

Ocena na podstawie dwu etapowego projektu zaliczeniowego, za który można dostać łącznie 15 pkt. (I etap - 5, II etap - 10). W czasie zajęć będzie też można uzyskać do 3 pkt. 'aktywność' - np. w przygotowania i wygłoszenia prezentacji na temat jakiś aspektów QT. Ocena dostateczna od 8pkt.

*** Grupa 8: Programowanie kart graficznych w technologii CUDA - Witold Rudnicki

Celem przedmiotu jest zapoznanie studentów z dynamicznie rozwijającym się obszarem informatyki czyli praktycznym wykorzystaniem masywnie równoległych procesorów graficznych. CUDA - technologia zaproponowana i rozwijana przez firmę NVIDIA dominuje w obliczeniach naukowych ponieważ pozwala na stosunkowo szybkie opracowanie wydajnych kodów obliczeniowych.

W ramach zajęć poruszone będą następujące zagadnienia:

* Omówienie architektury procesorów graficznych

* Omówienie architektury sprzętowej komputerów realizujących obliczenia z wykorzystaniem kart graficznych

* Model programowania na kartach graficznych,

* Implementacja modelu programowania GPU w CUDA

* Analiza równoległości problemów obliczeniowych

* Ograniczenia wydajności algorytmów równoległych

- pamięć (przepustowość i latencja)

- komunikacja (przepustowość i latencja)

- operacje GPU (wydajności różnych operacji)

- zapełnienie równoległych potoków przetwarzania

* Optymalizacja wydajności algorytmów

- identyfikacja wąskich gardeł

- analiza alternatywnych rozwiązań

- techniki optymalizacji.

Studenci zapoznają się z tymi problemami w praktyce, implementując

wybrane algorytmy obliczeniowe w języku CUDA C/C++.

Kryteria oceniania:

- zaliczenie na podstawie zadań wykonywanych w laboratorium w trakcie semestru,

- sześć zadań o wzrastającym stopniu trudności; zadania będą punktowane w następujący sposób: zadania 1,2 : 2 pkt, zadania 3,4: 3 pkt, zadanie 5: 4 pkt, zadanie 6: 5 pkt,

- do zaliczenia konieczne jest oddanie poprawnych rozwiązań wszystkich sześciu zadań (uzyskanie co najmniej połowy punktów za każde z nich),

- ocena dostateczna od 13 pkt, ocena dost+ 14-15 pkt, ocena dobra 16-17 pkt, ocena db+ 18pkt, ocena bdb 19-20 pkt.

*** Grupa 9: Android - Grzegorz Grudziński

Tematem moich zajęć będzie środowisko Android, podstawowym językiem będzie Java. Będziemy omawiać budowę systemu, model budowy aplikacji dla niego, przejrzymy poszczególne API potrzebne przy budowie aplikacji o rozmaitej tematyce/funkcjonalności. Postaramy się zapoznać ze wszystkimi najważniejszymi obszarami funkcjonalnymi spotykanymi we współczesnych aplikacjach mobilnych: interfejsem użytkownika, pracą kodu w tle, komunikacją sieciową, API geolokalizacyjnym, obsługą czujników telefonu.

Dla zaliczenia przedmiotu, studenci będą musieli (samodzielnie lub w grupach 2-3 osobowych) stworzyć jakieś ciekawe (choć niekoniecznie bardzo skomplikowane) aplikacje.

*** Grupa 10: Wstęp do analizy danych i uczenia maszynowego - Andrzej Mizera

Celem zajęć będzie zapoznanie Studentów ze środowiskiem programistycznym do analizy danych i uczenia maszynowego. W szczególności zaprezentowana zostanie platforma Anaconda wraz z zestawem pakietów i bibliotek programistycznych w języku Python powszechnie wykorzystywanych w zagadnieniach uczenia maszynowego, np. NumPy, Pandas, Scikit-learn, TensorFlow, Matplotlib, Seaborn. W ramach zajęć zostaną pokrótce omówione wybrane podstawowe zagadnienia i algorytmy analizy danych oraz uczenia maszynowego. Przedstawione zostaną metody związane z przygotowaniem danych, wstępną analizą i wizualizacją danych, redukcją wymiaru (analiza składowych głównych), uczeniem pod nadzorem, klasyfikacją (algorytm k najbliższych sąsiadów, dyskryminacja logistyczna, maszyny wektorów podpierających) oraz uczeniem głębokim (konwolucyjne sieci neuronowe, sieci neuronowe typu GAN). Zostanie przedstawiona implementacja poszczególnych metod z wykorzystaniem bibliotek programistycznych w języku Python. Studenci będą mieli możliwość praktycznego wykorzystania omawianych technik do analizy przykładowych zbiorów danych oraz eksperymentowania z różnymi ustawieniami hiperparametrów metod uczenia maszynowego. W ramach zajęć Studenci nauczą się implementowania rozwiązań problemów uczenia maszynowego z wykorzystaniem edytora Jupyter.

Znajomość języka Python będzie pomocna, ale nie jest wymagana.

Kryterium zaliczania:

Ocena końcowa na podstawie punktów z kilku zadań domowych oraz małego projektu zaliczeniowego

Opisy przedmiotów w USOS i USOSweb są chronione prawem autorskim.
Właścicielem praw autorskich jest Uniwersytet Warszawski.
ul. Banacha 2
02-097 Warszawa
tel: +48 22 55 44 214 https://www.mimuw.edu.pl/
kontakt deklaracja dostępności USOSweb 6.8.1.0-65ff8df66 (2023-01-24)