Tom negli ultimi due post ha affrontato un argomento molto interessante, e cioè l'evoluzione dei linguaggi di programmazione soprattutto in ambito Web dal punto di vista della produttività e della reale utilità. Con questo mio post vorrei continuare questa stimolante discussione.
In questo video il grande Ward Cunningham (per chi non lo conoscesse, l'inventore del Wiki, nonchè una delle menti dell'eXtreme Programming, e inventore di FIT), parla del rapporto tra computer e uomo, dei linguaggi di programmazione, e di molte altre cose interessanti. Di seguito un breve riassunto dell'intervista e un mio breve commento.
Innanzitutto Cunningham esordisce dicendo che ha imparato nella sua vita più di duecento linguaggi di programmazione. Molti li considera pessimi, perché chi li ha disegnati aveva come obiettivo quello di implementare funzioni matematiche, senza concentrarsi sui costrutti del linguaggio in sè. Da questa affermazione Cunningham entra nel cuore dell'intervista, affermanso che la cosa fondamentale di un linguaggio di programmazione è la sua capacità di definire e di avere al suo interno concetti, e che questi concetti abbiano un confine che li delimiti, che gli si possa inviare messaggi per poterli interrogare. E' importante che io programmatore possa stabilire, indicare, qual è l'idea più importante tra quelle che sto modellando, e che possa dire che gli altri sono concetti secondari. A questo riguardo Cunningham afferma che da quando ha conosciuto Smalltalk, ha smesso di imparare altri linguaggi. Infatti nella programmazione ad oggetti, ogni oggetto diventa un linguaggio, ed io programmatore divento un language designer definendo questi concetti. Il computer in questo modo mi insegna quali sono i concetti principali che devo conoscere di un certo argomento, costruendo un linguaggio che lo descriva. Il computer quindi ci fa conoscere cose del nostro mondo che prima non conoscevamo. Un linguaggio di programmazione diventa così un ponte, uno strumento verso la conoscenza del mondo che stiamo modellando, nonché uno strumento per l'interazione tra essere umani.
Quest'ultimo aspetto secondo me è la cosa fondamentale di un tool o di un linguaggio di programmazione, o comunque di qualsiasi cosa riguardi un computer: la sua capacità di sapere rappresentare concetti, conoscenza, in maniera chiara, precisa, "delimitata da confini", contestualizzata, e la capacità di poterci ragionare sopra permettendoci di concentrarci sulle idee stesse, senza tecnicismi che offuscano i concetti. Strumenti che permettano di reagire con il minimo sforzo possibile al dinamismo della conoscenza, al naturale evolvere della stessa, che permettano di imparare e conoscere più di quanto sappia o di quanto possa conoscere se non li informatizzassi. Tutto ciò ovviamente coinvolge la comunicazione tra essere umani ed è qui che un tool o un linguaggio si differenziano nella loro bontà, a livello di conoscenza e espressività: quanto migliorano la comunicazione tra le persone? Ad esempio l'assembler molto poco! C molto poco ma già meglio! Altri linguaggi ad alto livello forse meglio ancora. A questo aspetto se ne aggiunge un altro, e cioè che ogni linguaggio deve essere in grado di supportare il naturale dinamismo del processo di comprensione e di knowledge crunching in modo iterativo e graduale. E' qui che diventa importante la capacità di un linguaggio o di un tool di garantire flessiblità, testabilità, robustezza e chiarezza.