prof. Amato
Seguono un insieme di argomenti per una possibile tesina triennale. Alcuni di questi argomenti possono essere trattati più a fondo e costituire materiale per un corso di "approfondimento di informatica".
- programmazione funzionale: si intende per programmazione funzionale uno stile di programmazione in cui il valore di una variabile, una volta assegnato, non può più essere modificato. Nella programmazione funzionale i cicli sono vietati, sostituiti dalla ricorsione. Sebbene i linguaggi come Python e Java in teoria consentano di aderire ai principi della programmazione funzionale, le librerie standard di cui sono dotati e alcune scelte di implementazione rendono ardua e inefficiente questa pratica. L'idea di questa tesina è approfondire il concetto di programmazione funzionale, e studiare uno dei linguaggi più adatti a questo stile di programmazione (ad esempio Scala, ML, Haskell, Clojure).
- programmazione logica: la programmazioen logica è un paradigma di programmazione in cui si utilizza la logica dei predicati (o, meglio, un frammento di tale logica) per scrivere programmi. L'idea di questa tesina è introdurre il paradigma della programmazione logica e un linguaggio appartenente a questa famiglia (ad esempio PROLOG).
- gestione della memoria nei linguaggi a basso livello: nei linguaggi come Python o Java la gestione della memoria (quando riservare memoria per un oggetto, quanta memoria riservare e quando liberare questa memoria) è una attività completamente delegata alla macchina virtuale su cui viene eseguito il bytecode. Nei linguaggi a livello più basso, come C o Rust, la gestione della memoria è compito del programmatore. Obiettivo di questa tesina è studiare il linguaggio C, in particolar modo per ciò che riguarda la gestione della memoria.
- linguaggio macchine delle CPU Intel: obiettivo di questa tesina è studiare il linguaggio macchina (o, meglio, l'assembly) di una vera CPU (a differenza del Little Man Computer che forse avete studiato durante il corso di Fondamenti di Informatica). Prenderemo come riferimento il linguaggio assembly delle cpu Intel e AMD a 64bit, e impareremo a scrivere piccoli programmi in assembly.
- sicurezza software: per chi svolge una delle tue tesine di sopra, una possibile attività di "approfondimento di informatica" correlata è quella di software security, ovvero studiare le problematiche di sicurezza nella scrittura di software a basso livello e gli errori più comuni che consentono di violare la sicurezza di un programma (facendogli svolgere cose che non dovrebbe, rivelare segreti, funzionare in assenza di licenza, etc...) L'idea è di riprendere il contenuto delle lezioni di software security della Cyberchallenge.
- logica e intelligenza artificiale: obiettivo di questa tesina è capire come il linguaggio della logica dei predicati e delle proposizioni ci consente di descrivere dei problemi matematici più o meno astratti (per esempio, la soluzione di un Sudoku) e come utilizzare sistemi automatici (come Z3) per trovare la soluzione di questi problemi partendo da questa descrizione.