Uniwersytet Mikołaja Kopernika w Toruniu - Centralny punkt logowania
Strona główna

Programowanie równościowe i funkcyjne

Informacje ogólne

Kod przedmiotu: 1000-I2PRF
Kod Erasmus / ISCED: (brak danych) / (0613) Tworzenie i analiza oprogramowania i aplikacji Kod ISCED - Międzynarodowa Standardowa Klasyfikacja Kształcenia (International Standard Classification of Education) została opracowana przez UNESCO.
Nazwa przedmiotu: Programowanie równościowe i funkcyjne
Jednostka: Wydział Matematyki i Informatyki
Grupy: Inf., II st, stacjonarne, przedmioty do wyboru
Strona przedmiotu: https://plas.mat.umk.pl/moodle/course
Punkty ECTS i inne: (brak) Podstawowe informacje o zasadach przyporządkowania punktów ECTS:
  • roczny wymiar godzinowy nakładu pracy studenta konieczny do osiągnięcia zakładanych efektów uczenia się dla danego etapu studiów wynosi 1500-1800 h, co odpowiada 60 ECTS;
  • tygodniowy wymiar godzinowy nakładu pracy studenta wynosi 45 h;
  • 1 punkt ECTS odpowiada 25-30 godzinom pracy studenta potrzebnej do osiągnięcia zakładanych efektów uczenia się;
  • tygodniowy nakład pracy studenta konieczny do osiągnięcia zakładanych efektów uczenia się pozwala uzyskać 1,5 ECTS;
  • nakład pracy potrzebny do zaliczenia przedmiotu, któremu przypisano 3 ECTS, stanowi 10% semestralnego obciążenia studenta.

zobacz reguły punktacji
Język prowadzenia: polski
Wymagania wstępne:

elementarna wiedza w zakresie teorii teorii oblicizalności

Rodzaj przedmiotu:

przedmiot fakultatywny

Całkowity nakład pracy studenta:

30 godz. – wykład

5 godz. - egzamin

30 godz. - ćwiczenia:

50 godz. - praca własna - bieżące przygotowanie do zajęć, studiowanie literatury,

35 godz. praca własna - przygotowanie do egzaminu.

RAZEM: 150 godz.

6 pkt. ECTS

Efekty uczenia się - wiedza:

student posiada podstawową wiedzę o lambda-rachunku w zakresie niezbędnym do rozumienia podstaw teoretycznych programowania funkcyjnego

posiada wiedzę o systemach przepisywania termów pozwalającą na rozumienie semantyki operacyjnej dla języków programowania funkcyjnego

ma uporządkowaną wiedzę ogólną w zakresie konstrukcji programów funkcyjnych i równościowych (K_W02)

zna składnie i semantykę języka programowania Haskell (K_W03)

ma ogólną wiedzę na temat paradygmatu programowania funkcyjnego (K_W10)

Efekty uczenia się - umiejętności:

posiada podstawowe umiejętności w zakresie programowania równościowego i funkcyjnego (język Haskell)(K_U19)

potrafi pozyskiwać informacje z literatury, baz wiedzy, Internetu i integrować je i śledzić rozwój teorii i praktyki programowania funkcyjnego (K_U02)

Efekty uczenia się - kompetencje społeczne:

Kreatywność: Myśli twórczo w celu udoskonalenia istniejących bądź stworzenia nowych rozwiązań (K_K02)


Analityczne myślenie: potrafi ocenić mozliwości zastosowania programowania funkcyjnego do rozwiązania danego problemu informatycznego(K_K03)

Komunikatywność: Potrafi jasno i precyzyjnie przedstawic realizowany projekt informatyczny (K_K05)

Metody dydaktyczne podające:

- wykład problemowy

Metody dydaktyczne poszukujące:

- laboratoryjna
- projektu

Skrócony opis:

Celem przedmiotu jest zapoznanie studentów z zyskujacym coraz większą popularność i znajdującym coraz więcej zastosowań PROGRAMOWANIEM RÓWNOŚCIOWYM I FUNKCYJNYM

Wykład koncentruje sie na przedstawieniu podstaw teoretycznych - podstawowych paradygmatów programowania równosciowego i funkcyjnego. Problemy te przestawiane równolegle z prezentacją języka Haskell. Na ćwiczeniach organizowanych w formie Otwartych Warsztatów Programowania Funkcyjnego studenci realizuja projekty pozwalajace poznać praktykę programowania funkcyjnego i wykorzystywanie tego sylu programowania w róznych językach (np. Scala, Python).

Pełny opis:

Programowanie funkcyjne tworzone jest od dziesiątków lat przez najlepszych informatyków na świecie -- bardziej w zaciszu uniwersytetów, niż pod dyktando zarządów korporacji. Bardziej po to, aby poznawać nowe struktury typów, algorytmy i maszyny, a nie po to aby jak najszybciej zadowolić kolejnego klienta.

Pomimo to, programowanie funkcyjne - jego elementy i całkowicie odmienna idea - znajduje powoli swoje miejsce w biznesie. Bardzo prawdopodobne jest to, że dzięki działaniom twórców popularnych języków programowania i dzięki cechom samego programowania funkcyjnego, jego rola na rynku będzie wzrastać.

