CAPIRE L?INFORMATICA : IL XX SECOLO

logorm16rbgnCAPIRE L’INFORMATICA

Quando vedo avvocati che maneggiano trionfanti quel giocattolo che si chiama iphone o smartphone, pensando che, finalmente, possono dominare la tecnologia, mi viene da rabbrividire: la tecnologia è come un cavallo di razza, o si domina, e bisogna essere molto competenti, o si è dominati. Certo lo smartphone non ti sbalza giù di sella come un cavallo, ma il problema è ancora più profondo. Per dominarlo bisogna che ci siano i fondamentali. Cosa sono i fondamentali? Quando assistiamo a trasmissioni di partite di calcio i telecronisti parlano di dribbling, sombrero, tap-in, collo del piede, movimenti, se un calciatore spara alto spiegano che aveva il corpo sbilanciato all’indietro, tiri col giro a entrare o col giro a uscire e via dicendo. Questo per la corretta gestione di due piedi. Evidentemente la corretta gestione del cervello è una cosa ben più complicata. Ma torniamo all’informatica: dietro allo smartphone ci sono 50 anni di storia e anche più, dato che ormai è dimostrato dai documenti che la seconda guerra mondiale è stata vinta dal genio Turing che decifrò la macchina crittografica Enigma dei tedeschi come tutti hanno potuto vedere nel film The Imitation Game. Ma la vera informatica parte negli anni ’70 con calcolatori enormi e programmi scritti su schede perforate. Poi vennero i floppy disk, prima da 8 pollici con capacità di memoria 1,2 megabyte, poi quelli più compatti con capacità 1,4 megabyte, dove il megabyte esprime un milione di volte l’unità del computer il byte, a cui vengono associati i caratteri di scrittura, 8 volte il bit, che è l’unità fondamentale del computer, che può assumere due valori, zero o uno, acceso o spento. Vedendo la memoria di un computer vi è quindi solo una sequenza di zeri e di uno che i programmi o software interpretano e modificano. Questo perché il computer lavora sulla memoria RAM (random access memory) , che si cancella quando il computer viene spento e con dischi che permettono la memorizzazione definitiva dei dati elaborati. Adesso le RAM sono a livello di GigaByte (miliardi di byte) mentre i dischi contengono tranquillamente Terabyte di informazioni ( migliaia di miliardi di informazioni). Anche i supporti esterni si sono evoluti, dal floppy siamo passati al CD e quindi al DVD, mentre esistono compattissimi dischi che contengono terabyte di informazioni elementari. Questo è solo l’antefatto, perché invece bisogna fare attenzione all’evoluzione dei software e che cosa comporta questa evoluzione. Le primissime elaborazioni erano in linguaggio macchina, cioè si movimentavano gli zeri e gli uni, con un linguaggio, l’Assembler, che permetteva alcune operazioni elementari, quali la modifica del valore di una cella di memoria, il ciclo iterativo, cioè che un gruppo di istruzioni veniva ripetuto più volte, il salto, cioè che da una istruzione si passava a una successiva ma non immediatamente successiva o a una precedente, cosa che permetteva la realizzazione di cicli iterativi ma che creava una difficilissima lettura del programma, quindi la scelta logica, se avviene questa cosa fai queste operazioni, altrimenti fai queste altre operazioni. Le scelte logiche potevano essere in successione, e ogni scelta logica che si aggiungeva si moltiplicava per due il numero di attività da svolgere, ovvero di gruppi di istruzioni da testare. Quindi con 10 scelte logiche consecutive e connesse si hanno 1024 rami del programma da testare. La maggior parte dei programmatori quando supera le 3 scelte logiche connesse, ovvero 8 rami da testare, comincia a generare degli errori, quali rami non testati e altro. Infatti fin dalle origini era apparso evidente che il programma, prima di essere consegnato al cliente, doveva essere provato in un ambiente il più possibile analogo a quello in cui avrebbe operato presso il cliente. Si è quindi sviluppato il business della manutenzione del software, che si affiancava a quello dello sviluppo di nuove funzionalità e di nuovi programmi. Dal punto di vista dei linguaggi iniziò una evoluzione che tendeva a semplificare la vita del programmatore. Se i computer degli anni ’70, quelli dello sbarco sulla luna, per intenderci, avevano un elaboratore centrale e i terminali su cui lavoravano i programmatori e gli utenti erano solo dei monitor che permettevano di leggere alcune informazioni e di inviarne altre, con la riduzione delle dimensioni dei computer partì l’era dei personal computer (PC) che permettevano ad ogni utente di avere dei software che lavoravano in locale senza connessioni con l’esterno, cosa che ebbe un grande successo anche per l’avvento di sistemi operativi a finestre, in cui ogni finestra poteva gestire un software diverso, come se fosse stata un monitor indipendente e al contemporaneo sviluppo di Visual Basic, che partendo dal linguaggio Basic lo arricchiva di funzionalità grafiche e elaborative sempre crescenti. Intanto i grandi sistemi nel mondo commerciale utilizzavano il Cobol, un linguaggio limitato che era stato studiato per farlo utilizzare dai sergenti sell’esercito USA. Contemporaneamente gli ambienti scientifici utilizzavano il Fortran, mentre il linguaggio universale di alto livello era diventato il C, che aveva soppiantato l’Assembler anche nel software di sistema, cioè quel software, i sistemi operativi, che ti viene consegnato col computer in modo da farlo funzionare e su cui poi potevi installare i software che servivano alla tua attività o al tuo divertimento.
Si parlava allora di un milione di sviluppatori Visual Basic di fronte a 50.000 sviluppatori C. Un rapporto di 20 a 1. Sviluppavano in Visual Basic studenti, geometri, ingegneri, e chiunque avesse del tempo per svilupparsi applicazioni anche se non professionali. Uno dei primi problemi che si presentarono era che un fornitore di software, dato che non esisteva la brevettabilità del software come adesso, doveva garantirsi che fossero pagate tutte le copie del software che poteva vendere, e che no fossero fatte copie abusive, gratuite, in modo che lo sforzo fatto fosse gratificato economicamente. Si utilizzarono tecniche andando a scrivere informazioni sui registri del sistema operativo, ma come tutti sanno, giravano le cosiddette copie craccate e le tecniche per craccare, cosa che forse alcune grandi aziende nel modo informatico vedevano anche di buon occhio, costituendo anche un veicolo pubblicitario e di marketing gratuito, che avrebbe supportato anche le vendite legali, ovvero con licenza numerata. Cominciarono a diffondersi anche i Virus, cioè programmi che danneggiavano più o meno gravemente il computer o i software in esso installati, veicolati dallo scambio di floppy disk tra gli utenti dei PC. Sorsero allora ditte che crearono gli antivirus, ovvero la risposta che vaccinava da queste minacce, avendo analizzato come il virus agiva nei primi casi in cui era stato scoperto. Restava sempre il sospetto che alcuni virus fossero diffusi proprio dalle aziende produttrici di antivirus, per venderti il loro prodotto, cosa di cui non potevi fare a meno, pena la perdita di dati e di informazioni importanti, oltre alla possibile perdita di funzionalità del computer, fino al blocco totale. Un altro problema che si verificava era che cominciavano a crearsi quantità di software già sviluppati, già testati, che cominciavano a coprire una quantità di funzionalità, da quelle elementari come creare la media di una serie di numeri ad altre sempre più complesse. Furono organizzate delle librerie, le DLL (Dinamic Language Library) , che contenevano questi software e i cui programmi potevano essere utilizzati inserendo l’opportuna libreria nel tuo progetto software. Allora regina del mercato era Microsoft sia tra i sistemi operativi sia negli ambienti di sviluppo, cioè quei software che permettono di lavorare al programmatore, con le funzioni necessarie, quali l’editing, la compilazione, il debug, Poiché le esigenze commerciali Di Microsoft imponevano di mettere sul mercato un sistema operativo nuovo o un ambiente di sviluppo nuovo ogni due anni, facendo spesso fare il vero test agli utenti, si verificava il caso che un software degli utenti, che si definisce “applicativo” non funzionasse più perché generato con una versione precedente del linguaggio e quindi anche la funzioni delle DLL potevano dare risultati inaspettati, oltre al fatto che il software applicativo fornito da produttori diversi utilizzavano DLL incompatibili tra loro. Per un esempio banale la funzione che faceva la media aveva bisogno di un ulteriore parametro, che diceva se fare la media o, per esempio, il massimo e il minimo di quella serie di numeri. Evidente che il software “vecchio” che utilizzava la funzione “media tra numeri” senza il parametro aggiuntivo andava in errore.
Parallelamente si verificò il fenomeno del Millenium Bag, dovuto ai programmatori che, abituati a lavorare con scarse risorse di memoria, quando scrivevano una data, scrivevano l’anno con due cifre, 13 gennaio 1978 diventava 13/01/78. Fin qui niente di male, ma l’anno 2000 diventava 00 portando software anche di importanti enti pubblici ad andare in errore. Fu fatta quindi una infornata di informatici di scarsa competenza per risolvere al più presto il problema, essendo le modifiche da fare ai software per lo più ripetitive. A questo punto vi fu una doppia svolta nel settore: prima di tutto si riportò la parte più importante del software in posizione centralizzata, il server, diminuendo sempre di più le funzionalità sul PC che stava davanti all’utente, cominciarono a trasmettere dati anche importanti tra il PC, detto client, e il server nella tecnologia client-server, poi, per risolvere il problema di accavallarsi delle DLL fu creata una superlibreria universale, il Framework, che metteva a disposizione tutto lo scibile disponibile in una disposizione gerarchica che aveva bisogno, per semplicità, di un approccio diverso da parte del programmatore, il linguaggio a oggetti. Quindi Visual Basic fu abbandonato, trasformato in VBNET, che aveva lo stesso frame work di C#, erede di Visual C e discendente del mitico C. Questo, oltre a provocare scompiglio nei programmatori Visuasl Basic non professionisti, provoco anche un enorme problema sulla tutela del software prodotto: Per poter essere utilizzato, il framework era scritto nello stesso linguaggio di sviluppo, e quindi, quando si effettuava la compilazione del software, non si otteneva più un prodotto in linguaggio oggetto non leggibile, ma un prodotto in un linguaggio intermedio, che poteva essere decodificato da appositi software, i decompilatori, ovviamente disponibili gratuitamente nel mercato, che riportavano tale linguaggio intermedio nel linguaggio di sviluppo, facilmente comprensibile al programmatore. Sorsero allora i decompilatori, cioè software che appesantivano i programmi creando cicli inutili e altre trovate per rendere il più illeggibile possibile il software de compilato e impedirne quindi la possibilità di copiarlo e modificarlo creando prodotti analoghi sul mercato. La tutela scrivendo sui registri di sistema non serviva più: veniva facilmente trovato il gruppo di istruzioni che accedeva per confrontare la password immessa dall’utente con quella registrata sui registri di sistema, ma la soluzione, per i fornitori di software, veniva da un’altra importante novità del mondo informatico: internet.