august 30, 2017

HajaMõtteid Haskellist

Küsitlesin oma staazhikat tarkvarakolleegi nime Haskell suhtes.
Olin küll üllatunud, aga mitte nii väga, kui vastuseks tuli, et ta pole kuulnudki sellist nime.

Selline eluterve konservatism selliste jamade suhtes peab mingil ajal välja
kujunema. Andku Haskell Curry (pildil) mulle andeks - ma mõtlen jama all temanimelist programmeerimiskeelt ja jätan õiguse epiteedi jama asemel millalgi hakata kasutama jälle selliseid sõnu nagu "elegantne", "ilus", "veavaba" ja nii edasi ...
Mina eelmisel "semestril" (sügisel) tegelesin selle asjaga pool semestrit ja siis töö kõrvalt õppimise produktina jätsin järele. See polnud hea plaan, võinuks ilusti asja
selgeks teha, aga see selleks. Haskel ongi laisk keel (lazy!). Arvutab midagi välja vaid siis, kui väga vaja. 
Haiglapalati mõned päevad andsid võimaluse eksootikaga jälle tutvust teha.
Ei taha tegelda millegi väga reaalsega ja samas oli mingisugune krunt juba ka all. 
Praegu tundub, et FP on üsna ülehaibitud asi, umbes nagu Unix - Linux ja mina olen väga hea objekt, kellele sellist eksootikat müüa. 
Loete seda minu blogist mingi aeg tagasi. Sealt nähtub väga rohelise
Unix fänni suhtumist.
Linuxil on koht serveritega õiendamisel olemas ja fännidele ka koduarvutina,
- laske käia. Kui on palju vaba aega, siis võib muutuda ka Linux-i guruks. 
Aga hoiak, et C on hea ja C++ on jama on IMHO kahetsusväärne. Torvaldsi järgi ei maksa oma samme seada. Ta võib olla progemise geenius, aga geeniuse klaverimäng võib olla väga vilets õpetaja. C++ peaks siiski lõpuks C nimelise dinosauruse asendama. Või mingi kolmas asi. Punkt.
C-l on tänapäeval mingi koht mingite väga algeliste mikroprotessorite progemisel küll olemas, aga varsti mahuvad kõik C++ teegid ka väga ilusti isegi suvalise minikiibi sisse ära.
Aga selle vanamoodsusega tegelemisest võib vähemasti kasu olla näiteks C++ õppimisel ja mujalgi. Nii et päris mahavisatud C-ga tegeldud aeg ei ole.

Aga nüüd Haskellist veidi:
Haskellil on koht siiski vaid akadeemilise kursuse raames teatud mõtteviisi omandamisel.
Kui aga reaalselt tööturule lähed, siis loed üsna tihti, et ...
kohustuslik Pythoni või Java tagapõhi või midagi sarnast...
Nii et on valida 2 variandi vahel - mitte üldse tegelda FP-ga või üsna palju 
tegelda.
  Vähe tegelda on ilmselt kõige viimane valik (ja seda ma tegin).
Mõned märkused Haskell suhtes (jätan õiguse oma seisukohti 180 kraadi muuta)

1) Kui olete sõrme FP-le andnud, ei pääse erinevate raamistike ja keelte paabelist kuhugi.
Reaalne projekt võib-olla on siiski Scalas. Aga akadeemikute rõõmuks võib alustada Haskellist, nagu väga hea mõte on õppida enne itaalia keele omandamist ladina keele selgeks. Kuid see mõte jääb tavaliselt ajapuuduse taha kinni.

2) "Ei usu!"
  Ärge uskuge juttu, et Erasthotenese sõel on reaalselt efektiivne Haskellis
kirja panna. Selle algoritmi tõeline realisatsioon Haskellis on üsna pikk.
  Ärge uskuge kiire sorteerimise (quicksordi) kräppi. See kood on jama, mis sellest, et ühe rea peal.
  Ärge uskuge seisundivaba maailma olemasollu. Sellist asja ei ole ega tule. Haskellis on see asi tehtud
