Languages and tools for programming III
General data
Course ID: | 1000-225bJNP3 |
Erasmus code / ISCED: |
11.303
|
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
|
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 |
Navigate to timetable
MO CW
CW
TU CW
CW
W CW
CW
CW
TH FR CW
|
Type of class: |
Classes, 30 hours
|
|
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 |
Copyright by University of Warsaw.