Bibliografia minima
Copyright © 1999 dr. Cristiano Sadun - tutti i diritti riservati

Quali sono i libri che "bisogna conoscere", leggere e rileggere per parlare di OO e di software in generale? Come e' ovvio, ognuno ha i suoi gusti, e le sue preferenze. Inoltre, nelle migliaia di libri pubblicati (specialmente in USA) ogni anno su OO, linguaggi e software engineering, quelli "buoni" si contano su due mani e quelli "imperdibili" su una sola, se va bene.

Tuttavia, credo che un certo "nucleo" di libri, vecchi e nuovi siano realmente da conoscere se si vuole discutere (e usare) a ragion veduta l'OO a tutti i livelli, codifica, design, architettura e project management.

Naturalmente la lista che qui presento - essendo basata sostanzialmente sulla mia esperienza e formazione, sia ufficiale che informale, mancherà di qualche titolo che qualcun'altro potrebbe considerare assolutamente essenziale ed imperdibile. Nel caso, nessun problema: inviatemi una nota per email, e convincetemi che vale la pena rubare il tempo a qualcos'altro per leggerlo... e sarà fatto. La migliore lezione nel nostro campo è, a mio parere, che non si sa mai abbastanza. Nella bibliografia, una [A] rossa indica "articolo" e una [V] rossa indica "volume".

Cosa manca: non ci sono testi essenziali di linguaggi/metodologie/aree di ricerca con cui non sono entrato in contatto in profondità, in cui non potrei far altro che limitarmi a riprodurre titoli senza poter fare alcuna considerazione.
Io non so quale sia il testo-bibbia per COBOL, per esempio, dato che la mia esperienza con i sistemi legacy è stata perlopiù di downsizing e wrapping, quindi non lo troverete qui, anche se COBOL è stato per anni (ed è ancora) un linguaggio essenziale in ambito business/gestionale - leggi, laddove l'informatica paga economicamente in modo diretto ed abbondante. :)

Non c'è granchè, allo stesso modo, sul "management" vero e proprio, anche se la capacità di gestire task e budget è certamente parte del lavoro di qualunque project manager - quindi anche di chi gestisce la produzione di software. Nonostante abbia ormai una qualche esperienza nel campo, non ho una preparazione economica specifica, quindi potrei solo citare le mie fonti, senza riconoscere magari qualche testo invece "essenziale".

Andiamo a incominciare.


Programmazione e tecniche procedurali

L'object oriented programming (OOP) è stata la prima (e per anni l'unica) forma di object orientation studiata ed applicata. Si ritiene comunemente che Simula67 (avendo il costrutto class) sia il primo linguaggio di programmazione con features OO: l'OOP in quanto tale è quindi un'evoluzione della programmazione procedurale alla Wirth - in cui viene reso possibile a livello di codice l'"impacchettamento" di dati e funzioni/procedure che li manipolano in un'unica entità (la classe/oggetto), maneggiabile appunto come un tutto unico, e in cui è possibile nascondere esplicitamente dettagli implementativi.

È quindi impossibile capire l'OO senza comprendere i meccanismi di base della programmazione procedurale: strutture di controllo, assenza di salti espliciti, nozione di flusso di esecuzione, etc. Inoltre, nonostante tutto l'OO del mondo, i metodi di una classe sono generalmente pezzi, piccoli e sperabilmente ben definiti, di codice "procedurale", nel senso che definisce una procedura od un algoritmo per fornire un certo servizio. Alcuni titoli sono poi indispensabili per il semplice motivo che costituiscono una summa di algoritmi e ricette essenziali per fare cose, invece che limitarsi a progettarle. :^)

Software Engineering

Cos'è il software engineering? Se l'idea di base è comprendere che la costruzione di sofware poco più che banali è un processo che necessita di tecniche formali e semiformali a causa della sua complessità, l'applicazione di questo principio passa da opportune teorie e strumenti pratici concreti che tale costruzione permettano.
Come in ogni campo dell'informatica, l'evoluzione è ed è stata rapida e continua. E come in ogni campo scientifico, tale evoluzione implica sia la comprensione degli errori del passato che l'incapsulamento di teorie precedenti in nuovi apparati teorici più avanzati e - sperabilmente - funzionali.
Essendo una disciplina sia teorica che concreta, lo stato dell'arte in s.e. dipende in modo molto forte dal momento storico e dalle tecnologie/pratiche disponibili. La stessa "object orientation" dà luogo sia a pratiche di analisi, design e programmazione che a metodologie di software engineering. Alcune pietre miliari esistono, comunque, e per quanto sopra non si può prescindere da certi apparati formali che, a mia opinione, devono far parte del bagaglio di chiunuque vada più là della programmazione di un DSP. E in certi casi, servono anche per quella.

Software Design

Il software design sarebbe, effettivamente, una sottoarea del software engineering. Tuttavia, soprattutto in ottica object-oriented, è una parte talmente importante - e distinta dal management vero e proprio - che richiede, a mio parere, una sezione opportuna. Quando si parla di "object orientation" il più delle volte ci si riferisce all'OOA/D - la modellazione ed il disegno di sistemi software in termini di classi, oggetti e loro relazioni.
Nonostante non risolva affatto tutti i problemi, l'object orientation, nelle sue varie incarnazioni, è la migliore disciplina di software engineering che al momento abbiamo a disposizione - e quella più "viva" e in evoluzione. Non per nulla questo sito è ad essa dedicato! ;-)
Volumi come quello di Wirth avrebbero potuto entrare in questa sezione, ma ho preferito concentrarmi qui sul design moderno, ad oggetti.

Networks

A meno che non viviate chiusi nel centro EDP di una società assicurativa del Congo (con tutto il rispetto del caso, s'intende), sviluppare o gestire software oggi significa misurarsi, prima o poi, con reti di calcolatori. X/25, TCP, SNA o quant'altro si voglia usare, far parlare due calcolatori distanti una stanza o migliaia di chilometri è un'esigenza che accomuna segretarie, direttori generali e scienziati in laboratori di ricerca. Qui trovate i testi che reputo essenziali, se non come lettura generale, almeno come riferimento da avere sempre a portata di mano.

Computer Science

Non si può lavorare nell'informatica senza avere un minima preparazione teorica; o meglio, si può ma i risultati sono spesso disastrosi. Data per scontata una certa preparazione matematica, logica e applicativa (di solito ottenuta con dei corsi di Fisica), per comprendere e usare al meglio la tecnologia è necessario avere almeno un'idea, se non una preparazione formale, delle teorie e dei sistemi concettuali che ci stanno dietro. Nel mare magnum dei libri e paper scientifici e di ricerca, presento qui quelli che, a mio parere, sono fondamentali. Una bibliografia completa da sola richiederebbe un volume, quindi per forza di cose molti articoli sono rappresentativi di intere aree teoriche (per esempio, Garey-Johnson per la complessità computazionale e l'NP-completezza), ma di solito sono punti di partenza - dalle loro bibliografie potrete trovare tutti gli approfondimenti del caso.



© Copyright 1999 dr. Cristiano Sadun - tutti i diritti riservati

È esplicitamente vietata la riproduzione con ogni mezzo, il mirroring e l'uso per scopi commerciali di questa pubblicazione completa o in parte, senza l'esplicito consenso scritto dell'autore. La stampa e/o riproduzione e/o distribuzione su carta di tutto o parte di questo documento sono permesse a patto che tali copie non siano prodotte a scopo di profitto o ad uso commerciale, e che questa nota siano interamente stampate e/o riprodotte e/o distribuite in modo chiaro e visibile insieme al testo.