niinimetatud MONAADIDE kaudu ja mis asjad need on, saan selgeks vastavalt edasisele vajadusele haiglapalatis (reaalses)
viibida. Seal on sobiv koht eksootika üle mõtisklemiseks.
Ärge uskuge (see on teadmine AA-st, tänud ülikoolile selle eest), et jube tore mõte on fibonacci arve (ja ka muud sarnast) kodeerida nii: 
f(n) = f(n-1) + f(n-2).
Proovige nii välja rehkendaa f(100), siis saate aru.
Samamoodi ei tasu uskuda igat sorti ekspertide kräppkoodi (k.a. allakirjutanu. Kusagil blogirulli ajaloos on
lugu, kus ma võrdlesin fibonacci rekursiivset koodi tavalise koodiga ja olin väga leilis rekursiivse kräppvariandi peale. Ikka see üherealisus müüb).
Korraliku pusimise korral võib aga tõesti üles leida mõne probleemi lahendamisel need 2 rida, mis Haskellis reaalselt asja ära ajavad ja kusagil teises keeles mitte.
3) Haskell aga on olnud paljudele keeltele inspiratsioooni (loe mahakirjutamise) allikas. Osa püütonist on laenatud Haskellist, k.a. treppimine või taandamine (indentation).
Või siis need kõrgemat järku funktsioonid - js-s ja Pythoniski ja kus kõik veel on sees
map, filter etc... f-d. Väga ilusad asja kusiganes nad olemas on ja tänud FP-le nende tavaprogrameerimisse
jõudmise eest.
4) FP hoiak seisundivaba maailma suhtes võib olla küll samalaadne võimalusega paradiisi pääsemiseks (ja muu sarnane targutamine meenutab ka kristlust), aga vähem pattu (seisundeid) võiks maailmas olla küll.
Palju lõbusam oleks elada...
5) Ja see tarastamine, kus patused seisundid elavad kusagil IO maailmas ja puhas ja ilus kood on siis kõrval on omaette tore.
[Aga see on kindlasti koht, millest ALUSTADA, sest muidu avastad järsku, et oskad küll ilusat puhast liivakasti koodi kirjutada, aga mitte ühtegi reaalset programmi. Ma ei teagi, kas ma näiteks leian aega liivakastist väljumiseks. Tahaks mõnda harjutusprogrammi, näiteks sudoku
lahendamist, haskelli portida, aga selleks on vaja vaba aega...
]

6) FP tegelemise pluss on kindlasti see, et saad aru, mis imelikud asjad on lambda nimelised objektid C# -s ja mujalgi. Nagu ladina keelgi annab põhja enamike Euroopa keelte mõistmiseks ja eriti võõrsõnakartusest vabanemiseks. 

Tehisintellekti haibist: 
Kuna haiglapalatis sai loetud ka Andres Laane tehisintellekti käsitlevat raamatut, siis tundub, et FP võib-olla on üks samm AI omandamisel, aga sain raamatust aru sedaviisi, et kõige olulisem hüpe viimasel kümnendil
on neuronvõrkude progemine. See koht on aga mulle täiesti tume maa ja mis keeles seda kõige paremini saab teha, sellele jään ka vastuse võlgu.
Andres Laane raamat reaalse programmeerimisega ei tegelenud.
Nii et sellest võib olla mõni teine kord, kui jälle targutamise tuju peale tuleb.
[On täiesti võimaik, et kolistan varsti AI nimelises ämbris oma jalgu. Kuulun nende inimeste klassi,
kes õpivad vaid oma kogemustest].









1 Comments:

Blogger Kaur said...

ja kõik unub. ma olen kunagi FP lambdadest aru saanud küll. (haskellis reaalselt kirjutanud ei ole.) aga kui pythoni lambdat nägin, tegin ikkagi möhh. aju on midagi maha salvestanud, aga kui praktikat pole, siis pole.

august 30, 2017 5:04 PM  

Postita kommentaar

<< Home