Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

6
voti

Biblioteca: sezione informatica (Reloaded)

Indice

Introduzione

Benvenuti nella sezione "informatica" della biblioteca di EY! Con questo articolo, il sottoscritto intende "ripristinare" quanto creato (ed abbandonato, che io sappia) nel 2012 da simo85. I principi base della sezione sono semplici: citerò, dividendoli per argomento, tutti i libri di informatica (o comunque legati in qualche modo ad essa: per esempio, intendo citare anche dei libri di progettazione logica, sperando di non invadere il territorio già coperto dalla ben più competente tastiera di IsidoroKZ) che ho letto e di cui mi sento in grado di parlare, e per ciascuno fornirò una breve recensione. Qualora qualcuno volesse contribuire, potrebbe farlo in due modi:

  1. Citando il libro che vorrebbe vedere aggiunto nella biblioteca, che io appena possibile comprerò, leggerò e recensirò; questa modalità potrebbe richiedere molto tempo, soprattutto se viene citato un testo difficile da reperire (perchè dovrò cercarlo), molto voluminoso (perchè dovrò leggerlo) o particolarmente specialistico (perchè, finito lui, per poterlo recensire probabilmente dovrò leggere altri testi).
  2. Recensendo lui stesso il libro: io mi limiterò a copiare la sua recensione segnalando che trattasi di un'opinione non mia.

Ovviamente, a causa di quanto statuito la sezione è da ritenere in continuo aggiornamento (dove "continuo" vuol dire che potrei anche aggiungere un libro ogni sei mesi, ma comunque continuerò ad aggiungere finchè ne avrò la possibilità). Un ulteriore appunto: ovviamente, io recensirò ciascun libro sulla base dell'edizione che posseggo (la quale sarà debitamente citata). Questo vuol dire che non garantisco che traduzioni o edizioni successive siano conformi alle mie parole.
Prima di cominciare, un piccolo disclaimer: ci sono in giro per il web moltissime bibliografie a firma di tale M.A.W 1968, una persona dotata di competenze non comuni e un'esperienza enorme in ogni ambito dell'informatica e non solo... bene, io consulto spessissimo quelle bibliografie per ricavare spunti e suggerimenti circa testi da ricercare e leggere; non stupisca quindi se quasi tutti i testi di questa biblioteca compaiono anche nelle bibliografie del succitato M.A.W 1968.
A questo punto, credo non ci sia altro da aggiungere. Cominciamo.


Algoritmi e strutture dati

Un libro ormai datato e praticamente sostituito da un nuovo testo - a cura dell'autore e di Alberto Montresor - ma a volte ancora citato. Presenta la classica carrellata di algoritmi (in verità un po' carente) e li spiega tutto sommato bene, ma dedica poco spazio alle strutture dati. Interessanti i capitoli dedicati agli algoritmi paralleli.


Un libretto di appena 200 pagine, che propongo per due motivi: il primo è che ho avuto due degli autori come docenti, ed il secondo è che si tratta, per quanto ne so, dell'unico testo in italiano che citi esplicitamente l'algoritmo di Er. Un ottimo testo per chiunque volesse dare uno sguardo interessato ma non troppo alle tecniche per implementare l'equivalente informatico delle più note funzioni di calcolo combinatorio.


Questo è il libro che l'informatico si tiene accanto per tutta la vita: presenta una quantità enorme di algoritmi e strutture dati, propone varianti e migliorie, fa comunque riferimento agli argomenti che non ha lo spazio per trattare, presenta alla fine di ogni capitolo una bibliografia enorme... programmasse lui al posto del lettore, sarebbe perfetto.


Un libro sconvolgente nel percorso didattico di chiunque: partendo dalla descrizione dei problemi, gli autori illustrano passo dopo passo come modellarli ed analizzarli fino a giungere all'elaborazione (a quel punto quasi naturale) dell'algoritmo risolutivo. Lo si potrebbe definire un testo fondamentale, uno di quelli la comprensione dei quali fa la differenza tra l'informatico vero e la scimmia del codice, ma forse non sarebbe ancora abbastanza.


Un'opera leggendaria scritta da un autore leggendario: Donald Knuth, uno dei più grandi informatici viventi, intende raccogliere in quest'opera tutti gli algoritmi noti all'uomo. La parte già pubblicata (composta da 4 volumi e numerosi opuscoletti integrativi) è interessantissima e completa oltre ogni immaginazione, ma è adatta solo ai cultori della materia e ai teorici, tant'è formale lo stile della trattazione.


I testi di Sedgewick sono usati in molte università per i corsi di algoritmi, perchè sono semplici, abbastanza completi e propongono del codice C già pronto da copiare. Io preferisco un approccio agli algoritmi totalmente slegato dal linguaggio di programmazione, ma ciò nulla toglie alla validità oggettiva di questi testi.


