Miksi? 

Funktionaalinen ohjelmointi on löytänyt tiensä moniin ohjelmointikieliin, kuten C#:n, Javaan, JavaScriptiin, Pythoniin, R-kieleen, Swiftiin, Scalaan, Kotliniin, C++:n ja moneen muuhun. Tyypillisimpiä funktionaalisista kielistä lainattuja ominaisuuksia imperatiivisissa kielissä ovat map, filter ja reduce-funktiot. Hybridikielissä, kuten Scalassa voidaan tarvittaessa koko ohjelmistoratkaisu suunnitella funktionaalisesti, mutta esimerkiksi Java-ohjelman suunnittelu funktionaalisten periaatteiden mukaan ei ole mahdollista, vaikka muutamia funktionaalisista kielistä tuttuja ominaisuuksia siinä voidaankin käyttää. 

Oppimalla funktionaalisen ohjelmoinnin peruskäsitteet voit kasvaa paremmaksi ohjelmoijaksi - opit näkemään imperatiivisilla työkaluilla tekemäsi ohjelmistoratkaisut funktionaalisen paradigman valossa ja tulevaisuudessa osaat hyödyntää funktionaalista ohjelmointityyliä siellä, mihin se parhaiten sopii.

Haskell on ehdottomasti paras kieli opetella funktionaalisen ohjelmoinnin perusteet, sillä se tarjoaa parhaiten sovellettavat abstraktiot minkä tahansa muun ohjelmointikielen funktionaalisten ominaisuuksien hyödyntämiseen (Swift, Java, Kotlin, Scala, Python jne.). Kun opit funktionaalisen ohjelmoinnin perusideat, ne on helppo nähdä sovellettuina eri kielissä - se edellyttää kuitenkin paukkuja perusideoiden opiskeluun, mikä taas edellyttää ahkeraa opiskelua. 

Tavoite

  • Valita toimiva kehitysympäristö Haskell-kielen opetteluun
  • Tunnistaa imperatiivisen ja funktionaalisen ohjelmoinnin ero ja ymmärtää molempien hyvät ja huonot puolet
  • Ymmärtää mitä tarkoittaa lause "functions are first class citizens"
  • Ymmärtää mitä ovat sivuvaikutukset ja miten ne liittyvät Haskell –ohjelmointiin
  • Tunnistaa Haskell-kielen peruskäsitteet ja saada käsitys, miten niitä voisi käyttää
  • Saada tuntumaa kielen syntaksiin pieniä harjoituksia tekemällä
  • Ymmärtää lambda-laskennan perusajatus ja tunnistaa kategoriateorian vaikutus Haskell-kielen rakenteeseen
  • Ymmärtää miten perinteinen funktion määritelmä (matematiikka) eroaa funktionaalisen ohjelmoinnin funktio-käsitteestä(lambda-laskennan näkökulma)
  • Oppia testaamaan oma koodi ja vakuuttua funktioiden toimivuudesta
  • Oppia käyttämään avustavasti muissa ohelmointikielissä yleisimmin esiintyviä korkeamman kertaluvun funktioita (erityisesti map. filter ja reduce)
  • Tunnistaa työkalut, joiden avulla funktioiden toimivuutta voi testata

Kohderyhmä

  • Henkilöille, jotka ohjelmoivat sujuvasti jollain ohjelmointikielellä, mutta haluavat oppia lisää funktionaalisesti ohjelmoinnista Haskellilla tai henkilöille, jotka haluavat opiskella Haskellin ensimmäisenä ohjelmointikielenään.

Kurssin sisältö

  • Funktionaalisen ja imperatiivisen ohjelmoinnint erot ja yhtäläisyydet
  • Haskell-kielen perusominaisuudet: laiskuus, puhtaus ja staattinen tyypitys
  • Funktion määritteleminen perinteisesti
  • Funktion määritteleminen lambda-termein
  • Listojen käyttö
  • map, filter ja fold/reduce -funktioiden käyttö
  • QuickCheck-työkalu ja miten funktioiden toimivuuden voi sen avulla varmistaa  

Kurssin kesto
1 päivä

Kurssin luonne
50% luentoja, yhteistä pohdintaa ja keskustelua käsitteistä ja 50% harjoituksia

Esitiedot
Tietokoneen hyvät käyttötaidot, algoritmisen ajattelun perustaidot