Uniwersytet Warszawski - Centralny System Uwierzytelniania
Strona główna

Języki i narzędzia programowania III

Informacje ogólne

Kod przedmiotu: 1000-225bJNP3
Kod Erasmus / ISCED: 11.303 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 III
Jednostka: Wydział Matematyki, Informatyki i Mechaniki
Grupy: Przedmioty obowiązkowe dla III 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 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 kursu (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 zimowy 2022/23" (w trakcie)

Okres: 2022-10-01 - 2023-01-29
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć:
Ćwiczenia, 30 godzin więcej informacji
Koordynatorzy: Agata Janowska
Prowadzący grup: Marcin Benke, Andrzej Głuszak, Michał Gruchała, Przemysław Rutka, Aleksy Schubert
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę
Pełny opis:

* Grupa 1: Aplikacje web

prowadzi Michał Gruchała

Architektura, wydajność i skalowalność mikroserwisów w aplikacjach internetowych

Celem zajęć będzie przedstawienie nowoczesnych technik budowy wydajnych i skalowalnych aplikacji internetowych, które składają się z wielu mikroserwisów. Wydajność i skalowalność zapewni nam cache, sharding baz danych oraz rozwiązania NoSQL.

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 Docker)

- Skalowalność baz danych (replikacja, sharding)

- Cache (na przykładzie Varnish-Cache)

- Rozwiązania NoSQL (na przykładzie Redis i Elasticsearch)

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

W ramach zajęć studenci powinni

* przedstawić wstępnego projektu aplikacji którą chcą napisać (2

punkty) - w połowie semestru

* napisania (i zaprezentowania jej grupie) aplikacji zawierającej

następujące elementy

- architektura mikroserwisowa (2 punkty)

- load balancing (2 punkty)

- cache (2 punkty)

- skalowalna baza danych (2 punkty)

Sumarycznie można zdobyć 10 punktów, warunkiem zaliczenia (na ocenę 3)

jest zdobycie 6 punktów.

* Grupy 2 i 6: Programowanie funkcyjne w języku Haskell

prowadzi Marcin Benke

Celem zajęć jest przedstawienie najważniejszych zagadnień programowania funkcyjnego w języku Haskell. Wśród poruszanych zagadnień znajdą się m.in.

1. Podstawy programowania deklaratywnego

2. Typy i klasy

* typy podstawowe

* typy algebraiczne i klasy typów

3. Funkcje polimorficzne funkcje wyższego rzędu

4. Funktory

5. Leniwa ewaluacja

6. Wejście-wyjście oraz inne efekty

7. Testowanie programów funkcyjnych

8. Dowodzenie własności programów

Zaliczenie na podstawie programów oddawanych systematycznie w ciągu semestru.

* Grupa 3: Rust

prowadzi Andrzej Głuszak

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)

Zasady zaliczenia

Duży projekt (dowolny, skonsultowany z prowadzącym), podzielony na dwie części - 2/3 oceny.

Około 10 małych zadań - łącznie 1/3 oceny.

Możliwość podwyższenia oceny za aktywność (prezentacje, kontrybucje do open-source, dodatkowe zadania).

* Grupa 4:

* Grupa 5: Programowanie w Solidity na Ethereum

prowadzi 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.

* Grupy 7 i 8: Programowanie grafiki w systemie Windows

prowadzi Przemysław Rutka

Celem zajęć jest przekazanie studentom wiedzy i umiejętności w zakresie programowania grafiki 2D i 3D w systemie Windows z wykorzystaniem biblioteki DirectX 12. Główny nacisk kładziony będzie na tworzenie aplikacji wyświetlających grafikę komputerową w czasie rzeczywistym. W tym celu wykorzystywane będzie środowisko programistyczne Visual Studio i język C++ w połączeniu z Direct2D i Direct3D, czyli dwoma podstawowymi składnikami DirectX 12, pozwalającymi na wykorzystanie wsparcia obliczeniowego nowoczesnych kart graficznych do wydajnego wyświetlania geometrii, map bitowych i napisów. W szczególności, zaprezentowany zostanie język HLSL (High Level Shading Language) służący do programowania poszczególnych jednostek cieniujących (ang. shader) procesora graficznego. Elementem

dodatkowym zajęć będzie zapoznanie z programami do obróbki grafiki komputerowej (Blender i Gimp), które wykorzystywane będą do tworzenia geometrii i map bitowych na potrzeby pisanych programów.

Zagadnienia:

- Wprowadzenie do programowania w Windows w środowisku Visual Studio

- Animacja i interaktywność w grafice komputerowej

- Biblioteka Direct2D

- Biblioteka Direct3D

- Język HLSL

- Programy Blender i Gimp

Kryterium zaliczenia:

- Program zaliczeniowy 2D - 20 pkt.

- Program zaliczeniowy 3D - 40 pkt.

- Zadania domowe - 10 pkt.

Progi ocen:

0 - 34 2

35 - 42 3

43 - 49 3.5

50 - 56 4

57 - 63 4.5

64 - 70 5

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.0.0-e459be735 (2022-11-16)