Un libro utilissimo per chiunque (e in particolare non meno che necessario per i programmatori poco esperti, che potrebbero essere spinti così ad un'analisi del vero valore del codice che scrivono) che raccoglie vari suggerimenti per la gestione efficiente di operazioni bit-level. Tutti gli algoritmi sono specificati usando la sintassi C o un assembly RISC-like inventato, ma sono facilmente adattabili a qualsiasi linguaggio.


Architetture e progettazione dell'hardware

Testi generali

Si tratta di un testo introduttivo all'architettura dei calcolatori tutto sommato decente, che utilizza le istruzioni di un generico linguaggio assembly (definito nei primi capitoli) come punto di partenza per mostrare intuitivamente come un elaboratore deve comportarsi e come può essere strutturato. Non condivido assolutamente l'approccio didattico, che trovo confusionario e dispersivo, e ritengo che il livello di approfondimento sia mediocre, ma senz'altro non si tratta di un libro da scartare a priori, soprattutto se chi lo compra è un amatore interessato.


Chi vuole capire come funzionano davvero i calcolatori moderni non può non passare da questo testo: con encomiabile chiarezza e grande completezza, gli autori sviscerano gli aspetti fondamentali dei sistemi informatici moderni: processori superscalari e vettoriali, memoria virtuale, progettazione di sistemi warehouse-scaled, architetture multiprocessore... va da sè, ovviamente, che un testo del genere non possa considerarsi adatto ai neofiti, anche perché non approfondisce (e come potrebbe?) i concetti di base dell'architettura dei calcolatori, se non parzialmente in alcune appendici che però sanno più di riassunto che di spiegazione.


Ottimo libro (scritto dagli stessi autori del magnifico "Computer architecture") che partendo da esempi reali illustra le basi dell'architettura dei calcolatori e i moderni sviluppi in materia con grande chiarezza ed una completezza non comune nell'ambito dei testi introduttivi. Il più grande difetto di quest'opera è di tipo editoriale: sono state pubblicate troppe versioni dello stesso libro, differenti per l'architettura utilizzata come punto di partenza per la spiegazione e per la presenza o no di certe sezioni (le quali in realtà avrebbero dovuto essere presenti in ogni caso, essendo di interesse generale), e addirittura è in circolazione una "edizione migliorata" che non si capisce esattamente cosa abbia più delle altre. Per amor di precisione, segnalo che l'edizione citata qui nella biblioteca è quella basata sull'architettura MIPS, preferita perchè in generale risulta quella in grado di interessare il più ampio numero di lettori, avendo tra l'altro subìto meno di altre edizioni il processo di eliminazione dei contenuti.


Un discreto testo introduttivo all'architettura dei calcolatori, in grado di mostrare tutti gli aspetti dell'argomento in modo chiaro e lineare. Notevole in particolare l'attenzione dedicata alla descrizione delle CPU, cui sono riservati circa due terzi del libro. Segnalo l'esistenza di edizioni più recenti, ed in particolare segnalo che la decima edizione contiene molte aggiunte interessanti.


Architettura PC

Una specie di bibbia dell'architettura x86: partendo dalla storia dei calcolatori e dal processore 8086, l'autore descrive caratteristiche ed innovazioni di ciascuno dei processori proposti dalla Intel (fino a circa il 2008) e basati su quel modello. Il livello di approfondimento è notevole, l'architettura viene mostrata da ogni punto di vista (non di rado includendo esempi pratici nel relativo Assembly) e i quiz di verifica alla fine di ogni capitolo rendono il testo adatto non solo al professionista, ma anche allo studente.


Nonostante il titolo di dubbio gusto, il testo in esame è uno dei riferimenti de facto per lo studio dell'architettura PC: completo, semplice, utile, godibile... davvero fantastico, tant'è che persino un personaggio estremamente pignolo come Andrew Tanenbaum lo consiglia.


Sistemi Embedded

Uno dei tanti "libri omnicomprensivi" della Newnes, questa volta dedicato alla descrizione dell'hardware embedded, di cui mostra praticamente ogni aspetto, dalle memorie all'interfaccia con gli attuatori. Il livello di approfondimento è inevitabilmente inferiore rispetto a quello dei testi dedicati a ciascuno degli argomenti, ma il libro risulta comunque una camera con ottima vista sul mondo dell'hardware embedded e soprattutto un'utilissima guida per la consultazione rapida: tanto per fare un esempio, i problemi di progettazione delle board sono riassunti in una ventina di pagine, mentre se si dovesse andare a consultare un testo di progettazione dei sistemi digitali bisognerebbe sfogliarne non meno di un centinaio!


In circa 400 pagine, Furber (che alla creazione dell'architettura ARM ha contribuito personalmente) sviscera tutti gli aspetti della sua creatura, passando fluidamente dalla struttura della pipeline all'IS Thumb all'interazione con i sistemi operativi alla descrizione dei vari core implementati negli anni. Purtroppo, la completezza tematica del libro non è accompagnata da uno stile adeguato: il testo è spesso confusionario, e le figure non sempre favoriscono la comprensione di quanto spiegato.


Sarebbe stato bene anche in altre categorie: si tratta di un libro che tocca vari ambiti con l'obiettivo di spiegare adeguatamente cosa siano i sistemi embedded, come progettarli e perchè l'informatica basata sul modello di Von Neumann non è sempre adatta ad affrontarli. Una lettura necessaria per chiunque voglia entrare nel vastissimo mondo della progettazione di sistemi informatici non-PC.


Uno dei tanti testi che si propone di introdurre la progettazione dei sistemi embedded. A differenza di molti altri, però, qui le parole sono ridotte al minimo e la presentazione, basata non di rado su degli esempi, procede molto velocemente e demanda tutti gli approfondimenti "non necessari" ai testi citati nell'ottima sezione bibliografica al termine di ogni capitolo. In sintesi, si tratta di un testo adatto a chiunque voglia una guida introduttiva rapida e pratica, che rinuncia all'approfondimento (che sarebbe in ogni caso discutibilmente utile, visto che a conti fatti il professionista serio avrà comunque bisogno di testi specialistici) per ottenere la chiarezza. Un solo aspetto di questo libro voglio veementemente criticare: il prezzo dell'edizione europea/americana è di oltre 200€, poco meno di un furto per un libro che - per quanto lavoro possa aver richiesto - consta di 300 pagine ed è tutt'altro che un testo omnicomprensivo.


Progettazione dell'hardware

Un testo molto valido, che spiega VHDL (si noti che è in commercio pure un testo gemello che tratta Verilog) basandosi sull'elettronica digitale ma anche il contrario: l'idea alla base della trattazione è quella di amalgamare i due temi, rendendoli di fatto uno solo e permettendo al lettore un'apprendimento efficace sia del linguaggio quanto delle basi dell'elettronica digitale dal punto di vista di un progettista a medio-alto livello (diciamo almeno livello 2 nel diagramma di Gajski-Kuhn). Notevole la presenza di un capitolo sul testing e di alcune appendici pratiche, ma non condivido l'assenza di capitoli espressamente dedicati alle tecniche di progettazione: la spiegazione per esempi è ottima, ma un po' di formalismo in più non farebbe male.


Un ottimo testo sull'utilizzo di VHDL, che viene inizialmente presentato con un paio di "flash introduttivi" e poi sviscerato nel dettaglio, nel design dei sistemi digitali. Ampio spazio viene dedicato alla spiegazione delle tecniche corrette di specifica e sintesi dei circuiti dal punto di vista del designer; l'unica cosa di cui si sente davvero la mancanza è una trattazione organica del testing dei circuiti anche solo in fase di simulazione, che avrebbe reso completo un testo che aveva - a mio avviso - le carte in regola per diventare un must-have del suo settore.


Basterebbe il nome dell'autore per spiegare perché leggere questo libro: Daniel Gajski ha fornito molti importanti contributi nell'ambito dei sistemi digitali, vanta oltre 16000 citazioni (stando a Google Scholar) ed è, inoltre, un docente estremamente gradevole da seguire. Ma non manchiamo di rispetto alla tradizione, e descriviamo brevemente il testo: si tratta di un'opera interamente dedicata al progetto dei sistemi digitali e caratterizzata da un approccio quanto meno peculiare: di capitolo in capitolo, l'autore incrementa sensibilmente il livello della sua trattazione, obbligando lo studente a non distrarsi mai, sì da non perdere alcun dettaglio di ciò che viene detto. Vien da sè che, unendo questo metodo didattico ad una trattazione densa e molto chiara, il testo in analisi risulti senz'altro un ottimo manuale sia per lo studente che vuole imparare sia per il progettista che vuole ricordare.


Questo è a tutti gli effetti un libro di elettronica analogica e digitale, ma nessuna bibliografia legata all'informatica può trascurarlo, perchè si tratta di un testo sacro, una specie di mega-libro delle risposte: hai un dubbio sulla struttura delle RAM? Lui ha una figura che te lo risolve. Hai bisogno di scegliere un integrato? Lui ti propone decine di pagine con tabelle comparative che includono tutti i più famosi dispositivi in commercio. Non ricordi come funziona un convertitore A/D ad approssimazioni successive? Lui te lo spiega. Chiunque si occupi, a qualsiasi livello e per qualsiasi motivo, di hardware ed elettronica semplicemente non può non possederne una copia.


La chiave per capire davvero come funziona un calcolatore: inizia dalle porte base ed arriva a mostrare interi processori e sistemi di memoria, il tutto spiegando ogni singola scelta implementativa nei minimi dettagli. Notevole anche lo stile, che risulta scorrevole ed appassionante tanto da rendere quasi leggera la lettura di un testo tecnico di 700 pagine. Consigliatissimo a tutti gli appassionati della materia.


Un discreto libro dedicato all'introduzione del linguaggio Verilog: iniziando dalle basi del design di sistemi digitali, l'autore si occupa di mostrare le funzionalità di base del linguaggio, avvalendosi anche di un certo numero di semplici e utili esempi. Sarebbe un testo davvero valido, se non fosse un po' disorganizzato. Segnalo l'esistenza di edizioni successive a quella in mio possesso.


Un altro libro di uno degli autori più apprezzati nel campo dei sistemi embedded, questa volta dedicato al design dei sistemi digitali. Il primo capitolo è dedicato alla classica introduzione con un po' di note culturali sui temi d'interesse (anzi no: quella non è "la classica introduzione", non del tutto almeno... ma non dirò altro in merito: leggere per capire, e chi sa che questa lettura non porti lo studente a dare un altro valore alle competenze che si appresta ad acquisire), e dal secondo ha inizio la trattazione effettiva del design dei sistemi digitali, condotta basandosi su molti esempi (non di rado accompagnati da box che ne citano gli usi pratici) ma senza mai perdere di vista la necessaria generalità. Ritengo necessario sottolineare l'ottima spiegazione delle tecniche di progetto ed ottimizzazione dei circuiti combinatori, nonchè la scelta di dedicare dello spazio ad una rapida (ma non troppo) spiegazione sui processori programmabili, sulla realizzazione degli integrati e sugli HDL (con tanto di esempi: semplici modelli digitali realizzati in VHDL e Verilog, e anche un paio di esempi in SystemC).


Un testo molto difficile da reperire (le copie di prima mano si trovano a prezzi improponibili, e sull'usato sono disponibili poche unità) ma decisamente interessante: la proposta è simile a quella di altri testi, ovvero cercare di spiegare VHDL per esempi invece che con un'introduzione formale alla sua grammatica, ma la qualità dell'opera è tale da permettere di non pregiudicare la chiarezza (non altrettanto garantita è la completezza, ma sarebbe stupido aspettarsi il contrario). Non si tratta, ovviamente, di un testo dedicato a chi vuole approfondire le nuances del linguaggio: questo è un manualetto per il progettista hardware al lavoro, che sa già di cosa si parla e quindi necessita al più di un veloce sguardo a qualche riga di codice, o allo studente specializzando in progettazione dei sistemi digitali, il quale tendenzialmente ne studierà il contenuto integrandolo con il testo "Digital design" scritto dallo stesso Vahid.


Linguaggi e metodi formali

Il celeberrimo "dragon book", un'istituzione quando si parla di teoria dei compilatori. Si tratta di un ottimo testo, che parte dalla descrizione generica della struttura di un compilatore e poi va a descrivere dettagliatamente tutte le parti. Eccellente in particolare lo stile, che rende accessibili anche gli argomenti più ostici.


Un ottimo libro sul model checking, scritto (anche) da uno dei più illustri studiosi della materia (nonchè, per quanto ne so, uno di coloro cui si deve la formulazione del model checking stesso). I primi tre capitoli introducono l'utilizzo dei metodi formali nella verifica dei sistemi e le logiche temporali, mentre i successivi vanno nel merito del model checking, valutando gli algoritmi di enumerazione esplicita, quelli (oggi preferiti) basati sui BDD, sul μ-calcolo e sugli automi di Büchi, gli algoritmi di partial order reduction, le semplificazioni introducibili sfruttando le simmetrie dei sistemi, il checking per sistemi real-time a tempo discreto e continuo... insomma, il materiale non manca, e va detto che l'esposizione è chiarissima, adatta davvero a chiunque abbia anche solo basi minime sui metodi di verifica formale; si noti, tuttavia, che si tratta di un testo relativamente vecchio, e dunque privo di riferimenti agli argomenti (come il model checking basato sui SAT solver) divenuti "caldi" solo di recente.


Una bellissima raccolta di circa 30 articoli/capitoli, scritti spesso da voci estremamente autorevoli nei rispettivi ambiti, che illustrano lo stato attuale delle ricerche e dell'utilizzo dei metodi di model checking. Dal model checking esplicito a quello simbolico (sia con i SAT solver che con i BDD), dalle SMT alle tecniche di astrazione, dalla verifica dei sistemi real-time all'interazione tra model checking e theorem proving... è lecito pensare che quasi nulla di ciò che riguarda il model checking sia omesso in questo testo.


Questo testo nasce con l'idea, stando alla prefazione, di trattare la teoria dei linguaggi formali con completezza e semplicità, al contrario (sostengono gli autori) di quanto fatto negli altri testi, dove la "corsa alla completezza" ha finito per offuscare la chiarezza espositiva. In realtà, le promesse sono mantenute solo in parte, e la volontà di coniugare chiarezza e completezza a volte si traduce in un'esposizione errabonda, che passa da un aspetto all'altro delle cose senza davvero spiegare. Non va comunque sminuito lo sforzo degli autori, soprattutto perchè questo testo, quantunque inadatto per chi desidera avvicinarsi per la prima volta ai temi trattati, può risultare una guida nonostante tutto utile per coloro i quali sono alla ricerca di una "voce originale" che commenti in modo diverso argomenti già noti.


Un valido testo introduttivo (ma proprio introduttivo: è sufficiente solo per gli amatori interessati) alla teoria della computabilità: l'autrice inizia presentando il formalismo minimo della teoria dei linguaggi formali e prosegue proponendo i modelli computazionali classici (la macchina di Turing, il lambda-calcolo...) ed alcuni modelli più recenti. Molto interessante la bibliografia proposta, che fornisce ai più interessati un punto di partenza per approfondire i - tantissimi - temi purtroppo solo sfiorati da quello che comunque non si è mai proposto come un testo omnicomprensivo.


Il testo in esame è un piccolo (ma costoso) manualetto che presenta una veloce panoramica delle tecniche di verifica più note: model checking, equivalence checking, qualche approccio basato sulla simulazione; ci sono anche un paio di cenni al theorem proving, ma davvero troppo poco per poter parlare di "trattazione". Lo stile è semplice, la bibliografia consistente e rigorosa... non si tratta di un testo irrinunciabile, ma senz'altro qualsiasi neofita dei metodi formali alla ricerca di una guida per orientarsi tra i tantissimi studi (molti dei quali sostanzialmente identici... publish-or-perish) pubblicati negli ultimi quindici anni lo troverà utile.


Un testo classico utilizzato in molti corsi di teoria della computazione. Gli autori propongono un percorso dettagliato e rigoroso attraverso i quattro livelli della gerarchia di Chomsky (la quale però, ad onor del vero, viene formalmente presentata solo a metà dell'opera), illustrando per ciascun tipo di linguaggio la grammatica e l'automa associato. Da evidenziare la presenza di due capitoli dedicati esclusivamente alla teoria della complessità computazionale tanto bistrattata dalle spesso vergognose trattazioni proposte nei corsi di algoritmi.


Un ottimo libro per chiunque voglia avvicinarsi per la prima volta alla verifica formale: dopo aver spiegato le ragioni che giustificano l'utilizzo dei metodi formali, passa subito a spiegare il formalismo della logica proposizionale e della rappresentazione delle sue formule sui BDD, per poi introdurre le tecniche simboliche di equivalence checking, la logica temporale (e, ovviamente, il model checking) e, per concludere, le logiche di ordine superiore e conseguentemente qualcosa (giusto qualche cenno) sul theorem proving. Concludono il libro tre interessanti appendici, che illustrano rispettivamente alcune delle basi matematiche necessarie per comprendere i metodi formali (relazioni, reticoli e teoria dei punti fissi), la grammatica della logica CTL* e la grammatica della HOL.


Un libro molto interessante che fornisce una veloce e scorrevole panoramica del mondo dei metodi formali; da sottolineare è soprattutto la particolare attenzione dedicata agli aspetti matematici di base, che occupano gran parte del testo e vengono introdotti in modo semplice e chiaro, sì da soddisfare tanto il matematico quanto l'assai meno "formalistico" ingegnere, fermo restando che per una trattazione completa occorre comunque riferirsi a testi specifici. Notevoli anche la scelta di dedicare dei capitoli ai linguaggi Z e VDM e soprattutto i riferimenti ai contributi del vergognosamente trascurato (non solo nell'ambito dei metodi formali) David Parnas e ad altri aspetti a volte non citati nelle introduzioni "veloci" ai metodi formali.


Il testo di Sebesta è una lettura fondamentale per qualsiasi informatico, perché apre la mente e permette di acquisire una visione più ampia del mondo dei linguaggi di programmazione: partendo da alcune considerazioni qualitative e un po' di storia dei linguaggi di programmazione, l'autore descrive anzitutto l'analisi della sintassi e della semantica dei linguaggi di programmazione, accompagnata ovviamente da una breve (ma non per questo meno valida) spiegazione dei principali aspetti dell'analisi sintattica; segue un'attenta analisi dei vari aspetti dei linguaggi di programmazione (tipi di dato, strutture di controllo, espressioni, binding...), accompagnata da moltissimi frammenti di codice in grado di illustrare al meglio le varie possibilità e sottolineare le differenze non solo tra tipologie diverse di linguaggi, ma anche tra i vari linguaggi della stessa "categoria".


Un libro decisamente interessante, che introduce i linguaggi formali e la teoria della computazione con grande chiarezza e - cosa più che rara in un testo tecnico - in modo estremamente godibile. Probabilmente il testo che andrebbe consigliato a chiunque sia in cerca di un manuale introduttivo alla materia.


In questo libro, gli autori si occupano di introdurre il linguaggio di specifica formale OCL, concepito per espandere l'assai carente metodo semi-formale UML permettendo (anche) la specifica rigorosa di vincoli sulle entità. Il testo è strutturato in modo da essere facilmente comprensibile a qualsiasi lettore forte almeno delle basi minime di UML: i primi capitoli mostrano le funzionalità del linguaggio, e già da soli bastano per l'utente "basico-pratico", e tutto il resto del libro è dedicato ad una spiegazione un po' più approfondita del linguaggio; nell'Appendice B, in particolare, è presente una breve grammatica.


Matematica per l'informatica

Calcolo e analisi

Un buon libro di matematica che, come da titolo, propone alcuni argomenti di analisi funzionale utili per qualsiasi ingegnere informatico-elettronico: serie e trasformata di Fourier, integrale di Lebesgue, distribuzioni, transformata di Laplace e altro ancora.


Un buon libro dedicato ad alcuni dei problemi base dell'analisi numerica, i cui algoritmi risolutivi vengono ove possibile ricavati gradualmente, in modo da mostrare al lettore da quale idea di fondo essi derivino e suggerirgli al contempo spunti per un'analisi più approfondita del problema trattato; accompagna il tutto un numero non indifferente di listati che implementano i vari algoritmi proposti.


Logica

  • Abrusci, Tortora De Falco, Logica Vol.1 & Vol.2, Springer [anni vari]

Due testi molto interessanti e adatti per qualsiasi corso introduttivo di logica: gli autori introducono la logica predicativa (primo volume), la parte di metalogica sull'incompletezza e la teoria degli insiemi (secondo volume) in modo molto chiaro e preciso, avvalendosi inoltre di esempi notevoli ben strutturati.


Un ottimo libro sulla logica del primo ordine, che viene descritta dettagliatamente e chiaramente; interessantissima, in particolare, risulta la scelta di marcare le sezioni un po' più "specialistiche", sì che un lettore che sta affrontando la logica per la prima volta possa saltarle (fermo restando che comunque dovrà tornarci dopo, perché esse trattano argomenti molto importanti) e non confondersi le idee.


Questo libro nasce con il proposito di spiegare più o meno a chiunque le basi della logica dei predicati: dopo una breve introduzione alla logica proposizionale ed alla teoria "ingenua" degli insiemi, l'autore descrive in dettaglio la sintassi e la semantica (tarskiana) della logica del primo ordine, per poi concludere con dei cenni - minimi, ma comunque interessanti - alla metalogica ed in particolare all'incompletezza gödeliana. L'intera trattazione è accompagnata da un numero importante di esempi, i quali permettono di capire davvero il ragionamento dietro il formalismo, il suo intrinseco significato.


  • Blackburn, De Rijke, Venema, Modal logic, Cambridge University Press, 2001

Un ottimo testo introduttivo alle logiche modali, che vengono illustrate fornendo al contempo sia il quadro generale che le specificità di alcune logiche notevoli, con il risultato di guidare (esperienza formativa non da poco) il lettore in quella che sembra la loro "costruzione".


  • Bolchini, Brandolese, Salice, Sciuto, Reti logiche, Apogeo, 2008

Un ottimo testo che spiega il formalismo che sta dietro alle reti logiche e propone le tecniche per progettarle. I primi capitoli si occupano di introdurre gli strumenti di base, ovvero l'algebra di commutazione, le porte logiche fondamentali e le tecniche di codifica dell'informazione; dal capitolo 4, si inizia ad entrare nel merito, discutendo la progettazione di circuiti combinatori e sequenziali, le tecniche di ottimizzazione, il formalismo degli automi a stati finiti... il tutto senza mai dimenticare la necessità di mostrare al lettore degli esempi concreti, tant'è che un paio di capitoli sono interamente dedicati alla spiegazione di semplici circuiti notevoli.


Un libro vecchio, di quelli fatti bene: in poco più di 100 pagine, spiega rigorosamente e con tanto di dimostrazioni tutti gli elementi fondamentali della teoria ingenua degli insiemi. Pur essendo molto formale (o almeno, abbastanza formale da definire esplicitamente le operazioni insiemistiche nella forma di assiomi), il testo risulta comunque estremamente fruibile, adatto davvero a chiunque abbia un minimo di dimestichezza con il simbolismo minimo delle scienze matematiche.


Il testo di Huth e Ryan è una lettura fondamentale per chiunque voglia occuparsi davvero d'informatica: avvalendosi di uno stile semplice e molto gradevole (che comunque non penalizza assolutamente il rigore della trattazione), gli autori introducono tutti i concetti fondamentali della logica matematica e alcune loro applicazioni, illustrando di volta in volta le motivazioni che fanno preferire un approccio ad un altro e corredando la spiegazione con semplici esempi di grandissimo valore didattico. Senza dubbio consigliato a chiunque voglia avvicinarsi per la prima volta alla logica matematica, ma non escludo che anche lettori già preparati possano trovarlo utile.


In questo libro, l'autrice si occupa di illustrare alcune estesioni della logica predicativa utili in svariati campi applicativi (la logica a più sorte, per esempio, è utile per l'estensione del SAT-based model checking); lo stile è tutto sommato decente, per cui uno studente forte almeno di un corso base sulla logica del primo ordine dovrebbe essere in grado di capire senza particolari grattacapi.


Un testo molto interessante e relativamente denso, che tratta la logica del secondo ordine approfondendo il significato e il valore delle sue proprietà; presupposto fondamentale è, come l'autore stesso evidenzia più volte, la conoscenza della logica del primo ordine, anche se nel corso della trattazione molti risultati fondamentali vengono richiamati e dimostrati.


Matematica discreta

Una versione riveduta e ampliata di un testo probabilmente classico della teoria dei grafi; si tratta di un libro completo e accessibile, che spiega tutti gli elementi fondamentali della teoria dei grafi con grande attenzione agli algoritmi più importanti ed un occhio di riguardo all'elettrotecnica (un intero capitolo è dedicato all'applicazione della teoria dei grafi all'analisi delle reti). Se proprio si deve trovare un difetto a questo testo, è l'impossibilità di consultarlo rapidamente: il sommario riporta solo i titoli dei capitoli, e i rimandi contenuti nella trattazione sono imprecisi o a volte del tutto assenti, per cui è praticamente impossibile determinare senza grattacapi quali paragrafi siano d'interesse.


Un testo notevole, se non altro perché è uno dei pochi in italiano (almeno che io sappia) a presentare una trattazione matematicamente rigorosa degli automi a stati finiti. Partendo dalla teoria dei semigruppi e dei monoidi, gli autori illustrano costruttivamente come inquadrare i linguaggi regolari e (ovviamente) i relativi automi in un contesto formale e indipendente dalla assai più nota (ma non per forza sufficiente) formulazione "informatico-ingegneristica".


Un celebre testo sulla teoria dei grafi, la quale viene presentata in modo preciso e rigoroso. Il principale, non trascurabile difetto di questo libro è la notazione, che a volte risulta un po' confusionaria e non adeguatamente accompagnata da memoranda ed inserti esplicativi.


Un discreto libro di matematica discreta (capito il gioco di parole?), che tratta abbastanza bene tutti i temi fondamentali della materia, dedica tanto spazio alla logica ed alla teoria della dimostrazione e non manca di citare la teoria della complessità e la teoria degli automi. L'impostazione è molto simile (anche troppo...) a quella del testo "Discrete mathematics and its applications" di Rosen, il quale però risulta più formale e presenta un numero decisamente maggiore di utili esempi ed esercizi.


Questo è un libro che non esito a definire "unico": gli autori spiegano vari argomenti base della matematica discreta con uno stile semplice e divertente (favolose le note a margine, che forniscono - sotto forma di battute e commenti ironici - degli spunti utilissimi per la comprensione degli argomenti trattati) ottenendo comunque un testo di ottima qualità, che merita una lettura da parte di chiunque goda davvero dello studio e voglia andare oltre l'alterigia quasi alienante trasmessa da molti dei testi di riferimento per le scienze matematiche.


Un testo abbastanza accessibile che tratta un po' di argomenti (tendenzialmente, quelli inerenti ai campi in cui Korte stesso ha svolto delle ricerche) inerenti i problemi di ottimizzazione: cammini minimi, matroidi, programmazione lineare... tutte informazioni utili per qualsiasi informatico. Lo stile della trattazione è tutto sommato decente, nonostante alcune scelte quanto meno opinabili (si veda, ad esempio, la scelta di introdurre gran parte della notazione all'interno delle dimostrazioni invece che nel "testo principale").


Un ottimo libro sulla matematica discreta, che viene trattata con completezza e chiarezza. Tutti gli argomenti fondamentali (la teoria ingenua degli insiemi, il calcolo combinatorio, la teoria dei grafi...) sono analizzati in modo rigoroso e proponendo molti esempi ed esercizi. L'unico difetto che sono riuscito a trovare in questo libro è l'assenza, nella ricca bibliografia, di alcune voci cui però viene fatto riferimento nel corso della trattazione.


Un riferimento fondamentale per chiunque abbia bisogno di informazioni veloci e chiare in qualsiasi campo della matematica discreta: ogni capitolo, sostanzialmente monotematico, presenta un glossario, a volte una tabella riassuntiva (è il caso, per esempio, del capitolo sul calcolo combinatorio, la cui eccellente tabella iniziale rischia di risultare da sola sufficiente a risolvere la maggior parte dei problemi del lettore) e vari paragrafi a loro volta formati da una breve introduzione e da un "cuore" chiamato "Facts" che propone, in forma di brevi appunti, i concetti fondamentali relativi al tema trattato. Decisamente, un testo che non può mancare nella biblioteca di chiunque si occupi di informatica o sia comunque appassionato ad essa.


Teoria dei modelli e delle categorie

Un testo introduttivo alla teoria delle categorie indirizzato esplicitamente agli ingegneri del software ma in realtà adatto a chiunque voglia iniziare a capire l'argomento: attraverso vari esempi (che culminano in tre interi capitoli dedicati a casi reali), l'autore espone in modo tutto sommato chiaro le basi della teoria delle categorie e lascia intendere (cosa non banale, visto il livello di astrazione tipico di tale teoria) il suo significato "pratico".


Un ottimo testo introduttivo alla teoria dei modelli, che viene trattata in modo molto chiaro e facendo continuamente riferimento alle sue istanze più note. Esiste anche una versione ridotta, intitolata "A shorter model theory", che risulta probabilmente più adatta ai neofiti in quanto meno "dispersiva".


Un libro che nasce con l'idea di presentare brevemente la teoria delle categorie fornendo al contempo un'introduzione matematica e un certo numero di esempi in grado di mostrare i collegamenti (non sempre ovvi) tra i concetti illustrati e l'informatica teorica. Gli intenti sono nobili, ma il risultato non è eccellente: la spiegazione non sempre è chiara, e non di rado l'autore sottintende concetti che sarebbe meglio esplicitare o, se già spiegati prima, richiamare.


Programmazione e ingegneria del software

Programmazione in linguaggio C

Questo libro propone un'introduzione al progetto di sistemi basati su microcontrollori PIC; inizialmente, gli autori si occupano di fornire una (non irresistibile, ma comunque carina) guida introduttiva al linguaggio C e al suo uso nella programmazione dei PIC, e poi si lanciano nell'analisi dei microcontrollori PIC e degli strumenti utilizzabili per programmarli. Fondamentali per l'apprendimento sono i vari esperimenti proposti, che permettono di realizzare, partendo da un PIC e poco altro, piccoli sistemini per toccare con mano quanto imparato.


Un buon testo introduttivo, ricco di esempi e dotato - cosa ottima per i neofiti assoluti - di quattro ottimi capitoli di introduzione generale all'informatica e di un paio di capitoli che mostrano degli algoritmi di base per la gestione delle strutture ad albero. Risulta meno completo di altri testi e non fornisce al neofita dei consigli per maturare uno stile di programmazione decente (in realtà, il testo è ricco di esempi adeguatamente commentati che possono aiutare il neofita più sveglio... ma una guida esplicita alla buona programmazione avrebbe lasciato meno spazio alle interpretazioni), ma per un primo approccio al linguaggio risulta comunque più che valido. Ne esiste un'edizione più recente, aggiornata allo standard C11 e contenente anche alcuni capitoli sulla programmazione OOP e sull'Objective C (la cui presenza onestamente non mi spiego, ma tant'è...).


