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 2021/22" (zakończony)

Okres: 2021-10-01 - 2022-02-20
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć:
Ćwiczenia, 30 godzin więcej informacji
Koordynatorzy: Piotr Wasilewski
Prowadzący grup: Marcin Benke, Michał Gruchała, Zbigniew Jurkiewicz, Jerzy Tyszkiewicz, Piotr Wasilewski, Maciej Włodarkiewicz
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę
Pełny opis:

* Grupa 1: Termiknowledge. Jerzy Tyszkiewicz

Zadaniem tej grupy jest stworzenie oprogramowania dla międzynarodowego projektu "TERMIKNOWLEDGE", realizowanego na UW oraz uniwersytetach w Heidelbergu, Mediolanie i Pradze.

Zakres prac obejmuje:

1. Stworzenie bazy danych do przechowywania wielojęzycznych danych słownikowo-terminologicznych

2. Oprogramowanie interfejsu do wprowadzania danych, z systemem uprawnień dla zespołu językoznawców

3. Oprogramowanie interfejsu wyszukiwania i przeglądania w gotowej bazie

4. Stworzenie dokumentacji dla użytkowników

5. Wdrożenie

Założenia przewidują wykorzystanie gotowych komponentów dla stworzenia działającej aplikacji webowej.

Ze względu na harmonogram zasadnicza część pracy będzie musiała być wykonana do grudnia, przez resztę semestru trzeba będzie tylko dokonywać niezbędnych poprawek w już działającym systemie.

* Grupy 2 i 6: Programowanie funkcyjne w języku Haskell. 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

* Grupa 3: Wstęp do programowania w z/OS. Michał Sierakowski

Celem zajęć jest przedstawienie klasycznych technik programowania w systemie operacyjnym z/OS. Program obejmuje wprowadzenie do architektury komputerów IBM Z i systemu z/OS, podstawy programowania w języku COBOL, serwer aplikacyjny CICS oraz bazę danych DB2 z uwzględnieniem interfejsu CICS-DB2. Wszystkie zawarte w programie technologie należą do uniwersalnych i najpowszechniej stosowanych technik w środowiskach z/OS, a stanowią punkt wyjścia do poznania innych mechanizmów tego systemu operacyjnego. Jednocześnie początkowa część zajęć (5 godzin) obejmująca

wprowadzenie do architektury sprzętowej jest podstawą do poznania innych, poza z/OS, systemów operacyjnych ekosystemu IBM Z: z/VM i Linux oraz funkcji realizowanych na poziomie sprzętowym (wirtualizacja, kryptografia). Będące integralną częścią przedmiotu zadania programistyczne będą realizowane w środowisku zdalnym. Uczestnicy zajęć będą mieli możliwość udziału w konkursie Master the Mainframe (www.masterthemainframe.com).

1. Wstęp: wprowadzenie do architektury IBM Z i systemu operacyjnego z/OS, sesja TSO, ISPF/PDF, JCL, zarządzanie zadaniami (kolejki, SDSF), model bezpieczeństwa systemu.

2. Język COBOL: wprowadzenie do programowania w języku COBOL, struktura

programu, obsługa tablic i plików, wywoływania i łączenie, run unit, funkcje wewnętrzne i funkcje zaawansowane.

3. Serwer aplikacyjny CICS: środowisko programistyczne CICS i przegląd poleceń, tworzenie aplikacji w CICS, podstawowe wsparcie dla odwzorowań, sterowanie program-program, dostęp do danych, kolejki, programowanie komunikacji z użytkownikiem w CICS.

4. Udostępnianie i korzystanie z funkcji CICS jako REST API.

* Grupa 4: Przetwarzanie informacji przez człowieka. Piotr Wasilewski

Celem zajęć jest przedstawienie podstawowych zagadnień związanych z przetwarzaniem informacji przez człowieka z uwzględnieniem kwestii interakcji człowiek - komputer. Zostaną omówione podstawy wyjaśniania zachowań człowieka w terminach przetwarzania informacji wraz z podstawami paradygmatu eksperymentalnego badania zachowań. Na zaliczenie zajęć studenci w małych grupach przygotują komputerowe programy eksperymentalne i przeprowadzą badania dotyczące przetwarzania informacji przez ludzi.

* Grupa 5: Wprowadzenie do procesów i technologii wytwarzania gier komputerowych. Maciej Włodarkiewicz

Celem zajęć będzie wprowadzenie do procesów i technologii wytwarzania gier komputerowych. Zaczniemy od wprowadzenia teoretycznego i zapoznania z wyzwaniami jakie stoją przed twórcami gier a następnie skupimy się na warsztacie na którym, studenci będą samodzielnie tworzyć grę komputerową w oparciu o znany silnik Unity3D i język programowania C#. Zajęcia będą dzielone w proporcji wykłady/ćwiczenia: 30/70

Tematy zajęć:

1. Wprowadzenie do procesów tworzenia gier komputerowych

2. Wyzwania organizacyjne w procesie tworzenia gier

3. Wyzwania technologiczne w procesie tworzenia gier

4. Modele realizacji projektów

5. Tworzenie gry komputerowej.

Format:

Pierwsze kilka zajęć spędzimy na wprowadzeniu do branży i wyzwań, będzie to realizowane w postaci wykładów z dużą interakcją od studentów. Następnie przez ok 8-10 zajęć będziemy pisać razem prostą grę komputerową w oparciu o popularne technologie C# Unity. Studenci będą mogli śledzić cały proces poprzez działania prowadzącego. Ostatnie dwa zajęcia są zarezerwowane na zaliczenie: prezentacji swojego tytułu dla całej grupy.

* Grupa 7: Aplikacje web. 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.

* Grupa 8: Programowanie w Scheme i podobnych językach. Zbigniew Jurkiewicz

Scheme jest przykładem języka funkcyjnego typu Lisp-1 z gorliwym porządkiem obliczania (,,application order''). Posiada kilka zaawansowanych konstrukcji, rzadko spotykanych w innych językach, na przykład:

- dwustronne kontynuacja, pozwalające na wznawianie już zakończonych obliczeń;

- higieniczne makra (rozszerzenia syntaktyczne).

Ma też wiele odmian, nastawionych na pracę w konkretnych środowiskach przedmiotowych, był na przykład językiem do rozszerzania programu Gimp. Oprócz poznania najciekawszych konstrukcji języka i jego odmian zajmiemy się jego użyciem w przetwarzaniu języków, zarówno sztucznych jak i naturalnych.

Jeśli starczy czasu, to w drugiej części spróbujemy zbudować interfejs w Scheme do narzędzi z NLTK (Natural Language ToolKit).

Warunkiem zaliczenia będzie napisanie kilku (4-5) programów.

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.
Krakowskie Przedmieście 26/28
00-927 Warszawa
tel: +48 22 55 20 000 https://uw.edu.pl/
kontakt deklaracja dostępności USOSweb 6.8.0.0-4 (2022-09-15)