Archive for June, 2008

The Engines of Logic

Sunday, June 8th, 2008

It is interesting to contrast von Neumann’s views of computer programming as an activity with Turing’s. Von Neumann called it “coding” and made it clear that he thought of it as a clerical task requiring little intellect. A revealing anecdote tells of a practice at the Institute for Advanced Study computer facility of using students to translate by hand computer instructions written using human-readable mnemonics into machine language. A young hot-shot programmer proposed to write an assembler that would do this conversion automatically. Von Neumann is said to have responded angrily that it would be wasteful to use a valuable scientific tool to do a mere clerical job. In his ACE report, Turing said that the process of computer programming “should be very fascinating. There need be no real danger of it ever becoming a drudge, for any processes that are quite mechanical can be be turned over to the machine itself.”
The Engines of Logic, p. 192

Ho appena finito di leggere The Engines of Logic di Martin Davis, un saggio sulle vite e il lavoro dei logici che possono essere considerati i papà dell’elaboratore elettronico. E sono, secondo Davis:

  • Leibniz, perché è stato il primo a concepire l’idea di meccanizzare il ragionamento
  • Boole, perché ha inventato quella che oggi chiamiamo logica proposizionale o Booleana
  • Frege, perché ha esteso la logica proposizionale con la quantificazione (per ogni… esiste…)
  • Cantor, perché ha inventato il metodo di dimostrazione “diagonale”, che è stato poi messo a frutto da Goedel e da Turing
  • Hilbert, perché ha dato nuova linfa al progetto di Leibniz di ottenere un metodo per ottenere la risposta a qualsiasi domanda tramite il calcolo
  • Goedel, perché ha dimostrato che il progetto di Hilbert è irrealizzabile
  • Turing, perché ha definito con precisione il concetto di “problema computabile” (favolosi quegli anni… più o meno nello stesso periodo Hamming definiva con precisione il concetto di “informazione”. Bello che si possa dare una definizione precisa a concetti apparentemente sfuggenti.) Non solo: Turing ha anche concepito l’idea dell’algoritmo universale, ovvero di una singola macchina che è in grado di risolvere qualsiasi problema computabile. Da quest’idea nasce l’elaboratore di uso generale che conosciamo oggi: con il mio computer posso risolvere problemi di analisi matematica, archiviare indirizzi, editare immagini… non c’è limite.
  • Von Neumann, perché ha progettato l’architettura generale degli elaboratori che usiamo ancora oggi, e continueremo ad usare per un bel pezzo, visto che non ci sono all’orizzonte alternative plausibili.

L’argomento fondamentale del libro è che sì, gli ingegneri che hanno progettato l’hardware hanno la loro parte di merito, ma è l’idea logica a monte che è più importante e ha portato più lontano. Per fare un paio di esempi dal libro: Eckert e Mauchly, gli ingegneri che hanno costruito ENIAC, sono stati geniali per come sono riusciti a rendere affidabile una macchina costruita con 15000 tubi elettronici, componenti notoriamente inaffidabili. Però era basata sulla notazione decimale: pensate che spreco! La notazione binaria è molto più economica. Non solo, ENIAC comprendeva meccanismi specializzati per calcolare funzioni trascendenti, analogamente a quanto avveniva nei differenziatori analogici che erano le macchine di calcolo più avanzate dell’epoca. Ma in un calcolatore digitale non c’è bisogno di questi aggeggi, perché le funzioni trascendenti si approssimano con serie che possono essere calcolate con le ordinarie operazioni aritmetiche. I logici, invece, la sapevano più lunga. Già Leibniz era un sostenitore della notazione binaria. E Turing, nel suo ACE report, sosteneva l’idea che il calcolatore doveva implementare direttamente solo le operazioni più elementari, perché quelle più complesse (come quelle aritmetiche) potevano essere ottenute mediante quella che oggi si chiamerebbe “microprogrammazione”.

Ben scritto, avvincente e conciso.

Ci sono altri libri più approfonditi su questi argomenti; i seguenti sono sempre di divulgazione, tutti e tre veramente belli.

  • Turing: the Enigma, di Andrew Hodges. Grandissima biografia.
  • Goedel, Escher, Bach: an Eternal Golden Braid, di Douglas Hofstaedter. Labirintico e illuminante viaggio nella logica e nell’intelligenza artificiale.
  • Mechanizing Proof, di Donald MacKenzie. Grande compendio sugli sforzi di dimostrare automaticamente la correttezza dei programmi.

Tecnologia linguistica

Wednesday, June 4th, 2008

Lunedì il mio amico Federico ci ha elargito una lezione gratuita e informale di esperanto, all’ottimo pub “Old Fox” di piazza S. Agostino. Ho sempre considerato gli esperantisti degli stravaganti un po’ pazzi. Non che non lo siano :-) ma sull’esperanto ho cambiato idea. Non è una cosa così assurda come potrebbe sembrare dall’esterno. Siamo condizionati a pensare che imparare le lingue sia molto difficile; probabilmente questo proviene dalla difficoltà oggettiva di imparare l’inglese (pronuncia difficile, comprensione del parlato molto difficile, e per ogni parola bisogna imparare a memoria come si scrive perché non c’è un metodo); o il francese (pronuncia difficile, ortografia baroccamente complessa); o il tedesco (razionale, ma occorre imparare a memoria la grammatica, come per il latino). Non siamo preparati a pensare che imparare un’altra lingua possa essere molto facile.

Nel caso in questione, l’esperanto può sembrare buffo perché prende in prestito le parole da tutte le lingue (“dànkon!” – grazie; “salùton” – ciao; “viro” – essere umano maschio adulto). Ma se ti lasci spiegare alcune semplici regole, è stupefacente quanto riesci ad imparare in poco tempo. L’esperanto è stato costruito in maniera razionale allo scopo di essere efficace; facile da imparare, facile da usare. C’è un sistema: ad esempio, conoscendo la parola “program-o” (programma; tutti i nomi finiscono in -o) puoi ricavare “program-isto” (programmatore), “program-ejo” (luogo dove si programma: software house), “program-aro” (insieme di programmi: software). E ancora: “program-a” è l’aggettivo: “programmatico”, “program-e” è una specie di avverbio: “programmaticamente”, “program-i” è il verbo “programmare”.

Federico ci ha spiegato le basi: l’alfabeto, i pronomi, le desinenze (16 in tutto, anch’esse sistematiche: ad esempio le desinenze dei nomi sono program-o, program-oj (nominativo singolare e plurale), program-on, program-ojn (accusativo singolare e plurale); per i verbi, si possono fare molte conversazioni conoscendo solo -i, -as, -is e -u: infinito (program-i, programmare), presente (“mi program-as”: io programmo, ma anche “vi program-as”: tu programmi, voi programmate. Una sola desinenza per tutte le persone.), passato (“mi program-is”, io programmai oppure programmavo), imperativo (“program-u!”, programma!)

Poi abbiamo letto, da bravi scolari, un dialogo da un semplice racconto che si può trovare online, “Gerda malapèris!” che significa “Gerda è sparita”. Anche qui c’è un sistema: “apèri” significa apparire; il prefisso “mal-” nega, percui “malapèri” significa sparire. E’ stato divertente.

Insomma, mi sembra plausibile quello che gli esperantisti sostengono, che dedicando 1/10 di quello che la maggior parte delle persone spendono in termini di tempo e fatica per imparare l’inglese, si può imparare l’esperanto a un livello che permette di conversare e corrispondere bene e senza fatica.