Języki i narzędzia programowania III
Informacje ogólne
Kod przedmiotu: | 1000-225bJNP3 |
Kod Erasmus / ISCED: |
11.303
|
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
|
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 |
Przejdź do planu
PN CW
CW
WT CW
CW
ŚR CW
CW
CW
CZ PT CW
|
Typ zajęć: |
Ćwiczenia, 30 godzin
|
|
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 |
Właścicielem praw autorskich jest Uniwersytet Warszawski.