lunedì 30 settembre 2013

Bug-free software

Quando si scrive un programma per computer si può incorrere in due tipi di errori: quelli di sintassi e quelli logici. I primi vengono rilevati direttamente dal compilatore poichè quest'ultimo (si tratta di un altro programma) non riesce ad applicare le sue regole di traduzione in codice eseguibile dalla macchina. I secondi invece vengono regolarmente tradotti dal compilatore ma portano a comportamenti non previsti e in particolare molti di essi possono portare ad una interruzione imprevista o ad uno stallo del processo di calcolo. Un esempio di un errore di sintassi potrebbe essere una parentesi aperta in un punto del codice e mai chiusa, oppure semplicemente una parole chiave del linguaggio scritta male. Un esempio di errore logico potrebbe essere una divisione per zero o l'ingresso in un ciclo di calcolo infinito. Molti errori logici si rivelano solo con particolari dati in ingresso al programma.

Anni fa mi è capitato di sentire più di una volta l'espressione categorica "non esistono programmi senza errori", oppure "non è possibile scrivere programmi che siano esenti da qualsiasi errore", "scrivere software senza bug è impossibile". Ma non è chiaro cosa questo voglia significare. Voglio dire: è chiaro che è possibile scrivere programmi esenti da errori, cioè programmi il cui comportamento è esattamente quello previsto. Non saranno particolarmente interessanti ma si possono scrivere. Dunque queste frasi o non hanno senso oppure il loro senso va precisato in qualche modo (ma rimane il fatto che sia io a non aver mai capito bene la questione, o che non ci abbia mai riflettuto abbastanza, almeno fino a questo momento).

Credo di aver trovato questa precisazione in un libro letto recentemente, o perlomeno certe osservazioni del libro mi sono suonate come precisazioni interessanti di questa idea vaga persa nella mia memoria, che quindi mi è apparsa come una specie di detto popolare con un qualche fondamento (del tipo "rosso di sera bel tempo si spera").

La precisazione è la seguente: "non può esistere un programma (un algoritmo) che sia sempre in grado di decidere se, dato un certo programma con certi dati in ingresso, quest'ultimo andrà in crash o in hang per qualche errore oppure no, per qualunque programma fornito". In altre parole sebbene esistano programmi che aiutano più o meno efficacemente il programmatore a fare il cosiddetto "debugging" di un suo programma, o più in generale il testing, questa attività rimane in parte legata all'abilità dello stesso programmatore, non potendo essere completamente automatizzata attraverso un qualche algoritmo efficiente al 100%. Terminata una fase di test nessuno mi assicura, per quanto il lavoro possa essere stato accurato, che il mio programma sia stato emendato completamente da tutti i suoi possibili errori. Si tratta di un risultato di carattere generale che ricorda molto da vicino il famoso "problema dell'arresto" il quale, detto in breve, afferma che stabilire se l'esecuzione di un programma termina a fronte di un input arbitrario e' un problema indecidibile (Alan Turing, 1936).

Quindi è possibilissimo scrivere software senza bug, quello che è impossibile è avere un procedimento generale (magari di tipo algoritmico) in grado di dimostrarcelo per qualunque software.

Nota: devo ammettere che, con il senno di poi, se si cerca un po' meglio in rete si trova spesso la frase, enunciata a volte come un principio della programmazione, che dice: "è impossibile dimostrare l'assenza di bug in un programma"; inoltre nella trattazione del problema generale del testing si incontra inevitabilmente la famosa tesi di Dijkstra: "Testing shows the presence, not the absence of bugs" (Dijkstra, 1969).

Nota2: se si scrive un programma che fa uso ad esempio di una procedura di calcolo che non è quella voluta dal programmatore (che dunque avrà sbagliato a scriverla) ma che appare del tutto legittima sono in presenza di un bug oppure semplicemente di un altro programma? Dal punto di vista teorico sembrerebbe essere semplicemente un diverso programma (a cui non posso applicare il risultato della teoria). Dal punto di vista pratico è certamente un bug che in qualche fase di testing dovrà essere messo in evidenza.

martedì 10 settembre 2013

Argomenti sottratti alla società

L'accaduto è circa il seguente: una lite cruenta avvenuta in una strada del bergamasco tra un gruppo di connazionali indiani è terminata con l'uccisione di uno di essi. In questo assassinio è rimasta coinvolta un medico italiano capitata per puro caso in quel momento e fermatasi a prestare soccorso. Muore anche lei, investita insieme alla vittima (già picchiata selvaggiamente in precedenza e riversa a terra sulla strada) dall'automobile degli aggressori.

