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.

zobacz reguły punktacji
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 2023/24" (zakończony)

Okres: 2023-10-01 - 2024-01-28
Wybrany podział planu:
Przejdź do planu
Typ zajęć:
Ćwiczenia, 30 godzin więcej informacji
Koordynatorzy: Agata Janowska
Prowadzący grup: Marcin Benke, Jacek Chrząszcz, Paweł Gołąb, Andrzej Mizera, Przemysław Rutka, Aleksy Schubert, Łukasz Wnuk
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę
Uwagi:

* Grupy 1 i 2 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: Architektura i tworzenie współczesnych aplikacji webowych (+ programowanie reaktywne)

prowadzi 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 4: Funkcyjne programowanie sieciowe

prowadzi Aleksy Schubert

1. Podstawy programowania w OCaml-u i Coq-u

2. Typy algebraiczne i zależne

3. Podstawy dowodzenia własności wynikających z typów zależnych

4. Ekstrakcja kodu z efektywnymi typami

5. Pętla komunikacji sieciowej w programach funkcyjnych

6. Parsowanie pakietów binarnych w językach funkcyjnych

7. Logika implementacji protokołu

8. Dowodzenie własności implementacji

Zasady zaliczania:

Na podstawie projektu polegającego na implementacji małego protokołu sieciowego w języku funkcyjnym z elementami weryfikacji poprawności pisanego kodu.

* Grupa 5: OCaml

prowadzi Jacek Chrząszcz

Celem zajęć jest przedstawienie podstawowych zagadnień programowania

funkcyjnego na przykładzie języka OCaml, który jest językiem na styku

paradygmatów funkcyjnego, imperatywnego i obiektowego.

1. Wstęp do programowania funkcyjnego

2. Typy podstawowe i listy, polimorfizm

3. Dopasowanie wzorców

4. Typy algebraiczne

5. Funkcje wyższego rzędu

6. Moduły i funktory

7. Elementy programowania imperatywnego w OCamlu

8. Obsługa błędów (wyjątki, monady)

9. Obiekty i klasy

10. Polimorficzne warianty, uogólnione typy algebraiczne (GADT)

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

* Grupa 6: Kotlin

prowadzi Łukasz Wnuk

Kotlin to nowoczesny, wieloplatformowy język programowania stworzony i wspierany przez firmę JetBrains. Jest on zwięzły, czytelny, bezpieczny i ma możliwość współdziałania z innymi językami programowania, w szczególności z Javą. Do jego najważniejszych zastosowań należą aplikacje internetowe i mobilne - w roku 2019 Kotlin ogłoszony został przez Google preferowanym językiem programowania na Androida.

Na zajęciach omówione zostaną między innymi następujące zagadnienia (zajęcia będą odbywały się w języku polskim; poniższe tematy zostały wymienione po angielsku ze względu na specyfikę języka branżowego):

- Kotlin vs Java - comparison, interoperability

- variables, data types, loops, conditions, expressions, exceptions

- functions, single-expression functions, infix functions, named arguments, default arguments

- lambdas, function types, functional interfaces, higher-order functions, scope functions, functions as first-class citizens

- nullability, null-safety, safe call operator, Elvis operator

- classes, properties, constructors, interfaces, abstract classes, inheritance, delegation

- data classes, destructuring

- objects, object declarations, object expressions, companion objects

- exceptions

- nested classes, inner classes, enum classes, sealed classes, sealed interfaces, annotation classes

- extension functions, extension properties, receivers

- collections, arrays, immutability

- operator overloading

- type aliases, value classes

- generics, reified types

Zaliczenie na podstawie co najmniej jednego programu zadanego przez prowadzącego na ocenę.

* Grupa 7: Wstęp do analizy danych i uczenia maszynowego

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

* Grupa 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 mapa serwisu USOSweb 7.1.0.0-7 (2024-10-21)