Se sei un principiante e vuoi pubblicare le tue domande: entra nel nostro subreddit in Italiano dedicato al C++, scrivi un messaggio di testo e taggalo con flair “principanti”:
Ricordati che un bravo Neofita non pubblica post del tipo “mi risolvete l’esercizio?”, ma piuttosto pone domande dettagliate su quello che non ha capito 🙂
Una domanda ricorrente è “da dove iniziare per imparare a programmare in C++?”. Esistono tante scuole di pensiero e risposte possibili, anche noi di ++it desideriamo dare la nostra interpretazione.
Molto dipende dal livello di programmazione e dalle conoscenze di chi pone la domanda, se già si conoscono altri linguaggi, se si desidera approfondire argomenti avanzati, ecc. La pagina è quindi divisa in diverse sezioni che aiutano ad orientarsi in base ad esigenze e argomenti differenti.
Tre raccomandazioni importanti:
- Dove possibile, tendi sempre a utilizzare risorse moderne (>= C++11)
- Non spaventarti se la maggior parte delle risorse sono in Inglese (ma ti indicheremo quelle in italiano)
- Imparare a programmare in C++ ≠ Imparare a programmare in C
Per programmare in C++ non serve conoscere il C
Ebbene sì, sfatiamo un mito! Il C è quasi un subset del C++ ma in realtà è un linguaggio molto più scarno, privo di moltissimi costrutti e meccanismi supportati dal C++. Il C è un linguaggio adatto a fare Systems Programming, il C++ è un linguaggio di più alto livello ma adatto a fare sia Systems Programming che Application Programming. Programmare in C++ con uno stile C-like è come comprare una PS4 e usarla solo per giocare con dei titoli della PS3!
Qualche esempio concreto? Si vedono spesso in giro stringhe fatte come char*, quando invece potrebbe andar benissimo una std::string. Oppure array dinamici gestiti manualmente con T*, quando un std::vector<T> è quasi sempre una scelta appropriata.
Se non ti abbiamo ancora convinto leggi questo breve articolo di Bjarne Stroustrup! Oppure dai un’occhiata a questa presentazione di Kate Gregory!
Una raccomandazione sul materiale pre-C++11
Come forse saprai il C++ si è trasformato con l’introduzione del C++11, mutando molti idiomi e semplificandosi tantissimo. Per questa ragione molti libri “classici” del passato (pre-C++11) ora mancano delle “ultime novità”. Tuttavia, alcuni sono ancora dei validissimi strumenti (li indicheremo con la dicitura “old but gold“).
La nostra raccomandazione è di imparare partendo dal nuovo standard e solo in seguito – eventualmente – spingersi su materiale “più datato”. In questo modo si avranno più strumenti per adattare il vecchio al nuovo. Esistono delle eccezioni ovviamente, ma in questa fase transitoria occorre un po’ di pazienza! Quindi in caso di dubbi valgono le raccomandazioni di sempre: cercare su Internet, postare una domanda sul forum, ecc.
Catalizzatori di risorse/news
Il bravo C++-ista è sempre interessato all’evoluzione del linguaggio e delle tecnologie ad esso correlate! Oltre a seguire italiancpp, segue i siti internazionali più importanti (si raccomanda di seguirli anche su twitter):
Reference ufficiali
Da dove iniziare?
Segue il set minimo di risorse consigliate per iniziare. Abbiamo classificato alcune richieste comuni in cui il lettore potrà identificarsi. Col tempo e grazie anche al feedback degli utenti ne inseriremo delle altre. Le sezioni successive aiuteranno ad “andare oltre”.
Vorrei un’introduzione di alto livello sul linguaggio e sulla sua evoluzione
- Libro gratuito: “C++ Today” di Jon Kalb & Gašper Ažman
Desidero imparare a programmare e ho scelto il C++ come linguaggio
- Libro: “Programming – Principles and Practice Using C++ (Second Edition)” di Bjarne Stroustrup (il creatore del C++)
Sono un programmatore, vorrei imparare il C++
- Libro: “C++ Primer (5th Edition)” di Lippman, Lajoie, Moo
- Libro (alternativa con taglio più universitario): “C++11 for Programmers” dei fratelli Deitel
- Libro: “Effective Modern C++” di Scott Meyers (Esiste la versione italiana)
Sono un programmatore C++ “old-school” (pre-C++11), vorrei modernizzarmi
- Libro: “A tour of C++” di Bjarne Stroustrup
- Libro: “Effective Modern C++” di Scott Meyers (Esiste la versione Italiana)
Sono un programmatore C#, vorrei imparare il C++
- Libro grautito: “C++ Succinctly” di Michael McLaughlin
Sto imparando il C++11/C++14/C++1z, cosa non devo perdermi?
- Libro: “Effective Modern C++” di Scott Meyers (Esiste la versione italiana)
Beyond the basics
Se sei arrivato/a qui hai comunque letto “Effective Modern C++” di Scott Meyers (Esiste la versione italiana).
Perfezionare la conoscenza del linguaggio
- Libro: “The C++ Programming Language (4th Edition)” di Bjarne Stroustrup (Esiste la versione italiana)
Best Practices & Idiomi
- Documento a contributo aperto mantenuto dallo standard: C++ Core Guidelines
- Libri (old but gold): pubblicazioni di Herb Sutter
Approfondire lo studio della STL
- Serie di Video: “Standard Template Library” di Stephen T. Lavavej
- Serie di Video: “Advanced STL” di Stephen T. Lavavej
- Libro: “The C++ Standard Library (2nd Edition)” di Nicolai M. Josuttis
- Libro (old but gold): “Effective STL” di Scott Meyers
Argomenti avanzati
Programmazione multi-thread & multi-core
- Libro: “C++ Concurrency in Action” di Anthony Williams (sconto Mannings: cplusromeug)
- Libro gratuito: “Parallel Programming with Microsoft Visual C++” di Colin Campbell & Ade Miller
- Libro: “C++ AMP: Accelerated Massive Parallelism with Microsoft Visual C++” di Kate Gregory & Ade Miller
Template Metaprogramming
- Libro (old but gold): “C++ Templates – The Complete Guide” di Nicolai Josuttis & David Vandevoorde
- Libro: “Advanced Metaprogramming in Classic C++” di Davide Di Gennaro
- Libro (old but gold): “C++ Template Metaprogramming” di David Abrahams
Altre risorse online
- C++, C++11, C++14 FAQs
- C++ Samples: un repository open con idiomi e pattern tipici