Riflessioni sulle Scienze
di Alberto Viotto indice articoli
Un linguaggio senza fraintendimenti
Settembre 2008
-
Le intese tacite
-
Il codice dei calcolatori
-
La verifica
Il linguaggio comune è una parte dell'organismo umano,
né è meno complicato di questo...
Le tacite intese
per la comprensione del linguaggio comune sono enormemente complicate.
(Ludwig Wittgenstein, Tractatus, 4.002)
Le intese tacite
Quando leggiamo un testo, di solito capiamo ciò che l’autore voleva comunicare soltanto perché abbiamo innumerevoli convenzioni in comune con lui, e non certo perché tutto ciò che ci serve sapere per comprenderlo sia esplicitato nel testo. Prendo come esempio il titolo del “Corriere della sera” di oggi (14 agosto 2008):
Bush: Mosca deve rispettare i patti
Se non si ha un corposo background culturale in comune con chi scrive, anche se si dispone di un ottimo dizionario non si può capire quasi niente di questa frase. In primo luogo, sembra un’assoluta banalità. E’ ovvio che i patti vadano rispettati, non ha senso ripeterlo. La frase assume significato se il lettore, in comune con l’autore dell’articolo, sa che la Russia ha invaso la Georgia e si è appena impegnata a ritirarsi e che il ritiro non sta avvenendo in modo tempestivo.
Il lettore deve inoltre sapere che il nome di una persona seguito dai due punti indica che si sta riportando un suo pensiero (si sottintende “dice”), che George W. Bush è il presidente degli Stati Uniti, e quindi è in grado di parlare per il suo paese, che si usa indicare un paese con il nome della sua capitale, che Mosca è la capitale della Russia e tante altre informazioni ancora.
Tutte queste intese tacite possono essere fonte di incomprensioni o di fraintendimenti. “Bush” potrebbe essere la modella Natalia Bush. “Mosca” è anche un cognome italiano e potrebbe indicare il giornalista sportivo Maurizio Mosca, e così via.
Questo aspetto diventa ancora più evidente se dal campo degli articoli di attualità si passa a quello dei manuali che dovrebbero servire ad introdurre una persona in un ambiente o ad istruirlo per svolgere un lavoro. Nel film Codice d’onore Tom Cruise ridicolizza l’avvocato della difesa, che sostiene che il suo assistito non può avere ordinato la punizione “Codice Rosso” perché questa non è citata dal regolamento, facendo osservare che nel regolamento mancano innumerevoli informazioni essenziali ma conosciute da tutti, come l’ubicazione della mensa. Quando una recluta giunge in caserma non ricava le informazioni più importanti dall'opuscolo che gli viene consegnato e nemmeno dai discorsi ufficiale; le cose importanti sono quelle che imparerà giorno per giorno sulla propria pelle, le mezze frasi del caporale istruttore.
Nel caso dei documenti tecnici tutto questo è ancora più chiaro; per quanto chi scrive la documentazione cerchi di essere scrupoloso, finirà sempre per fare riferimento a cose che il lettore deve già sapere. Se così non si facesse, ogni piccolo progetto dovrebbe essere accompagnato da una documentazione colossale. Spesso all’inizio di un documento si elencano e definiscono i termini che contiene, ma di solito si tratta di un accorgimento ipocrita e anche queste definizioni implicano la condivisioni di un complesso background tecnico.
Qualsiasi documento tecnico ci si metta a leggere, se si vogliono fare le pulci all’autore perché ha usato informazioni non esplicitate ci si riesce senza difficoltà. Questo però è vero, sia pure in forma meno evidente, per qualsiasi testo. Chi legge deve conoscere la lingua in cui è espresso, i termini che usa e moltissime altre convenzioni. Sarebbe difficilissimo definire un “vocabolario di base” (equivalente ai postulati di un sistema matematico), conosciuti i quali se ne possa definire ogni altro. È difficilissimo, se non impossibile, definire una lingua in modo rigoroso, ed è per questo che i traduttori automatici funzionano così male.
Il codice dei calcolatori
Quando si scrive un programma per computer, però, ogni cosa deve essere definita. Se un qualsiasi aspetto del programma non è definito esattamente, non funziona nulla. Anche i “postulati di base” sono ben definiti, ed equivalgono al set di istruzione di quel computer e alle specifiche di funzionamento delle periferiche.
Come probabilmente i lettori sapranno, ogni computer è in grado di eseguire una quantità piuttosto limitata di operazioni (istruzioni macchina), che agiscono sulla sua memoria e possono:
-
modificare in un certo modo una cella di memoria e passare all’istruzione successiva
-
se in una cella di memoria c’è un determinato valore, saltare ad una determinata istruzione, in caso contrario passare all’istruzione successiva
Su queste istruzioni di base si costruisce tutto a piccoli passi. Il primo passo consiste nel creare un “assemblatore” che permette di scrivere un programma utilizzando codici mnemonici di facile comprensione, come “Move” (che sposta il contenuto di una cella di memoria in un’altra) o “Incr” (che aumenta di uno il numero contenuto in una cella di memoria) e li trasforma nei numeri che corrispondono alle istruzioni macchina. Il secondo passo è la creazione di un “compilatore”, che permette di definire un “linguaggio di programmazione” con cui si possono scrivere dei programmi con costrutti simili a quelli del linguaggio naturale ed in cui si possono attribuire nomi simbolici alle celle di memoria.
Alcuni linguaggi di programmazione sono particolarmente adatti per capire come si può passare da un codice comprensibile agli esseri umani al criptico linguaggio macchina. Il linguaggio “C”, sviluppato negli anni 70 da B. W. Kernighan e D. M. Ritchie dei Bell Labs, ha una struttura logica definita e leggibile ed una semantica che utilizza un insieme ristretto di concetti relativamente semplici e vicini al funzionamento dell'hardware dei calcolatori; molte istruzioni C sono traducibili direttamente con una singola istruzione di linguaggio macchina. E’ abbastanza comune per un programmatore esperto controllare in che modo le istruzioni “C” sono state tradotte in linguaggio macchina in punti critici del programma. Le istruzioni che si ottengono sono chiare ed inequivoche: se due diverse celle di memoria corrispondono una a Natalia Mesa Bush, modella, l’altra a George W. Bush, presidente degli Stati Uniti, si deve indirizzare esattamente o l’una o l’altra, non si può lasciare aperta la scelta.
Utilizzando i linguaggi di programmazione si possono scrivere moduli software sempre più complessi, raggruppati in livelli; ogni livello sfrutta i servizi forniti dal livello sottostante. Ogni passo della catena deve svolgere esattamente il suo compito, altrimenti nulla può funzionare. Il codice “non fa inganni”; non si può nascondere niente, se si dà per scontato qualcosa che non sia definito esattamente, il programma fallisce.
La verifica
L’altro aspetto peculiare del codice dei calcolatori è la possibilità di controllo immediato di quanto si è appena fatto. In tutti gli altri campi ogni nuova proposta, anche se valida, normalmente impiega tempo per imporsi; ci vuole tempo perché venga capita, di solito inizia un dibattito con posizioni contrastanti e si innescano discussioni senza fine.
Naturalmente le cose possono essere molto diverse nelle varie discipline. In filosofia, dove non ci possono essere riscontri, spesso una teoria si impone per motivi indipendenti dal suo valore, a seconda dell’importanza ed abilità dei suoi seguaci o delle tendenze del momento, mentre nelle varie discipline scientifiche in linea di massima c’è sempre la possibilità di una verifica. Anche in ambito scientifico, però, non sempre le verifiche sono agevoli. Quando nel 1993 Andrew Wiles annunciò in una serie di conferenze di avere risolto il celebre ultimo teorema di Fermat, ci volle diverso tempo per capire che nella dimostrazione c’era un serio errore, che venne corretto in un ulteriore anno di lavoro.
Nel campo del codice, invece, la verifica è molto facile e immediata: l’esecuzione di un programma che fornisce (o non fornisce) i risultati attesi non permette discussioni. Se, ad esempio, si realizzasse un algoritmo di compressione dei files musicali più efficace di quelli attuali la sua verifica potrebbe essere immediata.
In molti altri campi le discussioni possono riguardare la rilevanza di una teoria, oltre che la sua validità. Molte nuove teorie possono sembrare ipotesi bizzarre e di dubbia utilità. Lo sviluppo dei programmi per computer, invece, ha una utilità indiscutibile: senza i calcolatori tutte le fabbriche del mondo si fermerebbero, le banche non sarebbero più in grado di rintracciare i depositi dei loro correntisti, i supermercati non potrebbero più ordinare i prodotti esauriti. Il funzionamento della società moderna si basa in gran parte sull’arte della programmazione dei computer, l’unico campo in cui non valgono asserzioni confuse o implicite e non ci possono essere fraintendimenti
Alberto Viotto
Se qualche lettore trovasse questo articolo interessante o ne volesse discutere, all'autore farebbe piacere ricevere delle e-mail all'indirizzo: alberto_viotto@hotmail.com
Altri articoli di Alberto Viotto
Alberto Viotto offre gratuitamente due suoi Ebook:
Come ti fregano
Analisi dei meccanismi del marketing ed altri trucchi
"Da mattina a sera, sui giornali, sulle televisioni, sul web, siamo sommersi da messaggi pubblicitari che sembrano pensati per un pubblico di semideficienti. Naturalmente il circo del marketing ha un costo, che ricade sull’ambiente ma anche su di noi, costretti a pagare di più i prodotti che ci servono (circa 400€ in più in media su ogni auto nuova).
Di chi la colpa? Ahimè, è nostra, perché compriamo i prodotti pubblicizzati; se la pubblicità non facesse aumentare le vendite i produttori smetterebbero di tormentarci. Un rapido esame dei meccanismi del marketing ci può aiutare ad immunizzarci."
Achille e la tartaruga e altri paradossi
"Una nuova e più elegante soluzione al paradosso più famoso. Altri celebri enigmi (il sorite, il cretese mentitore, il gatto quantistico, la stanza cinese) affrontati da un punto di vista non convenzionale".
Libri pubblicati da Riflessioni.it
RIFLESSIONI SUL SENSO DELLA VITA 365 MOTIVI PER VIVERE |
|