Moduł oferowany także w ramach programów studiów:
Informacje ogólne:
Nazwa:
Programowanie funkcyjne
Tok studiów:
2019/2020
Kod:
IINF-1-506-n
Wydział:
Informatyki, Elektroniki i Telekomunikacji
Poziom studiów:
Studia I stopnia
Specjalność:
-
Kierunek:
Informatyka
Semestr:
5
Profil:
Ogólnoakademicki (A)
Język wykładowy:
Polski
Forma studiów:
Niestacjonarne
Strona www:
 
Prowadzący moduł:
Dębski Roman (rdebski@agh.edu.pl)
Treści programowe zapewniające uzyskanie efektów uczenia się dla modułu zajęć

Kurs kładzie nacisk na zasady, techniki i wzorce programowania funkcyjnego, które są uniwersalne i przydatne w większości używanych obecnie języków programowania.

Opis efektów uczenia się dla modułu zajęć
Kod MEU Student, który zaliczył moduł zajęć zna i rozumie/potrafi/jest gotów do Powiązania z KEU Sposób weryfikacji i oceny efektów uczenia się osiągniętych przez studenta w ramach poszczególnych form zajęć i dla całego modułu zajęć
Wiedza: zna i rozumie
M_W001 Zna i rozumie podstawowe pojęcia paradygmatu funkcyjnego INF1A_W03 Zaliczenie laboratorium
M_W002 Zna podstawowe funkcyjne wzorce projektowe/obliczeniowe INF1A_W03 Zaliczenie laboratorium
M_W003 Zna podstawowe konstrukcje programistyczne języka Haskell INF1A_W03 Zaliczenie laboratorium
Umiejętności: potrafi
M_U001 Potrafi tworzyć (niewielkie) programy w języku Haskell INF1A_U05 Zaliczenie laboratorium
M_U002 Potrafi analizować i testować (niewielkie) programy napisane w języku Haskell INF1A_U05 Zaliczenie laboratorium
M_U003 Potrafi efektywnie wykorzystywać podstawowe funkcyjne wzorce projektowe/obliczeniowe INF1A_U05 Zaliczenie laboratorium
M_U004 Potrafi efektywnie używać narzędzi wspierających tworzenie oprogramowania INF1A_U07 Wykonanie ćwiczeń laboratoryjnych
Kompetencje społeczne: jest gotów do
M_K001 Potrafi współpracować w ramach małego zespołu programistycznego INF1A_K03 Wykonanie ćwiczeń laboratoryjnych
Liczba godzin zajęć w ramach poszczególnych form zajęć:
SUMA (godz.)
Wykład
Ćwicz. aud
Ćwicz. lab
Ćw. proj.
Konw.
Zaj. sem.
Zaj. prakt
Zaj. terenowe
Zaj. warsztatowe
Prace kontr. przejść.
Lektorat
32 16 0 16 0 0 0 0 0 0 0 0
Matryca kierunkowych efektów uczenia się w odniesieniu do form zajęć i sposobu zaliczenia, które pozwalają na ich uzyskanie
Kod MEU Student, który zaliczył moduł zajęć zna i rozumie/potrafi/jest gotów do Forma zajęć dydaktycznych
Wykład
Ćwicz. aud
Ćwicz. lab
Ćw. proj.
Konw.
Zaj. sem.
Zaj. prakt
Zaj. terenowe
Zaj. warsztatowe
Prace kontr. przejść.
Lektorat
Wiedza
M_W001 Zna i rozumie podstawowe pojęcia paradygmatu funkcyjnego + - + - - - - - - - -
M_W002 Zna podstawowe funkcyjne wzorce projektowe/obliczeniowe + - + - - - - - - - -
M_W003 Zna podstawowe konstrukcje programistyczne języka Haskell + - + - - - - - - - -
Umiejętności
M_U001 Potrafi tworzyć (niewielkie) programy w języku Haskell - - + - - - - - - - -
M_U002 Potrafi analizować i testować (niewielkie) programy napisane w języku Haskell - - + - - - - - - - -
M_U003 Potrafi efektywnie wykorzystywać podstawowe funkcyjne wzorce projektowe/obliczeniowe - - + - - - - - - - -
M_U004 Potrafi efektywnie używać narzędzi wspierających tworzenie oprogramowania - - + - - - - - - - -
Kompetencje społeczne
M_K001 Potrafi współpracować w ramach małego zespołu programistycznego - - + - - - - - - - -
Nakład pracy studenta (bilans punktów ECTS)
Forma aktywności studenta Obciążenie studenta
Sumaryczne obciążenie pracą studenta 128 godz
Punkty ECTS za moduł 5 ECTS
Udział w zajęciach dydaktycznych/praktyka 32 godz
Przygotowanie do zajęć 48 godz
Samodzielne studiowanie tematyki zajęć 48 godz
Szczegółowe treści kształcenia w ramach poszczególnych form zajęć (szczegółowy program wykładów i pozostałych zajęć)
Wykład (16h):

  1. Paradygmat funkcyjny na tle innych paradygmatów; krótka charakterystyka języka Haskell; podstawowe typy danych; składnia definicji funkcji; polimorfizm; inferencja typów (2 godz.)
  2. Leniwe obliczanie; rekursja; przetwarzanie list; dopasowanie wzorców (2 godz.)
  3. Funkcje anonimowe; funkcje wyższego rzędu; wzorzec “Collection Pipeline” (2 godz.)
  4. Definicje typów; typy algebraiczne; typy wyższego rzędu; klasy typów i ich instancje; moduły i importy; organizacja kodu źródłowego (narzędzie stack) (2 godz.)
  5. Operacje wejścia/wyjścia; funktory; funktory aplikatywne; monoidy (2 godz.)
  6. Monady (2 godz.)
  7. Elementy teorii kategorii (2 godz.)
  8. Kierunki rozwoju języków funkcyjnych (2 godz.)

