Oggetto di studio dell'informatica è l' informazione quale entità che si rappresenta mediante codici, si trasmette e si elabora a livelli più o meno profondi: dalla semplice codifica digitale, alla traduzione simbolica, alla strutturazione di dati, al calcolo numerico, al calcolo algebrico, all' inferenza logica, al riconoscimento di forme. Tale caratterizzazione evidenzia subito una difficoltà che ha radici profonde: non si può parlare di informazione se non relativamente a qualche sua rappresentazione, tuttavia essa non si identifica mai con una sua specifica rappresentazione. L'informazione si colloca quindi nella dinamica dei passaggi tra `stati informativi' e nella sua intrinseca possibilità di produrre azioni. I dati sono il punto di partenza di un qualsiasi procedimento di elaborazione di informazione. Un tale procedimento si dice algoritmo, parola matematica di origine araba che nella sua accezione iniziale caratterizzava i procedimenti di calcolo dell'aritmetica e dell'algebra. Algoritmi si trovano agli albori di tutte le civiltà e prima della comparsa del metodo assiomatico-deduttivo della matematica greca, tuttavia l'Informatica è una scienza giovane. Questo apparente paradosso è dovuto alla comparsa tardiva di automi, quali esecutori di algoritmi. La tecnologia elettronica, basata all'inizio sulle valvole termoioniche, poi su transistor e sui circuiti integrati, ad un livello sempre più alto di miniaturizzazione, ha reso disponibili automi sempre più efficienti. Tale possibilità ha trasformato radicalmente le prospettive di studio e le potenzialità degli algoritmi, ed in modo talmente vasto, che l'Informatica si è sempre più caratterizzata rispetto alla Matematica da un lato, e alla Fisica e Ingegneria elettronica dall'altro. In un certo senso, essa è emersa come somma di varie `costole di Adamo' prelevate da tali discipline mature. La stessa parola informatica, neologismo sorto negli anni '60, come fusione di informazione + automatica, evidenzia la recente comparsa della disciplina, mentre la corrispondente locuzione anglosassone Computer Science indica la matrice fortemente tecnologica che ne ha caratterizzato lo sviluppo iniziale. Lo studio degli algoritmi, condotto su una base nuova, ha allargato gli orizzonti di ricerca: dallo studio dei tipi di dati, alla complessità computazionale, alla classificazione matematica dei problemi, alla definizione e realizzazione fisica dei modelli di calcolo. I linguaggi di programmazione completano il quadro teorico di riferimento dell'informatica. Infatti, per essere eseguiti dagli automi, gli algoritmi devono essere espressi in un linguaggio ad essi comprensibile, ma un tale linguaggio è molto diverso da quello in cui si esprimono naturalmente le soluzioni di problemi; esiste quindi una gerarchia di traduzioni per far sì che, partendo da un programma che descrive un algoritmo entro un linguaggio ad alto livello, si arrivi alla fine a generare un codice macchina che induca sull'automa i comportamenti desiderati. Lo studio dei linguaggi di programmazione ha rivelato un mondo vastissimo di problematiche: dai metodi per determinare formalmente la loro sintassi e semantica; alla progettazione di linguaggi orientati a certe classi di problemi (elaborazioni numeriche, elaborazioni simboliche, basi di dati, sistemi deduttivi); allo studio di algoritmi efficienti per la traduzione di programmi tra linguaggi diversi e di differente livello; all'analisi dei rapporti tra linguaggi e architetture dei sistemi di elaborazione; ai criteri di progettazione delle interfacce di interazione uomo-macchina. La portata sociale e tecnologica dell'Informatica è evidente a tutti, la sua ricerca scientifica, anche se priva della tradizione secolare della Matematica o della Fisica, ha avuto uno sviluppo incredibile e sarà sicuramente fondamentale nello sviluppo dei grandi temi che aspettano la ricerca del futuro millennio.
Nel Dipartimento di informatica di Pisa esiste una delle più articolate e numerose comunità scientifiche informatiche italiane. Ciò è dovuto al ruolo storico che Pisa ha avuto nello sviluppo scientifico dell'Informatica. Le aree di ricerca attive coprono gran parte dei temi fondamentali della ricerca informatica internazionale. Diamo nel seguito delle brevi schede illustrative sulle principali aree presenti. Lo studente può trovare informazioni maggiori nell'Annual Research Report, in cui annualmente è data una descrizione dettagliata dei vari progetti di ricerca presenti nel Dipartimento. Notiamo che le aree presentate non sono disgiunte, piuttosto, varie ricerche si collocano spesso a cavallo tra alcune di esse.
In tale area si studiano soprattutto i metodi di analisi della correttezza ed efficienza di algoritmi, la valutazione della loro complessità, e lo studio delle strutture dati più frequenti nelle elaborazioni automatiche. Ovunque si impieghi un elaboratore elettronico occorrono algoritmi corretti ed efficienti che ne utilizzino al massimo le possibilità. Algoritmi sofisticati e veloci sono usati per controllare il volo di aerei, regolare reazioni nucleari, reperire informazioni in archivi di dati, pagare stipendi, smistare comunicazioni telefoniche, giocare a scacchi, risolvere problemi algebrici, controllare la produzione di catene di montaggio, tradurre programmi da un certo linguaggio di programmazione ad un altro, progettare nuovi elaboratori, riconoscere immagini, elaborare testi letterari, comporre musica. Nei casi non banali, la scelta dell'algoritmo è preliminare alla sua stesura in un determinato linguaggio di programmazione. La teoria sottostante ai criteri di valutazione e di scelta costituiscono appunto il tema centrale dell'algoritmica. Ovviamente, entro tale area si possono comunque distinguere tematiche più specifiche che vanno dagli aspetti algebrici e logico-matematici della calcolabilità, allo studio di algoritmi efficienti nella gestione di strutture fondamentali nelle rappresentazioni informative interne dei sistemi di elaborazione.
In tale area si studiano le metodologie e le tecniche per la progettazione di sistemi di elaborazione a diversi livelli di astrazione, tenendo conto di determinati requisiti imposti dalle applicazioni e della tecnologia di cui si dispone. I livelli possono distinguersi in: struttura della macchina, struttura del sistema operativo, struttura della macchina astratta per i linguaggi di programmazione. I problemi affrontati riguardano vari aspetti delle architetture, quali le strutture di macchina e i loro linguaggi adatti a sfruttare lo sviluppo tecnologico ad alta integrazione, la definizione di modelli e architetture per l'elaborazione in parallelo, la realizzazione dei linguaggi per esprimere il parallelismo, i sistemi operativi per il supporto di applicazioni in un ambiente centralizzato, parallelo e distribuito. I metodi di studio non si limitano agli aspetti hardware, ma privilegiano piuttosto i rapporti tra hardware e software e l'integrazione tra i vari livelli di astrazione.
In questa area si studiano i sistemi di gestione di basi di dati, i criteri che ne garantiscono l'affidabilità, l'efficienza, l'espressività e l'integrazione tra linguaggi di programmazione e linguaggi di manipolazione di dati. Negli anni recenti, l'aumento sempre più elevato del rapporto tra i costi di produzione di software e di hardware, ha cambiato l'atteggiamento di ricerca nel settore, dando grande importanza allo studio delle caratteristiche di espressività e di astrazione. In tale contesto riveste un grande interesse lo studio di modelli di dati basati sulla nozione di oggetto. Un oggetto è la rappresentazione di un'entità che, pur mantenendo una stessa identità, può assumere vari stati. Gli oggetti interagiscono scambiandosi messaggi i quali a loro volta provocano l'esecuzione di metodi che ne trasformano lo stato. Tra i tipi di oggetti è definita una relazione di ereditarietà secondo la quale gli oggetti di un sottotipo ereditano e specializzano le caratteristiche del tipo più generale. La ricerca in tale area si pone i seguenti obbiettivi: a) una fondazione rigorosa di modelli dei dati basati sugli oggetti; b) la definizione di architetture per sviluppare implementazioni efficienti di tali modelli; c) la definizione di linguaggi, ed in particolare di linguaggi di interrogazione, per basi di dati ad oggetti.
L'introduzione dei calcolatori ha imposto e accentuato lo sviluppo dell'analisi e sintesi di metodi computazionali per lo studio e la risoluzione di problemi matematici, che costituiscono il tema centrale di tale area di ricerca. La grande rapidità di elaborazione attualmennte raggiungibile ha reso possibile affrontare e risolvere problemi sempre più complessi e di dimensione sempre più grande, aprendo nuovi settori di indagine, quali lo studio della complessità intrinseca di problemi o l'analisi della stabilità dei metodi computazionali e del condizionamento dei problemi. Senza una profonda conoscenza delle metodologie matematiche, l'uso dei calcolatori nella soluzione di problemi tecnico-scientifici può presentare grosse difficoltà. Infatti, incertezze ed errori sono quasi sempre presenti o nel modello matematico utilizzato, o nel modello numerico associato, o nell'implementazione degli algoritmi, o nel software con cui sono realizzati. L'avvento dei cosiddetti supercalcolatori ha reso tali problemi sempre più rilevanti, richiedendo un crescente impiego di metodi matematici avanzati. Inoltre lo studio di algoritmi numerici apre prospettive ed individua metodologie che hanno un interesse non esclusivamente numerico, per esempio, suggerendo migliori implementazioni dell'aritmetica delle macchine, e individuando tecniche generali di analisi e di valutazione di algoritmi.
Tale area studia i metodi formali per una descrizione completa e non ambigua del significato dei programmi e dei linguaggi di programmazione. La loro applicazione alla pratica programmativa è rivolta ad aumentare l'affidabilità del software, mettendo a disposizione strumenti per l'analisi, la verifica, la trasformazione di programmi, e per la progettazione e valutazione di linguaggi di programmazione. I metodi di semantica formale si distinguono in funzione della prospettiva adottata. Si parla di semantica denotazionale se il significato di un programma viene visto come una funzione tra i dati di ingresso e quelli di uscita; si parla di semantica assiomatica se è caratterizzata per mezzo delle proprietà che il programma soddisfa, relativamente ad un certo linguaggio formale di descrizione; infine si parla di semantica operazionale quando il significato di un programma è identificato con il comportamento di un esecutore ideale, formalmente definito. In tutti i casi comunque, si ha una rappresentazione di un linguaggio di programmazione in termini di entità matematiche, la cui natura consente l'utilizzo di tecniche algebriche e logico-matematiche. Sotto la spinta di problemi sollevati da tale studio si è avuta una fioritura vastissima di teorie e metodi matematici ormai altamente specializzati, spesso in relazione alle classi di linguaggi più innovativi (e.g. funzionali, logici, e concorrenti).