Języki i narzędzia programowania II
Informacje ogólne
Kod przedmiotu: | 1000-224bJNP2 | Kod Erasmus / ISCED: |
11.302
![]() |
Nazwa przedmiotu: | Języki i narzędzia programowania II | ||
Jednostka: | Wydział Matematyki, Informatyki i Mechaniki | ||
Grupy: |
Przedmioty obowiązkowe dla II 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 kursy (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 letni 2021/22" (w trakcie)
Okres: | 2022-02-21 - 2022-06-15 |
![]() |
Typ zajęć: |
Ćwiczenia, 30 godzin ![]() |
|
Koordynatorzy: | Agata Janowska | |
Prowadzący grup: | Mateusz Gienieczko, Andrzej Głuszak, Paweł Gołąb, Michał Gruchała, Grzegorz Grudziński, Paweł Kucharczyk, Witold Rudnicki, Michał Sierakowski, Tomasz Waleń, Piotr Wojtczak | |
Lista studentów: | (nie masz dostępu) | |
Zaliczenie: | Zaliczenie na ocenę | |
Pełny opis: |
*** Grupa 1: C# i .NET - Mateusz Gienieczko C# to nowoczesny, wieloparadygmatowy język programowania oparty na multiplatformowym środowisku .NET. Skupia się na wygodzie i produktywności programisty, nie poświęcając przy tym bezpieczeństwa dzięki automatycznemu zarządzaniu pamięcią i rozbudowanej statycznej analizie. Celem zajęć będzie zapoznanie studentów z językiem C# i platformą .NET w praktyce, skupiając się na przykładowych programach i aplikacjach oraz ideach przyświecających projektantom C#-a. Porównane zostanie programowanie w C# do innych popularnych języków (Python, Java, C++, Rust, Go). Kurs będzie warsztatowy, oparty w dużej mierze na kodzie oraz interaktywnych notebookach, dzięki czemu studenci będą mogli własnoręcznie uruchamiać programy z zajęć i eksperymentować z językiem. Poglądowy program przedmiotu: - Podstawy języka, architektura platformy .NET - Typy referencyjne i wartości - Wyjątki - Testowanie z xUnit - Typy generyczne w .NET-cie - Nullability, Nullable Reference Types - Rekordy - Kolekcje - LINQ i extension methods - Pattern matching - Iterator methods (generatory) - Asynchroniczność z async/await - Parallelizm z PLINQ - Bazy danych - Entity Framework - Aplikacje webowe - Blazor i ASP.NET Core - Dynamiczne typowanie - Zaawansowane programowanie zorientowane na wydajność - ref structs, szczegóły Garbage Collectora, minimalizowanie alokacji, benchmarki - Przyszłość C#-a - proces tworzenia nowych feature'ów, static abstracts, discriminated unions, span params, pattern matching improvements, required properties Zasady zaliczania: Po zajęciach studenci dostaną małe zadanie domowe utrwalające materiał z ćwiczeń. Zadania będą udostępniane i sprawdzane przez GitHub Classroom. Dodatkowo, jedno zadanie będzie duże i będzie polegało na stworzeniu od zera małej aplikacji w C#. Orientacyjna punktacja: - 10 mikrozadań po 2 punkty, razem 20pkt. - Duże zadanie za 20pkt. Ocena dostateczna od 21pkt. Zasoby: - Dokumentacja .NET-a: https://docs.microsoft.com/en-us/dotnet/api/?view=net-6.0 - Podręcznik C#-a: https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp - Podręcznik Blazora: https://docs.microsoft.com/en-us/aspnet/core/blazor - Podręcznik Entity Framework: https://docs.microsoft.com/en-us/ef/core Literatura: - J. Albahari, C# 9.0 in a Nutshell (2021) - J. Skeet, C# in Depth, 4th Edition (2019) *** Grupa 2: Architektura i tworzenie współczesnych aplikacji webowych (+ programowanie reaktywne) 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 3: * - Tomasz Waleń Grupa jest częścią projektu TAG. Ocena z przedmiotu jest oceną z tego projektu. Szczegóły: https://sio2project.mimuw.edu.pl/display/~accek/Zasady+zaliczania+TAG-a *** Grupy 4 i 9 - Andrzej Głuszak i Piotr Wojtczak 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) *** Grupa 5: Architektura i infrastruktura mikroserwisów w aplikacjach internetowych - Michał Gruchała Celem zajęć będzie przedstawienie nowoczesnych technik budowy skalowalnych i wydajnych aplikacji internetowych, które składają się z wielu mikroserwisów, wykorzystują komunikację synchroniczną i operacje asynchroniczne. Jako przykład implementacji tych technik będziemy budować aplikację typu twitter, która zostanie zrealizowana w architekturze mikroserwisów, skonteneryzowana oraz wydana w środowisku Cloud. 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 Kubernetes / Docker) Komunikacja synchroniczna (http) i asynchroniczna (rabbitMQ) Środowisko chmurowe Zajęcia odbywać się będą w formie warsztatów, gdzie uczestnicy będą tworzyć własne rozwiązania oparte o prezentowane techniki. Kryterium oceniania: - za zadanie zaliczeniowe, polegające na napisaniu i zaprezentowaniu aplikacji sieciowej, będzie można otrzymać maksymalnie 10 punktów - ocena dostateczna od 6 pkt *** Grupa 6: Programowanie systemowe z/OS - Michał Sierakowski Celem przedmiotu jest wprowadzenie słuchaczy w zagadnienia administracji i programowania systemu operacyjnego z/OS, a jego zamierzonym efektem jest umiejętność zarządzania prostymi instancjami z/OS w całym spektrum funkcjonalności. Program obejmuje ponadto wprowadzenie do architektury komputerów IBM Z i najważniejszych (poza z/OS) systemów operacyjnych tej platformy: z/VM i Linux (s390x). Jest to przedmiot komplementarny do prowadzonych w ramach JNPIII 1000-225bJNP3 zajęć Wstęp do programowania w z/OS (grupa 3). Obydwa przedmioty mogą być realizowane w dowolnym porządku chronologicznym, jak również jako odrębne moduły funkcjonalne. Program: 1. Wprowadzenie do architektury i systemów operacyjnych serwerów rodziny IBM Z 2. Praca interaktywna w sesji TSO, procedury CLIST 3. ISPF/PDF, zarządzanie zadaniami (kolejki SDSF) 4. Model bezpieczeństwa systemu z/OS (RACF) 5. Język sterowania zadaniami JCL i język REXX 6. z/OS UNIX System Services 7. Komendy operatorskie, operacje konsoli sprzętowej i definiowanie konfiguracji IODF 8. Konfiguracja komunikacji międzysystemowej i zarządzanie stosem TCP/IP 9. Operacje instalacji, startu (IPL) i zatrzymania systemu 10. Zarządzanie podstawowymi usługami: DFSMS, CICS, DB2 w deweloperskiej wersji systemu (ADCD) Efekty kształcenia: 1. Ma zaawansowaną wiedzę na temat architektury IBM Z oraz struktury systemu operacyjnego z/OS 2. Konfiguruje i posługuje się mechanizmami środowiska z/OS (zarządzanie sesją, sterowanie systemem i wybranymi podsystemami) 3. Potrafi interpretować komunikaty systemowe i diagnozować błędy środowiska związane ze stanem systemu operacyjnego 4. Zarządza deweloperską wersją systemu z/OS (ADCD) Literatura: A. Salla, P. Oughton, ABCs of z/OS System Programming Volume 10, IBM International Technical Support Organization, 2018 K. Singh et al., ABCs of z/OS System Programming Volume 6, IBM International Technical Support Organization, 2014 L. Parziale, L. Fadel, S. Jon, ABCs of z/OS System Programming Volume 1, IBM International Technical Support Organization, 2018 L. Parziale, G. Cosimo, L. Kuehner, ABCs of z/OS System Programming Volume 2, IBM International Technical Support Organization, 2018 Kryterium zaliczania: - ocena końcowa na podstawie punktów z zadań realizowanych podczas zajęć (50%) oraz egzaminu (50%) *** Grupa 7: Android - Grzegorz Grudziński Tematem moich zajęć będzie środowisko Android, podstawowym językiem będzie Java. Będziemy omawiać budowę systemu, model budowy aplikacji dla niego, przejrzymy poszczególne API potrzebne przy budowie aplikacji o rozmaitej tematyce/funkcjonalności. Postaramy się zapoznać ze wszystkimi najważniejszymi obszarami funkcjonalnymi spotykanymi we współczesnych aplikacjach mobilnych: interfejsem użytkownika, pracą kodu w tle, komunikacją sieciową, API geolokalizacyjnym, obsługą czujników telefonu. Dla zaliczenia przedmiotu, studenci będą musieli (samodzielnie lub w grupach 2-3 osobowych) stworzyć jakieś ciekawe (choć niekoniecznie bardzo skomplikowane) aplikacje. *** Grupa 8: Pisanie narzędzi do Oracle przy użyciu C++ oraz QT - Paweł Kucharczyk Studenci będą pracowali nad rozwojem narzędzia Tora, które może służyć do tworzenia kodu oraz administracji Oracle (i jeszcze kilkoma innymi bazami). Narzędzie jest pisane w C++, z wykorzystaniem Qt - stąd wymagania. Działa przede wszystkim pod Linuksem, ale może być kompilowane dla Windows i Maca. W trakcie zajęć będą omawiane zagadnienia dotyczące zarządzania Oraclem - zakres materiału będzie dopasowywany do tych fragmentów/narzędzi z narzędzia Tora, które studenci wybiorą do pracy. Studenci będą też - „w poszukiwaniu inspiracji” - oglądali konkurencyjne narzędzia jak SQL*Developer, Enterprise Manager, Toad. Kryteria oceniania: Ocena na podstawie dwu etapowego projektu zaliczeniowego, za który można dostać łącznie 15 pkt. (I etap - 5, II etap - 10). W czasie zajęć będzie też można uzyskać do 3 pkt. 'aktywność' - np. w przygotowania i wygłoszenia prezentacji na temat jakiś aspektów QT. Ocena dostateczna od 8pkt. *** Grupa 10: Programowanie kart graficznych w technologii CUDA - Witold Rudnicki Celem przedmiotu jest zapoznanie studentów z dynamicznie rozwijającym się obszarem informatyki czyli praktycznym wykorzystaniem masywnie równoległych procesorów graficznych. CUDA - technologia zaproponowana i rozwijana przez firmę NVIDIA dominuje w obliczeniach naukowych ponieważ pozwala na stosunkowo szybkie opracowanie wydajnych kodów obliczeniowych. W ramach zajęć poruszone będą następujące zagadnienia: * Omówienie architektury procesorów graficznych * Omówienie architektury sprzętowej komputerów realizujących obliczenia z wykorzystaniem kart graficznych * Model programowania na kartach graficznych, * Implementacja modelu programowania GPU w CUDA * Analiza równoległości problemów obliczeniowych * Ograniczenia wydajności algorytmów równoległych - pamięć (przepustowość i latencja) - komunikacja (przepustowość i latencja) - operacje GPU (wydajności różnych operacji) - zapełnienie równoległych potoków przetwarzania * Optymalizacja wydajności algorytmów - identyfikacja wąskich gardeł - analiza alternatywnych rozwiązań - techniki optymalizacji. Studenci zapoznają się z tymi problemami w praktyce, implementując wybrane algorytmy obliczeniowe w języku CUDA C/C++. Kryteria oceniania: - zaliczenie na podstawie zadań wykonywanych w laboratorium w trakcie semestru, - sześć zadań o wzrastającym stopniu trudności; zadania będą punktowane w następujący sposób: zadania 1,2 : 2 pkt, zadania 3,4: 3 pkt, zadanie 5: 4 pkt, zadanie 6: 5 pkt, - do zaliczenia konieczne jest oddanie poprawnych rozwiązań wszystkich sześciu zadań (uzyskanie co najmniej połowy punktów za każde z nich), - ocena dostateczna od 13 pkt, ocena dost+ 14-15 pkt, ocena dobra 16-17 pkt, ocena db+ 18pkt, ocena bdb 19-20 pkt. |
Zajęcia w cyklu "Semestr letni 2022/23" (jeszcze nie rozpoczęty)
Okres: | 2023-02-20 - 2023-06-18 |
![]() |
Typ zajęć: |
Ćwiczenia, 30 godzin ![]() |
|
Koordynatorzy: | Agata Janowska | |
Prowadzący grup: | Grzegorz Grudziński, Paweł Kucharczyk, Tomasz Pawłowski, Michał Sierakowski, Tomasz Waleń | |
Lista studentów: | (nie masz dostępu) | |
Zaliczenie: | Zaliczenie na ocenę |
Właścicielem praw autorskich jest Uniwersytet Warszawski.