Il giorno sab 13 ott 2018 alle ore 18:36 Luca Cappelletti <luca.cappelletti@gmail.com> ha scritto:
Il 13/10/18 00:57, Giacomo Tesio ha scritto: ...
I bug non sono l'eccezione che capita a programmatori normalmente infallibili. Sono la norma.
Temo di non aver compreso bene, ma se fosse la norma dovremmo avere centinaia di aerei, treni, automobili, satelliti, dispositivi medicali, centrali atomiche "sfracellarsi" continuamente senza sosta..
Ciao Luca, poni una obbiezione molto interessante. Anzitutto ti confermo che i bug sono la norma. Qualsiasi programmatore con un minimo di esperienza te lo potrà confermare. Se non ricordo male, in "The Mythical Man-Month", Fred Brooks sosteneva che il numero di bug cresca in modo quadratico con la lunghezza del programma. In "Code Complete", Steve McConnell sostiene che la media dell'industria informatica si pone fra i 15 e i 50 bug ogni 1.000 righe di codice. Qui puoi dare un'occhiata ad una stima (molto ottimistica) dei bug del kernel Linux: https://scan.coverity.com/projects/linux Sul tuo cellulare Android vengono eseguite miliardi di righe di codice: solo il kernel, Linux, sono 14 milioni di righe, poi c'è la libreria C, le librerie crittografiche, la java virtual machine, tutte le applicazioni. Alcune di quelle righe di codice sono generate automaticamente da software a loro volta buggati. E i compilatori che producono gli eseguibili sono a loro volta buggati ed introducono talvolta bug nel software a causa di processi di ottimizzazione errati. La frequenza e la pesantezza degli aggiornamenti di Windows o di Android dovrebbe permetterti di intuire il problema. Il gigante ha piedi di argilla. L'intera informatica è ancora ad uno stato embrionale, primitivo. Se qualcuno ti dice il contrario, chiedigli di indicarti 1 software mainstream sopra le 20.000 righe di codice SENZA bug. La questione non è mai se un software abbia bug. Li ha. La questione è quanti, quanto gravi e quanto costosi da correggere. Vi è una forte variabilità fra un settore e l'altro, fra un progetto e l'altro, fra uno sviluppatore e l'altro, fra un linguaggio e l'altro. Ma siamo ancora molto, molto, molto lontani da produrre software complesso e corretto. Le tecniche che ci si avvicinano di più, come il Cleanroom di Mills, sono usate molto raramente, solo in sistemi critici (aereonautica, industria areospaziale) perché molto costose. E non sempre.
Ma non vedo questi effetti statistici, quindi o questi sistemi non usano software o il software che usano considerano il programmatore un criminale e quindi riducono il bug ad un evento raro e ben gestibile (tranne qualcha rara volta)
Semplicemente non sai dove guardare. E confronti il software per aerei con il software LegalTech descritto eccellentemente da Giuseppe. Sono due mondi totalmente diversi con livelli qualitativi assolutamente incomparabili. Prendiamo gli aerei, che sono i veicoli autonomi di livello due più avanzati del pianeta. Ogni singola riga di codice costa migliaia di euro. I bug ci sono comunque, ma sono nel ordine di 1 ogni 20.000 righe di codice. Se imponessi lo stesso livello qualitativo ad una Self Driving Car, che su una strata aperta al pubblico affronta una complessità di diversi ordini di grandezza maggiore di quella affrontata da un aereo durante un volo intercontinentale, otterresti due effetti: 1. l'istantanea rimozione di qualunque rete neurale nel simulatore alla guida 2. l'abbandono del progetto dalla maggioranza dei player Se non sai dire a quale specifica un software risponda (perché l'hai addestrato con un reinforcement learning, ad esempio), questo è "broken beyond repair". Può essere utile per giocare, o se ricadi nei casi per cui è stato provato. Ma nessun ingegnere con un minimo di buon senso lo metterebbe alla guida di un auto. D'altro canto se il software che controlla il sistema di entertainment sulla tua auto ha un baco, magari non senti la musica un giorno, ma l'auto continua a frenare. Se invece quello stesso baco è alla guida dell'auto hai un grosso problema. Ed infatti i treni e gli aerei dispongono di sistemi di sicurezza meccanici di emergenza proprio per i casi in cui il software fallisce in modo inatteso. Ora, tutte queste sono cose note, persino ovvie, che qualsiasi programmatore ti può confermare (mi scuso anzi per la lunghezza, ma volevo essere chiaro). Il fatto che molti non ne abbiano coscienza deve farci riflettere. Mancano totalmente gli strumenti culturali per interpretare la tecnologia. Per questo la gente va dietro alla blockchain, alle cryptovalute e alla singolarità nella IA. Per la stessa ragione per cui crede ai NOVAX e alle scie chimiche: in assenza di conoscenza, si adotta il pensiero magico, affidandosi al personaggio più carismatico. Non esistono software senza bug. Giacomo PS per gli amici geek all'ascolto: lo so, `true`, `yes`, `false` e `cat` forse non ne hanno... ma... gli script che li usano? ;-)