Indice |
Premessa
L'articolo nasce da un incoraggiamento di Piercarlo in modo da recensire alcuni libri di informatica e programmazione, come ha fatto IsidoroKZ nel suo articolo La biblioteca di EY: libri consigliati (e altro) per i libri di elettronica ed altro. In maniera analoga sono ben accettate segnalazioni, consigli e recensioni da parte di altri utenti.
Sistemi Operativi e Reti
- Operating System Concepts by Abraham Silberschatz, Peter B. Galvin & Greg Gagne.
Il libro spiega molto bene i concetti fondamentali di progettazione di un sistema operativo, come le varie tipologie, la gestione e sincronizzazione dei processi, threads & multithreading, gestione della memoria e realizzazione dei filesystem, gestione di utenti e sicurezza. Ogni capitolo è accompagnato da vari esercizi di programmazione ed altrettanti vari esempi e riferimenti verso Windows e Linux.
- Computer Networks 4th Edition by Andrew S. Tanenbaum.
Libro di reti molto completo, fornisce un'ampia panoramica sull'argomento partendo dal livello fisico, i mezzi trasmissivi, hardware e software di rete, topologie, protocolli, fino ad arrivare al livello delle applicazioni internet. La quarta edizione è aggiornata alle evoluzioni più recenti delle reti, disponibile anche in italiano con il titolo "Reti di Calcolatori". Segnalazione e recensione a cura di spud.
Unix & GNU/Linux
- Linux Administration Handbook 2nd Edition by Trent R. Hein, Garth Snyder & Evi Nemeth.
Il libro ha un approccio a mio parere pratico, spiega molto bene molti dettagli di funzionamento del sistema, come usare determinate tool predefinite, in quali situazioni usarle e come muoversi all'interno di un sistema Linux, il tutto orientato appunto a chi si accinge ad amministrare un sistema di questo tipo o a chi si avvicina a Linux e dopo averlo installato vuole imparare ad usarlo meglio. Vengono prese in considerazione Debian ed Ubuntu, RedHat e Fedora, Suse. Di questo libro esiste anche la versione Unix, UNIX System Administration Handbook 3rd Edition, però attualmente a quanto sembra è stata fatta una fusione per i due sistemi e l'ultima edizione è intitolata UNIX and Linux System Administration Handbook 4th Edition. Sito ufficiale.
- Appunti di informatica libera by Daniele Giacomini.
Bellissima risorsa online completamente open source ed altrettanto completa. Come descrive il link, ideale per chi si avvicina al software libero ma anche non, dato che osservando l'indice generale si può osservare la quantità di argomenti trattati. Ottimo lavoro!
- Classic Shell Scripting by Arnold Robbins & Nelson H. F. Beebe.
Libro interamente orientato al Shell Scripting. Descrive le molte singole tool predefinte che si trovano all'interno di un sistema Unix, oltre ad insegnare ad implementare gli script. Consigliato soprattutto a chi si accinge a dover amministrare un sistema Unix o Unix-like.
Sicuramente ed indubbiamente un'ottima risorsa open source per imparare o famigliarizzare con il shell scripting!
Senza ombra di dubbio un'ottima guida di riferimento interamente in italiano per la programmazione di sistema sotto l'ambiente Linux. Consigliatissimo, al suo interno si trovano praticamente tutte le informazioni necessarie su quali funzioni usare e come usarle, spiega altrettanto molto bene le caratteristiche di funzionamento. Ottimo lavoro.
- Advanced Programming in the UNIX® Environment 2nd Edition by W. Richard Stevens.
Un ottimo libro che tratta la programmazione di sistema nell'ambiente Unix. Gli argomenti trattati sono l'I/O, i file system, gestione dei processi e threads, ICP, socket ed altro. Ottimo.
- The Linux Programming Interface: A Linux and UNIX System Programming Handbook by Michael Kerrisk.
Un ottimo handbook dedicato alla programmazione di sistema in Linux. Dal link è possibile accedere alla lista degli argomenti trattati, i quali sono spiegati molto bene ed è altrettanto accompagnato da molteplici esempi in C. Michael Karrish è attualmente il mainteiner del progetto man-pages. Senza dubbio un buon libro.
- The Definitive Guide to Linux Network Programming by Nathan Yocom, John Turner, John Turner & Keir Davis.
Un buon libro, adatto a chi vuole cominciare ad usare i socket di rete in Linux. Gli argomenti trattati vanno dai fondamenti di rete fino alla sicurezza, i concetti sono spiegati veramente bene come molti sono gli esempi in C. Altrettanto un buon libro. Sito ufficiale.
- Linux Process Manager by John O'Gorman.
Libro interamente dedicato alla gestione dei processi in C per Linux. Spiega in dettaglio e con chiarezza praticamente tutte le strutture, funzioni e macro usate dal sistema ed anche come usarle. Sicuramente un ottimo libro focalizzato all'argomento.
- Linux Device Drivers 3rd Edition by by Jonathan Corbet, Alessandro Rubini & Greg Kroah-Hartman.
Indubbiamente la guida di riferimento per molti sviluppatori di driver per il kernel Linux. La versione del kernel di riferimento è vecchia ma comunque al sito si può trovare il link ai cambiamenti della API, o in alternativa si può visitare il Change Log su Kernel Newbies.
- Essential Linux Device Drivers by Sreekrishnan Venkateswaran.
Un altro ottimo libro dei pochi in circolazione riguardo all'implementazione dei driver per Linux. A mio parere adotta un approccio più pratico rispetto a Linux Device Drivers, non mancano i molteplici esempi in C dei tipi di driver trattati.
Algoritmi e Programmazione
- The Art of Computer Programming by Donald E. Knuth.
Il libro è dedicato completamente all'analisi di algoritmi. Al suo interno vi si trova molta matematica quindi bisogna farsi trovare preparati.. A priori non insegna nessun linguaggio di programmazione e l'autore usa l'Assembly dell'architettura MIX per vari esempi di codice. Sicuramente un ottimo libro. Donald Knuth, oltre ad essere famoso per i volumi scritti, lo è altrettanto per i suoi lavori, tra cui TeX. Sito ufficiale del libro.
Libro consigliato a chi si avvicina al mondo della programmazione. L'approccio, come si può leggere dalla recensione di Savannah (link titolo), è a basso livello.
- The Practice of Programming by Brian W. Kernighan & Rob Pike.
Il libro è orientato alla programmazione in generale. Spiega con alguni esempi di codice i principali algoritmi (ricerca e ordinamento) usati e strutture dati, il debugging, la perfomance e portabilità di un programma, descrive non in maniera approfondita vari linguaggi di programmazione come il C, il C++ Java, Awk & Perl.
- Programming Pearls 2nd Edition by John Bentley.
Il libro raccoglie al suo interno molti esempi di soluzioni in C per algoritmi di ricerca, ordinamento e strutture dati. Per maggiori informazioni si può consultare il sito ufficiale.
- Write Great Code, Volume 2: Thinking Low-Level, Writing High-Level by Randall Hyde.
Come da titolo, il primo volume spiega molto bene come e perché lavora quello che ci limitamo a chiamare "computer". Gli argomenti trattati sono le varie rappresentazioni numeriche, come vengono interpretate dalla CPU, così come le istruzioni, i vari tipi di dati (interi e stringhe di caratteri), organizzazione della memoria e vari dispositivi di I/O. Il secondo volume è interamente dedicato alla programmazione ed ottimizzazione del codice, con molteplici esempi in Assembly e C.
- Hacker's Delight by Henry S. Warren.
Il titolo può essere disorientativo ma in fin dei conti è realistico. Se si è interessati ad approfondire la implementazione di algoritmi usando la logica orientata bit a bit con conseguente ottimizzazione del codice, direi che questo è il libro giusto. Tutti gli esempi riportati sono accompagnati altrettanto da codice C. Al sito ufficale del libro si può altrettanto scaricare l'indice, la correzione d'errata ed il codice sorgente degli esempi in C. Ottimo libro, consigliato soprattutto ai programmatori di firmware.
Linguaggi di Programmazione
- Assembly Language Step By Step - Programming with Linux by Jeff Duntemann.
Un ottimo libro per chi si avvicina alla programmazione Assembly x86 con Linux dato che l'approccio è tale. L'assembler usato è NASM, quindi si usa la sintassi Intel.
- Professional Assembly Language by Richard Blum.
Il libro è molto simile a quello di Jeff Duntemann, con la differenza che invece di NASM come assembler viene usato GAS, l'assembler GNU che fa parte delle gnu-binutils quindi viene usata la sintassi AT&T. Altrettanto un buon libro per chi si avvicina all'Assembly x86, sempre su Linux.
Qui si possono trovare più info sull'Assembly x86.
- The Art of Assembly Language by Randall Hyde.
Fantastica risora online assolutamente free messa a disposizione da Randall Hyde per imparare l'Assembly x86 anche ad alto livello (High Level Assembly) tanto per lo sviluppo sotto Windows come Linux. Invito ai più interessati a farsi un giro al suo interno.
- C Programming Language (2nd Edition) by Brian W. Kernighan & Dennis M. Ritchie.
Scritto dagli inventori del linguaggio C, è indubbiamente il testo di riferimento per conoscere i fondamenti dell' ANSI C. Nelle sue quasi 300 pagine spiega molto bene con chiarezza e senza dispersione alcuna le caratteristiche del linguaggio e la libreria standard. È accompagnato da molti esempi ed ogni capitolo è seguito anche da una serie di esercizi. È un mio parere, ma secondo me è un libro che non può mancare nella libreria tecnica di tutti quelli che programmano o si trovano a dover studiare il C. Sito ufficiale.
- The C++ Programming Language by Bjarne Stroustrup.
Anche in questo caso l'autore è il creatore del linguaggio C++, quindi sicuramente uno dei migliori (se non il miglior libro) da usare per imparare il C++. Consigliato senza ombra di dubbio. Sito ufficiale.
- C++ Primer Plus by Stephen Prata.
Sicuramente una ottima alternativa al libro di Bjarne Stroustrup per studiare ed imparare il C++. Altrettanto altamente consigliato!
Harvey Deitel & Paul Deitel sono molto conosciuti per i loro libri scritti riguardo al C, C++, Java e non solo linguaggi di programmazione. C How to Program 5th Edition è un ottimo libro a mio parere, immagino anche C How to Program 6th Edition. Io ho studiato Java su Java How to Program 6th Edition, al tempo mi sono trovato molto bene, gli argomenti sono spiegati con molta chiarezza ed ogni esempio è altrettanto accompagnato con esempi di codice.
- Thinking in Java by Bruce Eckel.
Un ottimo libro consigliato per studiare il linguaggio di programmazione Java. Il libro è molto conosciuto e molto usato.
Sicurezza Informatica
- The Art of Exploitation 2nd Edition by John Erickson.
Sicuramente uno dei migliori libri sull'argomento, interamente orientato a Linux. Il libro non insegna ad usare tools vari finalizzati alla sicurezza informatica, ma bensì insegna a come idearli e programmarli, da dove arrivano i software bugs, come trovarli ed implementarli ed altrettanto i segreti di quello che sta dietro al computer hacking. Il tutto è basato sulla programmazione Assembly e C, vi abitua ad usare GDB e non solo, a far più attenzione all'ordine di dichiarazione delle variabili nel codice dipendendo dall'endianess dell'architettura con cui si lavora, a come usare un pò i Berkley socket, le librerie pcap e altro ancora... Come molti altri anche lui accompagna la lettura con molti esempi di codice, altrettanto scaricabile dal sito linkato.
È stato il mio secondo libro che ho comprato relazionato ai computer, ero spinto dalla curiosità e me ne ha tolte parecchie sull'argomento, ma mi sono fermato lì, forse mi piacciono di più i circuiti elettronici. :) Ho un affetto particolare per lui perché lo considero davvero un ottimo libro. Tuttavia, questa recensione non vuole essere un incorraggiamento a fare stupidaggini con il computer perché non apprezzo chi le fa, ma la sua lettura apre gli occhi a molti dettagli che spesso e volentieri passano inosservati. Se non ricordo male ha anche contribuito alla correzzione di vari bug su Linux..
- The Shellcoder's Handbook: Discovering and Exploiting Security Holes by Jack Koziol, David Litchfield, Dave Aitel, Chris Anley, Sinan Eren, Neel Mehta & Riley Hassell.
Sicuramente un altro buon libro simile a quello di John Erickson. Non è però orientato solamente a Linux ma anche verso Windows, Solaris ed altri sistemi operativi.
Conclusioni
La scelta e la valutazione di un libro dipende comunque dalle esigenze e da cosa cerca il lettore. I libri che io considero validi per studiare possono altrettanto esserlo o non esserlo per un'altra persona, o perché troppo avanzati o per qualsiasi altro motivo, quindi le recensioni scritte mi piacerebbe fossero lette anche da questo punto di vista. Io solitamente quando mi trovo a cercare un libro, cerco il più possibile informazioni a riguardo, lo confronto con informazioni ottenute rispetto ad altri libri e poi faccio la mia scelta.
Un altro ottimo libro sui sistemi operativi è Operating Systems Design and Implementation by Andrew S. Tanenbaum & Albert S.Woodhull. Putroppo non mi è mai capitato per mano, non l'ho mai aperto e non posso darne una valutazione più approndita. Stesso discorso per i libri orientati a Windows ed altri OS. Io quest'ultimo lo uso solo per LTSPICE, niente di più, meglio dire che non conosco libri a riguardo.
Con questo voglio quindi invitare a inviare segnalazioni e recensioni per MP riguardo a libri che non sono elencati in questo articolo. Saranno pubblicate come altrettanto l'autore della segnalazione e recensione.
Come al solito, sono ben accetti consigli ed opinioni. Spero che gli utenti possano apprezzare l'articolo.
Per ultimo, si ringrazia admin per l'editing dell'immagine principale. :)
Grazie, Simone