Serwisy internetowe Uniwersytetu Warszawskiego Nie jesteś zalogowany | zaloguj się
katalog przedmiotów - pomoc

Języki i narzędzia programowania II

Informacje ogólne

Kod przedmiotu: 1000-224bJNP2 Kod Erasmus / ISCED: 11.302 / (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
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 pwoduje, ż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 zastosowanieami informatyki. Z drugiej strony program zajęć uniwersyteckich jest w naturany 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 soba 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 2021/22" (w trakcie)

Okres: 2022-02-21 - 2022-06-15
Wybrany podział planu:


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

*** Grupa 1: C# i .NET - Mateusz Gienieczko

C# to nowoczesny, wieloparadygmatowy język programowania oparty na multiplatformowym środowisku .NET. Skupia się na wygodzie i produktywności programisty, nie poświęcając przy tym bezpieczeństwa dzięki automatycznemu zarządzaniu pamięcią i rozbudowanej statycznej analizie.

Celem zajęć będzie zapoznanie studentów z językiem C# i platformą .NET w praktyce, skupiając się na przykładowych programach i aplikacjach oraz ideach przyświecających projektantom C#-a. Porównane zostanie programowanie w C# do innych popularnych języków (Python, Java, C++, Rust, Go).

Kurs będzie warsztatowy, oparty w dużej mierze na kodzie oraz interaktywnych notebookach, dzięki czemu studenci będą mogli własnoręcznie uruchamiać programy z zajęć i eksperymentować z językiem.

Poglądowy program przedmiotu:

- Podstawy języka, architektura platformy .NET

- Typy referencyjne i wartości

- Wyjątki

- Testowanie z xUnit

- Typy generyczne w .NET-cie

- Nullability, Nullable Reference Types

- Rekordy

- Kolekcje

- LINQ i extension methods

- Pattern matching

- Iterator methods (generatory)

- Asynchroniczność z async/await

- Parallelizm z PLINQ

- Bazy danych - Entity Framework

- Aplikacje webowe - Blazor i ASP.NET Core

- Dynamiczne typowanie

- Zaawansowane programowanie zorientowane na wydajność - ref structs, szczegóły Garbage Collectora, minimalizowanie alokacji, benchmarki

- Przyszłość C#-a - proces tworzenia nowych feature'ów, static abstracts, discriminated unions, span params, pattern matching improvements, required properties

Zasady zaliczania:

Po zajęciach studenci dostaną małe zadanie domowe utrwalające materiał z ćwiczeń. Zadania będą udostępniane i sprawdzane przez GitHub Classroom. Dodatkowo, jedno zadanie będzie duże i będzie polegało na stworzeniu od zera małej aplikacji w C#.

Orientacyjna punktacja:

- 10 mikrozadań po 2 punkty, razem 20pkt.

- Duże zadanie za 20pkt.

Ocena dostateczna od 21pkt.

Zasoby:

- Dokumentacja .NET-a: https://docs.microsoft.com/en-us/dotnet/api/?view=net-6.0

- Podręcznik C#-a: https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp

- Podręcznik Blazora: https://docs.microsoft.com/en-us/aspnet/core/blazor

- Podręcznik Entity Framework: https://docs.microsoft.com/en-us/ef/core

Literatura:

- J. Albahari, C# 9.0 in a Nutshell (2021)

- J. Skeet, C# in Depth, 4th Edition (2019)

*** 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

*** Grupy 4 i 9 - Andrzej Głuszak i Piotr Wojtczak

Rust jest nowoczesnym kompilowanym językiem programowania o szerokim spektrum zastosowań. Cechuje go wydajność zbliżona do C czy C++, bezpieczeństwo w zarządzaniu pamięcią mimo braku garbage collectora, bogaty system typów i wygodne programowanie współbieżne. Rust jest uwielbiany przez programistów, o czym świadczy zajmowana od 6 lat pozycja lidera w rankingach StackOverflow [https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages].

Zagadnienia

* Wprowadzenie. Ekosystem języka Rust. Rustup, Cargo, Clippy, Rustfmt. “Hello world”.

* Własność. Borrow checker - najważniejsza innowacja Rusta. String vs &str, Vec<T> vs &[T].

* Typy danych. Struktury i enumeracje. Pattern matching.

* Crate i moduły. Obsługa zależności. Cargo.toml.

* Eksplicytna obsługa błędów. Typ Result zamiast wyjątków, typ Option zamiast nulla.

* Typy generyczne. Trait. Lifetime.

* Wbudowane narzędzia do testowania kodu.

* Programowanie funkcyjne. Iteratory i domknięcia (closures).

* Własność cz. 2. Smart pointery. Analogie i różnice z C++.

* Wprowadzenie do współbieżności w Ruście. “Fearless Concurrency”. Wątki. Biblioteka Rayon. Iteratory równoległe.

* Programowanie asynchroniczne w Ruście. Biblioteka Tokio.

* Przegląd popularnych bibliotek (clap - parsowanie argumentów linii komend, bevy - silnik gier wykorzystujący Entity Component System, iced - biblioteka do budowania GUI, serde - biblioteka do serializacji i deserializacji danych, anyhow - obsługa błędów w aplikacjach)

*** Grupa 5: 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 6: Programowanie systemowe z/OS - Michał Sierakowski

Celem przedmiotu jest wprowadzenie słuchaczy w zagadnienia administracji i programowania systemu operacyjnego z/OS, a jego zamierzonym efektem jest umiejętność zarządzania prostymi instancjami z/OS w całym spektrum funkcjonalności. Program obejmuje ponadto wprowadzenie do architektury komputerów IBM Z i najważniejszych (poza z/OS) systemów operacyjnych tej platformy: z/VM i Linux (s390x). Jest to przedmiot komplementarny do prowadzonych w ramach JNPIII 1000-225bJNP3 zajęć Wstęp do programowania w z/OS (grupa 3). Obydwa przedmioty mogą być realizowane w dowolnym porządku chronologicznym, jak również jako odrębne moduły funkcjonalne.

Program:

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

2. Praca interaktywna w sesji TSO, procedury CLIST

3. ISPF/PDF, zarządzanie zadaniami (kolejki SDSF)

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

5. Język sterowania zadaniami JCL i język REXX

6. z/OS UNIX System Services

7. Komendy operatorskie, operacje konsoli sprzętowej i definiowanie konfiguracji IODF

8. Konfiguracja komunikacji międzysystemowej i zarządzanie stosem TCP/IP

9. Operacje instalacji, startu (IPL) i zatrzymania systemu

10. Zarządzanie podstawowymi usługami: DFSMS, CICS, DB2 w deweloperskiej wersji systemu (ADCD)

Efekty kształcenia:

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

2. Konfiguruje i posługuje się mechanizmami środowiska z/OS (zarządzanie sesją, sterowanie systemem i wybranymi podsystemami)

3. Potrafi interpretować komunikaty systemowe i diagnozować błędy środowiska związane ze stanem systemu operacyjnego

4. Zarządza deweloperską wersją systemu z/OS (ADCD)

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 7: 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 8: 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 10: 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.

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: Grzegorz Grudziński, Paweł Kucharczyk, Tomasz Pawłowski, Michał Sierakowski, Tomasz Waleń
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę
Opisy przedmiotów w USOS i USOSweb są chronione prawem autorskim.
Właścicielem praw autorskich jest Uniwersytet Warszawski.