Języki i narzędzia programowania II
Informacje ogólne
Kod przedmiotu: | 1000-224bJNP2 |
Kod Erasmus / ISCED: |
11.302
|
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
|
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" (zakończony)
Okres: | 2023-02-20 - 2023-06-18 |
![]() |
Typ zajęć: |
Ćwiczenia, 30 godzin
|
|
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 |
Właścicielem praw autorskich jest Uniwersytet Warszawski, Wydział Nauk Ekonomicznych.