Una cosa che mi fa parecchio stizzire (forse infuriare ci sta meglio) è la convinzione purtroppo diffusa che l'informatica sia una materia dalla quale si impara ad usare Microsoft Windows ed il relativo pacchetto office, tant'è che ho avuto a che fare con persone che si chiedevano come mai ci fosse una laurea in informatica quando c'è la patente europea del computer.
Uno dei più grandi informatici della storia disse:
"L'informatica riguarda i computer tanto quanto l'astronomia riguarda i telescopi"
Edsger Dijkstra
ad indicare che il computer è uno strumento utile per gli studi dell'informatico, ma non l'oggetto dei suoi studi.
Cerchiamo quindi di fare un pochino di chiarezza.
Il termine informatica è un termine tutto italiano, e deriva da Informazione Automatica. All'estero non troverete riferimenti a questo nome, dato che questa disciplina è conosciuta col nome di Computer Science (per chi non lo sapesse Science significa SCIENZA, e Computer letteralmente è "Computatore", quindi calcolatore =>
Ma cosa diavolo avrà a che fare l'informatica con la matematica?
Cominciamo col dire che l'informatica si basa completamente su un concetto matematico: il concetto di algoritmo.
Per fare prima cercherò di impressionarvi con i paroloni: un laureato in informatica è (almeno dovrebbe essere) in grado, dopo aver steso un algoritmo che risolve un determinato problema, di dimostrare che esso è corretto e mostrare tramite dimostrazione formale qual è la complessità computazionale e il tempo di esecuzione asintotico dell'algoritmo stesso. Per darvi un idea visiva di cosa intendo vi rimando all'analisi del caso pessimo di quicksort ( ringraziate il vostro dio che non ho trovato l'analisi del caso medio del quicksort randomizzato, ndr).
Se volete, un informatico può essere visto come un matematico applicato, allo stesso modo dei fisici. Mentre i fisici applicano la matematica allo studio delle forze e dei moti, noi informatici usiamo la matematica per creare algoritmi, i quali dopo che ne è stata dimostrata la correttezza, la complessità il tempo di esecuzione asintotico, vengono trasformati in programmi eseguibili. Ma per quale motivo è necessario un algoritmo? Perchè c'è bisogno di questo approccio matematico alla risoluzione dei problemi?
Bene, per rispondere a questa domanda dovrò far crollare la convinzione di molte persone: signori e signore,
i computer sono macchine stupide! Esse capiscono (e capiscono è una parola grossa) SOLO numeri, in particolare
ne sanno utilizzare esplicitamente solo due, 0 e 1. Il più blando degli informatici quindi deve essere in grado, dato un problema di qualsiasi tipo, di tradurlo in un modello matematico . Strutture matematiche come i grafi vengono utilizzate nei navigatori satellitari per costruire le mappe su cui il navigatore calcola i percorsi (Es. "semplice" Algoritmo di Dijkstra).
Andiamo quindi a vedere quali sono le conoscenze (base) di cui ha bisogno un informatico per poter fare il suo lavoro:
Il primo volo dell'Ariane 5 (Ariane 5 volo 501) svoltosi il 4 giugno 1996 fallì e il razzo si autodistrusse dopo 40 secondi dal lancio per via di un malfunzionamento del software di controllo, creato da uno dei più famosi bug della storia. Un dato a 64 bit in virgola mobile venne convertito in un intero a 16 bit con segno, questa operazione causò una trap del processore (operazione errata): il numero in virgola mobile era troppo grande per poter essere rappresentato con un intero a 16 bit
Il "famoso bug" è un buffer overflow, errore dovuto ad una cattiva gestione della memoria da parte del programmatore, in questo caso un "calcolo" un pò forzato a dato origine ad un problema di memoria a quindi all'autodistruzione del razzo.
II - Fallimento di un missile patriot durante la guerra del golfo: Il 25 febbraio 1991, in Dhahran, Arabia Saudita, un missile patriot ha colpito un ospedale da campo amico invece dell'obiettivo militare designato. Il fatto è stato imputato ad una cattiva gestione degli arrotondamenti nel software di controllo del missile.
La ricerca operativa (nota anche come teoria delle decisioni, scienza della gestione o, in inglese, operations research ("Operational Research" in Europa) e indicata con le sigle RO o OR) fornisce strumenti matematici di supporto alle attività decisionali in cui occorre gestire e coordinare attività e risorse limitate al fine di massimizzare o minimizzare una funzione obiettivo.
Qui la parola d'ordine è ottimizzazione. Come scelgo la strada più breve dal punto a al punto b? E se invece di quella più breve voglio quella con meno ostacoli? Come faccio a sapere qual è il più alto flusso di informazioni che posso mandare su una rete di computer? Queste sono solo applicazioni pratiche di alcuni dei problemi analizzati da questa disciplina, e anche qui mi permetto di fare un esempio fattomi a lezione:
Supponete di avere 70 lavori che devono essere compiuti e 70 lavoratori disponibili. Ogni lavoratore chiede una paga diversa per ogni lavoro. Dovete scegliere quale lavoratore assegnare a quale lavoro, in modo da rendere minima la spesa. Cosa fate? L'idea più immediata che viene a tutti e di considerare tutti gli assegnamenti possibili e vedere quale costa di meno. Bene, se siete stati attenti a calcolo delle probabilità sapete che gli assegnamenti possibili sono 70! che è qualcosa sicuramente più grande di 10100; questo numero, pari a 1 seguito da 100 zeri, è di gran lunga maggiore del numero di atomi presenti nell'universo conosciuto (stimato intorno a 1081) e dell'età dell'universo (stimata intorno a 13,72 miliardi di anni, ovvero 13,72 x 109). Supponendo di avere a disposizione un computer capace di valutare 10 miliardi di ordinamenti al secondo (1010, un computer recente ad occhio e croce può al più valutare qualche migliaio di permutazioni in un secondo ) occorrerebbero 1090 secondi per trovare la soluzione, tenendo conto che ci sono circa 107 secondi in un anno, occorrerebbero 1083 anni per trovare la soluzione, ovvero circa 10 miliardi di decilioni di volte (1074) l'età dell'universo!! (E ricordate che abbiamo fatto i conti approssimando per difetto, 70! è più grande di 10100, e il computer che abbiamo supposto di avere a disposizione probabilmente non esiste nemmeno). Con le conoscenze di questa disciplina si possono scrivere algoritmi che permettono di ottenere gli stessi risultati al massimo in alcune ore.
Ora questo non è tutto il corso di laurea triennale in informatica, ma sono gli argomenti che a mio dire sono necessari per poter avere la speranza di diventare buoni informatici, e come potete notare gli esami di stampo matematico sono in sovrannumero. Quindi se avete qualche amico che vuole iscriversi ad informatica nella speranza di divertirsi a smanettare con il pc o di capire come si cambia quella particolare impostazione in windows vista, vi prego fategli leggere prima questo post. Se invece, parlando con un amico che studia informatica, vi siete ritrovati sotto una sfilza di inviti per quel paese perché gli avete chiesto che c'entra la matematica con l'informatica, ora sapete il motivo di tali inviti.
In conclusione, se avete un amico informatico, si, chidetegli pure aiuto se avete un problema con office, con windows, o col pc in generale. Magari ha avuto il vostro stesso problema, lo ha risolto e quindi può aiutarvi. Ma non pretendete che egli abbia le competenze per aiutarvi, non è tenuto ad averle. Queste competenze le hanno i tecnici. Quindi per favore, risparmiatevi frasi del tipo "Ma come, studi informatica e non sai usare word/excel/power point?" o "Ma come, studi informatica e non sai togliere un virus da windows?", sarebbe come chiedersi come fa un astronomo a non saper riparare un telescopio.
Saluti e al prossimo post ^^