Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca personalizzata
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.
Bene, credo non ci sia altro da evidenziare. 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'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.


Architetture

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.


L'ho messo nella categoria "architetture", ma 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.


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.


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.


Ingegneria e progettazione del software

Il testo che ha rivoluzionato la programmazione orientata agli oggetti: 23 patterns presentati, spiegati ed esemplificati per fornire ai programmatori le strutture base da utilizzare per la produzione di codice robusto, 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.


Programmazione

Programmazione in linguaggio C

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ù.


Qui c'è poco da dire: un libro sul C scritto dagli autori del C, praticamente un must-have. Il libro è abbastanza completo, e nonostante sia legato ad uno standard ormai sorpassato (quello attuale è l'ISO/IEC 9899:2011, mentre il libro fa riferimento a quello del 1989) mantiene tutta la sua validità. Si tratta però di un testo non adatto ad un primo approccio al linguaggio C ed alla programmazione, perchè da per scontate cose che nella mente di un neofita non lo sono.


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 altri linguaggi

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


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.


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.


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.


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.


Reti logiche

  • 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.


Questo ero tentato di metterlo tra i libri di architetture, perchè di fatto è 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 quasi 700 pagine. Consigliatissimo a tutti gli appassionati della materia.


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


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.


Teoria della computazione

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


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.


[SEZIONE SPECIALE] Articoli

Un articolo molto interessante, anche se reso un po' ostico da uno stile a mio umilissimo avviso rivedibile, che spiega come sia possibile realizzare una tabella di hash gestibile in tempo stimato O(1). Non è un articolo adatto a chi non conosce bene i tratti generali dell'argomento, anche perchè fa riferimento (non sempre in modo esplicito) a varie altre pubblicazioni.


L'articolo che ha proposto il pezzo mancante di praticamente tutti i testi sull'algoritmica in commercio: il purtroppo non celeberrimo algoritmo di generazione delle partizioni di un insieme che attualmente detiene (almeno che io sappia) il primato dell'efficienza (pur essendo un algoritmo esponenziale... ma dato il problema trattato, era assai improbabile il contrario).

0

Commenti e note

Inserisci un commento

Inserisci un commento

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