Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Informatica - una panoramica generale
Recensito da Fabrizio Pani il 05-01-2007 ore 16:56
Copertina ISBN: 88-7192--302-2
Autori: J. Glenn Brookshear
Editore: Pearson
Lingua: Italiano
Anno: 2006
Pagine: 632
Allegati: Nessuno
Intel Parallel Studio XE
E' la nona edizione di un libro d'informatica generale, titolo originale Computer Science, che è rivolto a tutti, non solo agli studenti d'ingegneria informatica o agli addetti ai lavori, grazie alla sua esposizione non strettamente accademica. Il testo segue un'organizzazione ascendente dal concreto all'astratto, vale a dire che l'autore J.Glenn Brookshear ha deciso di rompere la tradizione e di mettersi dal punto di vista degli studenti, presentando loro prima cose più concrete, come l'architettura generale di un computer e il trattamento dell'informazione, i sistemi operativi e il networking, e poi argomenti più astratti, tipicamente matematici, come gli algoritmi, l'ingegneria del software e l'astrazione dei dati.

Rispetto alle precedenti edizioni è stato esteso il capitolo dedicato al networking, è stata aggiornata la trattazione dell'UML nel settimo capitolo ed è stato riscritto il decimo, quello riguardante l’intelligenza artificiale. Ogni paragrafo e fine capitolo terminano con domande ed esercizi, e con delle questioni per far riflettere sulle implicazioni etiche e sociali della tecnologia. Analizziamo in dettaglio i capitoli.

Capitolo 0 - Introduzione
Come si evince dal titolo, è un capitolo introduttivo. S'inizia parlando del ruolo fondamentale degli algoritmi senza entrare in definizioni e formalismi tecnici, per trattare brevemente la storia dell'informatica, il concetto di astrazione, ed è presente una panoramica dei capitoli che seguiranno.

Capitolo 1 - Memorizzazione dei dati
Si inizia dalla rappresentazione interna dell'informazione con il concetto di bit, per continuare con le operazioni booleane, le porte logiche e perfino un'informale descrizione del flip-flop. Seguono la memoria RAM, i diversi tipi di memorie di massa, e come sono rappresentati dati testuali, immagini e suoni. Si passa quindi al sistema di numerazione binario, i numeri in virgola mobile e il complemento a due. L'ottavo paragrafo dà delle informazioni sulla compressione, con una breve descrizione della codifica lossless LZW, dei formati grafici più comuni, e di quelli multimediali come MPEG e MP3. Il successivo e ultimo paragrafo tratta della correzione degli errori, del bit di parità e della distanza di Hamming.

Capitolo 2 - Elaborazione dei dati
In questo capitolo, vengono descritti in maniera sintetica l'architettura di un computer, il linguaggio macchina con un esempio di codifica, le tre fasi del ciclo macchina, le operazioni logiche, aritmetiche, di spostamento e rotazione. Il quinto paragrafo parla della comunicazione con dispositivi esterni: controller, porte I/O e DMA e il sesto accenna al concetto di pipelining e alle macchine multi-processore.

Capitolo 3 - Sistemi operativi
La trattazione si sviluppa dall'evoluzione dei sistemi operativi all'elaborazione batch, al time-sharing, fino al multitasking. Dal terzo paragrafo, sono trattati i processi e come possono essere gestiti in un sistema a più task, si parla quindi dello scheduler in maniera non formale, del dispatcher, degli interrupt, dei semafori e di come evitare gli stalli (in inglese deadlock). L'ultimo argomento del capitolo è la sicurezza, con il concetto d'istruzioni privilegiate e non.

