ASSOCIAZIONE EX ALLIEVI LICEO CLASSICO LAGRANGIA
  • HOME
  • CHI SIAMO
    • STORIA
    • CONSIGLIO DIRETTIVO
  • ASSOCIARSI
  • LIBRI
  • EVENTI
  • AREA SOCI
  • BLOG
  • CONTATTI
  • HOME
  • CHI SIAMO
    • STORIA
    • CONSIGLIO DIRETTIVO
  • ASSOCIARSI
  • LIBRI
  • EVENTI
  • AREA SOCI
  • BLOG
  • CONTATTI
Search

Il blog degli ex allievi

La Ricetta. Un ex classicista nel paese dell’Informatica

12/5/2021

0 Comments

 
Foto
Sono un ex allievo del Liceo Classico "Lagrangia" e ora studio ingegneria informatica al Politecnico di Torino. Forse sono anche altro, ma questo dovrebbe bastare per poter leggere l’articolo seguente. Per convincervi a leggere, invece, non saprei cosa aggiungere. Però posso anticiparvi che potreste trovare una formula per tradurre le versioni e un modo creativo per utilizzare il vostro vecchio dizionario di greco nei ritagli di tempo...
Oggi vorrei presentarvi uno dei miei più fidati compagni degli ultimi anni. È una parola, una parola che ho sentito spesso pronunciare, in vari ambienti, ma molte volte ho avuto la sensazione che chi la usava non ne conoscesse bene il significato. Si tratta di un concetto molto importante, basilare oserei dire, dell’informatica. Ma poiché l’informatica ultimamente è entrata prepotentemente nella vita quotidiana di tutti, è diventata una parola di un certo rilievo anche tra i non addetti ai lavori.
Non vedo perché tergiversare ancora, la parola è algoritmo. Tanto per cominciare, ha la a minuscola e non è quell’entità misteriosa e oscura che ci nasconde i post di alcuni amici su Facebook o ci mostra le pubblicità personalizzate su Google. O meglio, quelle “cose” sono particolari tipi di algoritmi (o entità più sofisticate composte anche da quei particolari tipi di algoritmi), ma sono molto complesse e, soprattutto, tenute gelosamente segrete dalle potenti aziende che le sfruttano. Perciò mettiamole da parte, almeno per questo articolo.
Un algoritmo è, in poche parole, una sequenza finita di istruzioni che risolvono un problema. Gli algoritmi si possono trovare in qualunque campo: esempi di algoritmi con cui sicuramente avete familiarità sono le istruzioni per montare un mobile dell’Ikea o un giocattolo della Lego, le indicazioni stradali per raggiungere un determinato posto, o ancora una ricetta culinaria. Gli algoritmi ricevono dei “valori in ingresso” (farina, uova, acqua e tutti gli altri ingredienti) e portano chi li esegue a produrre dei “valori in uscita” (la torta). Sono importanti in ambito informatico perché sono l’unico modo che abbiamo per dire ai computer che cosa vogliamo che facciano, ma naturalmente sono un concetto conosciuto e studiato già ben prima dell’invenzione dei computer…
Per chiarire meglio come funziona un algoritmo, vorrei fare un esempio con una situazione che ben conoscete: immaginiamo di avere davanti una versione di greco. 
Ecco… magari molti di voi avrebbero preferito la ricetta della torta, ma siamo sul blog degli ex allievi del Liceo Classico, e credo che se siete arrivati fin qui una spolverata di greco non sarà così spiacevole…
Per prima cosa diamo uno sguardo agli ingredienti, ciò che noi informatici chiamiamo “strutture dati”. Abbiamo un foglietto fotocopiato, di solito una metà di A4 che ci fa sperare che la versione non sia troppo lunga, su cui possiamo leggere il titolo, una breve introduzione e un numero variabile di righe scritte in alfabeto greco. Chiamiamo questo oggetto, in gergo, “file di input”. C’è poi un foglio protocollo bianco, su cui dovremo scrivere la nostra traduzione, che con molta fantasia da qui in avanti rinomineremo “file di output”. Il terzo e ultimo elemento è il dizionario: vi lascio liberi di scegliere se immaginarvi un Rocci o un Montanari, l’algoritmo dovrebbe funzionare in entrambi i casi.
  • Strutture dati:
    • file di input;
    • file di output;
    • dizionario;