Si tratta di un testo che (come tutti quelli della banda Deitel) promette completezza e chiarezza, ma in realtà risulta incompleto, pieno di errori e carenze (vomitevolmente spacciati per "errori volontari" ad uso esercizi nelle ultime edizioni) e promotore di uno stile di programmazione scorretto e vergognoso. Veementemente sconsigliato.


Un libro dal taglio decisamente pratico: propone vari esempi implementativi per mostrare come realizzare codice ben modularizzato e facilmente riutilizzabile. Interessante per chiunque voglia riflettere sul proprio stile di programmazione.


Forse uno dei manuali di riferimento più belli sul linguaggio C. Il linguaggio (aggiornato allo standard C99, che ad oggi è il penultimo standard valido) viene descritto in dettaglio e facendo sempre riferimento alla sua grammatica (qualità non da poco, visto che molti manuali favoriscono un approccio molto più astratto, adatto al neofita ma totalmente inutile per il programmatore). Consigliato per chi ha imparato le basi minime del linguaggio C ma ha voglia di fare di più.


Un libro la cui lettura è tassativa per qualsiasi programmatore C, si occupi o meno di sistemi ad elevata criticità: l'autore inizia spiegando perchè è un dovere di qualsiasi sviluppatore occuparsi della qualità e dell'affidabilità del codice che scrive e mostrando l'assoluta carenza di standard nell'ambito dell'ingegneria del software (si ricordi che il libro è del 1995: oggi la situazione è diversa, anche grazie all'impatto avuto da scritti come quello in esame), per poi partire con un'analisi ragionata dei problemi del linguaggio C (standard ISO/IEC 9899:1990, non il più recente ma comunque l'ultimo supportato in modo non discontinuo dai vari compilatori), l'analisi di dati e misure sulla qualità e l'affidabilità del software, la comparazione del C con altri linguaggi (come ad esempio Ada) tipicamente utilizzati nell'ambito dei sistemi safety-critical e la presentazione dei tool al tempo disponibili per l'analisi del codice, sì da gettare la basi per la definizione di un subset del linguaggio in grado di permettere la scrittura di software sicuro ed affidabile; chiude il libro un capitolo sui problemi legali inerenti la messa in opera di sistemi software non sicuri.


