venerdì 14 ottobre 2011

Programmazione: la lingua che parliamo condiziona il modo in cui vediamo il mondo


Edward Sapir nel 1921 e poi il suo allievo Benjamin Whorf formularono una ipotesi linguistica (nota oggi come ipotesi di Sapir-Whorf) che sosteneva che la lingua che noi parliamo, il nostro linguaggio naturale, influenzava pesantemente il modo in cui noi percepiamo il mondo.
Un esempio.
In italiano “ponte” ha genere maschile e come tale noi italiani siamo abituati ad attribuire ad un ponte aggettivi prettamente maschili. Parleremo infatti di un ponte robusto, forte, solido, ecc. In Tedesco, “ponte” ha invece genere femminile, ed infatti, i tedeschi sono soliti attribuire al ponte aggettivi prettamente femminili. In Germania infatti è usuale sentir dire che un ponte è grazioso, snello, ecc. (qui si immagini questi aggettivi al femminile).
Poi, l’ipotesi di Sapir-Whorf è stata man mano abbandonata, screditata da altre ipotesi fatte da altri linguisti.
Oggi l’ipotesi Sapir-Whorf sta tornando prepotentemente alla ribalta grazie ai lavori e studi di numerosi linguisti e psicologi cognitivi come la mia amica dell’università di Stanford Lera Broditsky.

Proprio qualche settimana fa stavo parlando con Lera della possibilità di adattare l’ipotesi di Sapir-Whorf non solo al linguaggio naturale, ma anche ai linguaggi più formali, ben rappresentati ad esempio dai linguaggi di programmazione. Lera si è subito dimostrata molto interessata a questa mia idea e, anche se non è stato condotto nessun esperimento in merito, ha ritenuto questa idea non scartabile a priori.
Rispetto a quarant’anni fa, oggi i calcolatori elettronici sono cresciuti e sono diventati estremamente più complessi. E’ impensabile per chiunque riuscire a capire approfonditamente l’insieme dei processi che contemporaneamente intervengono nel funzionamento di un moderno computer. Processi dinamici non lineari e quindi impredicibili avvengono continuamente senza che noi neppure ce ne accorgiamo. I calcolatori oggi sono “simulatori di determinismo”.

I linguaggi di programmazione sono il mezzo per comunicare il nostro pensiero e le nostre intenzioni al computer. Ovviamente essendo diventati molto più complessi i computer, anche i linguaggi con i quali noi comunichiamo con loro sono cresciuti in complessità. Noi ci serviamo dei computer per risolvere qualsiasi tipo di problema, oggi. Per far capire al computer i termini del problema che vogliamo risolvere dobbiamo formulare questo problema in un linguaggio che il computer possa comprendere. Esiste solo un modo per formulare il problema in un linguaggio di programmazione? No, ne esistono moltissimi. Almeno uno per ogni linguaggio oggi esistente e poi all’interno dello stesso linguaggio di programmazione il problema può essere espresso in decine di modi diversi.
Quello di cui Lera ed io abbiamo discusso è la possibilità che il programmatore che conosce più linguaggi di programmazione trova meno difficoltà a far capire il suo pensiero al computer rispetto a quello che conosce un solo linguaggio.

Un esempio tratto dalla mia esperienza. Durante un corso che ho tenuto recentemente ho dato alla classe un esercizio particolare. “Data una stringa di caratteri scrivere un programma che prendesse in input la stringa originale e che producesse in output la stessa stringa scritta al contrario”. 
Banale? Sì, ma come condizioni aggiuntive ho imposto che il programma non facesse uso ne di assegnazioni di variabili, ne di cicli “while”, “do while” o “for”. Il linguaggio da utilizzare era in quel caso C#. In una classe di 11 programmatori solo due hanno risolto dopo una decina di minuti il problema, gli altri 9 hanno ritenuto impossibile la soluzione dell’esercizio pensando fosse una domanda a trabocchetto. Cercando poi di scoprire il perché di un fallimento così netto nel risolvere un’esercizio all’apparenza banale, ho scoperto che i due programmatori che immediatamente erano giunti alla soluzione, oltre a C# conoscevano molto bene almeno altri cinque linguaggi di programmazioni tra i quali c’erano LISP e Haskell. Morale, la conoscenza di questi linguaggi ha dato la capacità a questi due programmatori di modellizzare il problema da un altro punto di vista (funzionale piuttosto che imperativo) giungendo immediatamente alla soluzione.

Come dicevo prima non esistono test sperimentali dell’ipotesi di Sapir-Whorf riguardanti i linguaggi formali, ma sia io sia Lera siamo convinti che esiste un’analogia a livello cognitivo tra linguaggio naturale e linguaggio formale. Molto lavoro rimane ancora da fare...

Luca Ciciriello.

Nessun commento:

Posta un commento