Capitolo 4 - Networking ed Internet
Si parte con le topologie di rete e i relativi protocolli token ring, ethernet e CSMA/CD. Sempre in maniera basilare si accenna ai dispositivi fondamentali come ripetitori, switch e router, e successivamente del modello client-server e di quello paritetico, meglio noto come peer-to-peer o P2P. E' spiegato poi il significato di sistema distribuito. Segue una trattazione di Internet relativamente a come sono indirizzati i dati, e a concetti di base come indirizzo IP, nome di dominio, Top Level Domain (TLD) e servizio Domain Name System (DNS). In seguito si parla brevemente dei più noti protocolli come FTP, Telnet e SSH. Il terzo paragrafo tratta il World Wide Web (WWW) e tutto quanto ne è correlato, dalla nozione di ipertesto, a quella di URL, protocollo HTTP, con un'introduzione concettuale ai linguaggi di markup HTML e XML. Si parla poi brevemente dei linguaggi lato client e lato server. La sezione che segue introduce il modello TCP/IP con i suoi 4 livelli, accenna al modello ISO/OSI, e alla differenza tra protocollo TCP e UDP. L'ultimo paragrafo di questo capitolo parla di sicurezza, con un'informale definizione dei più importanti malware: virus, cavalli di troia, spyware, a cui segue il phishing, e una spiegazione basilare di cosa sia un attacco denial of service (DoS). Il seguito tratta di come proteggersi, per concludere con la crittografia, con una descrizione di base di cosa si intende per crittografia a chiave pubblica.

Capitolo 5 - Algoritmi
Il capitolo comincia da una presentazione informale per dare subito dopo una definizione formale di algoritmo, per parlare poi della differenza tra un algoritmo e la sua rappresentazione, cui seguono il concetto di primitiva e la scrittura di pseudocodice.
In seguito si descrive brevemente la tecnica artistica di risoluzione generale dei problemi secondo il matematico Polya, e la metodologia top-down e quella bottom-up. Il quarto paragrafo illustra gli algoritmi fondamentali iterativi, sempre in maniera basilare senza rigorose definizioni matematiche. Per prima cosa si descrive il più semplice algoritmo, quello di ricerca sequenziale con le relative strutture di controllo in pseudocodice, e poi quello di ordinamento per inserimento. Il quinto paragrafo introduce gli algoritmi ricorsivi e in particolare l'algoritmo di ricerca binaria, e il relativo problema di verifica della condizione di terminazione. La sezione successiva tratta dell'efficienza e correttezza di un algoritmo, iniziando da un semplice problema pratico di ricerca di uno studente in un database, risolto prima tramite ricerca sequenziale e poi con ricerca binaria. Segue il concetto di caso peggiore e caso migliore e come misurare e classificare gli algoritmi in base appunto alla loro efficienza, algoritmi quadratici e algoritmi logaritmici. In ultimo luogo si pone il problema della correttezza di un algoritmo con accenno alle asserzioni. Negli esercizi possiamo trovare il gioco della Torre di Hanoi e la serie di Fibonacci, che non potevano mancare.

Capitolo 6 - Linguaggi di programmazione
Si descrive brevemente la storia della programmazione, a partire dai linguaggi macchina di prima generazione, per continuare con quelli assembly di seconda, fino ai linguaggi di terza generazione.
L'autore parla poi dei paradigmi di programmazione, dall'approccio imperativo o procedurale, a quello dichiarativo, funzionale, per finire con la programmazione orientata agli oggetti. Successivamente sono affrontate le caratteristiche fondamentali di ogni linguaggio, vale a dire i tipi di dati, strutture come array e record, costanti e literal, precedenza degli operatori, istruzioni di controllo, goto e programmazione strutturata, commenti. Seguono procedure, funzioni, variabili locali e globali, parametri formali e attuali, passaggio per valore e per indirizzo, programmazione guidata dagli eventi. Il quarto paragrafo illustra l'implementazione di un linguaggio, cioè parla degli analizzatori lessicali e dei parser, naturalmente in maniera introduttiva, come sempre. Si accenna ai diagrammi sintattici e al problema della possibile ambiguità di un albero sintattico, e all'ottimizzazione del codice. Il successivo paragrafo introduce la programmazione object-oriented. Il sesto paragrafo è relativo alla programmazione parallela o concorrente, e al conseguente problema della comunicazione tra processi. L'ultimo paragrafo è relativo alla programmazione dichiarativa o logica, e al linguaggio Prolog, che usa questo paradigma.