Sul "giornale" La Padania questa notizia compare in prima pagina, con una foto gigante della strage e con il titolo a caratteri cubitali: "Sulla strada dell'integrazione". Altri commenti riportati sono del tipo: "Salvini: «in Italia non c'è posto per un immigrato in più»". Si aggiungono poi le solite dichiarazioni di stile del vicepresidente del Senato, Roberto Calderoli: «Chi ha commesso un delitto del genere non è un uomo ma una bestia, e come tale va trattato»; «Le bestie feroci, le belve, vanno rinchiuse subito in gabbia e bisogna buttare via per sempre la chiave»; «A fronte di episodi del genere, che vedono l'assassinio premeditato anche di un soccorritore, c'è da riflettere sul fatto che sia stata opportuna o meno l'abolizione della pena di morte» (Il Messaggero online).

Sarà mai possibile aprire un dibattito serio sull'immigrazione in Italia con questa gente? Quello dell'immigrazione/integrazione è un problema complesso e importante, dalla sua corretta gestione (la sua eliminazione è cosa ovviamente impossibile) dipende buona parte del nostro futuro. Ma per affrontare un problema complesso serve un confronto tra visioni magari anche molto diverse ma tutte guidate da una forma di pensiero intelligente.

Mancano i prerequisiti, come sempre. Dialogo tra destra e sinistra? Argomento sottratto alla società da politici che da tempo non rappresentano più idee di un qualche tipo. Dibattito sui possibili futuri dell'economia? Argomento sottratto alla società da politici che si sfidano quotidianamente sull'inutile questione dell'IMU si o no, per mesi e mesi. Confronto su questioni istituzionali e sulla legge elettorale? Argomento sottratto alla società da politici che fanno melina. Questioni di bioetica, di libertà personali, forme di convivenza tra cittadini, laicità dello stato? Argomenti sottratti alla società da politici asserviti per convenienza alla Chiesa Cattolica. Problema della gestione dei flussi migratori in Italia e in Europa? Argomento sottratto alla società da "politici" beceri e incivili che intervengono sempre e comunque a gamba tesa, puntuali e sempre più veloci di qualsiasi considerazione intelligente.

Sembra di stare in uno di quegli assembramenti di persone in cui, una volta intavolato un qualunque argomento serio, trovi sempre quei due o tre stronzi che con una serie di osservazioni inutili, banali e fuori luogo ti mandano in vacca tutta la discussione, per quanto tu abbia la buona volontà di continuarla. E alla fine te ne vai incazzato, cercando di pensare ad altro.

domenica 1 settembre 2013

Un "moderno" capo tribù

In un paese campano ho avuto un casuale e brevissimo incontro con il parroco. Non ho potuto fare a meno di notare che le persone del gruppo di cui facevo parte si rivolgevano a lui dandogli del voi, mentre lui usava più semplicemente il tu. Ciò non era senz'altro dovuto a questioni di differenza di età poiché eravamo tutti grosso modo coetanei. Il prete si permetteva un tono molto colloquiale anche con chi conosceva poco ed in particolare con me (che non conosceva affatto) se ne è uscito con un "ciao guaglio' ...".

Il linguaggio usato, i comportamenti e gli atteggiamenti (apparentemente secondari) espressi nel corso della breve chiacchierata sottolineavano secondo me in modo molto naturale delle precise posizioni di potere nell'ambito del gruppo. E' il caso di notare che le persone che stavano con me non brillavano certo per un'ortodossa condotta di vita cristiana (persone non sposate con figli, tanto per fare un esempio). Evidentemente una cosa è quello che predica il prete "nel suo ruolo" e una cosa è la vita reale. Ma questo come al solito sembra ben tollerato e anche trascurato da chi rappresenta la chiesa. Sembra che la vita reale delle persone non sia poi così importante (è più il "ruolo" che conta).

Ma che cosa vuole il prete dalla sua comunità di cristiani? E cosa chiedono le persone di questa comunità al loro parroco?
La parrocchia in questione, come molte in quella zona, è capace di spendere 10000 € per corredare la festa del santo patrono da fuochi pirotecnici. Anche qui è il caso di notare che la festa commemora un personaggio storicamente molto incerto se non addirittura completamente infondato il cui simulacro, simbolo unificante del paese, viene custodito in chiesa dal parroco. Ma quel simbolo è la divinità a cui l'intero paese raccomanda il proprio destino, e il parroco è il suo tramite. Non esiste un evento civile altrettanto forte e aggregante per la comunità e non esiste un cittadino altrettanto autorevole e rappresentativo come il parroco. Il parroco mantiene e gestisce la principale identità culturale del paese. E questo effettivamente può essere percepito come un fatto importante dai cittadini.

I riti propiziatori alle divinità mantengono unita la tribù e la legano ad un unico destino. Lo stregone che officia i riti della tribù ha in essa un posto molto speciale.