“Tutta la storia della filosofia occidentale non è che una serie di note a margine su Platone”
Alfred North Whitehead
CAVALLINITA’
«“Cavallinità”, conoscete questa parola?» Così ho esordito all’incontro di autoformazione su MS Excel per alcuni colleghi «Pferdigkeit, immagino in tedesco», ho aggiunto ruffiano per il collega di madrelingua tedesca.
”Cavallinità” è una parola che si trova esclusivamente nei testi di filosofia, sempre nello stesso paragrafo, quello dedicato alla teoria delle idee di Platone. Il correttore di Word, ad esempio, non la riconosce. Ho controllato le fonti: nessuno dei tre dialoghi (“Fedone”, “Menone” e “La repubblica”) la contiene, quindi non è un’invenzione del filosofo ateniese. Google mi ha segnalato un tale Antistene – confesso, a me prima sconosciuto – che avrebbe affermato «La cavallinità? Io non la vedo, vedo solo il cavallo». Se quella parola è di sua invenzione, avrebbe meritato il diritto d’autore.
Quella delle idee è la più pazzesca tra tutte le teorie che ho finora conosciuto. Babbo natale inerisce la fantasia. La resurrezione di Cristo si fonda sulla fede. La teoria delle idee invece si fonda sulla Ragione; io la trovo completamente assurda, eppure m’intriga ... Il problema era la conoscenza: come è possibile apprendere, imparare nozioni che prima non possediamo? Il “Menone” contiene la mirabile dimostrazione della duplicazione dell’area di un quadrato ad opera dello schiavo guidato da Socrate. Nel “Fedone” invece vi è la parte che a me interessa: Socrate convince Cebete e Simmia che la formazione dei concetti non può derivare dall’esperienza, ma è a quella preesistente, quindi i concetti – le “idee” appunto – li dobbiamo aver appresi da qualche altra parte, precisamente nell’iperuranio (termine pomposo per indicare semplicemente un luogo “al di sopra del cielo”) il luogo dove le anime contemplano le idee tra una reincarnazione e l’altra. La conoscenza allora è reminiscenza, ricordo di quello che l’anima ha appreso durante la permanenza nell’iperuranio. Gli oggetti “reali” [1], intesi come quelli “di questo mondo”, “partecipano” delle idee, una maniera non del tutto chiara per dire che, in un certo senso, le imitano, sono costruite su quel progetto. Ciascun cavallo “reale” allora partecipa dell’idea di “cavallinità”, l’essenza più pura del concetto di cavallo che risiede nell’iperuranio. Qualcuno le ha chiamate anche “forme”, un termine che io preferisco (infatti ripreso poi da Aristotele nella famosa dicotomia “materia e forma”) proprio perché, come il vasaio, dalla medesima forma può creare più istanze di vasi simili, nessuno dei quali coincide con la forma da cui è stato generato.
TABELLE: STRUTTURA E DATI
«Comincerò la mia esposizione su Excel a partire da Access» è stato il secondo coup de théâtre. L’icona in alto a sinistra nella maschera di creazione delle tabelle permette di passare dalla “visualizzazione foglio dati” alla “visualizzazione struttura”. La prima è la tradizionale visualizzazione in cui i dati sono scritti in celle distribuiti per righe e colonne, tuttavia è la seconda che fa la differenza, perché è quella in cui si definiscono le caratteristiche dei campi, ovvero le colonne che dovranno essere compilate per ciascun nuovo record (riga) di tabella. Moderni protagonisti di “febbre da cavallo” potrebbero riportare in una tabella Access le caratteristiche principali dei campioni delle corse, scegliendo come campi il nome, i genitori, le vittorie conseguite, ecc. e tra i record comparirebbero non solo i tre componenti della famosa tris, Soldatino, King e D’Artagnan, ma anche il mitico Piripicchio, figlio di Uragano e Apocalisse, come ci ricorda Adolfo Celi in questa cult scena https://www.youtube.com/watch?v=nAUPKaP5vb4
Ecco, a duemila anni di distanza, abbiamo finalmente la risposta: la cavallinità è la struttura della tabella dei cavalli e i record sono le istanze informatiche dei cavalli reali. Vi saranno cavalli (record) per i quali il campo “colore” assume il valore nero (Bucefalo, ma anche Furia), marrone o bianco, tuttavia nessuno di questi compare nella “cavallinità”, la quale contiene solo le caratteristiche del campo: nome e tipo di dato atteso.
DATABASE E TEORIA DEGLI INSIEMI
Nel libro “Applied Mathematics for Database Professionals” la teoria dei database è formalizzata linguaggio della teoria degli insiemi. Siamo così abituati a definire gli insiemi utilizzando la formula “A è l’insieme degli oggetti che godono della proprietà p” da dimenticare che il modo alternativo, peraltro più genuino per insiemi finiti di oggetti reali, consiste nell’elencare gli elementi che lo appartengono. Una tabella è dunque un insieme (nel senso della teoria degli insiemi) di record. Alla nozione di filtro corrisponde quella di sottoinsieme (in inglese, guarda caso, recordset). Una query tra due tabelle non in relazione tra loro genera il prodotto cartesiano dei record delle due tabelle; quella tra due tabelle tra le quali esiste una relazione (nel senso del linguaggio dei DB) genera una tabella che rappresenta la relazione, intesa stavolta nel senso del linguaggio della teoria degli insiemi. E siamo così abituati a definire le funzioni attraverso le loro espressioni algebriche da dimenticare che, nel caso finito, si possono utilizzare tabelle. E’ un caso?
«Unter einer Menge verstehen wir jede Zusammenfassung M von bestimmten wohlunterschiedenen Objekten (m) unserer Anschauung oder unseres Denkens (welche die Elemente von M genannt werden) zu einem Ganzen. » [Per “insieme” intendiamo ogni riunione M in un tutto di oggetti m (che vengono detti “elementi” di M) della nostra intuizione o del nostro pensiero.] Questa la definizione di “insieme” data dal quel genio del pensiero matematico che va sotto il nome di Georg Cantor.
In maniera più prosaica del filosofo greco, Cantor ritiene che sia l’intelletto umano a possedere una innata facoltà che gli permette di raccogliere sotto un unico insieme oggetti diversi e non l’anima, tuttavia il risultato è lo stesso: l’insieme dei cavalli è quello di tutti gli oggetti che possiedono la proprietà denominata “cavallinità”. La teoria degli insiemi è quindi il naturale sviluppo della teoria delle idee.
PROGRAMMAZIONE ORIENTATA AGLI OGGETTI
Nello scendere le scale, un amico programmatore afferma: “Non capisco tutta questa passione dei programmatori per gli oggetti; non è più semplice scrivere il codice come si è sempre fatto?”. Aveva visto il cavallo ma non la cavallinità!
Il paradigma della programmazione orientata agli oggetti, come dice il nome stesso, nasce nell’ambito della programmazione, vale a dire nella scrittura di quel codice che alla base del software. MS Word che io utilizzo per scrivere queste righe contiene, alla radice, migliaia e migliaia di righe di software, per districarsi tra le quali, ad un certo punto qualcuno – chi? – si è inventato di organizzarle per “oggetti”. Una mera tecnica di programmazione quindi? No.
La cavallinità ha una lacuna: non mangia, non galoppa, non va al trotto, non fa, insomma, tutte quelle cose che fanno i cavalli reali. La nostra tabella dei cavalli contiene campi per contenere le informazioni in merito alla razza, al colore, ecc. dei cavalli, ma non contiene il campo “galoppare”. Dice insomma “come è fatto un cavallo”, ma non è in grado di esprimere “le cose che fanno i cavalli”. Per questo, nella programmazione orientata agli oggetti alle proprietà di un oggetto, si aggiungono i metodi, vale a dire le procedure che permettono la modifica delle proprietà di un oggetto. Ad esempio, il metodo “mangiare” muta il valore “affamato” dello stato di un cavallo in “sazio”.
Obbligatorio è allora distinguere le classi, intese come le rappresentazioni astratte degli oggetti, dalle istanze delle classi, vale a dire gli oggetti stessi [1]. La classe “cavallo” contiene gli attributi e i metodi del cavallo astratto, vale a dire la “cavallinità”; le istanze della classe cavallo, gli oggetti “cavallo” insomma, sono invece i cavalli animati che vedete correre – ad esempio – sullo schermo di un computer.
È possibile, inoltre, strutturare gli oggetti sfruttando una proprietà che sarebbe piaciuta molto a Platone: l’ereditarietà. La classe “cavallo” è un caso particolare della più generale “Mammifero”, a sua volta figlia della generalissima “Animale”; ciascuno degli oggetti di ordine inferiore può allora utilizzare i metodi delle classi di ordine superiore. La classe “cavallo” eredità il metodo “partorire” dalla “Mammifero”, che, a sua volta, l’ha ereditato dal più generale metodo “riprodursi” della classe “Animale”. Si genera così quella gerarchia di idee che conduce, secondo Platone, all’idea più elevata di tutte: l’idea di Bene.
La programmazione orientata agli oggetti è allora un’applicazione di un concetto più generale, lo chiamerò “paradigma degli oggetti”, che, proprio come la teoria delle idee di Platone, è un modo per descrivere il mondo “là fuori” [3]; non è un caso che i programmatori hanno concepita quella guardando la realtà, proprio come voleva il filosofo ateniese! [4]
IL SOFTWARE NELLA NOSTRA TESTA
Di cosa vi ho parlato?
Vi ho parlato del tentativo di identificare, nella molteplicità del reale, a prescindere dai particolari (il cosiddetto “accidente” caro ai filosofi) quel “quid” che accomuna oggetti diversi. Non i cavalli, dunque, ma la cavallinità. L’ordine nell’apparente caos insomma.
Da dove ci viene questa capacità di astrazione, decantata da Platone e Cantor?
Chiudo in bellezza citando Kant, anticipando il gran finale che mi sono tenuto per l’ultima lezione del già menzionato corso. Io penso che il celebre “io penso” kantiano – perdonate il gioco di parole e, tuttavia, ponete attenzione all’importante ruolo delle virgolette! – altro non sia che questo: una sorta di software contenuto del nostro cervello che ci permette di organizzare le nostre percezioni in maniera non casuale ma strutturata, proprio come fanno i database. Si potrebbe dire che MS Access è costruito a immagine e somiglianza del software contenuto nel nostro cervello fatto che non deve assolutamente meravigliare, considerando che è stato scritto da uomini. Dei quali tuttavia non so dire se conoscessero la teoria delle idee di Platone.
IMMAGINE DI TESTA
L'immagine di testata è tratta da: https://www.chegg.com/homework-help/questions-and-answers/overview-use-principles-object-oriented-design-ood-object-oriented-programming-oop-re-buil-q40318131 e rappresenta le classi "Corsa" e "cavallo" legate da una relazione uno a molti (ad una corsa partecipano normalmente più cavalli). Il metodo "advance" permette ai cavalli di avanzare e "getPosition" calcola la posizione di ogni cavallo ad intervalli di tempo prefissati. Al link indicato nell'articolo è riportato un esempio di corsa di cavalli generata dal programma, della quale riporto la figura.
Del cavallo è rimasto solo il numero, che avanza man mano lungo le linee punteggiate. Fatico a concepire una rappresentazione più essenziale di questa, che sarebbe certo piaciuta a Platone.
NOTE
[1] Nella programmazione ad oggetti, gli oggetti sono definiti tramite le “Classi”, un altro termine che aveva già trovato la propria applicazione nella teoria degli Insiemi e, tuttavia, va rilevato che quest’ultima, come quella delle idee, è una teoria statica in cui “tutto è già dato” e non sono possibili cambiamenti “in corso d’opera”. Questo merita una profonda riflessione in connessione con la nostra idea di “tempo” che ho esposto nella nota precedente.
[2] in ambito filosofico è sorta anche la Object Oriented Ontology, che tuttavia non coincide con il paradigma ad oggetti di cui ho parlato, ma inerisce l’indipendenza dell’esistenza degli oggetti da chi li guarda. Insomma, è la solita storia – cui io non credo - per cui la luna continua a esistere anche se non la guardate.
[3] Per questa ragione, da anni predico che la struttura di un’organizzazione (un’azienda, ma anche uno Stato o un’associazione) dovrebbe essere disegnata non sul banale, scontato paradigma dei “processi” (che, per inciso, altro non sono che i metodi), ma su quello degli Oggetti, che contiene parametri, metodi ed eventi. Malinconicamente inascoltato, non mi resta che attendere che le attuali generazioni di consulenti siano sostituite da altre più avvezze alle nozioni informatiche.
[4] La programmazione orientata agli oggetti ha oggi un concorrente: la functional programming. Riporto da Wikipedia: "The pure functional programming language Haskell implements them using monads, derived from category theory." "Monads" e "Category theory" sono termini intrigantissimi! Allo studio!
Comentarios