Ideal Learning

Hauskin tapa oppia

Miksi Haskell-kielen perusteet kannattaa ottaa vuoden 2019 oppimistavoitteeksi?

Miksi Haskellia kannattaa opiskella? 

Haskell-kieltä kannattaa opetella vaikkei koskaan Haskell-ohjelmia tulisi kirjoittamaankaan. Idea on aivan sama kuin matematiikassa. Matematiikkaa harjoitellaan, jotta tulavaisuudessa olisi käsitys, millaisia ongelmia matematiikan keinoin voidaan ratkaista – opetellaan ikään kuin ongelman luonne ja kokemuksen kautta soveltamaan matemaattisia menetelmiä vaikkapa fysiikassa. Funktionaalisessa ohjelmoinnissa on täysin sama ajatus. Kun funktionaalisen ohjelmoinnin ideat oppii, voi myöhemmin oppia näkemään tilanteita, joihin funktionaalinen ohjelmointi parhaiten sopii. 

Map, filter ja reduce 

Funktionaalisesta ohjelminnista tutut korkeamman kertaluvun funktiot esiintyvät eri mudoissaan nykyään jo kymmenissä ohjelmointikielissä. Näistä tunnetuimmet lienevät Java, JavaScript, Python, Scala, Kotlin, Swift, C++, C# ja F#. Korkeamman kertaluvun funktiot on helpompi ymmärtää, kun ne näkee toteutetun ilman imperatiivisen ohjelmointikielen tai olioparadigman mukanaan tuomaa syntaktista kohinaa. Näiden kolmen perusfunktion ymmärtäminen Haskell-kielellä helpottaa samojen funktioiden ymmärtämistä myös kaikissa muissa kielissä.  

Muuttumaton data (immutable data)

Ohjelmistossa on osia, joiden on toimittava aina täysin oikein ja usein myös osia, joille asetetaan vähäisempiä laatuvaatimuksia. Ei ole tolkullista tehdä kaikkea täydellisesti, jos hyväkin laatu riittää. Toisaalta on huomattava, että tietyt osat saattavat edellyttää poikkeuksellisen hyvää ja luotettavaa toimintaa. Ohjelmistoprojekteissa tulee toisinaan tarve varmistaa tietyn osan täydellinen toimivuus ja toisaalta järjestelmissä voi olla osia, joiden laatu voi olla keskinkertaisempikin. Puhtaan funktionaalisessa ohjelmassa, kuten Haskell-ohjelmassa ei ole lainkaan muuttuvaa dataa. Tämän vuoksi ohjelma on sekä helpompi testata että varmistua sen oikeellisuudesta – myös tilanteissa, joissa ohjelmaa suoritetaan rinnakkain usealla suorittimella. Muuttumattoman datan merkityksen oivaltaminen auttaa toteuttamaan  luotettavaa, helposti testattavaa ja vikasietoisia ohjelmia myös muilla ohjelmointikielillä. Haskell-kielellä tilatonta koodia oppii kirjoittamaan helposti, sillä Haskell-kieli on lähtökohtaisesti tilaton.  

Lambda-funktiot ja kuritus (lambda functions, currying)

Nimettömien, käyttökohteessaan määriteltyjen funktioiden käyttö on arkipäivää monessa nykyaikaisessa ohjelmointikielessä ja lambda-funktioiden puuttumista voitaneen nykytiedon valossa pitää yleiskäyttöiseksi katsotun korkean tason ohjelmointikielen heikkoutena. JavaScriptin toimivuus perustuu pitkälti kuritukselle sulkeuman muodossa. Myös monet muut ohjelmointikielet sisältävät ominaisuuksia, joiden avulla voidaan laatia niin nimettömiä funktioita kuin kutsua funktioita osissa (kuritus). Haskell-kielessä kuritus ja lambda-funktiot ovat hyvin näkyvästi esillä ja käsitteet ovat huomattavasti helmpompia oppia kuin esimerkiksi Java-kielellä. Java toki tarjoaa sekä kuritusta että nimettömiä funktioita, mutta käsitteiden oivaltaminen oliokohinan seasta on kokeneellekin ohjelmoijalle melkoinen haaste. Haskell paljastaa kurituksen ja nimettömien funktioiden ideat niin, että ne on helppo havaita myöhemmin muista ohjelmointikielistä ja ottaa heti käyttöön tuttuina käsitteinä. 

Funktionaalinen ohjelmointimalli on paras työkalu tekoälyalgoritmien kirjoittamiseen

Tekoälytoteutuksissa paras tapa kirjoittaa tekoälyn logiikka on funktionaalinen ohjelmointikieli. Tähän sopii hyvin niin Haskell kuin Scalakin tai jokin muu soveltuva kieli. Haskell on kielistä elegantein ja ilmaisuvoimaisin – lisäksi Haskell -kielessä on mahdollisimmn vähän syntaktista kohinaa. Python on monine tarjolla olevine kirjastoineen varsin hyvä työkalu myös, mutta Scala ja Haskell tarjoavat paremmat abstraktiot tekoälylaskennan esittämiseen mahdollisimman ymmärrettävästi ja selkeästi. 

Hauskaa alkanutta vuotta 2019 häntä heiluen!

Selma-koira  
 

 

Piditkö artikkelista? Suosittele sitä muillekin!

Facebook