Come possiamo far entrare in relazione più concetti?

Nei due precedenti articoli abbiamo riflettuto sulla possibilità di fare coding con i concetti e poi abbiamo iniziato a vedere come definire un concetto nel nostro codice.

Adesso dobbiamo tentare di dare una risposta a questa domanda:

Come possiamo far entrare in relazione più concetti?

Per farlo dobbiamo chiarirci le idee su cosa intendiamo per relazione.

Domandiamoci quindi:

Cos’è una relazione?

Nel Vocabolario Treccani troviamo, tra le varie definizioni, questa:

Connessione o corrispondenza che intercorre, in modo essenziale o accidentale, tra due o più enti (oggetti e fatti, situazioni e attività, persone e gruppi, istituzioni e categorie, fenomeni, grandezze, valori, ecc.).

Una relazione è quindi una connessione tra due o più enti: quindi tra due o più concetti.

Proviamo allora a riformulare la nostra prima domanda in questo modo:

Come possiamo creare una rete di concetti interconnessi?

Interconnessione concettuale

Se proviamo ad immaginare una rete di concetti interconnessi, è probabile che tra le immagini che si formano nella nostra fantasia ci sia quella di una ragnatela.

Ecco allora che potremmo identificare i fili com le connessioni e i punti di contatto dei vari fili con i concetti.

E il ragno? Che ruolo potremmo dare al ragno?

Il ragno sarà il nostro pensare che pazientemente deve tessere la tela che unisce i vari concetti.

Ma la similitudine con la ragnatela può spingersi oltre. Domandiamoci: chi è la preda?

La preda è l’obiettivo del pensare.

La preda che viene intrappolata nella tela dei nostri concetti interconnessi non è altro che l’idea. Un’idea che si illumina nella mente del programmatore mentre con il suo pensare connette i concetti.

Un esempio pratico

''
''esempio di connessione tra tre concetti
''

''definiamo il tipo di dato "concetto*"
type concetto
  id_1 as integer ''identificativo del concetto
  etichetta as string
  id_2 as integer ''identificativo del concetto connesso
end type
''dimensioniamo e creiamo il vettore dei concetti
''del tipo di dato "concetto"
dim vettore_concetti(1 to 3) as concetto

''**********

''valorizziamo i membri dei diversi concetti
vettore_concetti(1).id_1 = 1
vettore_concetti(1).etichetta = "pioppo"
vettore_concetti(1).id_2 = 2
vettore_concetti(2).id_1 = 2
vettore_concetti(2).etichetta = "albero"
vettore_concetti(2).id_2 = 3
vettore_concetti(3).id_1 = 3
vettore_concetti(3).etichetta = "pianta"
vettore_concetti(3).id_2 = 0

''**********

''esplora tutte le connessioni che si diramano dal primo concetto
''presente nel vettore dei concetti e stampa a video tutti i
''concetti interconnessi
cls
dim as integer id_1, id_2
id_1 = vettore_concetti(1).id_1
id_2 = vettore_concetti(1).id_2

print vettore_concetti(id_1).etichetta;

do until id_2 = 0

  print " ---> " & vettore_concetti(id_2).etichetta;

  id_1 = vettore_concetti(id_2).id_1
  id_2 = vettore_concetti(id_2).id_2

loop

Nel prossimo articolo affronteremo il terzo quesito:

Come possiamo far fare qualcosa al computer sulla base di una serie di concetti interconnessi?

Fare coding con i concetti

Proviamo a domandarci: è possibile fare coding con i concetti?

Ma cos’è un concetto?

Un concetto può essere visto come una etichetta che rimanda ad una entità reale o astratta. Un esempio del primo tipo potrebbe essere il concetto di “albero” riferito al pioppo che vedo fuori dalla finestra di casa mia, il secondo tipo potrebbe essere ancora una volta il concetto di “albero”, questa volta però inteso come astrazione per indicare genericamente le piante legnose perenni.

Il concetto però, di per sé, risulta statico: se dico all’improvviso al mio vicino la parola “albero”, è probabile che lui si volti e mi guardi con aria interrogativa senza sapere che pensare. Fare coding significa invece creare qualcosa in grado di fare qualcos’altro: quindi un qualcosa di dinamico.

Dobbiamo allora domandarci: come possiamo mettere in moto un concetto? Se è vero che un concetto, preso da solo, ci appare come una entità statica, allora è forse probabile che ci occorra qualcos’altro per renderlo attivo. Ma cosa?

Stiamo attenti. Concentriamoci un attimo su questo punto…

Ebbene, qualsiasi sia quest’altra entità che andiamo cercando, sarà pure essa stessa esprimibile attraverso un concetto!

Ma allora sarà sufficiente accostare ad un concetto un secondo concetto per renderlo attivo?

Facciamo una prova: prendiamo il concetto di “numero” e il concetto di “pace”. Immaginiamo di accostarli… non accade nulla.

Facciamo allora una seconda prova: prendiamo sempre il concetto di “numero” e accostiamogli il concetto di “parità”.

Ecco che in questo caso nella nostra mente accade qualcosa, come una piccola scintilla: i due concetti si collegano; tra loro si stabilisce una relazione, nasce una immagine, una idea.

I due concetti, sino a quel momento inerti, entrano in una relazione generativa e nella nostra mente vi è un’esplosione di numeri pari che danzano davanti ai nostri occhi.

Che sia questa una possibile via per fare coding con i concetti?

Se vogliamo provare a percorrere questa via, appare evidente che abbiamo di fronte a noi 3 problemi da risolvere:

  1. Come possiamo definire un concetto nel nostro codice?
  2. Come possiamo far entrare in relazione più concetti?
  3. Come possiamo far fare qualcosa al computer sulla base di una serie di concetti interconnessi?

Rispondere a questi tre quesiti sarà oggetto dei prossimi articoli. 🙂

Immaginare un modo nuovo di fare coding

Premessa

Questo articolo non vuole inserirsi nel dibattito se sia corretto o meno avvicinare i bambini al coding, ovvero alla programmazione informatica, durante la scuola primaria con l’obiettivo di sviluppare in loro il pensiero computazionale già nei primi dieci anni di vita.

Anzi, personalmente ho firmato la petizione ai responsabili dell’istruzione nell’UE e negli Stati membri per concedere il diritto ad asili nido, scuole materne e scuole elementari di essere liberi dallo schermo, nella convinzione che ogni cosa deve essere fatta a suo tempo.

Il pensiero computazionale è un processo mentale per la creazione di un algoritmo, ovvero di una sequenza finita di passi elementari (istruzioni), traducibili poi in un linguaggio di programmazione (codice sorgente) in grado di permettere ad un computer di risolvere un problema.

Sull’introduzione delle competenze digitali nella scuola si visiti il sito web del MIUR (Ministero dell’Istruzione dell’Università e della Ricerca) dedicato al Piano Nazionale Scuola Digitale.

Si veda inoltre il progetto CS Unplugged che intende avvicinare i bambini al mondo del coding senza utilizzare direttamente il computer.

Come adulti, però, dobbiamo sentirci liberi di esplorare la possibilità, se esiste, di fare coding antroposoficamente così come esiste per esempio un modo antroposofico di educare (pedagogia Waldorf), di coltivare (agricoltura biodinamica) o di curare (medicina antroposofica).

Scopo

Lo scopo è quello di provare a gettare uno sguardo non meramente utilitaristico sul mondo dell’Informatica.

Per intraprendere questo percorso di ricerca ci si ispira alla concezione filosofica dell’Idealismo oggettivo così come è stata veicolata dall’Antroposofia.

Coding e creatività

Non c’è dubbio che nella programmazione informatica la creatività giochi un ruolo fondamentale.

