n° 215
Luglio 2017
Giugno 30, 2017, 11:29:10 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Come imparare C++ - A cura di Roberto Allegra  (Letto 15076 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
Salvatore Meschini
Non sempre ciò che viene dopo è progresso
Global Moderator
Hero Member
*****

Karma: +35/-12
Scollegato Scollegato

Messaggi: 3431


42°01.408' NORD - 13°25.315' EST


Mostra profilo WWW
« inserita:: Aprile 28, 2008, 10:49:54 »

Nota per i lettori. Questo post è stato scritto nel 2006, per tentare di dare una risposta abbastanza completa alla tipica domanda: "Che libro devo scegliere per imparare C++?". Visto che la domanda è tipica, il post è stato incluso come FAQ, e visto che è *molto* tipica, succede anche che quest'intervento venga riportato da altri siti.

La cosa mi va benissimo, e anche discussioni e aggiunte sono le benvenute, purché si riporti la fonte e non si spacci il contenuto del post per proprio, come nel tempo hanno fatto diversi blog - un esempio è quest'ultimo, tanto spudorato che mi ha spinto a scrivere questa nota.

Appena avrò un po' di tempo, infine, vedrò di aggiornare un po' i riferimenti e aggiungere qualche testo. In fin dei conti, sono passati quattro anni Sorriso.

Roberto

---

Tento di stendere la descrizione di un "percorso di conoscenza", che sia abbastanza valido da essere preso come riferimento anche per ogni richiesta futura del tipo: "Che libro devo scegliere per imparare C++?". Tento.

Il C++ è un linguaggio molto vasto: impararlo tutto (ovverosia: imparare tutti gli elementi del linguaggio, da quelli di base a quelli più avanzati, e comprenderne le implicazioni profonde) è già un'impresa che richiede degli anni. Fortunatamente per programmare bene in C++ non è necessario conoscerne ogni funzionalità, e a volte è 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 all'apprendimento. L'ideale è:

1) Imparare un sottoinsieme di funzionalità del linguaggio
2) Fare pratica relativamente a ciò che si è imparato
3) Imparare le tecniche di programmazione avanzate relative a quell'insieme
4) Goto 1.

Suddividere il linguaggio negli "insiemi" giusti è uno dei compiti più difficili per un insegnante o per un divulgatore, tanto che solitamente gli autori falliscono miseramente, e nessuno in questo campo (me compreso, ovviamente) può 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 più convinto (assieme a tanti altri personaggi più 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, è senz'altro quello di Koenig (stavolta John non c'entra, parlo del leggendario Andrew Sorriso ), con il suo Accelerated C++: un libro coraggioso ed efficace, che non si fa scrupoli a partire subito con stream, contenitori STL, e funzionalità avanzate, e riesce comunque a risultare scorrevole, pratico, e semplice da leggere per il neofita. Tutto ciò lo rende ai miei occhi il testo di base dall'approccio metodologico più rivoluzionario, fra tutti quelli in circolazione.

Se si vuole cercare una guida d'ingresso più convenzionale, si possono considerare i testi di Eckel della serie Thinking in C++ (testi ben fatti e gratuiti - combinazione più unica che rara per la manualistica tecnica), o buon il lavoro introduttivo di Stephen Prata C++ primer plus.

Dopo la guida di ingresso è necessario procurarsi un buon manuale di riferimento: un testo che è solitamente troppo ostico per essere affrontato da un neofita, ma che gli esperti tengono per anni sulla scrivania, e che consultano ogni volta che gli serva sviscerare gli aspetti del linguaggio nel dettaglio.
La Bibbia, in questo campo è lo Stroustrup [genuflettersi, prego], terza edizione (possibilmente in inglese: la versione italiana è tradotta molto bene, ma è indietro di troppi errata-corrige), uno di quei fortunati testi scritti dallo stesso autore del linguaggio di cui parlano. Oltre a trattare i dettagli del C++, Stroustrup si diverte a seminare interessanti elementi di riflessione - spesso buttandolì lì, sotto forma di spunti - che puntualmente si rivelano essere di grande ispirazione quando si è nello spirito di coglierli.
In alternativa, si può considerare un manuale a metà strada fra l'ingresso e il riferimento: l'eccellente lavoro di Stan Lippmann C++ Primer (assolutamente quarta edizione), ottima trattazione del linguaggio, tecniche e best practices.

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, cioè l'intera collana degli Effective: Effective C++, More Effective C++ e Effective STL. Chi non ha la nausea a studiare incollato allo schermo, può comprare la versione onnicomprensiva su CD.

Solo dopo (perché 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 già un background del linguaggio "coi fiocchi". Tuttavia esistono libri che trattano anche di argomenti più 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 è fondamentale - vedi, ad esempio Beyond C++ Standard Library, An Introduction To Boost, di Karlsson.

Il testo di Karlsson dev'essere considerato, appunto, un'introduzione, che illustra le magie di Boost senza svelare i trucchi che le permettono dietro le quinte. La parola magica, quasi sempre, è metaprogrammazione. In questo campo, la lettura di C++ Template Metaprogramming del mai-abbastanza-riverito Abrahams è impegnativa, ma molto gratificante. E un altro passo avanti è 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.

Parallelamente, sarà probabilmente necessario scegliere uno o più framework di riferimento che permettano la programmazione visuale, e altre amenità del genere. Qui la scelta è talmente ramificata che è impossibile fornire un insieme di riferimenti generali, e valgono le considerazioni fatte in altri post.

Se pensate che abbia esagerato nei testi di riferimento, tenete presente che ce ne sono tanti altri che non ho citato e sono di importanza fondamentale in campi più specifici, per capire l'approccio di fondo del C++, o per stupire i colleghi alle conferenze. Se qualcuno è interessato a questo genere di bibliografia "posso integrare". Sorriso

Roberto Allegra
Registrato

Salvatore Meschini

I moderatori invitano tutti gli utenti a rispettare il REGOLAMENTO.
Hyde
Global Moderator
Hero Member
*****

Karma: +47/-8
Scollegato Scollegato

Messaggi: 3277


I am a man who walks alone


Mostra profilo WWW
« Risposta #1 inserita:: Marzo 18, 2009, 06:28:01 »

Può essere considerato ancora valido questo testo gratuito del 1999?!

ANSI/ISO C++ Professional Programmer's Handbook
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
http://myitside.blogspot.com
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines