Voglio condividere un libro chiamato Structure and Interpretation of Computer Programs, abbreviato in CISP. È un libro un po’ vecchio ma molto interessante.
Il libro si occupa dei linguaggi di programmazione. Nello specifico, si utilizza il linguaggio scheme per introdurre i concetti più importanti della programmazione.
Il libro non è pensato per chi inizia a programmare, ma per chi vuole capire quali sono i componenti fondamentali di un linguaggio di programmazione, come si costruisce un interprete e come si costruisce un compilatore.
Gli autori, Harold Abelson e Gerald Jay Sussman, hanno anche registrato delle videolezioni nel ben lontano 1986 all’MIT in cui trattavano alcune tematiche del libro.
È possibile trovare la playlist a seguire:
Spero possa essere interessante. Personalmente, questo corso, mi ha fatto capire il potere espressivo dei linguaggi LISP-like. Ho ritrovato in queste lezioni la gioia di imparare l’informatica, in un periodo estremamente frustrante dell’università.
Un giorno ne parlerò anche su yt.
Infine, colgo l’occasione anche per far riflettere su questo fatto: nel 1986 l’MIT già registrava le lezioni. In italia invece nel 2024 molte università ancora non riescono a registrarle. Questo per far capire il gap di ~20-40 anni.
Per ora la materia più interessante affrontata all’uni è stata proprio linguaggi di programmazione, non ho dato analisi solamente ma dubito che mi farà impazzire, in materie come algoritmi e strutture dati sto avendo un prof a dir poco incompetente, quanto vorrei fare una foto alle sue slide per farvi vedere che codice ridondante e privo di logica fornisce ai suoi studenti(2 return identici che si sarebbero potuti evitare tranquillamente).Dato che già sapevo programmare (non sono assolutamente esperto ma le basi le so)materie come programmazione e laboratorio di informatica non mi han dato alcun valore aggiunto.
Mi ha appassionato molto studiare cose come gerarchia di Chomsky o gli automi,quindi grazie per lo spunto approfondirò in futuro,ho visto che anche tsoding ha fatto una serie dove crea un compilatore c in php,ho molta voglia di implementare prima o poi del codice che ha queste cose alla base.
Mi dispiace per la brutta esperienza. Purtroppo non mi sorprende.
Comunque, rispetto alla mia esperienza di Informatica a Tor Vergata, algoritmi è stato uno dei pochi corsi in cui i sono trovato bene, sia triennale che magistrale. Non la consiglio comunque come università perché è estremamente disorganizzata, e i corsi buoni sono pochi. Però ecco ad esempio per ASD è stata veramente formativa. Puoi prendere spunto dai materiali dei professori, che caricano online ogni anno, ti metto il link a seguire
Dato che è uscito questo discorso in futuro aprirò un topic in community cosi da confrontarci un po’ per quanto riguarda l’esperienza universitaria(voglio prima dare analisi che ho lasciato dall’anno scorso e prenderla in maniera più tranquilla ,al momento sono abbastanza in ansia) ,come al solito ti ringrazio per queste fonti anche se al momento voglio spolparmi per bene il canale di Dave Churchill(colui che ha fatto il COMP4300 sul game development), aspetterò la fine del corso di asd per recuperare eventuali lacune.
Tornando in tema una delle prime idee che mi è venuta in mente seguendo il corso di linguaggi di programmazione è stata quella di implementare una calcolatrice .
Viene sempre proposta sul web come uno dei progetti per principianti ma onestamente è stato sempre un qualcosa che ho interpretato come complesso nel momento in cui si vuole implementare un qualcosa che non si fermi solamente ai semplici calcoletti ,magari non sono bravo io nelle programmazione, ma trovo che diversi concetti utilizzati dagli interpreti/compilatori possano essere applicabili anche nello sviluppo di una calcolatrice ma ancora non ho fatto ricerche per vedere come sono implementate queste cose in calcolatrici reali ,quasi quasi quando arrivererà il turno di imparare python come si deve ,dato che adesso quando utilizzo quel linguaggio scrivo del codice a dir poco “da cani ”, un bel progetto python con la libreria tkinter per implementare una calcolatrice non sarebbe male. Ripeto non so se la mia idea di utilizzare degli automi per riconoscere calcoli validi può essere una cavolata o è un metodo valido non ho mai approfondito molto è un idea rimasta lì da quando ho frequentato quel corso ma mi ispirano molto software come photomath e mi sono sempre chiesto come ragionino, da ciò che ho capito calcolabilità e complessita che frequenterò nel secondo semestre andrà ad approndire ulteriormente quegli argomenti magari potranno nascere spunti in più(devo prima passare analisi prima di dire a un computer come fare i calcoli bisogna saperli fare ).
Si la calcolatrice può essere un progetto interessante, specialmente se sviluppi tutta le pipeline di processamento.
Per farla breve, fondamentalmente avviene nei seguenti step:
Input: l’input è una stringa di caratteri, ovvero un singolo blocco che contiene tutti i simboli relativi al calcolo, tipo 3*2+10/2*5.
Lexing: il primo step è quello di spezzare la stringa in tokens, dove un token lo puoi immaginare come una unità atomica del tuo linguaggio di riferimento.
Parsing: a questo punto i tokens vengono messi assieme per formare delle strutture ad albero chiamati Abstract Syntax Tree (AST). Questi codificano la struttura dell’espressione.
Evaluation: La struttura dell’AST viene utilizzata per valutare l’espressione.
Questo tipicamente è l’approccio per sviluppare un interprete molto semplice, senza troppe ottimizzazioni. Poi in realtà nei linguaggi moderni gli steps sono assai più complessi ed otimizzati, ma in ultima analisi il funzionamento è questo
Qui il focus non sarebbe neanche fare una cosa grafica, quella la si può fare alla fine, ma una funzione, chiamala calculator, che legge una stringa e ti ritorna un valore numero. Bel progettino.
Questo progetto fa una cosa simile, ma implementa un piccolo interprete per LISP.