Qui c'è poco da dire: un libro sul C scritto dagli autori del C, praticamente un must-have. Il libro è abbastanza completo, e nonostante l'età mantiene tutta la sua validità. Si tratta però di un testo probabilmente non adatto ad un primo approccio al linguaggio C ed alla programmazione, perchè dà per scontate cose che nella mente di un neofita potrebbero non esserlo.


Un libro necessario per chiunque voglia capire come funziona una libreria: l'autore sviscera i dettagli implementativi di tutte le librerie dello standard C89, descrivendo vantaggi, svantaggi e compromessi di ciascuna scelta e proponendo frammenti di codice utili per comprendere come il progetto si debba tradurre - facendo i conti con i limiti del linguaggio - in qualcosa di funzionante. Inadatto ai neofiti.


Il libro che consiglio a tutti i neofiti: chiaro, completo, aggiornato allo standard più recente e pieno di ottimi esempi ed esercizi. Può essere un buon manuale di ripasso anche per programmatori di medio livello.


Un libro utile per chiunque voglia riflettere sul linguaggio C e sulle sue contraddizioni: propone alcuni esempi di prassi e credenze ormai consolidate tra i programmatori, e mostra la loro inesattezza. È un po' datato, alcune delle contraddizioni che mostra sono state trattate da standard successivi a quello cui fa riferimento e molti degli aspetti analizzati sono noti a chiunque abbia studiato decentemente l'architettura dei calcolatori e dei sistemi operativi, ma è comunque una lettura interessante e divertente. Consigliato a chiunque conosca un po' il linguaggio e sia desideroso di capire perchè non è sempre vero che un puntatore ed un vettore sono la stessa cosa (o perchè la keyword const non definisce davvero le costanti).


