Guida I migliori libri per imparare e approfondire il C

Max Fridman

Community Manager
Amministratore
8 Agosto 2010
7,181
695
7,052
3,235
Ultima modifica:
In questo articolo scopriremo quali sono i libri più indicati per lo studio e l'approfondimento del linguaggio di programmazione C.

Una delle domande che ricorre spesso all'interno del forum è "Da quale libro posso cominciare a studiare il C?".

Per questo motivo, abbiamo deciso di stilare una lista dei libri che abbiamo trovato maggiormente utili. Questa, è stata suddivisa per categorie:
  • Per chi inizia a programmare e sceglie il C come primo linguaggio (senza basi di programmazione);
  • Per chi vuole imparare (con basi di programmazione);
  • Per chi vuole approfondire.
c.png





1    I migliori libri per cominciare a programmare in C



1.1    Il linguaggio C. Fondamenti e tecniche di programmazione (Paul J. Deitel e Harvey M. Deitel)


Comprando Deitel è difficile sbagliare. Questo libro è fatto davvero molto bene, parte dalle nozioni elementari di informatica e dalla descrizione delle varie fasi dietro la creazione di un programma in C (scrittura del codice, pre-processing e compilazione, linking, …) per poi introdurre il linguaggio commentando accuratamente ogni aspetto descritto. Ogni paragrafo è correlato da suggerimenti che possono riguardare le buone pratiche di programmazione, gli errori comuni o osservazioni dal punto di vista dell’ingegneria del software ed alla fine di ogni sezione vi sono domande ed esercizi per essere sicuri di aver capito qualcosa di quello che si è letto. Un altro punto a suo favore è che è aggiornato allo standard C11 e credo sia l’unico libro introduttivo in italiano ad esserlo.



1.2    Programmazione in C (Kim N. King)


Questo è il secondo ed ultimo libro di questa categoria che vorremmo consigliare, parte dai fondamenti della programmazione e introduce il linguaggio in maniera chiara e discorsiva. Si serve di esempi ed esercizi per aiutare a fissare anche i concetti più articolati e sono presenti, inoltre, sezioni Q&A in ogni capitolo utili a rispondere a molte delle domande che sorgono spontanee leggendo il testo o anche ad approfondire determinati aspetti del linguaggio. Un contro di questo libro è che è aggiornato alla versione C99 del linguaggio.




2    I migliori libri per imparare il C



Per chi ha già familiarità con la programmazione e vuole imparare il linguaggio C, vi consigliamo questo libro che rientra nella categoria "reference".


2.1    Il linguaggio C. Principi di programmazione e manuale di riferimento (Brian W. Kernighan e Dennis M. Ritchie)

Non si dilunga molto sulle nozioni di programmazione ma ti parla direttamente dei vari aspetti del linguaggio, è un buon compromesso in termini di lunghezza/contenuti utili.




3    I migliori libri per approfondire il C



Per chi invece già conosce il linguaggio C e vuole approfondire il linguaggio, non ci sono libri in italiano. Tuttavia un libro che ci sentiamo di consigliare è Modern C.


3.1    Modern C (Jens Gustedt)

Modern C è disponibile gratuitamente con licenza Creative Commons sul suo sito ufficiale, questo libro è una miniera per chi programma in questo linguaggio, raccoglie al suo interno una serie infinita di buone pratiche di programmazione e osservazioni su ogni singolo dettaglio del linguaggio, a partire dalle cose più elementari sino alle più complesse trattando anche le features introdotte da C11 e C17. Non credo che dopo aver letto questo libro avrete bisogno di leggerne altri.

4    Altri consigli su Libri da leggere su Informatica e Programmazione



 
Modern C ha licenza Creative Commons. Più che un link ad Amazon, io consiglio di mettere il link al sito ufficiale dove è anche possibile scaricarlo gratuitamente. Sulla qualità come libro di approfondimento non mi esprimo perché non letto e ne l'ho sfogliato più di tanto, ma sembra ritrattare gli argomenti partendo dalle basi (e.g., cos'è una varibile, cos'è l'if, il for, ecc...). Gli altri libri invece confermo anch'io che sono molto validi, li ho citati (in modo meno descrittivo) in un altra guida in rilievo di questa sezione.
 