La prima istruzione che mi sento di dare è quella di leggere attentamente l’introduzione e il testo in greco, per farsi un’idea di cosa andremo a trattare. Un’istruzione di questo tipo difficilmente verrebbe data a un computer, perché aprire e leggere un file diverse volte è un’operazione piuttosto dispendiosa, ma l’essere umano ha la fortuna di avere l’occhio collegato in maniera praticamente istantanea al cervello, perciò un’attenta lettura prima di iniziare ci costa poco e ci darà grandi vantaggi alla fine.
  • Leggi l’introduzione e il testo per avere un’idea generale;
Come secondo passo, applichiamo il divide et impera (viene chiamato proprio così, in latino, anche in ambiente informatico, anche se qualcuno preferisce usare l’inglese divide and conquer). Si tratta di un “paradigma”, che in questo contesto non è un modello di trasformazione di un verbo nei diversi modi e tempi, ma un modello di strategia per affrontare diversi problemi; questo in particolare, molto utilizzato, consiste nello scomporre il problema di partenza in tanti problemi più piccoli e più facili da risolvere. Nel nostro caso, possiamo prima dividere l’intero brano in periodi, mettendo con la matita una doppia barretta in corrispondenza di ogni punto, punto alto o punto e virgola, poi evidenziare tutti i verbi e separare ogni periodo in proposizioni, disegnando con la matita una barretta singola: se tutto è stato fatto correttamente, all’interno di ogni divisione dovrà trovarsi un solo verbo e tutto ciò che fa riferimento ad esso.
  • Dividi il brano in periodi;
  • Per ogni periodo:
    • Dividi il periodo in proposizioni;
Abbiamo frantumato il blocco di una dozzina di righe che avevamo all’inizio in tanti piccoli elementi di poche parole ciascuno, che sembrano molto meno minacciosi. Ora per ciascuno di essi bisogna capire di quale tipo di proposizione si tratta e in che rapporto è con le altre (è una principale? una subordinata? di che tipologia?) guardando il modo e il tempo del verbo e l’eventuale connettore all’inizio della frase, individuare il soggetto, gli altri complementi e i costrutti particolari. Per semplicità riassumerò tutto questo con la formula “analizzare la proposizione”, ma questa fase è una delle più complesse e delicate di tutto il procedimento (e, duole dirlo, bisogna aver studiato!).
  • Per ogni proposizione:
    • Analizza la proposizione;
Finalmente, una volta capìta la struttura della nostra proposizione, possiamo cercare sul dizionario le parole che non conosciamo o a cui ci piacerebbe dare una sfumatura di significato particolare, e abbozzare un primo tentativo di traduzione.
  • Se non conosci la parola:
    • Cerca sul dizionario;
  • Traduci la proposizione;
Non è ancora finita: con il passaggio precedente abbiamo trasformato le proposizioni greche in frasi italiane equivalenti, ma ancora scollegate le une dalle altre. Adesso bisogna rileggere quello che abbiamo prodotto e sistemarlo, modificando qualche parola che ci sembra stonare nel contesto generale, eliminando le ripetizioni, cercando espressioni migliori in italiano, spostando le frasi che spesso, nella nostra lingua, stanno meglio in un ordine diverso da quello in cui le aveva disposte l’autore greco. Se avete capito cosa voglio dire, lasciatemi riassumere tutto questo con la seguente istruzione:
  • Rileggi e sistema la traduzione;
  • Scrivi la traduzione definitiva sul file di output;
Non dimentichiamo quest’ultimo passaggio, altrimenti il compito non potrà essere corretto, e anche se avevamo in mente la più bella traduzione immaginabile, nessuno potrà leggerla!
Ricapitolando, ecco in tutto il suo splendore l’algoritmo completo per una versione di greco:
  • Strutture dati:
    • file di input;
    • file di output;
    • dizionario;
  • Leggi l’introduzione e il testo per avere un’idea generale;
  • Dividi il brano in periodi;
  • Per ogni periodo:
    • Dividi il periodo in proposizioni;
    • Per ogni proposizione:
      • Analizza la proposizione;
      • Se non conosci la parola:
        • Cerca sul dizionario;
      • Traduci la proposizione;
  • Rileggi e sistema la traduzione;
  • Scrivi la traduzione definitiva sul file di output;
