et en

Härmel Nestra lõputöö teemad

ML moodulprogrammeerimise ja Haskelli tüübiklasside võrdlus

Kuivõrd on Haskelli tüübiklassidega võimalik väljendada sama mis ML võimsa moodulisüsteemi abil? (Sarnasele küsimusele, ainult vastupidises suunas, vastas oma bakalaureusetöös nüüdne doktorant Martin Pettai.) Teema sobib funktsionaalsest programmeerimisest huvitatud bakalaureusetudengile.

Õppematerjali visualiseerimise süsteemid

Õigusega öeldakse, et üks pilt räägib rohkem kui tuhat sõna. Seda enam on rääkida läbimõeldud piltide järgnevustel, interaktiivsetel mängudel ja videotel. Piltide parem infoedastusvõime võrreldes tekstiga annab põhjust neid kasutada ka õpetamises. Näiteks on aines "Algoritmid ja andmestruktuurid" viimastel aastatel kasutatud algoritmide läbimänguslaide, mis visualiseerivad aines õpetatavate algoritmide tööpõhimõtet. Need on genereeritud Härmel Nestra loodud süsteemiga. 2016 kevadest pärineb Hiie Villi bakalaureusetöö, mille sisuks oli selle süsteemi täiendamine.

Õppematerjali visualiseerimise teemal on võimalik teha veel mõndagi.

  • AA-s kasutatavale visualiseerimissüsteemile kasutajaliidese loomine. See teema eeldab kaasnevat laiemat käsitlust, sest paljalt kasutajaliidese loomine ei anna bakalaureusetöö mahtu välja. Näiteks võib töö anda ülevaate Haskelli graafikateekidest, võrrelda nende võimalusi ja kasutusmugavust nt tuntud Java graafikateekidega, ja konkreetse süsteemi kasutajaliides oleks seejuures põhinäide.
  • Muude õppeainete materjali visualiseerimine. Ained ei tarvitse olla seotud programmeerimise ja algoritmidega. Nt matemaatikafaktid võivad olla hästi visualiseeritavad. Tuleks võtta mingi loogiliselt kokkukuuluv ports materjali, mis on hästi visualiseeritav, ja teha see ära.

Kõikide teemade juurde käib loomulikult ka ülevaate andmine juba olemasolevatest sarnase eesmärgiga loodud süsteemidest/saitidest, loodav süsteem peaks omama nendega võrreldes mingit lisaväärtust.

Matemaatilised arvutused

Bakalaureusetöö eesmärgiks võib olla mõne matemaatikas huvipakkuva jada/suuruse väljaarvutamise senisest täielikumalt/täpsemalt, kasutades teadmisi matemaatikast koos informaatikastuudiumi vältel omandatud arvutusliku optimeerimise oskusega. Olenevalt uute ideede tekkimisest võib teemast hiljem välja kasvada ka magistritöö.

Kategooriateooria tulemuste lahtikirjutamine

Programmeerimise teoreetilised uurimused viiakse tihti läbi kategooriateooria raamistikus. Kategooriateooria on matemaatika haru, mis on osutunud piisavalt üldiseks ja mugavaks teoreetilise arvutiteaduse tulemuste n-ö majutamiseks. Lõputöös võib võtta mõne(d) uuema(d) tulemuse(d) ja esitada koos täieliku detailse tõestusega (allikates on tõestused puudu või suurte lünkadega, mille täitmist eeldatakse lugejalt). Asjakohased on muidugi ka selgitused valitud tulemuste rakenduste kohta informaatikas.

BabyPythoni edasiarendamine