Ćwiczenia laboratoryjne (16h):

Tematyka kolejnych zajęć laboratoryjnych odpowiada materiałowi omawianemu podczas wykładu (każdy wykład stanowi wprowadzenie do następujących po nim zajęć laboratoryjnych). Wyjątek stanowią ostanie zajęcia, które są poświęcone bibliotece QuickCheck.

Podczas zajęć (szczególnie ostatnich) wykorzystywane są elementy metody “peer learning”.

Pozostałe informacje
Metody i techniki kształcenia:
  • Wykład: Treści prezentowane na wykładzie są przekazywane w formie prezentacji multimedialnej w połączeniu z klasycznym wykładem tablicowym wzbogaconymi o pokazy odnoszące się do prezentowanych zagadnień.
  • Ćwiczenia laboratoryjne: W trakcie zajęć laboratoryjnych studenci samodzielnie rozwiązują zadany problem praktyczny, dobierając odpowiednie narzędzia. Prowadzący stymuluje grupę do refleksji nad problemem, tak by otrzymane wyniki miały wysoką wartość merytoryczną.
Warunki i sposób zaliczenia poszczególnych form zajęć, w tym zasady zaliczeń poprawkowych, a także warunki dopuszczenia do egzaminu:

Kolokwium zaliczeniowe (dwa terminy w sesji) dla studentów, którym nie uda się zgromadzić co najmniej 50 punktów podczas zajęć.

Zasady udziału w zajęciach:
  • Wykład:
    – Obecność obowiązkowa: Nie
    – Zasady udziału w zajęciach: Studenci uczestniczą w zajęciach poznając kolejne treści nauczania zgodnie z syllabusem przedmiotu. Studenci winni na bieżąco zadawać pytania i wyjaśniać wątpliwości. Rejestracja audiowizualna wykładu wymaga zgody prowadzącego.
  • Ćwiczenia laboratoryjne:
    – Obecność obowiązkowa: Tak
    – Zasady udziału w zajęciach: Studenci wykonują ćwiczenia laboratoryjne zgodnie z materiałami udostępnionymi przez prowadzącego.
Sposób obliczania oceny końcowej:

Ocena końcowa jest taka jak ocena z zaliczenia laboratorium, a ta wyznaczana jest wg regulaminu studiów na podstawie sumy punktów zgromadzonych podczas całego semestru (maks. 100 punktów za kartkówki).

Sposób i tryb wyrównywania zaległości powstałych wskutek nieobecności studenta na zajęciach:

Zaległości powstałe wskutek nieobecności studenta na zajęciach laboratoryjnych można uzupełniać z inną grupą po wcześniejszym uzgodnieniu z prowadzącym (tej innej grupy).

Wymagania wstępne i dodatkowe, z uwzględnieniem sekwencyjności modułów :

Podstawowa wiedza z zakresu przedmiotów: wstęp do informatyki, algorytmy i struktury danych, algebra, analiza matematyczna, matematyka dyskretna i logika matematyczna.

Zalecana literatura i pomoce naukowe:

Podstawowa:

  1. Miran Lipovaca, Learn You a Haskell for Great Good!, http://learnyouahaskell.com

Uzupełniająca:

  1. Bryan O’Sullivan, Don Stewart, and John Goerzen, Real World Haskell, http://book.realworldhaskell.org/read/
  2. Graham Hutton, Programming in Haskell, Cambridge University Press, 2007
  3. Simon Thompson, Haskell: the Craft of Functional Programming, Addison-Wesley, 2011
Publikacje naukowe osób prowadzących zajęcia związane z tematyką modułu:

D. Krzywicki, Ł. Faber and R. Dębski: Concurrent agent-based evolutionary computations as adaptive dataflows. Concurrency and Computation: Practice and Experience, 2018, DOI: 10.1002/cpe.4702

Informacje dodatkowe:

None