Questo, a grandi linee, è il metodo che ho usato e affinato nei cinque anni passati al "Lagrangia", ben prima di sapere nel dettaglio cosa fosse un algoritmo, e devo dire che ha funzionato piuttosto bene (lo lascio qui a disposizione, se per caso a qualcuno potesse essere utile: potrei aprire una digressione sul software open source, ma non mi sembra il caso. Magari sarà per un’altra volta…). Naturalmente esistono altri algoritmi, magari migliori, come esistono tante varianti della stessa ricetta che portano allo stesso risultato, o esistono tante strade che conducono ad uno stesso punto.
Faccio notare alcune parole chiave all’inizio di alcune istruzioni: "Per ogni" e "Se". Sono presenti in tutti i linguaggi di programmazione (naturalmente nella versione inglese "for"/"for each" e "if") e identificano i costrutti di base, le componenti elementari, di qualsiasi algoritmo: comprendere come funzionano costituisce una buona parte di ciò che c’è da sapere sugli algoritmi. In poche parole, il costrutto "Per ogni" si chiama ciclo: consiste nel ripetere un certo numero di istruzioni (nell’esempio, quelle spostate più a destra rispetto alla riga che contiene la parola chiave) per un determinato numero di volte o fino al verificarsi di una determinata condizione (sempre nell’esempio, finché non finiscono le frasi della versione). In questo secondo caso, è possibile trovare anche la parola chiave "while", "finché". Il costrutto introdotto dal "se", invece, si chiama ramificazione: alcune istruzioni si eseguono solo se si verificano determinate condizioni, altrimenti se ne eseguono altre (nel nostro esempio, "se non conosci la parola, cerca sul dizionario, altrimenti non fare niente e vai avanti": la seconda parte è sottintesa perché non c’erano istruzioni particolari da aggiungere, ma se ce ne fosse stato bisogno, sarebbe bastato inserire la parola chiave che ho tradotto con "altrimenti", "else"). 
Vorrei aggiungere ancora una considerazione: ho liquidato la ricerca sul dizionario come un’operazione banale, che non richiedeva ulteriori spiegazioni. In informatica non è proprio così: i problemi di ricerca sono tra i più frequenti, e anche tra i più studiati.
Mi servono ancora un paio di termini tecnici: ogni voce del dizionario è composta da una "chiave" (il lemma, in grassetto e in ordine alfabetico) e un "contenuto" (la definizione). Noi, partendo da una chiave, vogliamo confrontarla con quelle presenti nel dizionario fino a trovarne una uguale, e a quel punto leggerne il contenuto.
La prima difficoltà, nel nostro caso, è ottenere la chiave: dal momento che la versione non è fatta solo di avverbi, non è così immediato risalire al nominativo singolare dei nomi o soprattutto alla prima persona singolare presente dei verbi (ok, diciamocelo chiaramente: in alcuni casi è maledettamente difficile…).
Superato questo scoglio, cosa possiamo dire a qualcuno che non ha mai visto un dizionario (o a un computer, che di solito non può avere esperienza) che cosa deve fare? Da dove deve iniziare a confrontare le chiavi? Visto da questa prospettiva il problema non sembra più così banale: se lo facciamo partire dall’inizio potrebbe non arrivare mai alla parola voluta prima della fine delle due ore. Rischia di diventare lunga anche se lo facciamo partire dall’inizio di ogni lettera, sfruttando le coste colorate o le linguette che spesso si vedono nei dizionari più "vissuti". Idea! Lo facciamo partire dalle prime due lettere, avremmo meno voci da scorrere! E perché non dalle prime tre o quattro? Saremmo sempre più vicini! Beh… in questo caso non basteranno 24 linguette, ma ce ne vorranno 576, 13.824 o 331.776: capite bene che diventerebbe un grosso problema anche solo trovare la linguetta giusta!
Appurato che la "ricerca lineare", come viene chiamato l’algoritmo appena descritto, non può essere una soluzione efficiente al nostro problema, vi presento la "ricerca dicotomica". Avrete sicuramente già sentito questa soave parola greca in filosofia, qui la utilizziamo nel suo significato più immediato e brutale: tagliare in due.
Ci portiamo a metà del dizionario e confrontiamo la nostra chiave con quella che ci troviamo davanti: se ci è andata bene, sono uguali, e allora abbiamo finito; altrimenti, la chiave che cerchiamo può venire prima oppure dopo nell’ordine alfabetico. A questo punto, tagliamo in due il dizionario e teniamo solo la metà che ci interessa: ora abbiamo un nuovo dizionario grande la metà, andiamo di nuovo al centro e ripetiamo esattamente come prima.
Come chi è stato attento avrà sicuramente notato, abbiamo applicato di nuovo il paradigma divide et impera e siamo passati da un mattone di cui tutte le povere schiene degli studenti conoscono la mole ad avere, nel caso più sfortunato, un dizionario composto da una sola parola, che siamo capaci di consultare senza perdere troppo tempo.
La cosa sorprendente è che con il mio GI, che sostiene di contenere 140.000 voci (non ho mai controllato di persona, ma spero possiate comprendere), vi posso assicurare che utilizzando questo sistema è possibile trovare qualsiasi parola in, al massimo, diciotto passaggi! Per chi se lo stesse chiedendo, è il logaritmo in base due di 140.000 arrotondato per eccesso, ma come si arrivi a questo risultato è una storia un po’ più lunga e non me la sento di raccontarla qui ed ora…
Come vedete, questo secondo algoritmo è molto più veloce del primo. Naturalmente ci sono modi ancora più veloci, come la ricerca “intelligente” che gli studenti arrivano a padroneggiare inconsciamente dopo anni di esperienza, ma è più difficile da spiegare al nostro amico di cui sopra, che non ha mai visto un dizionario, o a un computer, anche se su quest’ultimo si stanno concentrando alcune tra le più recenti ricerche nell’ambito dell’informatica: il cosiddetto machine learning. Tuttavia, la "ricerca dicotomica" ha una grossa limitazione: presuppone che le chiavi siano già state in qualche modo ordinate in precedenza. Ma questa è un’altra storia…
Ho tenuto per la conclusione la prima domanda che personalmente, da ex classicista, mi sarei fatto subito dopo la definizione: da dove deriva la parola algoritmo? Ha un suono grecheggiante, ma i significati non sembrano incastrarsi tanto bene: la radice alg- rimanda alla sfera del dolore, ad ἄλγος e a parole come analgesico, nostalgia, sciatalgia eccetera; ῥυθμός vuol dire ritmo o cadenza; ma un ritmo addolorato o un dolore ritmato non assomigliano proprio a quello che stiamo cercando… E non sembra venirci in aiuto neanche ἀριθμός, numero, da cui derivano parole come aritmetica o logaritmo. 
In questo caso, però, non c’entra il greco: la parola algoritmo deriva dalla traslitterazione del nome di un matematico arabo, nato nell’attuale Uzbekistan nel IX secolo, Muhammad Al-Khwarizmi. La cosa curiosa è che a lui si può ricondurre anche un’altra parola entrata nell’italiano corrente: infatti dal titolo della sua opera principale, "al-Kitāb al-mukhtaṣar fī ḥisāb al-jabr wa al-muqābala" viene la parola algebra.

Michele Pistan
0 Comments



Leave a Reply.

    Ex allievi Liceo Classico “Lagrangia”

    Un blog per raccontare il Liceo Classico "Lagrangia" di Vercelli e quanti hanno trascorso nelle aule di via Duomo anni importanti della propria formazione. Storie, interviste, approfondimenti culturali e molto altro a cura dell'Associazione ex allievi.

    Archivi

    June 2021
    May 2021
    March 2021
    January 2021
    December 2020
    November 2020
    October 2020
    July 2020
    June 2020
    May 2020
    March 2020

    Categorie

    All
    2020
    Attualità
    Coronavirus
    Cultura
    Greco
    Informatica
    Maturità
    Musica
    News
    Prof Ex Allievi
    Ricordi
    Vita Al Liceo

    RSS Feed

Powered by Create your own unique website with customizable templates.
  • HOME
  • CHI SIAMO
    • STORIA
    • CONSIGLIO DIRETTIVO
  • ASSOCIARSI
  • LIBRI
  • EVENTI
  • AREA SOCI
  • BLOG
  • CONTATTI