Le Leggi della programmazione

Le Leggi della programmazione

breve divagazione su una possibile onto-metodologia informatica

Aspri sono gli scontri teoretici sulle Leggi che governano l'arte della generazione, dell'applicazione e della concatenazione di algoritmi, ovvero quella strana disciplina chiamata programmazione
In proposito si segnalano almeno due approcci, fra loro radicalmente differenti, i cui sostenitori si combattono non meno accanitamente di quanto fecero, al loro tempo, nominalisti e universalisti, tolemaici e copernicani, wagneriani e mendelssonhiani; poiché in ogni tempo ed in ogni luogo esisteranno aristotelici e platonici, e sempre si combatteranno.

Il primo approccio, che potremmo definire come positivismo informatico, può essere espresso nella sua forma più sintetica dalle cosiddette Due Leggi (o Due Assiomi):

Prima Legge i computers non sbagliano mai.
Seconda Legge
(forma forte)
i programmatori non sbagliano più dei loro computers.
Seconda Legge
(forma debole)
è possibile determinare principî e modalità di lavoro che consentano ai programmatori di non sbagliare più dei loro computers.

Virtualmente infinito è l'insieme di teoremi, lemmi e corollari che, attraverso gli strumenti dell'algebra booleana e le trasformazioni topografiche di LaRue, possono essere considerati equivalenti alle Due Leggi ed esprimere perciò la stessa proposizione matematico-filosofica; mi limito qui alla sola esposizione delle Due Leggi perché, come brillantemente intuito (e annotato a margine; ma al solito il margine era troppo stretto) da Fermat nel 1661, di fronte alla pascaline che insieme macinava numeri e problemi, e quindi definitivamente dimostrato per induzione da Cantor nel 1902, le Due Leggi sono linearmente indipendenti e tutti gli spazî vettoriali dei possibili mondi informatici in cui queste Leggi sono vere hanno dimensione <= 2.
Per eventuali approfondimenti rimando a testi specialistici.

Il secondo approccio, più sfuggente ma non per questo meno potente, ben difficilmente si presta ad essere espresso con chiarezza attraverso una definizione rigorosa nel linguaggio delle scienze esatte, forse anche perché tali scienze mai hanno avuto piacere di trattare con principî e pensieri cosi intrinsecamente eretici. Lasciandomi condurre dalla vena poetica che a volte mi attraversa, potrei forse riassumerlo con la seguente proposizione ipotetico- comparativa:

Se gli ingegneri costruissero come i programmatori programmano,
il battito d'ali d'una qualunque farfalla potrebbe distruggere la civiltà.

[libera citazione di una delle Leggi di Murphie]

Potremmo definire estetico-popperiano-catastrofista questo secondo approccio, per le tre fondamentali idee che contiene ed esprime:

bulletla misurazione qualitativa dei fenomeni;
bulletl'implicita impossibilità di dare imperitura e universale certezza a leggi e procedimenti (informatici, ma non solo);
bulletla sostanziale imprevedibilità dei sistemi complessi (e poi anche nella teoria delle catastrofi si parlava di farfalle).

Le due posizioni sono entrambe false, naturalmente, anche se non forse nella stessa misura e nello stesso modo.

E' indubitabile infatti l'inconsistenza del positivismo informatico, dato che la computabilità e la verifica dell'aderenza alle specifiche dell'implementazione di un qualunque algoritmo anche solo minimamente complesso presentano difficoltà anche teoriche insormontabili e non possono essere effettuate se non per via empirica (Turing).

Meno dimostrabile ma non meno indubitabile, ad uno studio macroanalitico, appare l'inconsistenza dell'approccio estetico: è pur vero infatti che ogni tanto in informatica effettivamente si riesce a realizzare qualcosa che funziona e che fa quello che ci si aspetta che faccia, come testimonia il considerevole sviluppo raggiunto dalle applicazioni di questa disciplina. La statistica ci dice inoltre che, benché non impossibile, è assai improbabile che questi risultati siano raggiunti per caso, supponendo che la moltitudine di programmatori che scrivono programmi e sistemi operativi lavori come l'esercito di scimmie che, battendo a macchina random, tenta di riscrivere la Divina Commedia (impossibile non citare qui l' inquietante ipotesi della perversa esistenza di una Biblioteca informatica).

A livello preliminare, tuttavia, mi sembra importante rilevare che, benché entrambi falsi, i due approcci non possiedono lo stesso tipo e lo stesso grado di pericolosità, ovvero la stessa capacità di fare danno.

