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 2022/23" (zakończony)
Okres: | 2022-10-01 - 2023-01-29 |
![]() |
Typ zajęć: |
Ćwiczenia, 30 godzin
|
|
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 |
Zajęcia w cyklu "Semestr zimowy 2023/24" (jeszcze nie rozpoczęty)
Okres: | 2023-10-01 - 2024-01-28 |
![]() |
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, Wydział Nauk Ekonomicznych.