Świat programowania funkcyjnego to świat wyjątkowy dla każdego informatyka stykającego się z nim po raz pierwszy. To świat koncepcyjnie bardzo oddalony od sprzętu komputerowego, który znamy, jednak tak głęboko przebadany i poddany optymalizacji, że czołowe kompilatory języków funkcyjnych produkują dla naszych komputerów kod szybszy od wielu innych popularnych języków programowania.

Całkowicie odmienna idea programowania, zbudowana na innych podstawach niż język maszynowy znanych procesorów, wymaga od początkujących programistów porzucenia sporej części "oczywistości", które nagromadziły się w głowie podczas lat programowania w językach imperatywnych - proceduralnych czy obiektowych.

Dlatego programowanie funkcyjne to ćwiczenie umysłu, wiedza obowiązkowa dla geeków i przygoda wysoce wskazana dla wszystkich osób, które naprawdę chcą znać się na informatyce.

Zapraszamy na Otwarte Warsztaty Programowania Funkcyjnego

Ich celem jest odważne wejście bez kompleksów w ten, na pierwszy rzut oka, dziwny i nieprzyjazny świat - bez warunków wstępnych - po to, aby odnaleźć i zrozumieć zasady, na których jest on oparty. Wspólnie ocenimy, czy programowanie funkcyjne ma szanse być ważnym narzędziem dla programistów i firm, które ich (Was!) zatrudniają.

Zajęcia podzielone będą na bloki związane z praktyką programowania funkcyjnego i na te, które związane będą z teorią, którą naprawdę warto poznać.

W części praktycznej skupimy się na języku Haskell, który stanowi trzon dla programowania funkcyjnego. Haskell jest polem eksperymentów informatyków z całego świata - miejscem wyjątkowym, w którym na bieżąco widać rozwój zaawansowanych teorii informatycznych ...które przynajmniej postaramy się nazwać. :)

GHC to z kolei najważniejszy kompilator dla Haskella -- spróbujemy mu się jedynie przyjrzeć, ponieważ dokładne poznanie sposobu jego działania również mogłoby być tematem osobnych zajęć.

Poznanie podstaw Haskella i GHC powinno umożliwić nam (przynajmniej krótką) rozmowę na temat:

- wygodnych sposobów programowania w Haskellu (Eclipse czy może coś specjalnego?);

- podstaw algorytmiki programów funkcyjnych (tu zazwyczaj nie ma pętli - jest prościej?);

- sposobów interakcji Haskella z innymi językami (żadne obowiązujące prawo nie nakazuje pisać w Haskellu całych aplikacji);

- dodatkowych bibliotek do Haskella (bo bez nich nie dałoby się napisać Frag - Haskell Quake);

- rozszerzeń systemu typów i równoległości (bo tu przeprowadza się najwięcej eksperymentów naukowych).

Celem bloków teoretycznych jest ukazanie idei, na których oparte są pojęcia spotykane w praktyce programowania funkcyjnego. Zaliczamy do nich przede wszystkim:

- języki i systemy formalne (pamiętasz lambda wyrażenia?)

- systemy redukcji napisów i grafów (bo nie jest wszystko jedno w jaki sposób wykonuje się program, a kompilator musi o tym zdecydować)

- poznanie roli typów (czy typy są w ogóle potrzebne?)

Dla zainteresowanych smakoszy: szczypta logiki i matematyki konstruktywnej - gratis.

---

Wykład (podstawowe zagadnienia):

  • Programowanie deklaratywne i imperatywne - porównanie
  • Abstrakcyjne systemy redukcji
  • Systemy przepisywania (term rewriting systems)
  • lambda rachunek bez typów
  • lambda rachunek z typami
  • transformacje grafów
Literatura:

Literatura:

  • - G. Jarzembski, Skrypt do wykładu, dostępny na stronie moodle przedmiotu
  • - strona internetowa języka Haskell: http://www.haskell.org
  • a tam np: Tutorial(http://www.haskell.org/tutorial/)
  • H. Daume III, Yet Another Haskell Tutorial, http://www.cs.utah.edu/~hal/docs/daume02yaht.pdf
  • wszelkie źródła internetowe umiesczone jako linki na stronie przedmiotu
  • - elektroniczne wersje prac i ksiażek umieszczone na stronnie przedmiotu
Metody i kryteria oceniania:

Laboratorium (ćwiczenia): Samodzielnie napisana w języku programowania funkcyjnego,rozbudowana aplikacja,

Wykład: Egzamin ustny ,którego tematem jest praca zaliczeniowa studenta.:student samodzielnie wybiera temat związany z programowaniem funkcyjnym po zaakceptowaniu przez wyklładowcę opracowuje go. Ostatnim etapem jest rozmowa na temat przygotowanej pracy pisemny .

Przedmiot nie jest oferowany w żadnym z aktualnych cykli dydaktycznych.
Opisy przedmiotów w USOS i USOSweb są chronione prawem autorskim.
Właścicielem praw autorskich jest Uniwersytet Mikołaja Kopernika w Toruniu.
ul. Jurija Gagarina 11, 87-100 Toruń tel: +48 56 611-40-10 https://usosweb.umk.pl/ kontakt deklaracja dostępności USOSweb 7.0.2.0-1 (2024-03-12)