Informatica e filosofia

Il titolo che inizialmente avevo pensato per questo articolo era “Informatica è filosofia”, ma poi mi sono reso conto che era un po’ troppo impegnativo e allora mi sono limitato ad accostare le due discipline anziché integrarle. Eppure sono convinto che, nonostante questa marcia indietro, c’è ancora qualcuno che storcerà il naso di fronte a questo accostamento “azzardato”.

Cos’hanno in comune l’informatica e la filosofia? Molto più di quanto si possa pensare a prima vista.

If you begin with computer science, you will end with philosophy.”

– William J. Rapaport

Differenza percepita

Di primo acchito, verrebbe da dire che le due discipline sono agli antipodi.

La filosofia è la disciplina delle domande, del chiedersi il perché di ogni cosa, ma che apparentemente ha il solo compito di soddisfare la curiosità insita nell’uomo di farsi un’idea di come va il mondo. Comunemente non le viene dato alcun risvolto pratico, tanto che circola da sempre quel modo di dire: “La filosofia è quella cosa con la quale e senza la quale tutto rimane tale e quale”.

L’informatica, d’altro canto, ha un impatto enorme sulla realtà. Ce ne siamo accorti da diversi decenni ormai. La rivoluzione digitale ha cambiato il nostro lavoro, le nostre interazioni, la nostra società. Credo che non ci sia disciplina più invasiva nella quotidianità di ciascuno di noi.

L’impatto sul mondo reale e la concretezza di questa disciplina non è solo la percezione di chi usa l’informatica, ma anche di chi l’informatica la fa. L’informatica è problem solving, e l’applicazione del pensiero computazionale, il massimo della concretezza.

Quindi com’è possibile accostare l’informatica alla filosofia?

L’informatica nasce dalla filosofia

Sembrerà paradossale ma, trascurando i tentativi prettamente pratici di Pascal, Leibniz, Babbage ed altri, i fondamenti dell’informatica nascono proprio da questioni per così dire filosofiche. La ricerca della Characteristica universalis da parte di Leibniz e l’analisi delle leggi del pensiero di Boole sono alcune delle prime avvisaglie, ma ciò che ha dato origine all’informatica moderna è l’Entscheidungsproblem, o problema della decisione.

Tra la fine dell’Ottocento e gli inizi del Novecento, era in corso un dibattito sulle basi logico-filosofiche della matematica. Nell’ambito di questo dibattito, nel 1928, David Hilbert, tra i più influenti matematici dell’epoca, pose la questione della esistenza di una procedura meccanica, un algoritmo, che potesse stabilire la validità o meno di un’affermazione nella logica del primo ordine. Senza entrare nei dettagli della questione, questo problema matematico pose le basi per chiedersi cos’è il calcolo automatico, cosa vuol dire poter calcolare qualcosa, come possiamo definire il concetto di calcolabilità o computabilità. In altre parole, per stabilire se esiste o meno un tale algoritmo bisogna prima stabilire la natura del calcolo. Insomma, una di quelle domande di natura prettamente filosofica.

La risposta alla questione sollevata da Hilbert fu negativa e fu dimostrata alcuni anni dopo più o meno indipendentemente da diversi matematici e logici. Alonzo Church prima e Alan Turing successivamente definirono il concetto di calcolabilità in maniera formale. Turing ricorse alla sua famosa macchina astratta per spiegare formalmente i concetti di algoritmo e calcolo. Anche se la macchina di Turing è servita per dimostrare il risultato negativo nell’ambito di quel dibattito filosofico, essa ha finito per avere un effetto collaterale concreto nel mondo a venire: ha aperto la strada al mondo dell’elaborazione automatica delle informazioni.

Da una questione filosofica, apparentemente lontana dalla realtà quotidiana dei comuni mortali, è nata una disciplina di cui al giorno d’oggi gli stessi comuni mortali non possono più fare a meno.

David Hilbert e Alan Turing

Rappresentazione della realtà

La relazione tra informatica e filosofia però non si ferma alle origini. Proviamo a fare un accostamento che potrebbe sembrare azzardato a prima vista.

Cos’è la filosofia? Qual è la sua intima essenza?

Questa è una delle classiche domande da un milione di dollari. Diverse sono le definizioni date nel corso dei secoli da studiosi e dagli stessi filosofi. Mi piace molto la definizione attribuita a Voltaire: “Quando colui che ascolta non capisce colui che parla e colui che parla non sa cosa stia dicendo: questa è filosofia”, che avvalorerebbe spiritosamente l’inconsistenza della disciplina, forse includendo anche questo articolo…

Ma a parte gli scherzi, trovo abbastanza adeguata la definizione estratta da Treccani: “...quell’attività del pensiero [...] che tende a ricercare quanto rimane stabile in ogni esperienza e costantemente valido come criterio dell’operare…”. Detta in altri termini, è quella attività che ci spinge a trovare un comune denominatore tra fenomeni distinti, a trarre una legge generale per dare un ordine alle cose del mondo.

Cosa facevano i filosofi presocratici? Analizzavano la realtà, cercavano di individuare l’elemento comune a tutti i fenomeni della natura ed elaboravano una teoria che poi cercavano di convalidare. Non molto diverso era quello che hanno fatto Platone ed Aristotele in seguito. La differenza era che non si andava più alla ricerca di un elemento naturale comune ai fenomeni osservabili, ma si ricorreva a concetti più astratti: le idee, le forme immanenti. E così è andato avanti per secoli con gli altri filosofi, con lo stesso approccio ma con rappresentazioni della realtà differenti.

