Il metodo algoritmico
“È tutta colpa dell’algoritmo”. Non c’è giorno in cui sui giornali non appaia una notizia in cui l’algoritmo venga posto sotto accusa e indicato come il responsabile di qualche evento funesto. Dall’assegnazione degli insegnanti alle rispettive sedi scolastiche alla censura applicata da Facebook alle immagini pubblicate dai suoi utenti, dal crollo di una moneta in uno dei tanti mercati finanziari al costo eccessivo dell’abbonamento del treno per i pendolari, dalla lettura delle emissioni di gas sulle auto con motore diesel ai risultati delle elezioni in uno qualunque dei paesi in cui si vota. Eppure, se queste notizie vengono analizzate più in dettaglio, senza limitarsi a recepire soltanto il loro titolo (spesso di carattere puramente mediatico), si capisce subito che la colpa non è quasi mai dell’algoritmo. Anzi, che l’algoritmo ha fatto esattamente quello che ci si aspettava dovesse fare. E che, caso mai, la causa del risultato inatteso e criticato risieda spesso nell’errato utilizzo dell’algoritmo stesso o nella sua errata codifica in un linguaggio di programmazione.
Uno degli obiettivi principali del nostro libro è proprio quello di fare chiarezza sul processo di risoluzione di problemi attraverso le tecnologie informatiche. Un processo che indichiamo come “metodo algoritmico” e che consiste nel formulare un problema (a partire da una specifica applicazione), definire un algoritmo per la sua risoluzione e codificare l’algoritmo in un programma eseguibile dal computer (si veda la seguente figura).
Le tre componenti principali del metodo algoritmico sono tutte ugualmente importanti e, come mostrato nella figura, tutte soggette a possibili errori. Ma è importante averle in mente ben distinte per poter capire in seguito che cosa abbia causato risultati che non ci si aspettava. Per questo motivo, è importante che la fase di coding sia seguita da una fase di verifica, il cui scopo è individuare i cosiddetti bug, ovvero errori concettuali e/o implementativi: nel caso tali errori vengano rilevati, è necessario modificare la progettazione dell’algoritmo e/o correggere la sua implementazione. Una volta realizzata la corretta implementazione, è altrettanto importante verificare che le soluzioni ottenute siano veramente utili per la risoluzione del problema originario: se così non fosse, ciò vorrebbe dire che la definizione del problema nascondeva delle debolezze che la sola verifica sperimentale è stata in grado di evidenziare. Bisogna quindi modificare il problema e ricominciare l’intero processo, facendo uso, ovviamente, di tutte le conoscenze e tecniche acquisite nel corso del processo. Una volta verificata effettivamente l’utilità della soluzione ottenuta, il programma può essere finalmente reso disponibile e utilizzato nell’ambito applicativo di partenza.