Modern C ha licenza Creative Commons. Più che un link ad Amazon, io consiglio di mettere il link al sito ufficiale dove è anche possibile scaricarlo gratuitamente. Sulla qualità come libro di approfondimento non mi esprimo perché non letto e ne l'ho sfogliato più di tanto, ma sembra ritrattare gli argomenti partendo dalle basi (e.g., cos'è una varibile, cos'è l'if, il for, ecc...). Gli altri libri invece confermo anch'io che sono molto validi, li ho citati (in modo meno descrittivo) in un altra guida in rilievo di questa sezione.
Yep, ritratta tutti gli argomenti trattati nei libri introduttivi in maniera molto diversa, imho è molto meno didattico. Per ogni topic fa una riesamina dei vari aspetti, del tipo:
Capitolo array: "....Ci sono due tipi di array: array a lunghezza fissata (FLA) e array a lunghezza variabile (VLA)...
-Takeaway: i VLA non possono avere inizializzatori
-Takeaway: un array la cui lunghezza non è una espressione costante intera è un VLA"

e via scorrendo.
In sostanza prende un argomento ed invece di descriverlo nel complesso non fa altro che scorporare le varie caratteristiche e spiegarle singolarmente.
La parte che secondo me merita veramente e che non è trattata negli altri libri è quella relativa al Level 3 dove puoi trovare le varie aggiunte e modifiche fatte con C11 e C17 tipo type generic programming e quindi cosa è un _Generic, come utilizzare i _Generics con le funzioni inline può portare ad ulteriori ottimizzazioni, ecc.. Ma anche verso la fine del Level 2 ci trovi cose interessanti. Anche se non trattano in maniera esaustiva tutte le nuove aggiunte ti da degli spunti da cui puoi partire per approfondire
 
Modern C ha licenza Creative Commons. Più che un link ad Amazon, io consiglio di mettere il link al sito ufficiale dove è anche possibile scaricarlo gratuitamente. Sulla qualità come libro di approfondimento non mi esprimo perché non letto e ne l'ho sfogliato più di tanto, ma sembra ritrattare gli argomenti partendo dalle basi (e.g., cos'è una varibile, cos'è l'if, il for, ecc...). Gli altri libri invece confermo anch'io che sono molto validi, li ho citati (in modo meno descrittivo) in un altra guida in rilievo di questa sezione.

Grazie per la segnalazione ho corretto e inserito anche il link gratuito :)
 
Ultima modifica:
Sapreste dirmi se qualcuno di questi libri, parla anche di liste, grafi e alberi?
 
Sapreste dirmi se qualcuno di questi libri, parla anche di liste, grafi e alberi?
No, nessuno due libri in questione tratta le strutture dati e gli algoritmi. Nel Deitel trovi qualche cenno sugli algoritmi di ordinamento nel capitolo degli array ma nulla di che. Se vuoi c'è il libro di Sedgewick "Algorithms in C" che trovi gratuitamente in rete in lingua inglese, altrimenti su Amazon c'é la versione tradotta in italiano. Non ho mai letto quel libro in particolare ma sempre di Sedgewick ho letto "Algorithms" ed è una garanzia, i suoi libri sono tra i testi consigliati in moltissime università, anche se in italia solitamente consigliano "Introduzione agli algoritmi e strutture dati" di Cormen perché tradotto in italiano.
 
No, nessuno due libri in questione tratta le strutture dati e gli algoritmi. Nel Deitel trovi qualche cenno sugli algoritmi di ordinamento nel capitolo degli array ma nulla di che. Se vuoi c'è il libro di Sedgewick "Algorithms in C" che trovi gratuitamente in rete in lingua inglese, altrimenti su Amazon c'é la versione tradotta in italiano. Non ho mai letto quel libro in particolare ma sempre di Sedgewick ho letto "Algorithms" ed è una garanzia, i suoi libri sono tra i testi consigliati in moltissime università, anche se in italia solitamente consigliano "Introduzione agli algoritmi e strutture dati" di Cormen perché tradotto in italiano.
Grazie mille, il libro Algorithms in C di Sedgewick è proprio quello di cui avevo bisogna ;)
 
