Libri/ I testi per apprendere il C/C++

C e C++ sono linguaggi che ancor oggi rivestono grande importanza, e non solo nella programmazione a basso livello. Sono tantissimi i volumi a loro dedicati, e fra questi si trovano due grandi classici


I testi classici di riferimento per i programmatori C e C++ sono rispettivamente il Kerninghan & Ritchie e lo Stroustroup, scritti dagli stessi creatori dei linguaggi.
Per un approccio più aggiornato e moderno è consigliabile però rivolgersi ai testi di Herbert Schildt:

* Il linguaggio C: Guida Completa (IIIa edizione) – McGraw-Hill, 2000 (89.000 Lire)
* Guida al C++ (IIa edizione) – McGraw-Hill, 2000 (75.000 Lire)

Sin dalla prima edizione di “Il linguaggio C” lo stile di Schildt mi ha colpito per nitore e precisione, e ha ricoperto un ruolo fondamentale nella mia formazione di sviluppatore (quasi otto anni fa).
L’approccio al linguaggio è decisamente accademico, e potrebbe risultare leggermente ostico a chi provenga da esperienze hobbistiche o autodidattiche. Ma, superato l’impatto iniziale, la sinteticità e la precisione dell’autore divengono funzionali all’obiettivo di apprendere in poco tempo le basi della programmazione.
Aneddoti, resoconti storici e annotazioni di stile rendono la lettura interessante e divertente anche per chi semplicemente voglia ampliare la base culturale della sua formazione tecnica.
Questa nuova edizione è stata migliorata in molti punti; in particolare viene specificato nei dettagli il nuovo standard C99 che rimpiazza l’ormai obsoleto C89.

Il pesante volume (quasi 800 pagine) è diviso in sei sezioni.
Nella prima vengono gettate le basi della struttura e della sintassi del linguaggio.
La seconda presenta invece il nuovo standard venuto alla luce lo scorso anno dopo quasi un lustro di gestazione.
La terza approfondisce la conoscenza con le librerie per ampliare la classe di funzioni a disposizione del programmatore.
Queste tre parti rappresentano un ottimo manuale di riferimento per il programmatore, e lo rendono il testo ideale da tenere sulla scrivania per una consultazione rapida.
Nelle ultime tre vengono trattati argomenti approfonditi e utili anche per il programmatore esperto.
Nella quarta parte, infatti, alcuni algoritmi classici (come quelli per il sorting e la gestione delle strutture dati dinamiche) vengono riproposti nella loro versione C; pregevoli gli accenni agli algoritmi per l’intelligenza artificiale e la gestione del parsing delle espressioni.
Nella quinta parte viene toccato (debolmente) il tasto della programmazione in ambiente Windows 2000 con le tecniche standard C. Il capitolo è di sicuro rilievo, ma rappresenta più
che altro un accenno di problematiche che da sole meritano intere enciclopedie; certamente però può rappresentare un punto di partenza per chi decida di approfondire la conoscenza delle API di Windows e del suo kernel senza ricorrere ai classici strumenti di sviluppo visuale.
Più calzanti, forse, i capitoli dedicati al software engineering e al test & debug delle applicazioni, argomenti spesso snobbati nei manuali e che invece dovrebbero far parte del bagaglio di ciascun programmatore.
L’ultima parte affronta la realizzazione di un progetto complesso, un interprete C scritto in C, che coglie il duplice obiettivo di mostrare nella pratica i concetti e le strutture esposte nei precedenti capitoli e di affrontare e risolvere alcune delle problematiche del linguaggio in cui si incorre normalmente nella realizzazione di un progetto di dimensioni estese.

