Cerchiamo di chiarire un pò di cose: Informatica != Patente Europea

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 => Matematica), e guarda caso il corso di laurea in informatica si trova all'interno della facoltà di Scienze Matematiche, Fisiche e Naturali. Andando per esclusione, dato che i computer hanno poco a che fare con gli alberi (relativa struttura dati a parte, n.d.r.), e la fisica ha a che fare con l'informatica solo per quanto riguarda l'hardware o la simulazione in ambienti virtuali, ci rimane da associare l'informatica alle scienze matematiche.
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:

Matematica Discreta
Scopo principale è quello di abituare ad un ragionamento di tipo matematico e ad introdurre le tecniche principali
di dimostrazione , dando nel contempo conoscenze base di matematica necessarie a comprendere ciò di cui si parlerà in seguito. Quindi teoria degli insiemi, gruppi, campi, spazi vettoriali, dimostrazioni per induzione, algoritmi base quali il crivello di Eratostene
Architetture dei Microprocessori
Non si può lavorare su un computer senza capire come funzioni il suo cuore: come è fatto un processore? Come vengono visti i numeri dal calcolatore? (conversione decimale->binario) Come effettua i calcoli aritmetici e dove conserva i dati? Quali sono le memorie utilizzate dal computer e come vengono utilizzate? Queste conoscenze permettono all'informatico di lavorare a livelli più vicini al processore e di avere un'idea di come i suoi programmi verranno poi eseguiti dal computer.
Logica Matematica
Conoscenza degli elementi di base dei linguaggi della logica proposizionale e predicativa al fine di tradurre affermazioni del linguaggio naturale in formule logiche; Acquisire la capacità di rappresentare
funzioni booleane mediante espressioni booleane e di applicare semplici tecniche di minimizzazione.
Linguaggi di Programmazione
Conoscenza dei paradigmi di programmazione procedurale e ad oggetti, in particolare conoscenza del linguaggio C e di linguaggi ad oggetti quali C++ o Java. Con queste conoscenze si hanno gli strumenti per poter "fisicamente" scrivere un programma eseguibile dal computer, inoltre si apprendono strutture base della programmazione (assegnazione, iterazione, decisione binaria..) che permettono di imparare in breve tempo nuovi linguaggi.
Analisi Matematica
Studio di funzione, funzioni trigonometriche, funzione logaritmo ed esponenziale,derivate, integrali. Conoscenze necessarie per poter studiare la complessità computazionale degli algoritmi e propedeutiche ad altre discipline quali calcolo delle probabilità e analisi numerica
Calcolo delle Probabilità e Statistica Matematica
Conoscenze su combinazioni, permutazioni, disposizioni, variabili aleatorie, statistica, utili ad esempio per effettuare studi su input casuali, per analizzare il comportamento di un algoritmo basato su concetti casuali, fare stima di errori e tanto, tanto altro.
Algoritmi e Strutture Dati
Fornisce una base di algoritmi e strutture dati già esistenti per i problemi più comuni (es ordinamento) con relativo studio sul tempo di esecuzione asintotico, introduce alla teoria della complessità computazionale
Analisi Numerica
Analisi degli errori; Metodi numerici per l'algebra lineare; Approssimazione di dati e funzioni; Risoluzione numerica di sistemi non lineari; Integrazione numerica. Il corso in parole povere verte sullo studio di algoritmi di calcolo numerico che consentano di fare calcoli tenendo conto della precisione macchina, e su come errori di arrotondamento fatti dal computer nelle singole operazioni vengano propagati poi ai risultati finali.
Ma a cosa servirà tutto ciò? Un paio di esempi che i miei professori hanno fatto a lezione:
I - Arianne 5: Questo razzo costruito sotto autorizzazione dell'Agenzia Spaziale Europe, fece "un bel botto" subito dopo il lancio per via di un errore di programmazione del software, mi permetto di dire, abbastanza stupido. Cito da wikipedia:
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.

Ricerca Operativa
Cito da wikipedia:

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 ^^