Programmazione in linguaggio C++

Un ottimo libro sulla libreria standard del C++, dedicato in particolare alla descrizione dei suoi principi fondanti e delle corrette modalità di utilizzo delle sue classi. Risulta una lettura illuminante soprattutto se immediatamente seguente a quella del libro di Stroustrup, rispetto al quale si pone (anche) come approfondimento e commento.


Un testo che alcuni non hanno esitato a definire "coraggioso": fin dalle prime pagine, il lettore viene bombardato senza tregua con tutte le caratteristiche della libreria standard del C++ (o almeno, della libreria standard com'era a fine anni '90) presentate nell'ambito di una quantità notevole di esempi spesso non banali. Decisamente non è un testo per i neofiti della domenica, ma è indubbio che il lettore seriamente interessato troverà in esso la guida perfetta per imparare a programmare in C++.


Il buon Prata non si smentisce mai, e affianca all'ottimo "C primer plus" (presente anch'esso nella biblioteca) uno dei più interessanti testi introduttivi sul C++. Si tratta di un'opera completa, ben spiegata e soprattutto continuamente aggiornata, che non può mancare sugli scaffali di ogni studente di informatica.


L'autore di questo testo è anche il creatore del C++: serve aggiungere altro? Un libro necessario, che spiega cosa fa (e cosa non fa) il C++, fornisce utili spunti di buona programmazione (spesso nascosti sotto le vesti di battute pungenti e commenti sarcastici) e lascia intravedere la grandezza di uno dei pochissimi linguaggi utilizzabili davvero in qualsiasi ambito. Un ulteriore punto a favore di questo testo è relativo ad un dettaglio che può sembrare folkloristico, ma decisamente non lo è: si tratta di uno dei primi testi in cui l'autore dice esplicitamente che pretendere di imparare il C++ come soprainsieme del C è un'idiozia di inenarrabili proporzioni.
C'è solo una cosa che questo libro non fa: insegnare a programmare. È meglio che i neofiti guardino altrove.
Segnalo l'esistenza di varie edizioni successive a quella in mio possesso.