Non basta infatti conoscere un linguaggio di programmazione per risolvere un dato problema, e molto spesso non basta neanche una disciplinata capacità di analisi unita alla conoscenza della natura del problema che si sta affrontando. Tutte cose, ovviamente, indispensabili.

Quando ci si trova bloccati, quando sembra che non ci sia più una via d’uscita, ecco che una illuminazione, un guizzo della fantasia, una fulminea intuizione, ci fanno scorgere finalmente la soluzione, e soltanto allora possiamo tornare a mettere mano al codice sorgente scrivendo o correggendo il nostro algoritmo.

Quando il pensiero concepisce un algoritmo efficace ed efficiente, lo si descrive spesso come una soluzione elegante, e non è raro sentire accostare a questa soluzione il concetto di bellezza.

Tutto questo ha a che fare con l’ampio tema relativo alla risoluzione dei problemi, il cosiddetto problem solving, che, per inciso, riguarda tutti noi, sia che si stia lavorando nell’ambito informatico, sia che si debba semplicemente decidere come organizzarsi per andare a fare la spesa.

Possiamo quindi dire che il pensiero computazionale, oltre ad essere una facoltà umana di uso generalizzato e quotidiano, è strettamente legato al pensiero creativo.

Arte e Antroposofia

Nell’ambito dell’Antroposofia l’arte riveste un ruolo fondamentale, tanto che si parla di arti antroposofiche.

Se Rudolf Steiner, il fondatore dell’Antroposofia, ha ritenuto che l’intera esperienza umana dovesse venire informata dalla conoscenza spirituale, tanto da influenzare anche la musica, il canto, la poesia, la scultura, la pittura, la danza (euritmia) e persino l’architettura (architettura organica), allora dobbiamo domandarci:

Come possiamo pensare che un’attività umana, oggi così diffusa, come la programmazione informatica, che abbiamo visto essere così legata anche al concetto di creatività, possa rimanere esclusa dalla visione antroposofica?

Come cultori dell’Antroposofia, è forse arrivato il momento di rivolgere la nostra attenzione anche al mondo legato alla programmazione informatica, senza preconcetti, forti anche del fatto che il software è la parte immateriale di questo mondo, la parte più legata al pensiero immaginativo.

“L’informazione è informazione, non materia o energia.” Norbert Wiener

Per cominciare a farlo, si pensi al fenomeno dell’arte digitale o, per esempio, al linguaggio di programmazione Processing che, tra le altre cose, permette di sviluppare opere d’arte generativa.

“[…] ci stiamo avvicinando sempre più all’epoca della composizione consapevole, razionale. Presto il pittore sarà orgoglioso di spiegare che le sue opere sono costruite.” Wassily Kandinsky, Lo spirituale nell’arte

Fare coding antroposoficamente

Se vogliamo provare a mettere in dialogo il mondo dell’Antroposofia con quello del coding occorre forse immaginare nuove applicazioni che siano capaci di toccare lo spirito di chi le usa, e magari spingersi oltre dando vita ad un nuovo paradigma di programmazione che permetta allo spirito dell’autore (il programmatore) di esprimersi.

Un primo possibile passo…

Chi si avvicina all’Antroposofia scopre molto presto l’importanza che in essa riveste il mondo dei colori e delle figure geometriche, unito al mondo dei concetti e delle idee.

Forse un primo passo potrebbe proprio essere quello di riflettere su come utilizzare i colori e le figure geometriche per creare software antroposofico.

Un piccolo primo esempio: come generare immagini in stile Mondrian.

Ma poi, provando a spingersi oltre, occorrerebbe esplorare la possibilità di creare un nuovo paradigma di programmazione.

Mi rendo conto che tutto questo possa apparire come estremamente vago e privo di solide basi, ma si tratta per adesso soltanto di una intuizione su cui magari cominciare a riflettere e lavorare.