Riporto in modo quasi integrale un post molto interesante trovato su un forum.
Parla di come imparare bene il C++,suggerendo interessanti libri. Io mi sono gia` “procurato” tutti questi libri, potete trovarli anche voi, con un pa`² di pazienza.
Il C++ e` un linguaggio molto vasto: impararlo tutto (ovverosia: imparare tutti gli elementi del linguaggio, da quelli di base a quelli pia`¹ avanzati, e comprenderne le implicazioni profonde) e` gia` un’impresa che richiede degli anni. Fortunatamente per programmare bene in C++ non e` necessario conoscerne ogni funzionalita` , e a volte e` molto meglio conoscere il linguaggio parzialmente, ma avere studiato le tecniche avanzate limitatamente a quella porzione di linguaggio, piuttosto che avere un’infarinatura di tutto il linguaggio completamente scorrelata dalle problematiche tecniche e pratiche. E’ qui che entra in gioco un approccio ciclico nell’apprendimento. L’ideale e`:
1) Imparare un sottoinsieme di funzionalita` del linguaggio
2) Fare pratica relativamente a cia`² che si e` imparato
3) Imparare le tecniche di programmazione avanzate relative a quell’insieme
4) Goto 1.
Suddividere il linguaggio negli “insiemi” giusti e` uno dei compiti pia`¹ difficili per un insegnante o per un divulgatore, tanto che solitamente gli autori falliscono miseramente, e nessuno in questo campo (me compreso, ovviamente) pua`² dire di avere idee definitive a riguardo.
Molti libri, ad esempio, si affannano a spiegare prima il “sottoinsieme C” del C++, per poi passare al resto. Con l’andare del tempo sono sempre pia`¹ convinto (assieme a tanti altri personaggi pia`¹ in gamba di me - Stroustrup compreso, il quale esprime ancor meglio la sua posizione qui) che sia un approccio dannoso, che non fa altro che confondere le idee al povero studente e imbottirlo di nozioni e tecniche inutili, che dovranno essere abbandonate e rispiegate da zero in un secondo tempo.
Il lavoro migliore che abbia mai visto in questo senso, invece, e` senz’altro quello di Koenig (stavolta John non c’entra, parlo del leggendario Andrew
), con il suo Accelerated C++: un libro coraggioso ed efficace, che non si fa scrupoli a partire subito con stream, contenitori STL, e funzionalita` avanzate, e riesce comunque a risultare scorrevole, pratico, e semplice da leggere per il neofita. Tutto cia`² lo rende ai miei occhi il testo di base dall’approccio metodologico pia`¹ rivoluzionario, fra tutti quelli in circolazione.
Se si vuole cercare una guida d’ingresso pia`¹ convenzionale, si possono considerare i testi di Eckel della serie Thinking in C++ (testi ben fatti e gratuiti - combinazione pia`¹ unica che rara per la manualistica tecnica), o il lavoro eccellente di Stanley Lippman C++ Primer (rigorosamente 5°edizione).
La guida di riferimento imprescindibile, invece, e` Lo Stroustrup [genuflettersi, prego], terza edizione (possibilmente in inglese: la versione italiana e` indietro di svariati errata-corrige). Questo testo, che non pua`² essere usato come “libro di ingresso”, deve essere consultato ad ogni “fine ciclo”, per approfondire nel dettaglio gli elementi del linguaggio che sono stati studiati.
E’ fondamentale anche disporre di una buona guida introduttiva alla programmazione per templates (come l’ottimo C++ Templates: The Complete Guide, di Vandevoorde), e di una solida guida di riferimento per la libreria standard (come quella di Josuttis).
Tuttavia lo studio del linguaggio non si ferma qui. Esistono maree di idioms, stili, problemi, e affini che non vengono spiegati dai Testi Sacri Di Riferimento, e richiedono invece un grande approfondimento se non si vuole perdere tempo inutilmente.
I tre “Must Have” in questo campo sono i testi del mitologico Scott Meyers, cioe` l’intera collana degli Effective: Effective C++, More Effective C++ e Effective STL. Chi non ha la nausea a studiare incollato allo schermo, pua`² comprare la versione onnicomprensiva su CD
Solo dopo (percha`© danno per scontato la lettura dei testi precedenti) si possono affrontare i testi “eccezionali” di Herb Sutter Exceptional C++, More Exceptional C++, e soprattutto Exceptional C++ Style.
L’insieme di questi testi fornisce gia` un background del linguaggio “coi fiocchi”. Tuttavia esistono libri che trattano anche di argomenti pia`¹ avanzati, e che sono necessari per compiti particolari, ad esempio l’espansione della (carente) libreria standard del C++.
Un testo che introduca alla libreria boost e` fondamentale - vedi, ad esempio Beyond C++ Standard Library, An Introduction To Boost, di Carlsson.
Seguono a ruota il preparatorio C++ Template Metaprogramming del mai-abbastanza-riverito Abrahams, e lo sconvolgente Modern C++ Design di Andrei Alexandrescu, da leggersi il congiunzione con l’esplorazione della libreria Loki, nella speranza che un giorno i compilatori riescano a svolgere il loro lavoro tanto decentemente da farci apprezzare il policy based design senza rischiare suicidi di massa.