Questa attività di individuare cosa hanno in comune cose differenti è quella che spesso indichiamo con il termine di astrazione. Grazie all’astrazione, ci creiamo una rappresentazione semplificata della realtà eliminando le minuzie non rilevanti per il nostro ragionamento. Ma a quale scopo? Per poter comprendere la realtà ed eventualmente poterla controllare.

Come dite? Anche in informatica si fa uso dell’astrazione? E più o meno per il medesimo scopo? Fantastico!

Chi progetta e sviluppa sistemi informatici sa bene che l’astrazione è lo strumento principale per modellare la realtà e poterla controllare, cioè analizzarla, prendere decisioni, ed anche interagire con essa. I modelli Entity-Relationship, la programmazione orientata agli oggetti, gli stessi linguaggi di programmazione non sono altro che esempi di astrazione che semplificano la comprensione e la manipolazione della realtà (o di un altro suo livello di astrazione).

Non non c’è bisogno di arrivare alla realtà virtuale e a Matrix come esempio di controllo della realtà, di una realtà. Stiamo parlando di astrazione della realtà, non di simulazione. Anche se la simulazione e la creazione di realtà alternative ha senz’altro il suo fascino filosofico.

Dunque, come un filosofo, il progettista di un database analizza la realtà, coglie gli aspetti rilevanti per la sua visione del progetto, li rappresenta nel modo che sia più efficace, mette alla prova il sistema risultante per verificarne la validità. Allo stesso modo, uno sviluppatore analizza la realtà, la rappresenta con classi ed oggetti in maniera coerente con lo scopo dell’applicazione, verifica la rispondenza con i risultati attesi.

Filosofi e informatici non fanno altro che rappresentare la realtà nel modo che è più comodo per i loro scopi.

Le domande che vanno oltre

Qualcuno potrebbe obiettare che questo confronto è riduttivo, che i filosofi non si occupano soltanto di rappresentare la realtà e di attribuirle un senso. Essi si occupano anche dell’esistenza, dell’io, della relazione tra anima e corpo, dove finisce il corpo ed inizia l’anima, dove finisce l’io e inizia il mondo esterno. Tutte cose complesse e misteriose.

Perfetto! Anche gli informatici affrontano questioni simili: qual è la relazione tra hardware e software? Qual è il confine tra hardware e software? Posso simulare l’hardware con un software? Può un software rendersi conto se è in esecuzione su un hardware vero o simulato? Cosa distingue due istanze dello stesso software in esecuzione? Che relazione c’è tra concorrenza e parallelismo?

Come vedete, anche in informatica non si scherza in quanto a domande complesse e misteriose.

Per non parlare di questioni esistenziali come la differenza tra dato e informazione o tra dati e programmi. C’è una distinzione netta? Che ne pensate della capacità di un programma di considerare un altro programma (o anche se stesso) come dato? Stiamo parlando di metaprogrammazione, affascinante quasi quanto la metafisica.

Un futuro senza risposte

Credo che non ci sia bisogno di aggiungere che con l'avvento dell’AI, di questa nuova generazione di AI, le domande filosofiche sono aumentate. Com’è possibile che una “semplice” predizione statistica riesca a simulare l’intelligenza?

Turing credeva che una chiacchierata ci avrebbe consentito di stabilire l’intelligenza delle macchine. Oggi tutti chiacchieriamo con le macchine ma onestamente non sono sicuro delle loro capacità intellettive. A meno che il suo test non era per valutare l’intelligenza umana…

ChatGPT, Gemini, Copilot e gli altri rispondono alle nostre domande aprendone altre molto più difficili (se siamo in grado di coglierle):

  • Qual è la differenza tra l’uomo e una macchina intelligente?

  • Un computer è in grado di comprendere?

  • L’intelligenza è calcolo?

  • Cos’è la coscienza? Una macchina è cosciente?

  • Una macchina può avere responsabilità legale?

  • Un’AI dovrebbe prendere decisioni?

  • Cos’è l’etica? Come si fa ad insegnare l’etica ad una macchina?

Interagire con l’AI richiede più competenze filosofiche di quanto si pensi, non soltanto per lo sfizio di porsi domande, ma proprio per porre domande, dare istruzioni, interpretare le risposte di un sistema AI.

Mi fermo qui, senza nemmeno accennare al calcolo quantistico ed altre amenità che non fanno altro che risolvere un problema ed innescare nuove domande che richiederanno di formulare nuove teorie filosofiche e informatiche.

E pensare che Picasso sosteneva che i computer “sono inutili. Ti sanno dare solo risposte”.

0
Subscribe to my newsletter

Read articles from Andrea Chiarelli directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Andrea Chiarelli
Andrea Chiarelli

I'm Software Engineer and Technical Author with over 20 years of experience in software design and implementation. Throughout my career, I've had the opportunity to use a variety of programming languages and technologies on many different projects. In the last few years, I've been focusing on simplifying the developer experience with Identity and related topics as a Developer Advocate at Auth0 by Okta.