Infatti: mentre bisogna ammettere che - in modo forse non dissimile da quanto successo in India, dove la teoria dell'infinita ruota delle incarnazioni, pur teologicamente e teleologicamente non peggiore di tante altre, ha demotivato il progresso sociale e materiale della civiltà - una piena accettazione della posizione estetica porterebbe ad una scienza (informatica in primis, ma subito dopo, eseguite le inevitabili estensioni concettuali, scienza tout court) debole e senza nerbo, tale che probabilmente mai si sarebbe affrancata dal dominio che filosofia e teologia hanno esercitato su di essa per migliaia di miliardi di anni, ciònondimeno non si può nascondere che i veri programmatori positivisti (e più in generale tutti gli idealisti), animati dell'entusiasmo per l'utilizzo della tecnologia che è stato insegnato loro essere valida (per l'elevato fine del raggiungimento del bene assoluto), rappresentano indubitabilmente il peggio del peggio del peggio: fanatici, dotati delle armi che consentono loro di nuocere, travestiti da missionari; prima o poi saranno catturati e ridotti all'impotenza dall'oggettivo riconoscimento dei disastri combinati in nome di un buon fine, ma nel frattempo, specie se dotati di elevato Q.I (che non è necessariamente in contraddizione con la mancanza di senno), avranno causato guai infiniti e irreparabili.

Appare chiara, a questo punto, tanto l'inconciliabilità delle posizioni presentate, quanto la loro complementarità. Quale è il punto di snodo tra le due posizioni? Forse lo si può più facilmente individuare cercando di rispondere alla domanda:

la programmazione è una scienza esatta?

La risposta non può essere che:

naturalmente SI
(approccio positivista)

perché le conseguenze di ogni singola istruzione possono essere determinate e valutate, quantomeno in linea di principio

naturalmente NO
(approccio estetico)

perché è impossibile determinare e valutare tutte le conseguenze di ogni istruzione in relazione a tutte le altre

Mostrando abbastanza chiaramente, a mio avviso, che in effetti di due cose diverse si sta parlando: della scienza teorica della programmazione, e della sua applicazione alla e nella realtà. 

Arrivato a questo punto non posso non confessare che tutto quello che ho detto, benché forse utile - soprattutto per chi non ha specifiche esperienze nel settore informatico-programmatorio - per inquadrare il discorso, è in realtà pretestuosa introduzione all'articolo che segue e che mi sembra illuminare più di tanti discorsi teorici lo stato dell'arte della controversa e interessante disciplina della programmazione. 

«La crisi del software» 

tratto da Le Scienze, n° 315, novembre 1994

Dopo tutto, e senza troppo drammatizzare, resta il fatto che il campo di battaglia su cui si scontrano I principî di Programmazione Astratta e La realtà delle implementazioni molto spesso è il corpo e la mente di noi poveri programmatori (oltre che le attività economiche dei nostri poveri clienti). Cosa che ci costringe inevitabilmente a trovare delle forme di mediazione tra la dose di positivismo necessaria per credere in quello che si fa e la salutare consapevolezza di vivere - anche informaticamente - in un universo estetico, complesso, ingestibile.

E mi piace pensare, come modello ideale di questa coabitazione di opposti principî, al contrasto apollineo-dionisiaco che dominava gli antichi Greci. Essi vivevano in un mondo che andava strutturandosi intorno a regole intrinsecamente razionaliste (le stesse idee che, trasfuse nella Romanità e nel Cristianesimo, porteranno alla generazione della società occidentale), ma si mantenevano aperto uno spazio di discussione artistica scrivendo e ascoltando e interpretando quelle splendide costruzioni dello spirito che sono le Tragedie, in cui si prendevano la libertà di dubitare dell'Ordine degli Dei (oppure, per altro verso e su una scala in certo senso minore, le Commedie, in cui si prendevano la libertà di ridere dell' Ordine degli Dei), così consentendo libera espressione alla polarità negativa dell'anima umana (Nietsche, La nascita della tragedia).

E mi piace pensare che anche noi - noi programmatori, e noi umani - si lavori con apollinea determinazione alla costruzione del nostro mondo; senza dimenticare, ogni tanto, di dar modo di emergere alla componente estetico-dionisiaca, magari attraverso una risata catartica e apotropaica che spazzi via, con il duplice effetto morale e fisico, le effimere illusioni dei positivisti puri e i micidiali effetti del battito d'ala della catastrofica Farfalla.

XII-MM

aggiornato il 23/01/2010

home

scrivimi, se ti va