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: | (brak danych) | |
Prowadzący grup: | Marcin Benke, Jacek Chrząszcz, Andrzej Mizera, Przemysław Rutka, Aleksy Schubert | |
Lista studentów: | (nie masz dostępu) | |
Zaliczenie: | Zaliczenie na ocenę |
Właścicielem praw autorskich jest Uniwersytet Warszawski, Wydział Nauk Ekonomicznych.