Programmazione in linguaggio Java

Un ottimo testo di riflessione su Java, che attraverso 78 casi (o "items", come li chiama l'autore) raggruppati in 11 capitoli mostra gli effetti di alcune pratiche più o meno comuni tra i programmatori Java e propone delle alternative più corrette e sicure; si tratta di un libro adatto solo a chi già conosce il linguaggio, ça va sans dire. Purtroppo è un po' datato (dalla sua pubblicazione, Java ha subito degli aggiornamenti strutturali), ma dovrebbe essere prossima all'uscita una nuova edizione.


Un testo vergognoso, che vorrebbe essere semplice ed "amichevole" ma finisce per essere confusionario ed inconcludente. Dannoso per i neofiti, irritante per i programmatori.


Uno dei tanti libri nati con l'intento di presentare Java ad un neofita assoluto della programmazione. Il primo capitolo propone una risicatissima introduzione generale all'informatica ed alla programmazione, mentre dal secondo inizia la trattazione effettiva del linguaggio, condotta in modo tutto sommato accettabile; notevole la scelta di introdurre un po' di progettazione e design UML en passant, rendendo il libro adatto anche a chi non affronterà un corso di ingegneria del software ma vuole comunque capire almeno in linea di principio come iniziare a progettare decentemente.


Dopo averlo studiato, son rimasto fermo a guardare la copertina per mezz'ora come un cretino: com'è possibile che Schildt - si, proprio quello Schildt - abbia scritto un ottimo testo, chiaro e senza errori? Eppure, è così: questo libro è sia un valido manuale di riferimento che un'ottima guida per neofiti.


Programmazione in linguaggi Assembly

Un buon libro introduttivo alla programmazione in Assembly x86, inizia con la presentazione del modello software del processore 8086 e poi passa senza fronzoli di alcun genere (come prevedibile da chiunque abbia seguito almeno una lezione del professor Sonza Reorda, mi permetto di aggiungere) a mostrare listati e istruzioni. Consigliato a chi, forte di una minima preparazione nell'ambito dell'architettura degli elaboratori, ha voglia di sperimentare con la programmazione di basso livello senza perdere tempo.


Un testo essenziale per chiunque voglia lavorare sull'architettura ARM: dopo una breve nota storica, presenta sostanzialmente tutti gli aspetti degli ISA dei vari processori, spaziando dalla gestione dei periferici a quella dei numeri floating-point, dalla strutturazione degli interrupt al modello della memoria. Decisamente, un libro necessario.


La bibbia della programmazione di basso livello su sistemi con processore x86. Presenta letteralmente di tutto: istruzioni di base, architettura dei processori x86, utilizzo avanzato delle procedure, gestione dei numeri floating point, interfaccia con i linguaggi di alto livello... Oserei definirla un'opera fondamentale.


Programmazione in altri linguaggi

Un testo paradossale: propone e spiega molte interessanti applicazioni scientifiche di Matlab, mostra degli esempi ben strutturati, chiari ed interessanti... ma non riesce a spiegare le basi del linguaggio senza incappare continuamente in errori pedestri ed imprecisioni al limite del demenziale.


Serie di libri, disponibile sia in formato cartaceo che (gratuitamente) online, dedicata all'approfondimento del linguaggio Javascript e della sua logica di fondo (sembrerà strano, ma anche Javascript ne ha una). La spiegazione è condotta in modo chiaro ma non banale ed è supportata un ottimo numero di esempi adeguatamente commentati. In definitiva, si tratta di una serie di testi probabilmente fondamentale per chiunque voglia avventurarsi nell'assurdità di Javascript, un linguaggio progettato talmente male da aver visto, nel corso degli anni, la bocciatura inappellabile di circa il 70% delle sue funzionalità, ma nonostante tutto ancora molto utilizzato.


Ingegneria e progettazione del software

Questo libro tratta, come il titolo mostra inequivocabilmente, l'approccio object-oriented all'ingegneria del software, e lo fa in modo contenutisticamente decente. Se il lato didattico è accettabile, altrettanto non si può dire dell'organizzazione del testo: l'edizione europea manca di un sommario decente, il glossario è strutturato malissimo (per ogni termine sono citate addirittura le pagine dove esso compare incidentalmente, e nessun tipo di segno lascia intendere dove il concetto venga effettivamente approfondito!), la suddivisione degli argomenti nei vari capitoli è quanto meno discutibile... in pratica, un testo inutilizzabile, a meno che non lo si voglia leggere da cima a fondo come un romanzo (che non è per forza un'idea peregrina, a dire il vero... ma ciò non deve far dimenticare che un testo tecnico deve garantire una certa facilità di consultazione).


In questi testi, consigliati anche da fonti autorevoli come Sommerville, gli autori discutono le idee relative al design pattern-based del software, analizzando contestualmente dei pattern architetturali e alcuni design pattern già proposti dalla ben nota "gang of four". Lo stile è abbastanza scorrevole, e ogni pattern è presentato partendo da un esempio che viene poi generalizzato e discusso.


Un altro libro sui pattern, questa volta dedicato ai sistemi real time. La trattazione è semplice e abbastanza scorrevole: la descrizione dei pattern, condotta in modo decente, è accompagnata da diagrammi UML debitamente commentati che mostrano i dettagli di ogni schema presentato, e a fine paragrafo viene sempre proposto un breve esempio esplicativo.


Un testo storicamente importante nell'ambito della programmazione orientata agli oggetti: 23 design patterns presentati, spiegati ed esemplificati per fornire ai programmatori delle strutture base da utilizzare per la produzione di codice robusto, (tendenzialmente) sicuro e riutilizzabile.


Questo libro si rivolge al lettore dicendogli sostanzialmente "ora ti mostro come si scrive un programma". Il testo di McConnell è una lettura indispensabile per chiunque voglia scrivere del codice su cui si possa lavorare, tant'è che a volte mi chiedo perchè lo studio di ogni sua pagina non sia reso obbligatorio in tutti i corsi di laurea in ingegneria informatica ed in tutti gli istituti tecnici ad orientamento informatico.


Un testo semplicemente fantastico, in cui il professor Bertrand Meyer del Politecnico di Milano spiega in modo molto divertente (ma comunque completo e rigoroso) i principi fondamentali delle metodologie agili di sviluppo del software, sottolineandone i lati positivi e soprattutto (se non altro perché sono la schiacciante maggioranza) negativi. Qualsiasi informatico dovrebbe essere obbligato a leggere questo libro durante i propri studi: in questo modo, forse si eviterebbe di mandare in giro schiere di idioti informatici buoni solo a copiare codice e criticare chi le cose le sa fare davvero.


Di fronte a un classico del genere, chiunque non sia un'eminenza del settore non può non nutrire il dubbio di non essere in grado di scrivere un giudizio degno di questo nome: si tratta di uno dei testi fondamentali nella didattica dell'ingegneria del software, un testo completo e dallo stile eccellente che accompagna lo studente nei meandri dell'ingegneria del software mostrando tutto ciò che c'è da mostrare e sottolineando tutto ciò che c'è da sottolineare. Segnalo l'esistenza di un'edizione in italiano, la quale però non ho avuto modo di sfogliare personalmente.


Uno di quei libri che tutti dovrebbero leggere: come McConnell, anche Sprankle e Hubbard intendono fornire spunti e regole per la buona programmazione e per il problem solving; a differenza di McConnell, però, i due autori del testo in esame adottano un approccio più amichevole, più adatto ai neofiti: ogni spiegazione è accompagnata da una degna introduzione all'argomento, le spiegazioni sono a prova di idiota, gli esempi e gli esercizi sono pensati appositamente per accompagnare il lettore... davvero, è difficile pensare ad un libro più adatto per introdurre la programmazione.


L'ispezione dei documenti e del codice è una tecnica molto importante di revisione del prodotto software; in questo libro, l'autore si occupa di illustrare varie tecniche di lettura che sono state sviluppate nel corso degli anni, specificando in particolare i vantaggi di una tecnica rispetto all'altra e fornendo a sostegno delle sue parole riferimenti a vari studi e comparazioni.


Reti di calcolatori

Un testo chiaro e relativamente edibile che si propone di illustrare i protocolli concettuali e funzionali delle attuali reti di telecomunicazione. Particolare attenzione è dedicata alla rete telefonica, che viene spesso citata come esempio per illustrare il significato e le implicazioni di certe tecnologie.


Un testo molto completo e dedicato quasi interamente alla rete internet. Dopo un primo capitolo introduttivo, gli autori si occupano di introdurre l'implementazione dei vari strati del modello ISO/OSI (o, più propriamente, del modello TCP/IP, ma ancora ci si ostina a sovrapporli...) nella rete internet, per poi concludere con quattro capitoli che si occupano rispettivamente di reti wireless e cellulari, protocolli per la tramissione multimediale, sicurezza informatica e gestione delle reti.
Per fare un po' di folklore, ritengo giusto raccontare che a questo testo è legato un fatto curioso: l'uscita di ogni nuova edizione fino ad ora ha comportato la pubblicazione online, da parte dell'Al-Balqa Applied University, dell'edizione precedente in formato PDF. Mi chiedo se sia legale...


Sicurezza informatica

Un testo introduttivo abbastanza interessante, che propone un percorso graduale per far comprendere allo studente i principi della sicurezza informatica in generale e di alcune sue incarnazioni (le due citate nel titolo) in particolare. Un difetto non da poco di quest'opera è la scarsa chiarezza di certe parti, cosa che un testo introduttivo non può permettersi.


In questo libro dal taglio decisamente pratico gli autori mostrano i vari tipi di vulnerabilità che un'applicazione web può presentare e spiegano come esse siano sfruttabili dai malintenzionati per trafugare dati sensibili e, in certi casi, danneggiare l'applicazione stessa o addirittura il server su cui essa è installata. La trattazione è integrata da un numero non indifferente di laboratori online, circa i quali va però segnalato quello che è un aspetto estremamente negativo della proposta didattica basata su questo testo: la piattaforma che li ospita è accessibile solo pagando a parte un abbonamento che attualmente ha prezzi da rapina.


Sistemi operativi

Un testo molto famoso e continuamente aggiornato. Gli argomenti sono presentati con rigore e precisione, ma senza trascurare la chiarezza espositiva. È lodevole in particolare, soprattutto trattandosi di un testo introduttivo, l'attenzione dedicata ai sistemi real-time.


Un'opera ottima, che illustra in modo chiaro e completo tutte le caratteristiche e le funzioni delle API dei sistemi UNIX-like per il linguaggio C. È aggiornato alla versione 4 della Single UNIX Specification, che è - al netto di alcune correzioni rilasciate nel 2016 - la più recente.


Un ottimo testo introduttivo, scritto in modo chiaro e ricco di spunti interessanti. Purtroppo, la volontà di chiarezza si traduce a volte in un approccio un po' troppo "leggero", che rinuncia al rigore e presenta i contenuti in modo eccessivamente discorsivo. Interessanti i capitoli finali, che descrivono in modo semplice alcune specificità dei principali sistemi operativi moderni. È in commercio un'edizione più recente di quella in mio possesso.

4

Commenti e note

Inserisci un commento

di ,

Questo non lo conosco... ora lo metto in lista per la lettura, grazie :)

Rispondi

di ,

Un altro libro di ottimo livello (per niente indicato per i principianti) su diversi aspetti della programmazione in Java e ricco di notevoli spunti di riflessione e duggerimenti e' "Effective Java" (in italiano) di Joshua Bloch. Edizioni Pearson ISBN 978-88-7192-481-6.

Rispondi

di ,

Grazie per l'intervento :) Conosco il libro, il quale infatti già figura nell'apposita sezione :)

Rispondi

di ,

Mi permetto di suggerire un libro eccellente per imparare il Java. E' il famoso "Programmazione di base ed avanzata con Java" di Walter Savitch. Edizioni Pearson ISBN 978-88-6518-190-4

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.