venerdì 6 gennaio 2017

L'informatica non è una scienza esatta

A parità di operandi e di operazione, un processore genera sempre lo stesso risultato. Un software, a prescindere da errori logici, è una sequenza più o meno complessa di operazioni che dagli stessi dati di input genera sempre lo stesso output.
Questo dice la teoria, e la logica. Eppure l'esperienza pratica racconta tutt'altro.

2 giorni fa, computer di mio padre: lo accendo la mattina, risulta non attiva la connessione di rete verso il router; ogni tanto succede, la procedura è nota: riavviare tutto. Provo 3 volte, niente; spengo tutto e riavvio anche il router, poi il computer, niente. Lascio perdere.
Torna mio padre, prova anche lui; riprova tutto, riavvia tutto, niente.
Pomeriggio, riaccende; funziona tutto subito. Cos'è cambiato dalla mattina? Non so, l'umidità, l'illuminazione è diversa, forse sono le macchie solari...

In azienda, dovendo gestire parecchi computer, tutti uguali, cloniamo l'installazione del sistema operativo (si può fare, anche per scopi di backup; prima o poi lo spiegherò). "Clonare", in questo caso, significa effettuare una copia bit a bit del disco di un computer sul disco di un altro: a quel punto i due computer sono identici, anche nel nome e nella configurazione di rete. Eppure, capita non troppo raramente che si comportino, per qualche aspetto, in modo diverso!

E quante volte ho detto, o sentito dire: "questo non può accadere", oppure "questo non mi era mai successo" (persino "è un caso che non si è mai verificato in tutto il mondo"): inutile, tanto bisogna arrendersi davanti all'evidenza, succede. Nel mio lavoro, ormai da più di 15 anni, ne ho viste di tutti i colori, ma non si smette mai di imparare cose nuove, intendo in senso negativo: veder succedere cose che mai avresti pensato di vedere, che ti spiazzano, e che ti costringono a rivedere le tue convinzioni.

Analizziamo due casi: una certa cosa non ha mai funzionato, oppure funzionava, e da un certo momento non funziona più.
Il primo caso è, per assurdo il più semplice: ho fatto qualche cavolata, la cerco, la trovo, la sistemo; nella stragrande maggioranza dei casi, pochi minuti e sono a posto (e l'autostima è salva).
Il secondo ti fa uscire dai gangheri. Se funzionava, vuol dire che era tutto corretto: cosa vado a cercare da sistemare? E qui entra in gioco il trucco più usato dagli informatici di tutto il mondo, il rito magico: "uscire e rientrare", che in realtà è il riavvio del programma non funzionante o del computer. Funziona nel 90% dei casi (non ho dati reali, è una sensazione basata sull'esperienza; ma credo che sia abbastanza condivisa dai miei colleghi di tutto il mondo). E se siamo nel restante 10%? Ecco, in questo caso maledici l'informatica e l'amico che ti ha convinto di sceglierla come lavoro, te la prendi con i più famosi proprietari delle software house mondiali, e nel frattempo cerchi di capire, fai le prove più assurde, finché, dopo ore di stress e imprecazioni, capisci l'arcano e nel giro di 10 secondi sistemi la questione (o chiami l'assistenza per la riparazione dei qualche componente). Ed infine, in quell'attimo di ingiustificata euforia per l'uscita dall'incubo, pensi: "ecco, ho imparato anche questa, ora che so come sistemarla sono a posto", e puoi star certo che non ti capiterà più ed il prossimo problema dovrai risolverlo ricominciando tutto il processo daccapo.

Ecco. L'informatica non è deterministica come hanno cercato di farci credere; e come i normali utilizzatori pretenderebbero (giustamente) che sia. Da cosa dipende tutto ciò? La realtà è che non lo so. L'idea che mi sono fatto è un po' filosofica: noi ragioniamo e ci rapportiamo con mondo digitale in modo macroscopico, cioè vedendo le cose nel loro complesso; ma in realtà, l'informatica è un mondo microscopico, dove la variabili in gioco sono in numero enorme, e devono tutte essere corrette per fa girare bene il tutto: se un solo bit, per qualsivoglia motivo, assume il valore sbagliato, manda tutto in vacca. E purtroppo la probabilità che ciò accada non è zero: anche i computer, essendo realizzati e progettati da essere umani, non sono perfetti. È una condizione con cui dobbiamo convivere. Certo, poi entra in gioco la qualità dei prodotti (parlo sia di hardware che di software): aumentare la qualità, tra i tanti aspetti che ciò significa, include anche l'affidabilità, che equivale alla diminuzione della probabilità che si verifichino questi incomprensibili eventi.

Credo che il senso di questo post sia un po' spiegare in che situazione ci troviamo ogni tanto noi "esperti"; e sperare magari in un po' di comprensione, quando "voi" aspettate impazientemente che "noi" risolviamo il problema.

Nessun commento:

Posta un commento