Ci sono buoni motivi per i quali l’informatica e il suo insegnamento vengono spesso connessi alla questione della «complessità»: nell’informatica avviene la più ampia escursione di ordini di grandezza mai realizzata in una tecnica, e inoltre gli strumenti da essa offerti sembrano gli unici adatti per rappresentare e percorrere il carattere reticolare e non lineare della cultura umana. In ciò c’è evidentemente molto di vero. Ma se fosse ancora più vero il contrario? Cioè che l’informatica è una scuola di semplicità? Ci sono diversi sensi in cui quest’ipotesi appare plausibile.
Che fine ha fatto il sogno di un’informatica che semplifica?
C’è un primo significato apparentemente superficiale, che non è esclusivo dell’informatica ma che in essa appare con grande chiarezza. Un reportage di qualche mese fa dalla più importante esposizione di tecnologia mondiale sbottava in un grido di esasperazione: sì, tante belle cose, forse in sé anche utili, ma troppo complicate. La persona comune si trova completamente disorientata di fronte ad apparecchi che costringono a procedure sempre più complesse di attivazione, i cui comandi costringono a scegliere tra millanta opzioni di significato oscuro, la cui coabitazione viene ostacolata da interfacce e protocolli continuamente cangianti (più facile ascoltare un vecchio disco in ceralacca a 78 giri degli anni 40 che sperare che un apparecchio informatico di dieci anni fa possa essere usato oggi senza problemi).
L’informatica deve servire a tutti: la “filosofia Unix”
Che l’informatica possa diventare strumento di cultura, di partecipazione, di consapevolezza dipende in maniera cruciale da quanto essa riesce ad avere un uso semplice. Questo è un campo in cui la cooperazione tra persone di formazione e sensibilità diverse può essere più importante: il compianto Marco Pesenti Gritti, uno dei nomi di spicco nello sviluppo del software libero negli anni passati, a chi gli chiedeva che cosa significasse per un laureato in Lettere come lui lavorare nell’informatica, rispondeva che questo dava meglio la percezione che l’informatica non deve servire agli esperti di informatica, ma a tutti.
La questione è in realtà più impegnativa di quanto appaia a prima vista. In generale la semplicità di uso non si ottiene soltanto sottraendo funzioni inutili (o magari, come talvolta si fa, nascondendole): un uso semplice si ottiene soprattutto comprendendo bene quale sia il problema da risolvere e scomponendolo nei suoi elementi. Ognuno di essi sarà a quel punto semplice. Spesso tra gli addetti ai lavori si usa parlare della «filosofia Unix»: il suo elemento più tipico consiste nella preferenza per programmi che facciano «one thing well»: una sola cosa, e bene. Descartes sarebbe molto felice, perché questa è esattamente la seconda regola del suo celebre metodo: ogni problema va scomposto nei suoi elementi costitutivi, ognuno dei quali possa essere padroneggiato con certezza, ed essi vanno affrontati uno alla volta. La loro soluzione può quindi anche essere riutilizzata: mentre i problemi complessi sono uno diverso dall’altro, le loro singole componenti ricompaiono innumerevoli volte in diversi contesti. Questo è anche il modo in cui si può collaborare più efficacemente: individuando e distribuendo i singoli problemi, le cui soluzioni alla fine non dovranno che essere assemblate.
La semplicità nella programmazione
L’imperativo della semplicità si sposta così gradualmente in un livello più profondo, quello della programmazione. È nota tra gli addetti ai lavori la battuta secondo cui un programmatore non dovrebbe essere pagato per ogni riga di codice che scrive, ma per ogni riga che elimina. Benché non sempre brevità faccia rima con semplicità, a parità di condizioni una soluzione più breve è migliore di una più lunga: più facile da comprendere e controllare, meno soggetta ad errori, spesso più veloce. Qualche tempo fa mi trovai ad aver bisogno di una certa funzione in una pagina web e pensai anzitutto di cercarla già pronta: ne trovai diverse realizzazioni ottime sì, ma con dimensioni che oscillavano tra i 25 e i 130 kB. Mi decisi allora a riscriverla da zero, cercando la massima semplicità possibile: ottenni lo stesso risultato in una quarantina di righe di codice, complessivamente 1.5 kB.
Qualche precisazione tecnica farebbe capire che la cosa è meno miracolosa di quanto appaia, ma l’osservazione generale non cambierebbe: la semplicità non è solo una questione di efficienza o una preoccupazione paranoica, ma uno degli aspetti costitutivi della programmazione. La semplicità permette infatti ad un procedimento di elaborazione di dati di essere compreso, visto nella sua bellezza. Questo è in effetti, visto da un altro punto di vista, uno dei principi che guida ogni ricerca scientifica: cercare una legge naturale significa cercare la spiegazione più semplice di un complesso di fenomeni. Non è dunque strano che anche in quelle creazioni artificiali che sono gli algoritmi la semplicità sia una qualità essenziale.
Questo significato di semplicità ha anche un rapporto stretto con uno dei procedimenti più tipici dell’informatica (e per altro di ogni scienza esatta): il procedimento di generalizzazione. Una soluzione per una classe di problemi è spesso più semplice della soluzione per uno solo. Questo effetto paradossale deriva semplicemente dal fatto che un problema specifico viene spesso affrontato come una somma di casi particolari, mentre la soluzione di una classe di problemi costringe a trovare una legge universale soggiacente.
Informatica e complessità della cultura
I fautori dell’educazione alla complessità forse giustamente osserveranno che tutto ciò non è affatto in contraddizione con la loro proposta. In un certo senso è anzi complementare: perché mai lodare la semplicità se non presupponendo che la realtà è in sé appunto complessa, di una complessità che occorre sempre districare e a cui bisogna dare un senso? Dall’altra parte, il complesso non va neppure confuso con il banalmente complicato, e i primi esempi che abbiamo fatto forse ricadono in questa categoria. Contro queste osservazioni non avrei nulla da obiettare. Senonché non mi pare piccolo il rischio che considerazioni in sé giustissime sulla complessità della cultura, sugli innumerevoli fili che connettono ogni cosa umana e denunciano come sciocca e ideologica ogni semplificazione, vengano solo per assonanza proiettate su una disciplina scientifica che, come tutte le sue consimili, vive e dovrebbe vivere di ordine e di semplicità, e che anzitutto andrebbe studiata in sé: a meno che si pensi che le discipline possano essere connesse prima di essere conosciute. Perlomeno, se tanti progetti pedagogici vacillano di fronte ad un banale hic Rhodus, hic salta, lo studio dell’informatica è possibile fin da oggi, con un suo valore intellettuale certo.