Filipp Ivanovi 2012 kirjutatud bakalaureusetöös on tehtud algust Pythoni staatiliselt tüübitud alamhulga arendusega. Sellise minikeele (BabyPythoni) loomise oodatav kasutus on programmeerimise algõpetuses. Staatiline tüüpimine võimaldab tüübivigadest juba kompileerimise käigus kasutajale teada anda. Pythoni dünaamilise tüüpimise korral võib tüübivigane programm käima minna, mistõttu võib tüübivigu olla keeruline avastada ja lokaliseerida, eriti algajal. Samuti piirab loodav keel oluliselt Pythoni süntaksit, jättes välja keerukamad konstruktsioonid, mis pole ette nähtud algkursuses omandamiseks ja võivad olulisemate konstruktsioonide õppimist takistada. Süntaksipiirangud on mitmeastmelised (e nt kursuse edenedes saab piiranguid järjest maha võtta).

Esiteks oleks Filipp Ivanovi loodud keel vaja lõpuni implementeerida. Lisaeesmärk oleks selle keele integreerimine Aivar Annamaa poolt arendatava Thonny IDEga. Töö sobib bakalaureuse- või magistritudengile, kes ei karda Haskellis programmeerimist (BabyPython on implementeeritud Haskellis).

Funktsionaalse keele implementeerimine

Funktsionaalsete keelte implementeerimine on tunduvalt keerulisem kui klassikaliste imperatiivsete keelte implementeerimine. Funktsionaalse keele arvutusmasin peab olema palju "targem", sest erinevalt imperatiivsest programmist ei sätesta programmeerija funktsionaalses keeles koodi kirjutades programmi täitmise detaile ise.

Lõputöö annaks ülevaate funktsionaalse keele efektiivsest implementeerimisest: problemaatika, metoodikad, laiskuse ja agaruse erinevus, erinevused imperatiivse keelega, semantika kirjeldamine jne, ja muidugi mingi realisatsioon ka. Olenevalt käsitluse põhjalikkusest sobib teema ärksale bakatudengile, kes on funktsionaalsetest keeltest ja programmeerimiskeelte realiseerimisest huvitatud, või ka magistritudengile.

Veebiarendus PureScriptis

Veebiarenduse keeled on kogu oma ajaloo vältel olnud kurikuulsad oma ebaturvalisuse poolest. JavaScript pole küll kõige hullem näide, kuid oma nõrkused on temalgi. Hiljuti on loodud Haskelli-laadne funktsionaalne prorammeerimiskeel PureScript, mis kompileeritakse JavaScriptiks ja mille kasutus on samuti veebiprogrammeerimine. Bakalaureusetöö võiks anda ülevaate veebitegemisest PureScripti abil ja selle raames tuleks luua PureScriptis ka üks dünaamiline veebisait. Teema sobib tudengile, kes tahaks luua mingil teemal veebisaiti ning otsib uudset ja arendavat võimalust selle teostamiseks.

Mittestandardsed programmeerimiskeelte semantikad

Standardseks loetakse semantikat, mis kirjeldab programmi tegevust enam-vähem vastavalt reaalsele protsessile. Lubatud on detailidest abstraheerimine. Sellest hälbiv semantika on mittestandardne. Kuid ka sellistel on praktilisi rakendusi. Näiteks mitmesugused kogumissemantikad on kasulikud programmianalüüside korrektsuse näitamisel. Härmel Nestra on oma teadustöös uurinud transfiniitseid semantikaid, mis kujutavad programmide tööd jätkuvana pärast lõpmatut tsüklit. Selliste semantikate rakendused on selliste programmiteisendajate korrektsuse näitamisel, mis eemaldavad või vahetavad koodiosi nii, et lõpmatu tsükkel võib asenduda normaalselt lõpetava koodiga.

Uurida võib, millised transfiniitsed semantikad on mainitud rakenduste jaoks sobivad erinevate programmikonstruktsioonide olemasolul (nt tõenäosuslikult töötavad käsud, mitmelõimelisus, rekursioon). Tegu on klassikalises mõttes puhtteoreetilise valdkonnaga. Sobib eelkõige kraadiõppe tudengile, kellele meeldib matemaatika ja soovib programmeerimisele vaadata läbi matemaatika prisma.