Capitolo 7 - Ingegneria del software
La trattazione inizia parlando della differenza che c'è tra l'ingegneria tradizionale, per esempio quella meccanica, e appunto l'ingegneria del software, per trattare del ciclo di vita di un programma e della tradizionale fase di sviluppo. Il terzo paragrafo introduce le metodologie di ingegneria del software, come il modello a cascata e il modello incrementale, fino ad accennare alla cosiddetta programmazione estrema dall’inglese XP (eXtreme Programming). Seguono poi l'implementazione modulare e l'accoppiamento tra i moduli, per arrivare alla programmazione tramite componenti. Più avanti sono analizzati i diagrammi di flusso e i diagrammi entità-relazione, e si arriva poi ad introdurre il linguaggio UML. Segue poi il design pattern, il testing, la documentazione, per finire con un accenno alle questioni legate alla proprietà intellettuale e ai brevetti del software.

Capitolo 8 - Astrazioni sui dati
L'autore inizia descrivendo in generale le strutture astratte note come liste, code, alberi, alberi binari e stack, per entrare poi nei dettagli su come esse sono rappresentate in memoria. In particolare è illustrato come operare sulle liste concatenate, su uno stack e si accenna alle code circolari. Si entra poi nel merito degli alberi binari proponendo anche un caso di studio, che usa questo dato astratto per cercare più efficientemente un elemento e presentare le voci in ordine alfabetico. In seguito si parla dei dati definiti dall'utente, di strutture e classi, e c’è anche un paragrafo su come implementare un puntatore in linguaggio macchina.

Capitolo 9 - Sistemi di basi di dati
Nello specifico gli argomenti trattati in questo capitolo esemplificano la differenza tra basi dati e file piatti, separazione tra software applicativo e sistema di gestione dati (DBMS), database relazionali a cui segue un accenno al linguaggio SQL. Successivamente si parla del modello dei database orientati agli oggetto e delle transazioni. Altri argomenti riguardano file sequenziali, file indicizzati, file hash e data mining. Chiude il capitolo il problema del trattamento dei dati in relazione alla privacy.


Capitolo 10 - Intelligenza artificiale
L'autore parla degli agenti intelligenti e delle difficoltà legate all'analisi e alla successiva elaborazione di dati d'ingresso, come le immagini e la voce di un essere umano. Nel primo caso vi è il problema del riconoscimento di singoli elementi in un'immagine, che possono anche essere dei caratteri, nel secondo caso la normale analisi sintattica di un linguaggio formale, qual è un linguaggio di programmazione, non è sufficiente, si ha bisogno anche dell'analisi semantica e dell'analisi del contesto. In seguito è introdotta la teoria fondamentale dei sistemi di produzione, indispensabile per progettare un agente, e di tutto quanto è correlato: grafi di stato, alberi di ricerca, euristiche. Viene poi introdotto l'apprendimento, vale a dire l'autoapprendimento, si parla delle reti neurali, si accenna agli algoritmi genetici e alla memoria associativa. L'ultimo soggetto, ma non per importanza, è la robotica.

Capitolo 11 - Teoria della computazione
L'ultimo capitolo è anche il più importante perché sono trattati, sempre a livello di base, i fondamenti della teoria della calcolabilità, dalle funzioni, alla macchina di Turing, alla tesi di Church-Turing. Viene poi analizzato il problema della funzione non computabile e si riprende lo studio dell'efficienza algoritmica con la notazione O-grande, gli algoritmi polinomiali e non polinomiali, e il problema del commesso viaggiatore. L'ultimo argomento del libro è l'algoritmo RSA.

Alla fine del libro ci sono delle appendici: tra gli argomenti, si può citare l'implementazione di un semplice linguaggio macchina, un esempio di algoritmo di ordinamento in vari linguaggi ad alto livello, e le risposte alle domande e agli esercizi.
proIl libro è accessibile anche a chi non ha una precedente conoscenza informatica e sono più o meno trattati tutti gli argomenti più importanti. I capitoli sono in una certa misura indipendenti l'un l'altro per cui si può affrontare direttamente l'argomento che interessa; tuttavia consiglio al principiante di partire dal primo capitolo e non saltarne neanche uno.
controNon ho rilevato particolari aspetti negativi.
Precedente: Vulnerabilità di tipo CSRF per Gmail
Successiva: MySQL AB frena sulla GPL versione 3
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.302 secondi.