Ciao a tutti

sono arrivato agli array in C vedendo dei video, volevo comprare "Il linguaggio c fondamentali e tecniche"
però non so se va bene dato che le recensioni su amazon sono tutte scritti da universitari quindi non so se riuscirei a comprendere dato che sono più piccolo

mi avevano consigliato anche questo libro infatti lo stavo per cominciare a leggere però poi ho visto questa release:

il libro è https://bit.ly/33Ac3LF

secondo voi qual è il migliore??
e il più semplice.
 
Ciao a tutti

sono arrivato agli array in C vedendo dei video, volevo comprare "Il linguaggio c fondamentali e tecniche"
però non so se va bene dato che le recensioni su amazon sono tutte scritti da universitari quindi non so se riuscirei a comprendere dato che sono più piccolo

mi avevano consigliato anche questo libro infatti lo stavo per cominciare a leggere però poi ho visto questa release:

il libro è https://bit.ly/33Ac3LF

secondo voi qual è il migliore??
e il più semplice.
Il libro "Il linguaggio C. Fondamenti e tecniche di programmazione" è un libro più didattico che tecnico, viene consigliato nelle università ed è molto apprezzato dagli studenti proprio perché parte da zero e contiene esercizi utili a fissare i concetti. I due autori sono dei giganti del settore, hanno scritto innumerevoli libri di programmazione per neofiti. Il libro che hai linkato tu può andare bene uguale ma è già molto più tecnico e meno didattico
 
  • Mi piace
Reazioni: Max Fridman
Ultima modifica:
Per quanto riguarda i libri per imparare a programmare in C da neofita o da esperto.
Il Kernighan-Ritchie 2a edizione (K&R2) è molto conciso e richiede di saper già programmare discretamente, NON (NON!) è assolutamente didattico e non è quindi adeguato a chi inizia da zero, è un ottimo riferimento del C89 (=ISO C90), il "testo sacro" del C che ogni programmatore C dovrebbe avere e leggere.
Il Deitel&Deitel è completo e considera sia il C89 sia il C99, ha un approccio meno canonico nella presentazione degli argomenti, ma è forse il più utilizzato per imparare da zero.
Il King è un po' più approfondito del Deitel (C89 e C99), vi ho trovato anche diversi riferimenti e citazioni della corposa FAQ sul Linguaggio C di Steve Summit (la FAQ è sia gratuita su Internet, sia un libro che rispetto alla versione gratuita ha qualcosa in più), è un po' più difficile ma lo consiglierei per chi volesse avere una competenza più approfondita. Si può considerare un K&R2 rivisto per la didattica (ha 805 pagine rispetto alle 217 del K&R2), ma anche un testo di riferimento.
CONSIDERAZIONI SULLE COMPETENZE DI MATEMATICA NECESSARIE
A parte alcuni esercizi (che si possono anche saltare) dove si richiede qualche conoscenza di matematica di base (base anche per le scuole superiori), non servono altre conoscenze scientifico-tecniche per studiare questi libri dall'inizio alla fine. In ogni caso per scrivere software con elaborazioni matematiche importanti è necessario una competenza che va ben oltre il saper programmare e conoscere le funzioni matematiche, un esempio per tutti è la rappresentazione interna dei numeri, in particolare i floating point (quelli "con la virgola") che, se usati senza approfondita conoscenza, possono portare a problemi "strani". Un conto è fare un errore di calcolo in un videogioco e un altro farlo in un programma di controllo di un'apparecchiatura medica. Per questo esistono corsi universitari di "Calcolo numerico".
Bello il Sedgewitck di algoritmi (sono 2 libri, il secondo è interamente sui grafi), ma è uno step decisamente (!) più impegnativo, da affrontare solo DOPO aver imparato a programmare BENE (a parte qualche algoritmo di ordinamento, quelli più semplici).
 
  • Grazie
Reazioni: Max Fridman