Il mio scetticismo nei confronti delle traduzioni dei manuali tecnici trova putroppo alcuni (sporadici) riscontri anche in questo caso: infatti la manipolazione dei “code snippet” da parte del traduttore può portare effetti indesiderati.
Qui troviamo alcune imprecisioni: a pagina 24 il listato di un programma e relativo output sono stati rimpiazzati dalla copia degli esempi precedenti; a pagina 84 vengono citate due stringhe che dovrebbero essere differenti esclusivamente per la presenza di un carattere blank, che però è scomparso; in un esempio di pagina 187 nell’header di una funzione viene dichiarata una fantomatica variabile “o”, ma nel corpo si usa invece la variabile “c”…
Errori di questo genere, che fanno sorridere il lettore esperto, possono confondere il principiante. Per fortuna, anche se il libro è sprovvisto di CD-ROM di esempi, è possibile scaricarne il codice sorgente dal web.
Sembra invece esente da queste pecche la “Guida al C++”, il prossimo volume che andiamo a trattare.


Anche se il linguaggio C è tutt’ora usatissimo per la sua potenza e velocità, gli standard di programmazione recenti impongono l’uso di uno stile più elegante, leggibile e riusabile. Indubbiamente il compromesso migliore tra le due istanze è rappresentato dal C++. Più astratto e ricco di espressività, ma ugualmente veloce e capace di sintesi, è il linguaggio di Windows per eccellenza e di Unix per adozione.
L’Open Source può vantare ottime implementazioni free su licenza GNU come il DJGPP, che grazie all’ambiente RHIDE (basato sulle librerie Turbo Vision… di dieci anni fa circa) può insidiare la posizione di ambienti di sviluppo più blasonati e costosi, specie nell’ambito didattico.

Il testo di Schildt sviluppa il discorso sul potente strumento in poco meno di 650 pagine. Partendo dalla storia di questo linguaggio l’autore si muove verso le fondamenta strutturali e sintattiche (seguendo un percorso collaudato) e introduce le classi solo dopo aver specificato tutte le caratteristiche nei primi dieci capitoli. Anzi, in un passaggio fa notare che, nonostante il supporto per le classi, il C++ permette di continuare a scrivere con uno stile essenzialmente procedurale.

La comunità di sviluppatori C/C++ sta facendo un grande sforzo per affrancarsi dall’approssimatività geniale e disordinata che l’ha sempre caratterizzata, e che ha reso spesso criptico e non riciclabile il codice prodotto.
I nuovi standard dovrebbero invitare a servirsi sempre di più della struttura a oggetti, per avvicinarsi anche allo stile Java, di cui il C++ rappresenta il naturale complemento in termini di ambiti applicativi.

Dal capitolo undici in poi si parla di classi, e vengono approfonditi i temi fondamentali della programmazione Object Oriented come l’ereditarietà, il polimorfismo e l’uso dei template e dell’overloading.
Pur non essendo indirizzato esclusivamente a un pubblico di programmatori esperti (secondo la classificazione McGraw-Hill) il testo si chiude dando notevole peso alle funzionalità avanzate come la gestione delle eccezioni, l’uso dei namespace (introdotti da poco nello standard C++) e gli operatori di casting.
Chiude il libro un interessante approfondimento sulle Standard Template Libraries che evitano al programmatore il gravoso compito di creare ex novo le sue classi per la gestione delle strutture dati basilari.

Il metodo didattico adattativo (per trials & errors) appare molto convincente e facilita l’apprendimento: dapprima l’autore sottopone del codice che nelle intenzioni dovrebbe raggiungere un certo scopo ma che si dimostra errato; quindi spiega quale sia il problema e suggerisce la correzione. Lo stesso meccanismo permette di evidenziare gli errori più classici in cui programmatore C/C++ incorre.

Nella pratica i due testi di Schildt sono un ottimo punto di partenza per tecnici con una formazione di alto profilo, e non sfigurerebbero sulla cattedra di un corso universitario.
L’astrazione da un ambiente di sviluppo specifico potrebbe rendere la loro consultazione meno agevole per chi intenda utilizzarli per lavoro. Indubbiamente però costituiscono il background ideale per affrontare la lettura di un manuale di un compilatore professionale, e per avvicinarsi allo sviluppo di applicazioni con una competenza di più ampio raggio.

Manrico Corazzi

La tua email sarà utilizzata per comunicarti se qualcuno risponde al tuo commento e non sarà pubblicato. Dichiari di avere preso visione e di accettare quanto previsto dalla informativa privacy

Chiudi i commenti