Individuaalprojekt
Projektiga saab punkte juurde teenida või eksamit asendada. Projekte esitatakse suulise eksamina. Selle tähtaeg on sisuliselt semestri lõpus. Palun võtke Vesaliga Zulipis ühendust, kui on soov projekti teha. Projekte tutvustame esmalt huviringis!
Hinne parandamise võimalused
Hindamine on täisautomaatne. See on ühelt poolt väga objektiivne: eksami ajal saab jooksvalt teada, mis hinne on käes, aga mõnikord võib ta olla liiga karm ja südametu. Meil on seetõttu mõned võimalused, et saaks pakkuda võrdlemisi õiglane viis hinnete parandamiseks.
- Eksamil tehtud vigade analüüs (1-5 punkti; mõnikord rohkem). Kui jäi paremast hindest ainult paar punkti puudu, siis võib programmeerimise osa kohta esitada meile vigade paranduse ja lühidalt Zulipis või Zoomis seletada, miks viga tekkis ja mida oled sellest õppinud! Mõnikord läheb väga pisikese vea tõttu rohkem punkte kaduma, seega tasub kahtluse korral meiega ühendust võtta.
- Referatiivne või õppemetoodiline töö (kuni 15 punkti). Madalamate hinnete parandamiseks ja kui napilt kukkusid eksamil läbi, siis võib järeltöö asemel teha natuke suurem vigade analüüs. Eriti kasulik on meile näidata, kuidas oleksime pidanud Sind õpetama. Kui mõni teemakäsitlus siin aines näiteks ei meeldinud, siis palun näita meile, kuidas saaks paremini teha! Väga teretulnud on paremate või alternatiivsete ülesannete ideed (koos testidega). Kui teed korralikult, siis on võimalik saada kuni 10 lisapunkti. Referaati tuleb isiklikult suulises eksamis kaitsta, kus tuleb oma seisukohti/ettepanekuid lahti selgitama.
AKT näidiskeele loomine (eksami asemel)
Pakume võimalust eksami tegemise asemel eksamiülesannet koostada! See on natuke aeganõudvam kui eksami tegemine. Seda tasub kaaluda, kui ei saa õigel ajal eksamit teha või tahad mitme päeva peale seda tööd hajutada. Selle ülesanne lahendamiseks on vaja teha järgmist:
- Leida mõni programmeerimiskeele konstruktsioon, mida teistes näidiskeeltes ei esine!
- Oluline on mõelda abstraktse süntaksipuu peale: range nõue on see, et Sinu keeles esineb mõni AST klass, mille struktuur või tähendus erineb teiste omadest.
- See ei ole päris must-valge, vaid hinnatakse 20 punkti skaalas: kui on väga väike muudatus, siis võib ikkagi lahendada, aga saab selles kategoorias väga vähe punkte. Rohkem punkte saab, kui realiseerida huvitavama keele konstruktsiooni, näiteks massiive või kirjeid, erindeid, monaade, funktsioonikutseid või mõnda teist paradigmat.
- Loomingulisust piirab siin asjaolu, et keelt peab saama CMa peal käivitada (kui tahad lõviosa eest punkte saada). Selleks võib ka C masinale käske juurde lisada ja neid implementeerida.
- Tuleb teha meie järgmisest koodibaasist oma fork ja pull request järgmiste muudatustega.
- Juurkataloogi README.md faili lisada oma keele nimi, lühike kirjeldus (mis keele konstruktsioon seal esineb) ja autori nimi.
- Kataloogi src/main/java lisada oma keele jaoks pakett ja sinna sisse lisada oma README.md fail, mis sisaldab AST klasside kirjelduse ja väike näide keele konkreetse süntaksi kohta.
- Kui võtame esimese pull requesti vastu, siis võib hakkata koostada selle jaoks ülesanne. See tähendab, et tuleb ise koostada kõik eksami praktilise osa komponente. Töö esitamiseks tuleb uuesti teha pull request, mida hindame järgmiselt.
- Korrektsed AST klassid (AbstractNode alamklassid). Selle eest saab kuni 20 punkti nagu üleval mainitud.
- Ülesande kirjeldus (README.md). Selle eest saab kuni 10 punkti sõltuvalt teksti detailsusest ja arusaadavusest.
- Interpretaator, kompilaator ja parseri implementatsioonide eest võib saada sama palju punkte nagu eksamil.
- Siin saab aga punkte selle järgi, kui hästi on ülesanne tükeldatud erinevateks tasemeteks, mille jaoks on eraldi testid. Iga ülesande kohta võiks olla 8 erinevat taset. Sa ei pea neid asserte nii palju tegema kui meil eksamitel! Siin piisab, kui iga taseme juures on 1-3 asserte. Pigem on eesmärk näidata, et keeles on erinevaid aspekte, mida testida.
- Iga mõistlikult koostatud taseme eest, mida implementatsioon läbib, saab 1/8 selle ülesande eest antavatest punktidest.
- Kui on segane, kuidas peab üles ehitama, siis vaata näited!
Tähtaeg on põhimõtteliselt eksamisessiooni lõpp, aga mõistlik oleks oma idee kõigepealt esitada, kuna see peab erinema ka teiste tudengite omadest ja loeb see järjekord, milles neid pull requeste on tehtud.
Huvilistele projekt!
Kui aine tundus huvitav ja eksam tundub liiga lihtne, siis oleks variant juba programmianalüüsi teemaga tutvust teha. Me arendame siin kahte analüsaatorit, mida võib uurida eksami projektidena:
- Põder: Java baitkoodi analüüs (kirjutatud Scalas).
- Goblint: C programmide analüüs (kirjutatud OCaml-is).
- GobPie: Kasutajaliides interaktiivse staatilise analüüsi jaoks.
Me tutvustame selle aasta huviliste projektid muidugi huviringis. Järgijäänud projekte ilmuvad siia...