University of Warsaw - Central Authentication System
Strona główna

Languages and tools for programming III

General data

Course ID: 1000-225bJNP3
Erasmus code / 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. / (unknown)
Course title: Languages and tools for programming III
Name in Polish: Języki i narzędzia programowania III
Organizational unit: Faculty of Mathematics, Informatics, and Mechanics
Course groups: Obligatory courses for 3rd grade Computer Science
Obligatory courses for 3rd grade JSIM (3I+4M)
Obligatory courses for 4th grade JSIM (3M+4I)
ECTS credit allocation (and other scores): 2.00 Basic information on ECTS credits allocation principles:
  • the annual hourly workload of the student’s work required to achieve the expected learning outcomes for a given stage is 1500-1800h, corresponding to 60 ECTS;
  • the student’s weekly hourly workload is 45 h;
  • 1 ECTS point corresponds to 25-30 hours of student work needed to achieve the assumed learning outcomes;
  • weekly student workload necessary to achieve the assumed learning outcomes allows to obtain 1.5 ECTS;
  • work required to pass the course, which has been assigned 3 ECTS, constitutes 10% of the semester student load.
Language: Polish
Type of course:

obligatory courses

Requirements:

Introductory programming 1000-211bWPI

Short description:

The aim of this course is to teach specific programming tools and languages.

Full description:

The aim of this course is to teach specific programming tools and languages. The dynamic development of computer science results in new programming languages, environments and technologies emerging each day. The set of languages and tools which are worth being shown to the students enlarges each year. These topics are very important for everybody who wants to use computer science in practice. on the other hand the university curriculum is in a natural way aimed at showing those topics which are general enough and do not change to rapidly. There is also no physical possibility to show every new technology. to be able to combine these two attitudes (of novelty and of stability) these course has been introduced into our curriculum.

Bibliography:

Suited to a particular course.

Learning outcomes:

Knowledge

The students know in detail a selected tool or programming language [K_W02, K_W09, K_W10].

Skills

The students are able to complete programming projects in a selected tool or programming language [K_U05].

Competences

The students are able to acquire and develop on their own the knowledge concerning a selected tool or programming language [K_K04].

Assessment methods and assessment criteria:

The laboratory assignment. The details are given individually by particular tutors.

Classes in period "Winter semester 2023/24" (past)

Time span: 2023-10-01 - 2024-01-28
Selected timetable range:
Navigate to timetable
Type of class:
Classes, 30 hours more information
Coordinators: Agata Janowska
Group instructors: Marcin Benke, Jacek Chrząszcz, Paweł Gołąb, Andrzej Mizera, Przemysław Rutka, Aleksy Schubert, Łukasz Wnuk
Students list: (inaccessible to you)
Examination: Grading
Notes: (in Polish)

* 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

Course descriptions are protected by copyright.
Copyright by University of Warsaw.
Krakowskie Przedmieście 26/28
00-927 Warszawa
tel: +48 22 55 20 000 https://uw.edu.pl/
contact accessibility statement USOSweb 7.0.3.0 (2024-03-22)